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

Side by Side Diff: chrome/browser/views/browser_views_accessibility_browsertest.cc

Issue 3591003: Make BrowserAccessibilityManager cross platform. Step 1.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Some cleanup. Created 10 years, 2 months 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) 2010 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 <oleacc.h>
6
7 #include "app/l10n_util.h"
8 #include "base/scoped_comptr_win.h"
9 #include "base/utf_string_conversions.h"
10 #include "chrome/browser/browser.h"
11 #include "chrome/browser/browser_window.h"
12 #include "chrome/browser/view_ids.h"
13 #include "chrome/browser/views/bookmark_bar_view.h"
14 #include "chrome/browser/views/frame/browser_view.h"
15 #include "chrome/browser/views/toolbar_view.h"
16 #include "chrome/common/url_constants.h"
17 #include "chrome/test/in_process_browser_test.h"
18 #include "chrome/test/ui_test_utils.h"
19 #include "grit/chromium_strings.h"
20 #include "grit/generated_resources.h"
21 #include "views/accessibility/view_accessibility_wrapper.h"
22 #include "views/widget/root_view.h"
23 #include "views/widget/widget_win.h"
24 #include "views/window/window.h"
25
26 namespace {
27
28 VARIANT id_self = {VT_I4, CHILDID_SELF};
29
30 // Dummy class to force creation of ATL module, needed by COM to instantiate
31 // ViewAccessibility.
32 class TestAtlModule : public CAtlDllModuleT< TestAtlModule > {};
33 TestAtlModule test_atl_module_;
34
35 class BrowserViewsAccessibilityTest : public InProcessBrowserTest {
36 public:
37 BrowserViewsAccessibilityTest() {
38 ::CoInitialize(NULL);
39 }
40
41 ~BrowserViewsAccessibilityTest() {
42 ::CoUninitialize();
43 }
44
45 // Retrieves an instance of BrowserWindowTesting
46 BrowserWindowTesting* GetBrowserWindowTesting() {
47 BrowserWindow* browser_window = browser()->window();
48
49 if (!browser_window)
50 return NULL;
51
52 return browser_window->GetBrowserWindowTesting();
53 }
54
55 // Retrieve an instance of BrowserView
56 BrowserView* GetBrowserView() {
57 return BrowserView::GetBrowserViewForNativeWindow(
58 browser()->window()->GetNativeHandle());
59 }
60
61 // Retrieves and initializes an instance of ToolbarView.
62 ToolbarView* GetToolbarView() {
63 BrowserWindowTesting* browser_window_testing = GetBrowserWindowTesting();
64
65 if (!browser_window_testing)
66 return NULL;
67
68 return browser_window_testing->GetToolbarView();
69 }
70
71 // Retrieves and initializes an instance of BookmarkBarView.
72 BookmarkBarView* GetBookmarkBarView() {
73 BrowserWindowTesting* browser_window_testing = GetBrowserWindowTesting();
74
75 if (!browser_window_testing)
76 return NULL;
77
78 return browser_window_testing->GetBookmarkBarView();
79 }
80
81 // Retrieves and verifies the accessibility object for the given View.
82 void TestViewAccessibilityObject(views::View* view, std::wstring name,
83 int32 role) {
84 ASSERT_TRUE(NULL != view);
85
86 IAccessible* acc_obj = NULL;
87 HRESULT hr = view->GetViewAccessibilityWrapper()->GetInstance(
88 IID_IAccessible, reinterpret_cast<void**>(&acc_obj));
89 ASSERT_EQ(S_OK, hr);
90 ASSERT_TRUE(NULL != acc_obj);
91
92 TestAccessibilityInfo(acc_obj, name, role);
93 }
94
95
96 // Verifies MSAA Name and Role properties of the given IAccessible.
97 void TestAccessibilityInfo(IAccessible* acc_obj, std::wstring name,
98 int32 role) {
99 // Verify MSAA Name property.
100 BSTR acc_name;
101
102 HRESULT hr = acc_obj->get_accName(id_self, &acc_name);
103 ASSERT_EQ(S_OK, hr);
104 EXPECT_STREQ(acc_name, name.c_str());
105
106 // Verify MSAA Role property.
107 VARIANT acc_role;
108 ::VariantInit(&acc_role);
109
110 hr = acc_obj->get_accRole(id_self, &acc_role);
111 ASSERT_EQ(S_OK, hr);
112 EXPECT_EQ(VT_I4, acc_role.vt);
113 EXPECT_EQ(role, acc_role.lVal);
114
115 ::VariantClear(&acc_role);
116 ::SysFreeString(acc_name);
117 }
118 };
119
120 // Retrieve accessibility object for main window and verify accessibility info.
121 IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest,
122 TestChromeWindowAccObj) {
123 BrowserWindow* browser_window = browser()->window();
124 ASSERT_TRUE(NULL != browser_window);
125
126 HWND hwnd = browser_window->GetNativeHandle();
127 ASSERT_TRUE(NULL != hwnd);
128
129 // Get accessibility object.
130 ScopedComPtr<IAccessible> acc_obj;
131 HRESULT hr = ::AccessibleObjectFromWindow(hwnd, OBJID_WINDOW, IID_IAccessible,
132 reinterpret_cast<void**>(&acc_obj));
133 ASSERT_EQ(S_OK, hr);
134 ASSERT_TRUE(NULL != acc_obj);
135
136 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kAboutBlankURL));
137 std::wstring title =
138 l10n_util::GetStringF(IDS_BROWSER_WINDOW_TITLE_FORMAT,
139 ASCIIToWide(chrome::kAboutBlankURL));
140 TestAccessibilityInfo(acc_obj, title, ROLE_SYSTEM_WINDOW);
141 }
142
143 // Retrieve accessibility object for non client view and verify accessibility
144 // info.
145 IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, TestNonClientViewAccObj) {
146 views::View* non_client_view =
147 GetBrowserView()->GetWindow()->GetNonClientView();
148
149 TestViewAccessibilityObject(non_client_view,
150 l10n_util::GetString(IDS_PRODUCT_NAME),
151 ROLE_SYSTEM_WINDOW);
152 }
153
154 // Retrieve accessibility object for browser root view and verify
155 // accessibility info.
156 IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest,
157 TestBrowserRootViewAccObj) {
158 views::View* browser_root_view =
159 GetBrowserView()->frame()->GetFrameView()->GetRootView();
160
161 TestViewAccessibilityObject(browser_root_view,
162 l10n_util::GetString(IDS_PRODUCT_NAME),
163 ROLE_SYSTEM_APPLICATION);
164 }
165
166 // Retrieve accessibility object for browser view and verify accessibility info.
167 IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, TestBrowserViewAccObj) {
168 // Verify root view MSAA name and role.
169 TestViewAccessibilityObject(GetBrowserView(),
170 l10n_util::GetString(IDS_PRODUCT_NAME),
171 ROLE_SYSTEM_CLIENT);
172 }
173
174 // Retrieve accessibility object for toolbar view and verify accessibility info.
175 IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, TestToolbarViewAccObj) {
176 // Verify toolbar MSAA name and role.
177 TestViewAccessibilityObject(GetToolbarView(),
178 l10n_util::GetString(IDS_ACCNAME_TOOLBAR),
179 ROLE_SYSTEM_TOOLBAR);
180 }
181
182 // Retrieve accessibility object for Back button and verify accessibility info.
183 IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, TestBackButtonAccObj) {
184 // Verify Back button MSAA name and role.
185 TestViewAccessibilityObject(
186 GetToolbarView()->GetViewByID(VIEW_ID_BACK_BUTTON),
187 l10n_util::GetString(IDS_ACCNAME_BACK), ROLE_SYSTEM_BUTTONDROPDOWN);
188 }
189
190 // Retrieve accessibility object for Forward button and verify accessibility
191 // info.
192 IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, TestForwardButtonAccObj) {
193 // Verify Forward button MSAA name and role.
194 TestViewAccessibilityObject(
195 GetToolbarView()->GetViewByID(VIEW_ID_FORWARD_BUTTON),
196 l10n_util::GetString(IDS_ACCNAME_FORWARD), ROLE_SYSTEM_BUTTONDROPDOWN);
197 }
198
199 // Retrieve accessibility object for Reload button and verify accessibility
200 // info.
201 IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, TestReloadButtonAccObj) {
202 // Verify Reload button MSAA name and role.
203 TestViewAccessibilityObject(
204 GetToolbarView()->GetViewByID(VIEW_ID_RELOAD_BUTTON),
205 l10n_util::GetString(IDS_ACCNAME_RELOAD), ROLE_SYSTEM_PUSHBUTTON);
206 }
207
208 // Retrieve accessibility object for Home button and verify accessibility info.
209 IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, TestHomeButtonAccObj) {
210 // Verify Home button MSAA name and role.
211 TestViewAccessibilityObject(
212 GetToolbarView()->GetViewByID(VIEW_ID_HOME_BUTTON),
213 l10n_util::GetString(IDS_ACCNAME_HOME), ROLE_SYSTEM_PUSHBUTTON);
214 }
215
216 // Retrieve accessibility object for Star button and verify accessibility info.
217 IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest,
218 TestStarButtonAccObj) {
219 // Verify Star button MSAA name and role.
220 TestViewAccessibilityObject(
221 GetToolbarView()->GetViewByID(VIEW_ID_STAR_BUTTON),
222 l10n_util::GetString(IDS_ACCNAME_STAR), ROLE_SYSTEM_PUSHBUTTON);
223 }
224
225 // Retrieve accessibility object for App menu button and verify accessibility
226 // info.
227 IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, TestAppMenuAccObj) {
228 // Verify App menu button MSAA name and role.
229 TestViewAccessibilityObject(GetToolbarView()->GetViewByID(VIEW_ID_APP_MENU),
230 l10n_util::GetString(IDS_ACCNAME_APP),
231 ROLE_SYSTEM_BUTTONMENU);
232 }
233
234 IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest,
235 TestBookmarkBarViewAccObj) {
236 TestViewAccessibilityObject(GetBookmarkBarView(),
237 l10n_util::GetString(IDS_ACCNAME_BOOKMARKS),
238 ROLE_SYSTEM_TOOLBAR);
239 }
240
241 IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest,
242 TestAboutChromeViewAccObj) {
243 // Firstly, test that the WindowDelegate got updated.
244 views::Window* aboutChromeWindow = GetBrowserView()->ShowAboutChromeDialog();
245 EXPECT_STREQ(aboutChromeWindow->GetDelegate()->GetWindowTitle().c_str(),
246 l10n_util::GetString(IDS_ABOUT_CHROME_TITLE).c_str());
247 EXPECT_EQ(aboutChromeWindow->GetDelegate()->accessible_role(),
248 AccessibilityTypes::ROLE_DIALOG);
249
250 // Also test the accessibility object directly.
251 IAccessible* acc_obj = NULL;
252 HRESULT hr =
253 ::AccessibleObjectFromWindow(aboutChromeWindow->GetNativeWindow(),
254 OBJID_CLIENT,
255 IID_IAccessible,
256 reinterpret_cast<void**>(&acc_obj));
257 ASSERT_EQ(S_OK, hr);
258 ASSERT_TRUE(NULL != acc_obj);
259
260 TestAccessibilityInfo(acc_obj, l10n_util::GetString(IDS_ABOUT_CHROME_TITLE),
261 ROLE_SYSTEM_DIALOG);
262
263 acc_obj->Release();
264 }
265 } // Namespace.
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698