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