Thu, 22 Jan 2015 13:21:57 +0100
Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #pragma once
8 #include <windows.system.h>
9 #include <windows.ui.core.h>
10 #include <UIAutomation.h>
11 #include <UIAutomationCore.h>
12 #include <UIAutomationCoreApi.h>
14 #include "mozwrlbase.h"
16 #include "nsCOMPtr.h"
17 #include "mozilla/a11y/Accessible.h"
18 #include "UIAAccessibilityBridge.h"
20 // generated
21 #include "UIABridge.h"
23 namespace mozilla {
24 namespace widget {
25 namespace winrt {
27 // represents the root window to UIA
28 [uuid("D3EDD951-0715-4501-A8E5-25D97EF35D5A")]
29 class UIABridge : public Microsoft::WRL::RuntimeClass<Microsoft::WRL::RuntimeClassFlags
30 <Microsoft::WRL::RuntimeClassType::WinRtClassicComMix>,
31 IUIABridge,
32 IUIAElement,
33 IRawElementProviderSimple,
34 IRawElementProviderFragment,
35 IRawElementProviderFragmentRoot>
36 {
37 typedef ABI::Windows::UI::Core::ICoreWindow ICoreWindow;
39 InspectableClass(L"IUIABridge", BaseTrust);
41 public:
42 UIABridge() {}
44 // IUIABridge
45 IFACEMETHODIMP Init(IInspectable* view, IInspectable* window, LONG_PTR inner);
46 IFACEMETHODIMP Disconnect();
47 IFACEMETHODIMP FocusChangeEvent();
49 // IUIAElement
50 IFACEMETHODIMP SetFocusInternal(LONG_PTR aAccessible);
51 IFACEMETHODIMP ClearFocus();
53 // IRawElementProviderFragmentRoot
54 IFACEMETHODIMP ElementProviderFromPoint(double x, double y, IRawElementProviderFragment ** retVal);
55 IFACEMETHODIMP GetFocus(IRawElementProviderFragment ** retVal);
57 // IRawElementProviderFragment
58 IFACEMETHODIMP Navigate(NavigateDirection direction, IRawElementProviderFragment ** retVal);
59 IFACEMETHODIMP GetRuntimeId(SAFEARRAY ** retVal);
60 IFACEMETHODIMP get_BoundingRectangle(UiaRect * retVal);
61 IFACEMETHODIMP GetEmbeddedFragmentRoots(SAFEARRAY ** retVal);
62 IFACEMETHODIMP SetFocus();
63 IFACEMETHODIMP get_FragmentRoot(IRawElementProviderFragmentRoot * * retVal);
65 // IRawElementProviderSimple
66 IFACEMETHODIMP get_ProviderOptions(ProviderOptions * retVal);
67 IFACEMETHODIMP GetPatternProvider(PATTERNID iid, IUnknown * * retVal);
68 IFACEMETHODIMP GetPropertyValue(PROPERTYID idProp, VARIANT * retVal );
69 IFACEMETHODIMP get_HostRawElementProvider(IRawElementProviderSimple ** retVal);
71 protected:
72 bool Connected();
74 private:
75 Microsoft::WRL::ComPtr<ICoreWindow> mWindow;
76 #if defined(ACCESSIBILITY)
77 nsRefPtr<AccessibilityBridge> mAccBridge;
78 nsRefPtr<mozilla::a11y::Accessible> mAccessible;
79 #endif
80 };
82 [uuid("4438135F-F624-43DE-A417-275CE7A1A0CD")]
83 class UIATextElement : public Microsoft::WRL::RuntimeClass<Microsoft::WRL::RuntimeClassFlags
84 <Microsoft::WRL::RuntimeClassType::WinRtClassicComMix>,
85 IUIAElement,
86 IRawElementProviderSimple,
87 IRawElementProviderFragment,
88 ITextProvider,
89 IValueProvider >
90 {
91 typedef ABI::Windows::Foundation::Rect Rect;
93 InspectableClass(L"UIATextElement", BaseTrust);
95 public:
96 UIATextElement() {}
98 // IUIAElement
99 IFACEMETHODIMP SetFocusInternal(LONG_PTR aAccessible);
100 IFACEMETHODIMP ClearFocus();
101 IFACEMETHODIMP FocusChangeEvent();
103 // IRawElementProviderFragment
104 IFACEMETHODIMP Navigate(NavigateDirection direction, IRawElementProviderFragment ** retVal);
105 IFACEMETHODIMP GetRuntimeId(SAFEARRAY ** retVal);
106 IFACEMETHODIMP get_BoundingRectangle(UiaRect * retVal);
107 IFACEMETHODIMP GetEmbeddedFragmentRoots(SAFEARRAY ** retVal);
108 IFACEMETHODIMP SetFocus();
109 IFACEMETHODIMP get_FragmentRoot(IRawElementProviderFragmentRoot * * retVal);
111 // IRawElementProviderSimple
112 IFACEMETHODIMP get_ProviderOptions(ProviderOptions * retVal);
113 IFACEMETHODIMP GetPatternProvider(PATTERNID iid, IUnknown * * retVal);
114 IFACEMETHODIMP GetPropertyValue(PROPERTYID idProp, VARIANT * retVal );
115 IFACEMETHODIMP get_HostRawElementProvider(IRawElementProviderSimple ** retVal);
117 // ITextProvider
118 IFACEMETHODIMP GetSelection(SAFEARRAY * *pRetVal);
119 IFACEMETHODIMP GetVisibleRanges(SAFEARRAY * *pRetVal);
120 IFACEMETHODIMP RangeFromChild(IRawElementProviderSimple *childElement, ITextRangeProvider **pRetVal);
121 IFACEMETHODIMP RangeFromPoint(UiaPoint point, ITextRangeProvider **pRetVal);
122 IFACEMETHODIMP get_DocumentRange(ITextRangeProvider **pRetVal);
123 IFACEMETHODIMP get_SupportedTextSelection(SupportedTextSelection *pRetVal);
125 // IValueProvider
126 IFACEMETHODIMP SetValue(LPCWSTR val);
127 IFACEMETHODIMP get_Value(BSTR *pRetVal);
128 IFACEMETHODIMP get_IsReadOnly(BOOL *pRetVal);
130 void SetIndexID(int id) {
131 mIndexID = id;
132 }
134 private:
135 int mIndexID;
136 nsCOMPtr<nsIAccessible> mAccessItem;
137 };
139 } } }