[Win] Replace MIDL [in/out] comments with equivalent SAL
[WebKit-https.git] / Source / WebKit / win / AccessibleBase.h
1 /*
2  * Copyright (C) 2008-2010, 2013, 2015 Apple Inc. All Rights Reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #ifndef AccessibleBase_h
27 #define AccessibleBase_h
28
29 #include "AccessibleEditableText.h"
30 #include "AccessibleText.h"
31 #include "AccessibleText2.h"
32 #include "WebKit.h"
33 #include <WebCore/AccessibilityObject.h>
34 #include <WebCore/AccessibilityObjectWrapperWin.h>
35
36 class DECLSPEC_UUID("3dbd565b-db22-4d88-8e0e-778bde54524a") AccessibleBase : public IAccessibleComparable, public IServiceProvider, public WebCore::AccessibilityObjectWrapper {
37 public:
38     static AccessibleBase* createInstance(WebCore::AccessibilityObject*, HWND);
39
40     // IServiceProvider
41     virtual HRESULT STDMETHODCALLTYPE QueryService(_In_ REFGUID guidService, _In_ REFIID riid, _COM_Outptr_ void **ppv);
42
43     // IUnknown
44     virtual HRESULT STDMETHODCALLTYPE QueryInterface(_In_ REFIID riid, _COM_Outptr_ void** ppvObject);
45     virtual ULONG STDMETHODCALLTYPE AddRef() { return ++m_refCount; }
46     virtual ULONG STDMETHODCALLTYPE Release();
47
48     // IAccessible2_2
49     virtual HRESULT STDMETHODCALLTYPE get_attribute(_In_ BSTR name, _Out_ VARIANT* attribute);
50     virtual HRESULT STDMETHODCALLTYPE get_accessibleWithCaret(_COM_Outptr_opt_ IUnknown** accessible, _Out_ long* caretOffset);
51     virtual HRESULT STDMETHODCALLTYPE get_relationTargetsOfType(_In_ BSTR type, long maxTargets, __deref_out_ecount_full_opt(*nTargets) IUnknown*** targets, _Out_ long* nTargets);
52
53     // IAccessible2
54     virtual HRESULT STDMETHODCALLTYPE get_nRelations(_Out_ long*);
55     virtual HRESULT STDMETHODCALLTYPE get_relation(long relationIndex, _COM_Outptr_opt_ IAccessibleRelation**);
56     virtual HRESULT STDMETHODCALLTYPE get_relations(long maxRelations, __out_ecount_part(maxRelations, *nRelations) IAccessibleRelation**, _Out_ long* nRelations);
57     virtual HRESULT STDMETHODCALLTYPE role(_Out_ long*);
58     virtual HRESULT STDMETHODCALLTYPE scrollTo(IA2ScrollType);
59     virtual HRESULT STDMETHODCALLTYPE scrollToPoint(IA2CoordinateType, long x, long y);
60     virtual HRESULT STDMETHODCALLTYPE get_groupPosition(_Out_ long* groupLevel, _Out_ long* similarItemsInGroup, _Out_ long* positionInGroup);
61     virtual HRESULT STDMETHODCALLTYPE get_states(_Out_ AccessibleStates*);
62     virtual HRESULT STDMETHODCALLTYPE get_extendedRole(__deref_opt_out BSTR*);
63     virtual HRESULT STDMETHODCALLTYPE get_localizedExtendedRole(__deref_opt_out BSTR*);
64     virtual HRESULT STDMETHODCALLTYPE get_nExtendedStates(_Out_ long*);
65     virtual HRESULT STDMETHODCALLTYPE get_extendedStates(long maxExtendedStates, __deref_out_ecount_part_opt(maxExtendedStates, *nExtendedStates) BSTR** extendedStates, _Out_ long* nExtendedStates);
66     virtual HRESULT STDMETHODCALLTYPE get_localizedExtendedStates(long maxLocalizedExtendedStates, __deref_out_ecount_part_opt(maxLocalizedExtendedStates, *nLocalizedExtendedStates) BSTR** localizedExtendedStates, _Out_ long* nLocalizedExtendedStates);
67     virtual HRESULT STDMETHODCALLTYPE get_uniqueID(_Out_ long*);
68     virtual HRESULT STDMETHODCALLTYPE get_windowHandle(_Out_ HWND*);
69     virtual HRESULT STDMETHODCALLTYPE get_indexInParent(_Out_ long*);
70     virtual HRESULT STDMETHODCALLTYPE get_locale(_Out_ IA2Locale*);
71     virtual HRESULT STDMETHODCALLTYPE get_attributes(__deref_opt_out BSTR*);
72
73     // IAccessible
74     virtual HRESULT STDMETHODCALLTYPE get_accParent(_COM_Outptr_opt_ IDispatch**);
75     virtual HRESULT STDMETHODCALLTYPE get_accChildCount(_Out_ long*);
76     virtual HRESULT STDMETHODCALLTYPE get_accChild(VARIANT vChild, _COM_Outptr_opt_ IDispatch** ppChild);
77     virtual HRESULT STDMETHODCALLTYPE get_accName(VARIANT vChild, __deref_opt_out BSTR*);
78     virtual HRESULT STDMETHODCALLTYPE get_accValue(VARIANT vChild, __deref_opt_out BSTR*);
79     virtual HRESULT STDMETHODCALLTYPE get_accDescription(VARIANT, __deref_opt_out BSTR*);
80     virtual HRESULT STDMETHODCALLTYPE get_accRole(VARIANT vChild, _Out_ VARIANT* pvRole);
81     virtual HRESULT STDMETHODCALLTYPE get_accState(VARIANT vChild, _Out_ VARIANT* pvState);
82     virtual HRESULT STDMETHODCALLTYPE get_accHelp(VARIANT vChild, __deref_opt_out BSTR* helpText);
83     virtual HRESULT STDMETHODCALLTYPE get_accKeyboardShortcut(VARIANT vChild, __deref_opt_out BSTR*);
84     virtual HRESULT STDMETHODCALLTYPE get_accFocus(_Out_ VARIANT* pvFocusedChild);
85     virtual HRESULT STDMETHODCALLTYPE get_accSelection(_Out_ VARIANT* pvSelectedChild);
86     virtual HRESULT STDMETHODCALLTYPE get_accDefaultAction(VARIANT vChild, __deref_opt_out BSTR* actionDescription);
87     virtual HRESULT STDMETHODCALLTYPE accSelect(long selectionFlags, VARIANT vChild);
88     virtual HRESULT STDMETHODCALLTYPE accLocation(_Out_ long* left, _Out_ long* top, _Out_ long* width, _Out_ long* height, VARIANT vChild);
89     virtual HRESULT STDMETHODCALLTYPE accNavigate(long direction, VARIANT vFromChild, _Out_ VARIANT* pvNavigatedTo);
90     virtual HRESULT STDMETHODCALLTYPE accHitTest(long x, long y, _Out_ VARIANT* pvChildAtPoint);
91     virtual HRESULT STDMETHODCALLTYPE accDoDefaultAction(VARIANT vChild);
92
93     // IAccessible - Not to be implemented.
94     virtual HRESULT STDMETHODCALLTYPE put_accName(VARIANT, _In_ BSTR) { return E_NOTIMPL; }
95     virtual HRESULT STDMETHODCALLTYPE put_accValue(VARIANT, _In_ BSTR) { return E_NOTIMPL; }
96     virtual HRESULT STDMETHODCALLTYPE get_accHelpTopic(BSTR* helpFile, VARIANT, _Out_ long* topicID)
97     {
98         if (!helpFile || !topicID)
99             return E_POINTER;
100
101         *helpFile = nullptr;
102         *topicID = 0;
103         return E_NOTIMPL;
104     }
105
106     // IDispatch - Not to be implemented.
107     virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(_Out_ UINT* count)
108     {
109         if (!count)
110             return E_POINTER;
111         *count = 0;
112         return E_NOTIMPL;
113     }
114     virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT, LCID, __deref_out_opt ITypeInfo** ppTInfo)
115     {
116         if (!ppTInfo)
117             return E_POINTER;
118         *ppTInfo = nullptr;
119         return E_NOTIMPL;
120     }
121     virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(_In_ REFIID, LPOLESTR*, UINT, LCID, DISPID*) { return E_NOTIMPL; }
122     virtual HRESULT STDMETHODCALLTYPE Invoke(DISPID, REFIID, LCID, WORD, DISPPARAMS*, VARIANT*, EXCEPINFO*, UINT*) { return E_NOTIMPL; }
123
124     // WebCore::AccessibilityObjectWrapper
125     virtual void detach()
126     {
127         ASSERT(m_object);
128         m_object = nullptr;
129     }
130
131     // IAccessibleComparable
132     virtual HRESULT STDMETHODCALLTYPE isSameObject(_In_opt_ IAccessibleComparable* other, _Out_ BOOL* result);
133
134 protected:
135     AccessibleBase(WebCore::AccessibilityObject*, HWND);
136     virtual ~AccessibleBase();
137
138     virtual WTF::String name() const;
139     virtual WTF::String value() const;
140     virtual long role() const;
141     virtual long state() const;
142
143     HRESULT getAccessibilityObjectForChild(VARIANT vChild, WebCore::AccessibilityObject*&) const;
144
145     AccessibleBase* wrapper(WebCore::AccessibilityObject*) const;
146
147     HWND m_window;
148     int m_refCount { 0 };
149
150 private:
151     AccessibleBase() { }
152 };
153
154 #endif // AccessibleBase_h
155