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 file,
5  * You can obtain one at http://mozilla.org/MPL/2.0/. */
6 
7 #include "xpcAccessibleGeneric.h"
8 #include "LocalAccessible.h"
9 #include "LocalAccessible-inl.h"
10 
11 using namespace mozilla;
12 using namespace mozilla::a11y;
13 
14 NS_IMETHODIMP
GetMaximumValue(double * aValue)15 xpcAccessibleValue::GetMaximumValue(double* aValue) {
16   NS_ENSURE_ARG_POINTER(aValue);
17   *aValue = 0;
18 
19   if (!Intl()) return NS_ERROR_FAILURE;
20 
21   if (Intl()->IsLocal() && Intl()->AsLocal()->IsDefunct()) {
22     return NS_ERROR_FAILURE;
23   }
24 
25   double value = Intl()->MaxValue();
26 
27   if (!IsNaN(value)) *aValue = value;
28 
29   return NS_OK;
30 }
31 
32 NS_IMETHODIMP
GetMinimumValue(double * aValue)33 xpcAccessibleValue::GetMinimumValue(double* aValue) {
34   NS_ENSURE_ARG_POINTER(aValue);
35   *aValue = 0;
36 
37   if (!Intl()) return NS_ERROR_FAILURE;
38 
39   if (Intl()->IsLocal() && Intl()->AsLocal()->IsDefunct()) {
40     return NS_ERROR_FAILURE;
41   }
42 
43   double value = Intl()->MinValue();
44 
45   if (!IsNaN(value)) *aValue = value;
46 
47   return NS_OK;
48 }
49 
50 NS_IMETHODIMP
GetCurrentValue(double * aValue)51 xpcAccessibleValue::GetCurrentValue(double* aValue) {
52   NS_ENSURE_ARG_POINTER(aValue);
53   *aValue = 0;
54 
55   if (!Intl()) return NS_ERROR_FAILURE;
56 
57   if (Intl()->IsLocal() && Intl()->AsLocal()->IsDefunct()) {
58     return NS_ERROR_FAILURE;
59   }
60 
61   double value = Intl()->CurValue();
62 
63   if (!IsNaN(value)) *aValue = value;
64 
65   return NS_OK;
66 }
67 
68 NS_IMETHODIMP
SetCurrentValue(double aValue)69 xpcAccessibleValue::SetCurrentValue(double aValue) {
70   if (!Intl()) return NS_ERROR_FAILURE;
71 
72   if (Intl()->IsLocal() && Intl()->AsLocal()->IsDefunct()) {
73     return NS_ERROR_FAILURE;
74   }
75 
76   if (Intl()->IsLocal()) {
77     Intl()->AsLocal()->SetCurValue(aValue);
78   } else {
79     Intl()->AsRemote()->SetCurValue(aValue);
80   }
81 
82   return NS_OK;
83 }
84 
85 NS_IMETHODIMP
GetMinimumIncrement(double * aValue)86 xpcAccessibleValue::GetMinimumIncrement(double* aValue) {
87   NS_ENSURE_ARG_POINTER(aValue);
88   *aValue = 0;
89 
90   if (!Intl()) return NS_ERROR_FAILURE;
91 
92   if (Intl()->IsLocal() && Intl()->AsLocal()->IsDefunct()) {
93     return NS_ERROR_FAILURE;
94   }
95 
96   double value = Intl()->Step();
97 
98   if (!IsNaN(value)) *aValue = value;
99 
100   return NS_OK;
101 }
102