1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <oleacc.h>
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/utf_string_conversions.h"
8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/win/scoped_comptr.h"
94a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/ui/browser.h"
10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/browser_window.h"
1121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/view_ids.h"
12dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/views/bookmarks/bookmark_bar_view.h"
1321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/views/frame/browser_view.h"
1421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/views/toolbar_view.h"
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/url_constants.h"
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/in_process_browser_test.h"
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/ui_test_utils.h"
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/chromium_strings.h"
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/generated_resources.h"
20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "ui/base/accessibility/accessibility_types.h"
2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/l10n/l10n_util.h"
22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "views/accessibility/native_view_accessibility_win.h"
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/widget/root_view.h"
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/widget/widget_win.h"
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/window/window.h"
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace {
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochVARIANT id_self = {VT_I4, CHILDID_SELF};
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Dummy class to force creation of ATL module, needed by COM to instantiate
32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// NativeViewAccessibilityWin.
33dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass TestAtlModule : public CAtlDllModuleT<TestAtlModule> {};
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTestAtlModule test_atl_module_;
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
36dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}  // namespace
37dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass BrowserViewsAccessibilityTest : public InProcessBrowserTest {
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  BrowserViewsAccessibilityTest() {
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ::CoInitialize(NULL);
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ~BrowserViewsAccessibilityTest() {
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ::CoUninitialize();
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Retrieves an instance of BrowserWindowTesting
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  BrowserWindowTesting* GetBrowserWindowTesting() {
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    BrowserWindow* browser_window = browser()->window();
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    if (!browser_window)
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return NULL;
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return browser_window->GetBrowserWindowTesting();
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Retrieve an instance of BrowserView
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  BrowserView* GetBrowserView() {
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return BrowserView::GetBrowserViewForNativeWindow(
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch               browser()->window()->GetNativeHandle());
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Retrieves and initializes an instance of ToolbarView.
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ToolbarView* GetToolbarView() {
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    BrowserWindowTesting* browser_window_testing = GetBrowserWindowTesting();
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    if (!browser_window_testing)
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return NULL;
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return browser_window_testing->GetToolbarView();
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Retrieves and initializes an instance of BookmarkBarView.
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  BookmarkBarView* GetBookmarkBarView() {
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    BrowserWindowTesting* browser_window_testing = GetBrowserWindowTesting();
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    if (!browser_window_testing)
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return NULL;
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return browser_window_testing->GetBookmarkBarView();
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Retrieves and verifies the accessibility object for the given View.
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void TestViewAccessibilityObject(views::View* view, std::wstring name,
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                   int32 role) {
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_TRUE(NULL != view);
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
89731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    TestAccessibilityInfo(
90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        NativeViewAccessibilityWin::GetAccessibleForView(view),
91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        name,
92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        role);
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Verifies MSAA Name and Role properties of the given IAccessible.
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void TestAccessibilityInfo(IAccessible* acc_obj, std::wstring name,
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                             int32 role) {
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Verify MSAA Name property.
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    BSTR acc_name;
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    HRESULT hr = acc_obj->get_accName(id_self, &acc_name);
103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_EQ(S_OK, hr);
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ(acc_name, name.c_str());
105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Verify MSAA Role property.
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    VARIANT acc_role;
108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ::VariantInit(&acc_role);
109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    hr = acc_obj->get_accRole(id_self, &acc_role);
111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_EQ(S_OK, hr);
112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(VT_I4, acc_role.vt);
113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(role, acc_role.lVal);
114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ::VariantClear(&acc_role);
116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ::SysFreeString(acc_name);
117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Retrieve accessibility object for main window and verify accessibility info.
121c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest,
122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       TestChromeWindowAccObj) {
123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  BrowserWindow* browser_window = browser()->window();
124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(NULL != browser_window);
125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  HWND hwnd = browser_window->GetNativeHandle();
127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(NULL != hwnd);
128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Get accessibility object.
130ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  base::win::ScopedComPtr<IAccessible> acc_obj;
131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  HRESULT hr = ::AccessibleObjectFromWindow(hwnd, OBJID_WINDOW, IID_IAccessible,
132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                            reinterpret_cast<void**>(&acc_obj));
133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(S_OK, hr);
134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(NULL != acc_obj);
135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ui_test_utils::NavigateToURL(browser(), GURL(chrome::kAboutBlankURL));
1373f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  std::wstring title = UTF16ToWide(l10n_util::GetStringFUTF16(
1383f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      IDS_BROWSER_WINDOW_TITLE_FORMAT,
1393f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      ASCIIToUTF16(chrome::kAboutBlankURL)));
140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestAccessibilityInfo(acc_obj, title, ROLE_SYSTEM_WINDOW);
141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Retrieve accessibility object for non client view and verify accessibility
144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// info.
145c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, TestNonClientViewAccObj) {
146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  views::View* non_client_view =
147dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  GetBrowserView()->GetWindow()->non_client_view();
148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestViewAccessibilityObject(non_client_view,
1503f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      UTF16ToWide(l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)),
151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      ROLE_SYSTEM_WINDOW);
152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Retrieve accessibility object for browser root view and verify
155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// accessibility info.
156c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest,
157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       TestBrowserRootViewAccObj) {
158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  views::View* browser_root_view =
159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      GetBrowserView()->frame()->GetFrameView()->GetRootView();
160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1613f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  TestViewAccessibilityObject(
1623f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      browser_root_view,
1633f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      UTF16ToWide(l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)),
1643f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      ROLE_SYSTEM_APPLICATION);
165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Retrieve accessibility object for browser view and verify accessibility info.
168c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, TestBrowserViewAccObj) {
169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Verify root view MSAA name and role.
1703f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  TestViewAccessibilityObject(
1713f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      GetBrowserView(),
1723f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      UTF16ToWide(l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)),
1733f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      ROLE_SYSTEM_CLIENT);
174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Retrieve accessibility object for toolbar view and verify accessibility info.
177c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, TestToolbarViewAccObj) {
178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Verify toolbar MSAA name and role.
1793f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  TestViewAccessibilityObject(
1803f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      GetToolbarView(),
1813f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      UTF16ToWide(l10n_util::GetStringUTF16(IDS_ACCNAME_TOOLBAR)),
1823f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      ROLE_SYSTEM_TOOLBAR);
183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Retrieve accessibility object for Back button and verify accessibility info.
186c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, TestBackButtonAccObj) {
187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Verify Back button MSAA name and role.
188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestViewAccessibilityObject(
189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      GetToolbarView()->GetViewByID(VIEW_ID_BACK_BUTTON),
1903f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      UTF16ToWide(l10n_util::GetStringUTF16(IDS_ACCNAME_BACK)),
1913f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      ROLE_SYSTEM_BUTTONDROPDOWN);
192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Retrieve accessibility object for Forward button and verify accessibility
195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// info.
196c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, TestForwardButtonAccObj) {
197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Verify Forward button MSAA name and role.
198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestViewAccessibilityObject(
199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      GetToolbarView()->GetViewByID(VIEW_ID_FORWARD_BUTTON),
2003f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      UTF16ToWide(l10n_util::GetStringUTF16(IDS_ACCNAME_FORWARD)),
2013f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      ROLE_SYSTEM_BUTTONDROPDOWN);
202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Retrieve accessibility object for Reload button and verify accessibility
205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// info.
206c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, TestReloadButtonAccObj) {
207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Verify Reload button MSAA name and role.
208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestViewAccessibilityObject(
209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      GetToolbarView()->GetViewByID(VIEW_ID_RELOAD_BUTTON),
2103f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      UTF16ToWide(l10n_util::GetStringUTF16(IDS_ACCNAME_RELOAD)),
2113f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      ROLE_SYSTEM_PUSHBUTTON);
212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Retrieve accessibility object for Home button and verify accessibility info.
215c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, TestHomeButtonAccObj) {
216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Verify Home button MSAA name and role.
217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestViewAccessibilityObject(
218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      GetToolbarView()->GetViewByID(VIEW_ID_HOME_BUTTON),
2193f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      UTF16ToWide(l10n_util::GetStringUTF16(IDS_ACCNAME_HOME)),
2203f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      ROLE_SYSTEM_PUSHBUTTON);
221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Retrieve accessibility object for Star button and verify accessibility info.
224c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest,
225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       TestStarButtonAccObj) {
226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Verify Star button MSAA name and role.
227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestViewAccessibilityObject(
228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      GetToolbarView()->GetViewByID(VIEW_ID_STAR_BUTTON),
2293f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      UTF16ToWide(l10n_util::GetStringUTF16(IDS_ACCNAME_STAR)),
2303f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      ROLE_SYSTEM_PUSHBUTTON);
231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Retrieve accessibility object for App menu button and verify accessibility
234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// info.
235c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, TestAppMenuAccObj) {
236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Verify App menu button MSAA name and role.
2373f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  TestViewAccessibilityObject(
2383f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      GetToolbarView()->GetViewByID(VIEW_ID_APP_MENU),
2393f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      UTF16ToWide(l10n_util::GetStringUTF16(IDS_ACCNAME_APP)),
2403f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      ROLE_SYSTEM_BUTTONMENU);
241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
243c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest,
244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       TestBookmarkBarViewAccObj) {
2453f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  TestViewAccessibilityObject(
2463f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      GetBookmarkBarView(),
2473f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      UTF16ToWide(l10n_util::GetStringUTF16(IDS_ACCNAME_BOOKMARKS)),
2483f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      ROLE_SYSTEM_TOOLBAR);
249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
251c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest,
252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       TestAboutChromeViewAccObj) {
253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  //  Firstly, test that the WindowDelegate got updated.
254dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  views::Window* about_chrome_window =
255dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      GetBrowserView()->DoShowAboutChromeDialog();
2563f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  EXPECT_STREQ(
257dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      about_chrome_window->window_delegate()->GetWindowTitle().c_str(),
2583f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      UTF16ToWide(l10n_util::GetStringUTF16(IDS_ABOUT_CHROME_TITLE)).c_str());
259ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(about_chrome_window->window_delegate()->GetAccessibleWindowRole(),
260ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            ui::AccessibilityTypes::ROLE_DIALOG);
261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Also test the accessibility object directly.
263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  IAccessible* acc_obj = NULL;
264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  HRESULT hr =
265dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    ::AccessibleObjectFromWindow(about_chrome_window->GetNativeWindow(),
266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                 OBJID_CLIENT,
267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                 IID_IAccessible,
268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                 reinterpret_cast<void**>(&acc_obj));
269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(S_OK, hr);
270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(NULL != acc_obj);
271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2723f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  TestAccessibilityInfo(
2733f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      acc_obj,
2743f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      UTF16ToWide(l10n_util::GetStringUTF16(IDS_ABOUT_CHROME_TITLE)),
2753f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      ROLE_SYSTEM_DIALOG);
276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  acc_obj->Release();
278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
279