browser_views_accessibility_browsertest.cc revision 90dce4d38c5ff5333bea97d859d4e484e27edf0c
1// Copyright (c) 2012 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 "base/utf_string_conversions.h"
8#include "base/win/scoped_bstr.h"
9#include "base/win/scoped_com_initializer.h"
10#include "base/win/scoped_comptr.h"
11#include "base/win/scoped_variant.h"
12#include "chrome/browser/ui/browser.h"
13#include "chrome/browser/ui/browser_window.h"
14#include "chrome/browser/ui/view_ids.h"
15#include "chrome/browser/ui/views/bookmarks/bookmark_bar_view.h"
16#include "chrome/browser/ui/views/frame/browser_view.h"
17#include "chrome/browser/ui/views/toolbar_view.h"
18#include "chrome/common/url_constants.h"
19#include "chrome/test/base/in_process_browser_test.h"
20#include "chrome/test/base/ui_test_utils.h"
21#include "grit/chromium_strings.h"
22#include "grit/generated_resources.h"
23#include "ui/base/accessibility/accessibility_types.h"
24#include "ui/base/l10n/l10n_util.h"
25#include "ui/base/win/atl_module.h"
26#include "ui/views/accessibility/native_view_accessibility_win.h"
27#include "ui/views/widget/widget.h"
28
29class BrowserViewsAccessibilityTest : public InProcessBrowserTest {
30 public:
31  BrowserViewsAccessibilityTest();
32  virtual ~BrowserViewsAccessibilityTest();
33
34  // Retrieves an instance of BrowserWindowTesting.
35  BrowserWindowTesting* GetBrowserWindowTesting();
36
37  // Retrieve an instance of BrowserView.
38  BrowserView* GetBrowserView();
39
40  // Retrieves and initializes an instance of ToolbarView.
41  ToolbarView* GetToolbarView();
42
43  // Retrieves and initializes an instance of BookmarkBarView.
44  BookmarkBarView* GetBookmarkBarView();
45
46  // Retrieves and verifies the accessibility object for the given View.
47  void TestViewAccessibilityObject(views::View* view,
48                                   std::wstring name,
49                                   int32 role);
50
51  // Verifies MSAA Name and Role properties of the given IAccessible.
52  void TestAccessibilityInfo(IAccessible* acc_obj,
53                             std::wstring name,
54                             int32 role);
55
56 private:
57  base::win::ScopedCOMInitializer com_initializer_;
58
59  DISALLOW_COPY_AND_ASSIGN(BrowserViewsAccessibilityTest);
60};
61
62BrowserViewsAccessibilityTest::BrowserViewsAccessibilityTest() {
63  ui::win::CreateATLModuleIfNeeded();
64}
65
66BrowserViewsAccessibilityTest::~BrowserViewsAccessibilityTest() {
67}
68
69BrowserWindowTesting* BrowserViewsAccessibilityTest::GetBrowserWindowTesting() {
70  BrowserWindow* browser_window = browser()->window();
71  return browser_window ? browser_window->GetBrowserWindowTesting() : NULL;
72}
73
74BrowserView* BrowserViewsAccessibilityTest::GetBrowserView() {
75  return BrowserView::GetBrowserViewForBrowser(browser());
76}
77
78ToolbarView* BrowserViewsAccessibilityTest::GetToolbarView() {
79  BrowserWindowTesting* browser_window_testing = GetBrowserWindowTesting();
80  return browser_window_testing ?
81      browser_window_testing->GetToolbarView() : NULL;
82}
83
84BookmarkBarView* BrowserViewsAccessibilityTest::GetBookmarkBarView() {
85  BrowserWindowTesting* browser_window_testing = GetBrowserWindowTesting();
86  return browser_window_testing ?
87      browser_window_testing->GetBookmarkBarView() : NULL;
88}
89
90void BrowserViewsAccessibilityTest::TestViewAccessibilityObject(
91    views::View* view,
92    std::wstring name,
93    int32 role) {
94  ASSERT_TRUE(view != NULL);
95  TestAccessibilityInfo(view->GetNativeViewAccessible(), name, role);
96}
97
98void BrowserViewsAccessibilityTest::TestAccessibilityInfo(IAccessible* acc_obj,
99                                                          std::wstring name,
100                                                          int32 role) {
101  // Verify MSAA Name property.
102  base::win::ScopedVariant childid_self(CHILDID_SELF);
103  base::win::ScopedBstr acc_name;
104  ASSERT_EQ(S_OK, acc_obj->get_accName(childid_self, acc_name.Receive()));
105  EXPECT_EQ(name, string16(acc_name));
106
107  // Verify MSAA Role property.
108  base::win::ScopedVariant acc_role;
109  ASSERT_EQ(S_OK, acc_obj->get_accRole(childid_self, acc_role.Receive()));
110  EXPECT_EQ(VT_I4, acc_role.type());
111  EXPECT_EQ(role, V_I4(&acc_role));
112}
113
114// Retrieve accessibility object for main window and verify accessibility info.
115IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest,
116                       TestChromeWindowAccObj) {
117  BrowserWindow* browser_window = browser()->window();
118  ASSERT_TRUE(NULL != browser_window);
119
120  HWND hwnd = browser_window->GetNativeWindow();
121  ASSERT_TRUE(NULL != hwnd);
122
123  // Get accessibility object.
124  base::win::ScopedComPtr<IAccessible> acc_obj;
125  HRESULT hr = ::AccessibleObjectFromWindow(hwnd, OBJID_WINDOW, IID_IAccessible,
126                                            reinterpret_cast<void**>(&acc_obj));
127  ASSERT_EQ(S_OK, hr);
128  ASSERT_TRUE(NULL != acc_obj);
129
130  ui_test_utils::NavigateToURL(browser(), GURL(content::kAboutBlankURL));
131  std::wstring title = UTF16ToWide(l10n_util::GetStringFUTF16(
132      IDS_BROWSER_WINDOW_TITLE_FORMAT,
133      ASCIIToUTF16(content::kAboutBlankURL)));
134  TestAccessibilityInfo(acc_obj, title, ROLE_SYSTEM_WINDOW);
135}
136
137// Retrieve accessibility object for non client view and verify accessibility
138// info.
139// http://crbug.com/104132
140IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest,
141                       DISABLED_TestNonClientViewAccObj) {
142  views::View* non_client_view =
143  GetBrowserView()->GetWidget()->non_client_view();
144
145  TestViewAccessibilityObject(non_client_view,
146      UTF16ToWide(l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)),
147      ROLE_SYSTEM_WINDOW);
148}
149
150// Retrieve accessibility object for browser root view and verify
151// accessibility info.
152// http://crbug.com/104132
153IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest,
154                       DISABLED_TestBrowserRootViewAccObj) {
155  views::View* browser_root_view = GetBrowserView()->frame()->GetRootView();
156
157  TestViewAccessibilityObject(
158      browser_root_view,
159      UTF16ToWide(l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)),
160      ROLE_SYSTEM_APPLICATION);
161}
162
163// Retrieve accessibility object for browser view and verify accessibility info.
164// http://crbug.com/104132
165IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest,
166                       DISABLED_TestBrowserViewAccObj) {
167  // Verify root view MSAA name and role.
168  TestViewAccessibilityObject(
169      GetBrowserView(),
170      UTF16ToWide(l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)),
171      ROLE_SYSTEM_CLIENT);
172}
173
174// Retrieve accessibility object for toolbar view and verify accessibility info.
175// http://crbug.com/104132
176IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest,
177                       DISABLED_TestToolbarViewAccObj) {
178  // Verify toolbar MSAA name and role.
179  TestViewAccessibilityObject(
180      GetToolbarView(),
181      UTF16ToWide(l10n_util::GetStringUTF16(IDS_ACCNAME_TOOLBAR)),
182      ROLE_SYSTEM_TOOLBAR);
183}
184
185// Retrieve accessibility object for Back button and verify accessibility info.
186// http://crbug.com/104132
187IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest,
188                       DISABLED_TestBackButtonAccObj) {
189  // Verify Back button MSAA name and role.
190  TestViewAccessibilityObject(
191      GetToolbarView()->GetViewByID(VIEW_ID_BACK_BUTTON),
192      UTF16ToWide(l10n_util::GetStringUTF16(IDS_ACCNAME_BACK)),
193      ROLE_SYSTEM_BUTTONDROPDOWN);
194}
195
196// Retrieve accessibility object for Forward button and verify accessibility
197// info.
198// http://crbug.com/104132
199IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest,
200                       DISABLED_TestForwardButtonAccObj) {
201  // Verify Forward button MSAA name and role.
202  TestViewAccessibilityObject(
203      GetToolbarView()->GetViewByID(VIEW_ID_FORWARD_BUTTON),
204      UTF16ToWide(l10n_util::GetStringUTF16(IDS_ACCNAME_FORWARD)),
205      ROLE_SYSTEM_BUTTONDROPDOWN);
206}
207
208// Retrieve accessibility object for Reload button and verify accessibility
209// info.
210// http://crbug.com/104132
211IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest,
212                       DISABLED_TestReloadButtonAccObj) {
213  // Verify Reload button MSAA name and role.
214  TestViewAccessibilityObject(
215      GetToolbarView()->GetViewByID(VIEW_ID_RELOAD_BUTTON),
216      UTF16ToWide(l10n_util::GetStringUTF16(IDS_ACCNAME_RELOAD)),
217      ROLE_SYSTEM_PUSHBUTTON);
218}
219
220// Retrieve accessibility object for Home button and verify accessibility info.
221// http://crbug.com/104132
222IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest,
223                       DISABLED_TestHomeButtonAccObj) {
224  // Verify Home button MSAA name and role.
225  TestViewAccessibilityObject(
226      GetToolbarView()->GetViewByID(VIEW_ID_HOME_BUTTON),
227      UTF16ToWide(l10n_util::GetStringUTF16(IDS_ACCNAME_HOME)),
228      ROLE_SYSTEM_PUSHBUTTON);
229}
230
231// Retrieve accessibility object for Star button and verify accessibility info.
232// http://crbug.com/104132
233IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest,
234                       DISABLED_TestStarButtonAccObj) {
235  // Verify Star button MSAA name and role.
236  TestViewAccessibilityObject(
237      GetToolbarView()->GetViewByID(VIEW_ID_STAR_BUTTON),
238      UTF16ToWide(l10n_util::GetStringUTF16(IDS_ACCNAME_STAR)),
239      ROLE_SYSTEM_PUSHBUTTON);
240}
241
242// Retrieve accessibility object for App menu button and verify accessibility
243// info.
244// http://crbug.com/104132
245IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest,
246                       DISABLED_TestAppMenuAccObj) {
247  // Verify App menu button MSAA name and role.
248  TestViewAccessibilityObject(
249      GetToolbarView()->GetViewByID(VIEW_ID_APP_MENU),
250      UTF16ToWide(l10n_util::GetStringUTF16(IDS_ACCNAME_APP)),
251      ROLE_SYSTEM_BUTTONMENU);
252}
253
254// http://crbug.com/104132
255IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest,
256                       DISABLED_TestBookmarkBarViewAccObj) {
257  TestViewAccessibilityObject(
258      GetBookmarkBarView(),
259      UTF16ToWide(l10n_util::GetStringUTF16(IDS_ACCNAME_BOOKMARKS)),
260      ROLE_SYSTEM_TOOLBAR);
261}
262