Bug 470455 - test_database_sync_embed_visits.js leaks, r=sdwilsh
[wine-gecko.git] / accessible / src / msaa / CAccessibleValue.cpp
blob29a154ff8d3f9effb1de69d9d46311dc1322ecfa
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim:expandtab:shiftwidth=2:tabstop=2:
3 */
4 /* ***** BEGIN LICENSE BLOCK *****
5 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
7 * The contents of this file are subject to the Mozilla Public License Version
8 * 1.1 (the "License"); you may not use this file except in compliance with
9 * the License. You may obtain a copy of the License at
10 * http://www.mozilla.org/MPL/
12 * Software distributed under the License is distributed on an "AS IS" basis,
13 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
14 * for the specific language governing rights and limitations under the
15 * License.
17 * The Original Code is mozilla.org code.
19 * The Initial Developer of the Original Code is
20 * Mozilla Foundation.
21 * Portions created by the Initial Developer are Copyright (C) 2007
22 * the Initial Developer. All Rights Reserved.
24 * Contributor(s):
25 * Alexander Surkov <surkov.alexander@gmail.com> (original author)
27 * Alternatively, the contents of this file may be used under the terms of
28 * either the GNU General Public License Version 2 or later (the "GPL"), or
29 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
30 * in which case the provisions of the GPL or the LGPL are applicable instead
31 * of those above. If you wish to allow use of your version of this file only
32 * under the terms of either the GPL or the LGPL, and not to allow others to
33 * use your version of this file under the terms of the MPL, indicate your
34 * decision by deleting the provisions above and replace them with the notice
35 * and other provisions required by the GPL or the LGPL. If you do not delete
36 * the provisions above, a recipient may use your version of this file under
37 * the terms of any one of the MPL, the GPL or the LGPL.
39 * ***** END LICENSE BLOCK ***** */
41 #include "CAccessibleValue.h"
43 #include "AccessibleValue_i.c"
45 #include "nsIAccessibleValue.h"
47 #include "nsCOMPtr.h"
49 #include "nsAccessNodeWrap.h"
51 // IUnknown
53 STDMETHODIMP
54 CAccessibleValue::QueryInterface(REFIID iid, void** ppv)
56 *ppv = NULL;
58 if (IID_IAccessibleValue == iid) {
59 nsCOMPtr<nsIAccessibleValue> valueAcc(do_QueryInterface(this));
60 if (!valueAcc)
61 return E_NOINTERFACE;
63 *ppv = static_cast<IAccessibleValue*>(this);
64 (reinterpret_cast<IUnknown*>(*ppv))->AddRef();
65 return S_OK;
68 return E_NOINTERFACE;
71 // IAccessibleValue
73 STDMETHODIMP
74 CAccessibleValue::get_currentValue(VARIANT *aCurrentValue)
76 __try {
77 VariantInit(aCurrentValue);
79 nsCOMPtr<nsIAccessibleValue> valueAcc(do_QueryInterface(this));
80 if (!valueAcc)
81 return E_FAIL;
83 double currentValue = 0;
84 nsresult rv = valueAcc->GetCurrentValue(&currentValue);
85 if (NS_FAILED(rv))
86 return GetHRESULT(rv);
88 aCurrentValue->vt = VT_R8;
89 aCurrentValue->dblVal = currentValue;
90 return S_OK;
92 } __except(nsAccessNodeWrap::FilterA11yExceptions(::GetExceptionCode(), GetExceptionInformation())) { }
93 return E_FAIL;
96 STDMETHODIMP
97 CAccessibleValue::setCurrentValue(VARIANT aValue)
99 __try {
100 nsCOMPtr<nsIAccessibleValue> valueAcc(do_QueryInterface(this));
101 if (!valueAcc)
102 return E_FAIL;
104 if (aValue.vt != VT_R8)
105 return E_INVALIDARG;
107 nsresult rv = valueAcc->SetCurrentValue(aValue.dblVal);
108 return GetHRESULT(rv);
110 } __except(nsAccessNodeWrap::FilterA11yExceptions(::GetExceptionCode(), GetExceptionInformation())) { }
111 return E_FAIL;
114 STDMETHODIMP
115 CAccessibleValue::get_maximumValue(VARIANT *aMaximumValue)
117 __try {
118 VariantInit(aMaximumValue);
120 nsCOMPtr<nsIAccessibleValue> valueAcc(do_QueryInterface(this));
121 if (!valueAcc)
122 return E_FAIL;
124 double maximumValue = 0;
125 nsresult rv = valueAcc->GetMaximumValue(&maximumValue);
126 if (NS_FAILED(rv))
127 return GetHRESULT(rv);
129 aMaximumValue->vt = VT_R8;
130 aMaximumValue->dblVal = maximumValue;
131 return S_OK;
133 } __except(nsAccessNodeWrap::FilterA11yExceptions(::GetExceptionCode(), GetExceptionInformation())) { }
134 return E_FAIL;
137 STDMETHODIMP
138 CAccessibleValue::get_minimumValue(VARIANT *aMinimumValue)
140 __try {
141 VariantInit(aMinimumValue);
143 nsCOMPtr<nsIAccessibleValue> valueAcc(do_QueryInterface(this));
144 if (!valueAcc)
145 return E_FAIL;
147 double minimumValue = 0;
148 nsresult rv = valueAcc->GetMinimumValue(&minimumValue);
149 if (NS_FAILED(rv))
150 return GetHRESULT(rv);
152 aMinimumValue->vt = VT_R8;
153 aMinimumValue->dblVal = minimumValue;
154 return S_OK;
156 } __except(nsAccessNodeWrap::FilterA11yExceptions(::GetExceptionCode(), GetExceptionInformation())) { }
157 return E_FAIL;