Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: chrome/browser/autocomplete/autocomplete_accessibility.cc

Issue 8391010: Improve omnibox accessibility on Windows. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/autocomplete/autocomplete_accessibility.h"
6
7 #include "chrome/browser/autocomplete/autocomplete_edit.h"
8 #include "chrome/browser/ui/views/omnibox/omnibox_view_win.h"
9 #include "grit/generated_resources.h"
10 #include "ui/base/l10n/l10n_util.h"
11 #include "views/accessibility/native_view_accessibility_win.h"
12 #include "views/view.h"
13
14 HRESULT AutocompleteAccessibility::Initialize(
15 const OmniboxViewWin* omnibox_view) {
16 if (omnibox_view == NULL) {
17 return E_INVALIDARG;
18 }
19
20 omnibox_view_ = omnibox_view;
21
22 // Create a default accessible object for this instance.
23 return CreateStdAccessibleObject(omnibox_view_->m_hWnd, OBJID_CLIENT,
24 IID_IAccessible,
25 reinterpret_cast<void **>(default_accessibility_server_.Receive()));
26 }
27
28 STDMETHODIMP AutocompleteAccessibility::get_accChildCount(LONG* child_count) {
29 if (!child_count) {
30 return E_INVALIDARG;
31 }
32
33 DCHECK(default_accessibility_server_);
34 return default_accessibility_server_->get_accChildCount(child_count);
35 }
36
37 STDMETHODIMP AutocompleteAccessibility::get_accChild(VARIANT var_child,
38 IDispatch** disp_child) {
39 if (var_child.vt != VT_I4 || !disp_child) {
40 return E_INVALIDARG;
41 }
42
43 // If var_child is the parent, remain with the same IDispatch
44 if (var_child.lVal == CHILDID_SELF)
45 return S_OK;
46
47 *disp_child = NULL;
48 return S_FALSE;
49 }
50
51 STDMETHODIMP AutocompleteAccessibility::get_accParent(IDispatch** disp_parent) {
52 if (!disp_parent) {
53 return E_INVALIDARG;
54 }
55
56 if (omnibox_view_->parent_view() == NULL) {
57 *disp_parent = NULL;
58 return S_FALSE;
59 }
60
61 // Retrieve the IDispatch interface for the parent view.
62 *disp_parent = omnibox_view_->parent_view()->GetNativeViewAccessible();
63 // Increment the reference count for the retrieved interface.
64 (*disp_parent)->AddRef();
65 return S_OK;
66 }
67
68 STDMETHODIMP AutocompleteAccessibility::accNavigate(LONG nav_dir, VARIANT start,
69 VARIANT* end) {
70 if (start.vt != VT_I4 || !end) {
71 return E_INVALIDARG;
72 }
73
74 DCHECK(default_accessibility_server_);
75 return default_accessibility_server_->accNavigate(nav_dir, start, end);
76 }
77
78 STDMETHODIMP AutocompleteAccessibility::get_accFocus(VARIANT* focus_child) {
79 if (!focus_child) {
80 return E_INVALIDARG;
81 }
82
83 DCHECK(default_accessibility_server_);
84 return default_accessibility_server_->get_accFocus(focus_child);
85 }
86
87 STDMETHODIMP AutocompleteAccessibility::get_accName(VARIANT var_id,
88 BSTR* name) {
89 if (var_id.vt != VT_I4 || !name) {
90 return E_INVALIDARG;
91 }
92
93 string16 temp_name = l10n_util::GetStringUTF16(IDS_ACCNAME_LOCATION);
94
95 if (!temp_name.empty()) {
96 // Return name retrieved.
97 *name = SysAllocString(temp_name.c_str());
98 } else {
99 // If no name is found, return S_FALSE.
100 return S_FALSE;
101 }
102 DCHECK(*name);
103
104 return S_OK;
105 }
106
107 STDMETHODIMP AutocompleteAccessibility::get_accDescription(VARIANT var_id,
108 BSTR* desc) {
109 if (var_id.vt != VT_I4 || !desc) {
110 return E_INVALIDARG;
111 }
112
113 return S_FALSE;
114 }
115
116 STDMETHODIMP AutocompleteAccessibility::get_accValue(VARIANT var_id,
117 BSTR* value) {
118 if (var_id.vt != VT_I4 || !value) {
119 return E_INVALIDARG;
120 }
121
122 string16 temp_value;
123
124 if (var_id.lVal != CHILDID_SELF)
125 return E_INVALIDARG;
126
127 // Edit box has no children, only handle self.
128 temp_value = omnibox_view_->GetText();
129 if (temp_value.empty())
130 return S_FALSE;
131
132 // Return value retrieved.
133 *value = SysAllocString(temp_value.c_str());
134
135 DCHECK(*value);
136
137 return S_OK;
138 }
139
140 STDMETHODIMP AutocompleteAccessibility::get_accState(VARIANT var_id,
141 VARIANT* state) {
142 if (var_id.vt != VT_I4 || !state) {
143 return E_INVALIDARG;
144 }
145
146 DCHECK(default_accessibility_server_);
147 HRESULT hr = default_accessibility_server_->get_accState(var_id, state);
148
149 if (hr != S_OK)
150 return hr;
151
152 // Adding on state to convey the fact that there is a dropdown.
153 state->lVal |= STATE_SYSTEM_HASPOPUP;
154 return S_OK;
155 }
156
157 STDMETHODIMP AutocompleteAccessibility::get_accRole(VARIANT var_id,
158 VARIANT* role) {
159 if (var_id.vt != VT_I4 || !role) {
160 return E_INVALIDARG;
161 }
162
163 role->vt = VT_I4;
164
165 // Need to override the default role, which is ROLE_SYSTEM_CLIENT.
166 if (var_id.lVal == CHILDID_SELF) {
167 role->lVal = ROLE_SYSTEM_TEXT;
168 } else {
169 return S_FALSE;
170 }
171
172 return S_OK;
173 }
174
175 STDMETHODIMP AutocompleteAccessibility::get_accDefaultAction(VARIANT var_id,
176 BSTR* def_action) {
177 if (var_id.vt != VT_I4 || !def_action) {
178 return E_INVALIDARG;
179 }
180
181 return S_FALSE;
182 }
183
184 STDMETHODIMP AutocompleteAccessibility::accLocation(LONG* x_left, LONG* y_top,
185 LONG* width, LONG* height,
186 VARIANT var_id) {
187 if (var_id.vt != VT_I4 || !x_left || !y_top || !width || !height) {
188 return E_INVALIDARG;
189 }
190
191 DCHECK(default_accessibility_server_);
192 return default_accessibility_server_->accLocation(x_left, y_top, width,
193 height, var_id);
194 }
195
196 STDMETHODIMP AutocompleteAccessibility::accHitTest(LONG x_left, LONG y_top,
197 VARIANT* child) {
198 if (!child) {
199 return E_INVALIDARG;
200 }
201
202 DCHECK(default_accessibility_server_);
203 return default_accessibility_server_->accHitTest(x_left, y_top, child);
204 }
205
206 STDMETHODIMP AutocompleteAccessibility::get_accKeyboardShortcut(VARIANT var_id,
207 BSTR* acc_key) {
208 if (var_id.vt != VT_I4 || !acc_key) {
209 return E_INVALIDARG;
210 }
211
212 return S_FALSE;
213 }
214
215 // IAccessible functions not supported.
216
217 HRESULT AutocompleteAccessibility::accDoDefaultAction(VARIANT var_id) {
218 return DISP_E_MEMBERNOTFOUND;
219 }
220
221 STDMETHODIMP AutocompleteAccessibility::get_accSelection(VARIANT* selected) {
222 if (selected)
223 selected->vt = VT_EMPTY;
224 return DISP_E_MEMBERNOTFOUND;
225 }
226
227 STDMETHODIMP AutocompleteAccessibility::accSelect(LONG flagsSelect,
228 VARIANT var_id) {
229 return DISP_E_MEMBERNOTFOUND;
230 }
231
232 STDMETHODIMP AutocompleteAccessibility::get_accHelp(VARIANT var_id,
233 BSTR* help) {
234 if (help)
235 *help = NULL;
236 return DISP_E_MEMBERNOTFOUND;
237 }
238
239 STDMETHODIMP AutocompleteAccessibility::get_accHelpTopic(BSTR* help_file,
240 VARIANT var_id,
241 LONG* topic_id) {
242 if (help_file) {
243 *help_file = NULL;
244 }
245 if (topic_id) {
246 *topic_id = static_cast<LONG>(-1);
247 }
248 return DISP_E_MEMBERNOTFOUND;
249 }
250
251 STDMETHODIMP AutocompleteAccessibility::put_accName(VARIANT var_id,
252 BSTR put_name) {
253 // Deprecated.
254 return DISP_E_MEMBERNOTFOUND;
255 }
256
257 STDMETHODIMP AutocompleteAccessibility::put_accValue(VARIANT var_id,
258 BSTR put_val) {
259 // Deprecated.
260 return DISP_E_MEMBERNOTFOUND;
261 }
OLDNEW
« no previous file with comments | « chrome/browser/autocomplete/autocomplete_accessibility.h ('k') | chrome/browser/autocomplete/autocomplete_edit_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698