accessible/src/atk/nsMaiInterfaceImage.cpp

Tue, 06 Jan 2015 21:39:09 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Tue, 06 Jan 2015 21:39:09 +0100
branch
TOR_BUG_9701
changeset 8
97036ab72558
permissions
-rw-r--r--

Conditionally force memory storage according to privacy.thirdparty.isolate;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

     1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     2 /* vim: set ts=2 et sw=2 tw=80: */
     3 /* This Source Code Form is subject to the terms of the Mozilla Public
     4  * License, v. 2.0. If a copy of the MPL was not distributed with this
     5  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     7 #include "InterfaceInitFuncs.h"
     9 #include "AccessibleWrap.h"
    10 #include "ImageAccessible.h"
    11 #include "mozilla/Likely.h"
    12 #include "nsMai.h"
    13 #include "nsIAccessibleTypes.h"
    14 #include "nsIURI.h"
    16 using namespace mozilla;
    17 using namespace mozilla::a11y;
    19 extern "C" {
    20 const gchar* getDescriptionCB(AtkObject* aAtkObj);
    22 static void
    23 getImagePositionCB(AtkImage* aImage, gint* aAccX, gint* aAccY,
    24                    AtkCoordType aCoordType)
    25 {
    26   AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aImage));
    27   if (!accWrap || !accWrap->IsImage())
    28     return;
    30   ImageAccessible* image = accWrap->AsImage();
    31   uint32_t geckoCoordType = (aCoordType == ATK_XY_WINDOW) ?
    32     nsIAccessibleCoordinateType::COORDTYPE_WINDOW_RELATIVE :
    33     nsIAccessibleCoordinateType::COORDTYPE_SCREEN_RELATIVE;
    34   // Returned in screen coordinates
    35   image->GetImagePosition(geckoCoordType, aAccX, aAccY);
    36 }
    38 static const gchar*
    39 getImageDescriptionCB(AtkImage* aImage)
    40 {
    41   return getDescriptionCB(ATK_OBJECT(aImage));
    42 }
    44 static void
    45 getImageSizeCB(AtkImage* aImage, gint* aAccWidth, gint* aAccHeight)
    46 {
    47   AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aImage));
    48   if (!accWrap || !accWrap->IsImage())
    49     return;
    51   accWrap->AsImage()->GetImageSize(aAccWidth, aAccHeight);
    52 }
    53 }
    55 void
    56 imageInterfaceInitCB(AtkImageIface* aIface)
    57 {
    58   NS_ASSERTION(aIface, "no interface!");
    59   if (MOZ_UNLIKELY(!aIface))
    60     return;
    62   aIface->get_image_position = getImagePositionCB;
    63   aIface->get_image_description = getImageDescriptionCB;
    64   aIface->get_image_size = getImageSizeCB;
    65 }

mercurial