diff options
author | ctguil@chromium.org <ctguil@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-01 23:28:04 +0000 |
---|---|---|
committer | ctguil@chromium.org <ctguil@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-01 23:28:04 +0000 |
commit | c5c2a674dc1d102b2c1c89ef95e9a95b7fc299c4 (patch) | |
tree | de1fd47dafee134c33b4526c75efd93bd6c7824c /chrome/browser/accessibility/browser_views_accessibility_browsertest.cc | |
parent | 81219f7b519ebd87f8d3e97d23ebf197acfa50da (diff) | |
download | chromium_src-c5c2a674dc1d102b2c1c89ef95e9a95b7fc299c4.zip chromium_src-c5c2a674dc1d102b2c1c89ef95e9a95b7fc299c4.tar.gz chromium_src-c5c2a674dc1d102b2c1c89ef95e9a95b7fc299c4.tar.bz2 |
Make BrowserAccessibilityManager cross platform. Step 1.
1. Move windows browser accessibility source and headers into chrome\browser\accessibility
2. Rename BrowserAccessibilityManager to BrowserAccessibilityManagerWin and BrowserAccessibility to BrowserAccessibilityWin
3. Add base classes that will eventually contain common browser accessibility code.
BUG=55264
TEST=interactive_ui_tests:AccessibilityWinBrowserTest.*
TEST=unit_tests:BrowserAccessibilityTest.*
Review URL: http://codereview.chromium.org/3591003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@61253 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/accessibility/browser_views_accessibility_browsertest.cc')
-rw-r--r-- | chrome/browser/accessibility/browser_views_accessibility_browsertest.cc | 265 |
1 files changed, 265 insertions, 0 deletions
diff --git a/chrome/browser/accessibility/browser_views_accessibility_browsertest.cc b/chrome/browser/accessibility/browser_views_accessibility_browsertest.cc new file mode 100644 index 0000000..af33e2c --- /dev/null +++ b/chrome/browser/accessibility/browser_views_accessibility_browsertest.cc @@ -0,0 +1,265 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include <oleacc.h> + +#include "app/l10n_util.h" +#include "base/scoped_comptr_win.h" +#include "base/utf_string_conversions.h" +#include "chrome/browser/browser.h" +#include "chrome/browser/browser_window.h" +#include "chrome/browser/view_ids.h" +#include "chrome/browser/views/bookmark_bar_view.h" +#include "chrome/browser/views/frame/browser_view.h" +#include "chrome/browser/views/toolbar_view.h" +#include "chrome/common/url_constants.h" +#include "chrome/test/in_process_browser_test.h" +#include "chrome/test/ui_test_utils.h" +#include "grit/chromium_strings.h" +#include "grit/generated_resources.h" +#include "views/accessibility/view_accessibility_wrapper.h" +#include "views/widget/root_view.h" +#include "views/widget/widget_win.h" +#include "views/window/window.h" + +namespace { + +VARIANT id_self = {VT_I4, CHILDID_SELF}; + +// Dummy class to force creation of ATL module, needed by COM to instantiate +// ViewAccessibility. +class TestAtlModule : public CAtlDllModuleT< TestAtlModule > {}; +TestAtlModule test_atl_module_; + +class BrowserViewsAccessibilityTest : public InProcessBrowserTest { + public: + BrowserViewsAccessibilityTest() { + ::CoInitialize(NULL); + } + + ~BrowserViewsAccessibilityTest() { + ::CoUninitialize(); + } + + // Retrieves an instance of BrowserWindowTesting + BrowserWindowTesting* GetBrowserWindowTesting() { + BrowserWindow* browser_window = browser()->window(); + + if (!browser_window) + return NULL; + + return browser_window->GetBrowserWindowTesting(); + } + + // Retrieve an instance of BrowserView + BrowserView* GetBrowserView() { + return BrowserView::GetBrowserViewForNativeWindow( + browser()->window()->GetNativeHandle()); + } + + // Retrieves and initializes an instance of ToolbarView. + ToolbarView* GetToolbarView() { + BrowserWindowTesting* browser_window_testing = GetBrowserWindowTesting(); + + if (!browser_window_testing) + return NULL; + + return browser_window_testing->GetToolbarView(); + } + + // Retrieves and initializes an instance of BookmarkBarView. + BookmarkBarView* GetBookmarkBarView() { + BrowserWindowTesting* browser_window_testing = GetBrowserWindowTesting(); + + if (!browser_window_testing) + return NULL; + + return browser_window_testing->GetBookmarkBarView(); + } + + // Retrieves and verifies the accessibility object for the given View. + void TestViewAccessibilityObject(views::View* view, std::wstring name, + int32 role) { + ASSERT_TRUE(NULL != view); + + IAccessible* acc_obj = NULL; + HRESULT hr = view->GetViewAccessibilityWrapper()->GetInstance( + IID_IAccessible, reinterpret_cast<void**>(&acc_obj)); + ASSERT_EQ(S_OK, hr); + ASSERT_TRUE(NULL != acc_obj); + + TestAccessibilityInfo(acc_obj, name, role); + } + + + // Verifies MSAA Name and Role properties of the given IAccessible. + void TestAccessibilityInfo(IAccessible* acc_obj, std::wstring name, + int32 role) { + // Verify MSAA Name property. + BSTR acc_name; + + HRESULT hr = acc_obj->get_accName(id_self, &acc_name); + ASSERT_EQ(S_OK, hr); + EXPECT_STREQ(acc_name, name.c_str()); + + // Verify MSAA Role property. + VARIANT acc_role; + ::VariantInit(&acc_role); + + hr = acc_obj->get_accRole(id_self, &acc_role); + ASSERT_EQ(S_OK, hr); + EXPECT_EQ(VT_I4, acc_role.vt); + EXPECT_EQ(role, acc_role.lVal); + + ::VariantClear(&acc_role); + ::SysFreeString(acc_name); + } +}; + +// Retrieve accessibility object for main window and verify accessibility info. +IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, + TestChromeWindowAccObj) { + BrowserWindow* browser_window = browser()->window(); + ASSERT_TRUE(NULL != browser_window); + + HWND hwnd = browser_window->GetNativeHandle(); + ASSERT_TRUE(NULL != hwnd); + + // Get accessibility object. + ScopedComPtr<IAccessible> acc_obj; + HRESULT hr = ::AccessibleObjectFromWindow(hwnd, OBJID_WINDOW, IID_IAccessible, + reinterpret_cast<void**>(&acc_obj)); + ASSERT_EQ(S_OK, hr); + ASSERT_TRUE(NULL != acc_obj); + + ui_test_utils::NavigateToURL(browser(), GURL(chrome::kAboutBlankURL)); + std::wstring title = + l10n_util::GetStringF(IDS_BROWSER_WINDOW_TITLE_FORMAT, + ASCIIToWide(chrome::kAboutBlankURL)); + TestAccessibilityInfo(acc_obj, title, ROLE_SYSTEM_WINDOW); +} + +// Retrieve accessibility object for non client view and verify accessibility +// info. +IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, TestNonClientViewAccObj) { + views::View* non_client_view = + GetBrowserView()->GetWindow()->GetNonClientView(); + + TestViewAccessibilityObject(non_client_view, + l10n_util::GetString(IDS_PRODUCT_NAME), + ROLE_SYSTEM_WINDOW); +} + +// Retrieve accessibility object for browser root view and verify +// accessibility info. +IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, + TestBrowserRootViewAccObj) { + views::View* browser_root_view = + GetBrowserView()->frame()->GetFrameView()->GetRootView(); + + TestViewAccessibilityObject(browser_root_view, + l10n_util::GetString(IDS_PRODUCT_NAME), + ROLE_SYSTEM_APPLICATION); +} + +// Retrieve accessibility object for browser view and verify accessibility info. +IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, TestBrowserViewAccObj) { + // Verify root view MSAA name and role. + TestViewAccessibilityObject(GetBrowserView(), + l10n_util::GetString(IDS_PRODUCT_NAME), + ROLE_SYSTEM_CLIENT); +} + +// Retrieve accessibility object for toolbar view and verify accessibility info. +IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, TestToolbarViewAccObj) { + // Verify toolbar MSAA name and role. + TestViewAccessibilityObject(GetToolbarView(), + l10n_util::GetString(IDS_ACCNAME_TOOLBAR), + ROLE_SYSTEM_TOOLBAR); +} + +// Retrieve accessibility object for Back button and verify accessibility info. +IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, TestBackButtonAccObj) { + // Verify Back button MSAA name and role. + TestViewAccessibilityObject( + GetToolbarView()->GetViewByID(VIEW_ID_BACK_BUTTON), + l10n_util::GetString(IDS_ACCNAME_BACK), ROLE_SYSTEM_BUTTONDROPDOWN); +} + +// Retrieve accessibility object for Forward button and verify accessibility +// info. +IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, TestForwardButtonAccObj) { + // Verify Forward button MSAA name and role. + TestViewAccessibilityObject( + GetToolbarView()->GetViewByID(VIEW_ID_FORWARD_BUTTON), + l10n_util::GetString(IDS_ACCNAME_FORWARD), ROLE_SYSTEM_BUTTONDROPDOWN); +} + +// Retrieve accessibility object for Reload button and verify accessibility +// info. +IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, TestReloadButtonAccObj) { + // Verify Reload button MSAA name and role. + TestViewAccessibilityObject( + GetToolbarView()->GetViewByID(VIEW_ID_RELOAD_BUTTON), + l10n_util::GetString(IDS_ACCNAME_RELOAD), ROLE_SYSTEM_PUSHBUTTON); +} + +// Retrieve accessibility object for Home button and verify accessibility info. +IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, TestHomeButtonAccObj) { + // Verify Home button MSAA name and role. + TestViewAccessibilityObject( + GetToolbarView()->GetViewByID(VIEW_ID_HOME_BUTTON), + l10n_util::GetString(IDS_ACCNAME_HOME), ROLE_SYSTEM_PUSHBUTTON); +} + +// Retrieve accessibility object for Star button and verify accessibility info. +IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, + TestStarButtonAccObj) { + // Verify Star button MSAA name and role. + TestViewAccessibilityObject( + GetToolbarView()->GetViewByID(VIEW_ID_STAR_BUTTON), + l10n_util::GetString(IDS_ACCNAME_STAR), ROLE_SYSTEM_PUSHBUTTON); +} + +// Retrieve accessibility object for App menu button and verify accessibility +// info. +IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, TestAppMenuAccObj) { + // Verify App menu button MSAA name and role. + TestViewAccessibilityObject(GetToolbarView()->GetViewByID(VIEW_ID_APP_MENU), + l10n_util::GetString(IDS_ACCNAME_APP), + ROLE_SYSTEM_BUTTONMENU); +} + +IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, + TestBookmarkBarViewAccObj) { + TestViewAccessibilityObject(GetBookmarkBarView(), + l10n_util::GetString(IDS_ACCNAME_BOOKMARKS), + ROLE_SYSTEM_TOOLBAR); +} + +IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, + TestAboutChromeViewAccObj) { + // Firstly, test that the WindowDelegate got updated. + views::Window* aboutChromeWindow = GetBrowserView()->ShowAboutChromeDialog(); + EXPECT_STREQ(aboutChromeWindow->GetDelegate()->GetWindowTitle().c_str(), + l10n_util::GetString(IDS_ABOUT_CHROME_TITLE).c_str()); + EXPECT_EQ(aboutChromeWindow->GetDelegate()->accessible_role(), + AccessibilityTypes::ROLE_DIALOG); + + // Also test the accessibility object directly. + IAccessible* acc_obj = NULL; + HRESULT hr = + ::AccessibleObjectFromWindow(aboutChromeWindow->GetNativeWindow(), + OBJID_CLIENT, + IID_IAccessible, + reinterpret_cast<void**>(&acc_obj)); + ASSERT_EQ(S_OK, hr); + ASSERT_TRUE(NULL != acc_obj); + + TestAccessibilityInfo(acc_obj, l10n_util::GetString(IDS_ABOUT_CHROME_TITLE), + ROLE_SYSTEM_DIALOG); + + acc_obj->Release(); +} +} // Namespace. |