accessible/src/atk/nsMaiInterfaceValue.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 "nsMai.h"
    12 #include "mozilla/FloatingPoint.h"
    13 #include "mozilla/Likely.h"
    15 using namespace mozilla;
    16 using namespace mozilla::a11y;
    18 extern "C" {
    20 static void
    21 getCurrentValueCB(AtkValue *obj, GValue *value)
    22 {
    23   AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(obj));
    24   if (!accWrap)
    25     return;
    27   memset (value,  0, sizeof (GValue));
    28   double accValue = accWrap->CurValue();
    29   if (IsNaN(accValue))
    30     return;
    32   g_value_init (value, G_TYPE_DOUBLE);
    33   g_value_set_double (value, accValue);
    34 }
    36 static void
    37 getMaximumValueCB(AtkValue *obj, GValue *value)
    38 {
    39   AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(obj));
    40   if (!accWrap)
    41     return;
    43   memset(value,  0, sizeof (GValue));
    44   double accValue = accWrap->MaxValue();
    45   if (IsNaN(accValue))
    46     return;
    48   g_value_init(value, G_TYPE_DOUBLE);
    49   g_value_set_double(value, accValue);
    50 }
    52 static void
    53 getMinimumValueCB(AtkValue *obj, GValue *value)
    54 {
    55   AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(obj));
    56   if (!accWrap)
    57     return;
    59   memset(value,  0, sizeof (GValue));
    60   double accValue = accWrap->MinValue();
    61   if (IsNaN(accValue))
    62     return;
    64   g_value_init(value, G_TYPE_DOUBLE);
    65   g_value_set_double(value, accValue);
    66 }
    68 static void
    69 getMinimumIncrementCB(AtkValue *obj, GValue *minimumIncrement)
    70 {
    71   AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(obj));
    72   if (!accWrap)
    73     return;
    75   memset(minimumIncrement,  0, sizeof (GValue));
    76   double accValue = accWrap->Step();
    77   if (IsNaN(accValue))
    78     accValue = 0; // zero if the minimum increment is undefined
    80   g_value_init(minimumIncrement, G_TYPE_DOUBLE);
    81   g_value_set_double(minimumIncrement, accValue);
    82 }
    84 static gboolean
    85 setCurrentValueCB(AtkValue *obj, const GValue *value)
    86 {
    87   AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(obj));
    88   if (!accWrap)
    89     return FALSE;
    91   double accValue =g_value_get_double(value);
    92   return accWrap->SetCurValue(accValue);
    93 }
    94 }
    96 void
    97 valueInterfaceInitCB(AtkValueIface* aIface)
    98 {
    99   NS_ASSERTION(aIface, "Invalid aIface");
   100   if (MOZ_UNLIKELY(!aIface))
   101     return;
   103   aIface->get_current_value = getCurrentValueCB;
   104   aIface->get_maximum_value = getMaximumValueCB;
   105   aIface->get_minimum_value = getMinimumValueCB;
   106   aIface->get_minimum_increment = getMinimumIncrementCB;
   107   aIface->set_current_value = setCurrentValueCB;
   108 }

mercurial