diff options
author | dtseng@chromium.org <dtseng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-17 23:04:27 +0000 |
---|---|---|
committer | dtseng@chromium.org <dtseng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-17 23:04:27 +0000 |
commit | f7b1b2a21ea145f6c1042d51a62b751ba45c722e (patch) | |
tree | 69ed479c439b5cc8448de3e60ae57994ff398c14 | |
parent | dcca3aa943ea83a55d0e79e0d751952e7ad54f6c (diff) | |
download | chromium_src-f7b1b2a21ea145f6c1042d51a62b751ba45c722e.zip chromium_src-f7b1b2a21ea145f6c1042d51a62b751ba45c722e.tar.gz chromium_src-f7b1b2a21ea145f6c1042d51a62b751ba45c722e.tar.bz2 |
Adds dump accessibility tree support in Windows.
This largely adds human readable strings for IAccessible2 roles and states.
This is in part to make it possible to hand-edit the expected files we generate.
Sidenote: switch to string16 usage from std::string as much as possible (despite the incompatibility with API's provided by FilePath).
Review URL: https://chromiumcodereview.appspot.com/9295031
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@122617 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/chrome_tests.gypi | 12 | ||||
-rw-r--r-- | chrome/test/data/accessibility/aria-application-expected-win.txt | 2 | ||||
-rw-r--r-- | content/browser/accessibility/browser_accessibility.h | 4 | ||||
-rw-r--r-- | content/browser/accessibility/browser_accessibility_mac.mm | 12 | ||||
-rw-r--r-- | content/browser/accessibility/browser_accessibility_win.cc | 5 | ||||
-rw-r--r-- | content/browser/accessibility/browser_accessibility_win.h | 11 | ||||
-rw-r--r-- | content/browser/accessibility/dump_accessibility_tree_browsertest.cc (renamed from chrome/browser/accessibility/dump_accessibility_tree_browsertest.cc) | 61 | ||||
-rw-r--r-- | content/browser/accessibility/dump_accessibility_tree_helper.h | 39 | ||||
-rw-r--r-- | content/browser/accessibility/dump_accessibility_tree_helper_mac.mm | 36 | ||||
-rw-r--r-- | content/browser/accessibility/dump_accessibility_tree_helper_win.cc | 182 |
10 files changed, 302 insertions, 62 deletions
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi index f877841..9f75b50 100644 --- a/chrome/chrome_tests.gypi +++ b/chrome/chrome_tests.gypi @@ -2500,7 +2500,6 @@ 'app/chrome_dll_resource.h', 'app/chrome_version.rc.version', 'browser/accessibility/accessibility_extension_apitest.cc', - 'browser/accessibility/dump_accessibility_tree_browsertest.cc', 'browser/app_controller_mac_browsertest.mm', 'browser/autocomplete/autocomplete_browsertest.cc', 'browser/autofill/form_structure_browsertest.cc', @@ -2827,6 +2826,9 @@ # is safe to run there. See http://crbug.com/78722 for details. '../base/files/file_path_watcher_browsertest.cc', '../content/app/startup_helper_win.cc', + '../content/browser/accessibility/dump_accessibility_tree_browsertest.cc', + '../content/browser/accessibility/dump_accessibility_tree_helper_mac.mm', + '../content/browser/accessibility/dump_accessibility_tree_helper_win.cc', '../content/browser/accessibility/renderer_accessibility_browsertest.cc', '../content/browser/child_process_security_policy_browsertest.cc', '../content/browser/device_orientation/device_orientation_browsertest.cc', @@ -2980,10 +2982,11 @@ 'browser/ui/gtk/view_id_util_browsertest.cc', ], }], - # TODO(dtseng): Change this to OS=="linux" once Windows support done. - ['OS!="mac"', { + ['OS=="linux"', { 'sources!': [ - 'browser/accessibility/dump_accessibility_tree_browsertest.cc', + '../content/browser/accessibility/dump_accessibility_tree_browsertest.cc', + '../content/browser/accessibility/dump_accessibility_tree_helper_mac.mm', + '../content/browser/accessibility/dump_accessibility_tree_helper_win.cc', ], }], ['OS=="win"', { @@ -3007,6 +3010,7 @@ 'dependencies': [ 'chrome_version_resources', 'installer_util_strings', + '../third_party/iaccessible2/iaccessible2.gyp:iaccessible2', '../sandbox/sandbox.gyp:sandbox', ], 'conditions': [ diff --git a/chrome/test/data/accessibility/aria-application-expected-win.txt b/chrome/test/data/accessibility/aria-application-expected-win.txt new file mode 100644 index 0000000..6137c1b --- /dev/null +++ b/chrome/test/data/accessibility/aria-application-expected-win.txt @@ -0,0 +1,2 @@ +|ROLE_SYSTEM_DOCUMENT||IA2_STATE_OPAQUE|IA2_STATE_VERTICAL +|IA2_ROLE_SECTION||IA2_STATE_HORIZONTAL|IA2_STATE_OPAQUE diff --git a/content/browser/accessibility/browser_accessibility.h b/content/browser/accessibility/browser_accessibility.h index 452deb9..0fbb3eb 100644 --- a/content/browser/accessibility/browser_accessibility.h +++ b/content/browser/accessibility/browser_accessibility.h @@ -193,10 +193,6 @@ class CONTENT_EXPORT BrowserAccessibility { BrowserAccessibilityWin* toBrowserAccessibilityWin(); #endif - // A string representation of this node. - // TODO(dtseng): Move to test only library. - std::string ToString(); - // Retrieve the value of a bool attribute from the bool attribute // map and returns true if found. bool GetBoolAttribute(WebAccessibility::BoolAttribute attr, bool* value) diff --git a/content/browser/accessibility/browser_accessibility_mac.mm b/content/browser/accessibility/browser_accessibility_mac.mm index 798bfbf..6a209d8 100644 --- a/content/browser/accessibility/browser_accessibility_mac.mm +++ b/content/browser/accessibility/browser_accessibility_mac.mm @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 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. @@ -57,13 +57,3 @@ BrowserAccessibilityCocoa* BrowserAccessibility::toBrowserAccessibilityCocoa() { return static_cast<BrowserAccessibilityMac*>(this)-> native_view(); } - -std::string BrowserAccessibility::ToString() { - BrowserAccessibilityCocoa* cocoa_node = this->toBrowserAccessibilityCocoa(); - NSString* dump = [NSString stringWithFormat:@"%@|%@|%@|%@", - [cocoa_node role], - [cocoa_node subrole], - [cocoa_node title], - [cocoa_node value]]; - return [dump cStringUsingEncoding:NSUTF8StringEncoding]; -} diff --git a/content/browser/accessibility/browser_accessibility_win.cc b/content/browser/accessibility/browser_accessibility_win.cc index 0f3fc74..21ad75b 100644 --- a/content/browser/accessibility/browser_accessibility_win.cc +++ b/content/browser/accessibility/browser_accessibility_win.cc @@ -175,11 +175,6 @@ BrowserAccessibilityWin* BrowserAccessibility::toBrowserAccessibilityWin() { return static_cast<BrowserAccessibilityWin*>(this); } -std::string BrowserAccessibility::ToString() { - // TODO(dtseng): Implement this and human readable role strings. - return ""; -} - BrowserAccessibilityWin::BrowserAccessibilityWin() : ia_role_(0), ia_state_(0), diff --git a/content/browser/accessibility/browser_accessibility_win.h b/content/browser/accessibility/browser_accessibility_win.h index a481160..90c9c44 100644 --- a/content/browser/accessibility/browser_accessibility_win.h +++ b/content/browser/accessibility/browser_accessibility_win.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 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. @@ -79,6 +79,11 @@ BrowserAccessibilityWin // position where a non-static text child object appears. CONTENT_EXPORT static const char16 kEmbeddedCharacter[]; + // Mappings from roles and states to human readable strings. Initialize + // with |InitializeStringMaps|. + static std::map<int32, string16> role_string_map; + static std::map<int32, string16> state_string_map; + CONTENT_EXPORT BrowserAccessibilityWin(); CONTENT_EXPORT virtual ~BrowserAccessibilityWin(); @@ -696,6 +701,10 @@ CONTENT_EXPORT virtual void PostInitialize(); REFIID iid, void** object); + // Accessors to IA2 role and state. + int32 ia2_role() { return ia2_role_; } + int32 ia2_state() { return ia2_state_; } + private: // Add one to the reference count and return the same object. Always // use this method when returning a BrowserAccessibilityWin object as diff --git a/chrome/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc index 7e97b13..75ee368 100644 --- a/chrome/browser/accessibility/dump_accessibility_tree_browsertest.cc +++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 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. @@ -7,12 +7,15 @@ #include "base/logging.h" #include "base/path_service.h" #include "base/string_util.h" +#include "base/string16.h" +#include "base/utf_string_conversions.h" #include "chrome/browser/ui/browser.h" #include "chrome/common/chrome_paths.h" #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" #include "content/browser/accessibility/browser_accessibility.h" #include "content/browser/accessibility/browser_accessibility_manager.h" +#include "content/browser/accessibility/dump_accessibility_tree_helper.h" #include "content/browser/renderer_host/render_view_host.h" #include "content/browser/renderer_host/render_widget_host.h" #include "content/browser/renderer_host/render_widget_host_view.h" @@ -25,34 +28,10 @@ using content::OpenURLParams; using content::Referrer; -// Suffix of the expectation file corresponding to html file. -// Example: -// HTML test: test-file.html -// Expected: test-file-expected-mac.txt. -// Auto-generated: test-file-actual-mac.txt -#if defined(OS_WIN) -static const std::string kActualFileSuffix = "-actual-win.txt"; -static const std::string kExpectedFileSuffix = "-expected-win.txt"; -#elif defined(OS_MACOSX) -static const std::string kActualFileSuffix = "-actual-mac.txt"; -static const std::string kExpectedFileSuffix = "-expected-mac.txt"; -#else -#error DumpAccessibilityTree does not support this platform. -#endif - -// HTML id attribute prefix identifying a node to test. -static const std::string kTestId = "test"; - +namespace { // Required to enter html content into a url. -static const std::string kUrlPreamble = "data:text/html,\n<!doctype html>"; - -// Dumps a BrowserAccessibility tree into a string. -void DumpAccessibilityTree(BrowserAccessibility* node, - std::string* contents) { - *contents += node->ToString() + "\n"; - for (size_t i = 0; i < node->children().size(); ++i) - DumpAccessibilityTree(node->children()[i], contents); -} + static const std::string kUrlPreamble = "data:text/html,\n<!doctype html>"; +} // namespace // This test takes a snapshot of the platform BrowserAccessibility tree and // tests it against an expected baseline. @@ -72,6 +51,8 @@ class DumpAccessibilityTreeTest : public InProcessBrowserTest { &resources_pack_path)); ResourceBundle::AddDataPackToSharedInstance(resources_pack_path); } + + DumpAccessibilityTreeHelper helper_; }; IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, @@ -86,7 +67,7 @@ IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, // Setup test paths. FilePath dir_test_data; EXPECT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &dir_test_data)); - FilePath test_path(dir_test_data.Append(FilePath("accessibility"))); + FilePath test_path(dir_test_data.Append(FILE_PATH_LITERAL("accessibility"))); EXPECT_TRUE(file_util::PathExists(test_path)) << test_path.LossyDisplayName(); @@ -94,7 +75,7 @@ IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, file_util::FileEnumerator file_enumerator(test_path, false, file_util::FileEnumerator::FILES, - "*.html"); + FILE_PATH_LITERAL("*.html")); // TODO(dtseng): Make each of these a gtest with script. FilePath html_file; @@ -104,7 +85,8 @@ IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, std::string expected_contents; FilePath expected_file = - FilePath(html_file.RemoveExtension().value() + kExpectedFileSuffix); + FilePath(html_file.RemoveExtension().value() + + helper_.GetExpectedFileSuffix()); file_util::ReadFileToString( expected_file, &expected_contents); @@ -113,7 +95,9 @@ IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, ui_test_utils::WindowedNotificationObserver tree_updated_observer( content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, content::NotificationService::AllSources()); - GURL url(kUrlPreamble + html_contents); + string16 html_contents16; + html_contents16 = UTF8ToUTF16(html_contents); + GURL url(UTF8ToUTF16(kUrlPreamble) + html_contents16); browser()->OpenURL(OpenURLParams( url, Referrer(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED, false)); @@ -121,17 +105,20 @@ IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, tree_updated_observer.Wait(); // Perform a diff (or write the initial baseline). - std::string actual_contents; - DumpAccessibilityTree( + string16 actual_contents; + helper_.DumpAccessibilityTree( host_view->GetBrowserAccessibilityManager()->GetRoot(), &actual_contents); - EXPECT_EQ(expected_contents, actual_contents); + std::string actual_contents8 = UTF16ToUTF8(actual_contents); + EXPECT_EQ(expected_contents, actual_contents8); if (!file_util::PathExists(expected_file)) { FilePath actual_file = - FilePath(html_file.RemoveExtension().value() + kActualFileSuffix); + FilePath(html_file.RemoveExtension().value() + + helper_.GetActualFileSuffix()); + EXPECT_TRUE(file_util::WriteFile( - actual_file, actual_contents.c_str(), actual_contents.size())); + actual_file, actual_contents8.c_str(), actual_contents8.size())); ADD_FAILURE() << "No expectation found. Create it by doing:\n" << "mv " << actual_file.LossyDisplayName() << " " diff --git a/content/browser/accessibility/dump_accessibility_tree_helper.h b/content/browser/accessibility/dump_accessibility_tree_helper.h new file mode 100644 index 0000000..02c6e22 --- /dev/null +++ b/content/browser/accessibility/dump_accessibility_tree_helper.h @@ -0,0 +1,39 @@ +// Copyright (c) 2012 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. + +#ifndef CHROME_BROWSER_ACCESSIBILITY_DUMP_ACCESSIBILITY_TREE_HELPER_H_ +#define CHROME_BROWSER_ACCESSIBILITY_DUMP_ACCESSIBILITY_TREE_HELPER_H_ + +#include "base/file_path.h" +#include "base/string16.h" +#include "base/utf_string_conversions.h" +#include "content/browser/accessibility/browser_accessibility.h" + +// A utility class for retrieving platform specific accessibility information. +class DumpAccessibilityTreeHelper { + public: + // Dumps a BrowserAccessibility tree into a string. + void DumpAccessibilityTree(BrowserAccessibility* node, + string16* contents) { + *contents += ToString(node) + UTF8ToUTF16("\n"); + for (size_t i = 0; i < node->children().size(); ++i) + DumpAccessibilityTree(node->children()[i], contents); + } + + // Suffix of the expectation file corresponding to html file. + // Example: + // HTML test: test-file.html + // Expected: test-file-expected-mac.txt. + // Auto-generated: test-file-actual-mac.txt + const FilePath::StringType GetActualFileSuffix() const; + const FilePath::StringType GetExpectedFileSuffix() const; + + protected: + // Returns a platform specific representation of a BrowserAccessibility. + string16 ToString(BrowserAccessibility* node); + + void Initialize(); +}; + +#endif // CHROME_BROWSER_ACCESSIBILITY_DUMP_ACCESSIBILITY_TREE_HELPER_H_ diff --git a/content/browser/accessibility/dump_accessibility_tree_helper_mac.mm b/content/browser/accessibility/dump_accessibility_tree_helper_mac.mm new file mode 100644 index 0000000..bf48e9c --- /dev/null +++ b/content/browser/accessibility/dump_accessibility_tree_helper_mac.mm @@ -0,0 +1,36 @@ +// Copyright (c) 2012 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 "content/browser/accessibility/dump_accessibility_tree_helper.h" + +#import <Cocoa/Cocoa.h> + +#include "base/file_path.h" +#include "base/utf_string_conversions.h" +#include "content/browser/accessibility/browser_accessibility_cocoa.h" +#include "content/browser/accessibility/browser_accessibility_mac.h" + +void DumpAccessibilityTreeHelper::Initialize() {} + +string16 DumpAccessibilityTreeHelper::ToString(BrowserAccessibility* node) { + BrowserAccessibilityCocoa* cocoa_node = node->toBrowserAccessibilityCocoa(); + NSString* dump = [NSString stringWithFormat:@"%@|%@|%@|%@", + [cocoa_node role], + [cocoa_node subrole], + [cocoa_node title], + [cocoa_node value]]; + std::string tempVal = [dump cStringUsingEncoding:NSUTF8StringEncoding]; + + return UTF8ToUTF16(tempVal); +} + +const FilePath::StringType DumpAccessibilityTreeHelper::GetActualFileSuffix() + const { + return FILE_PATH_LITERAL("-actual-mac.txt"); +} + +const FilePath::StringType DumpAccessibilityTreeHelper::GetExpectedFileSuffix() + const { + return FILE_PATH_LITERAL("-expected-mac.txt"); +} diff --git a/content/browser/accessibility/dump_accessibility_tree_helper_win.cc b/content/browser/accessibility/dump_accessibility_tree_helper_win.cc new file mode 100644 index 0000000..1955771 --- /dev/null +++ b/content/browser/accessibility/dump_accessibility_tree_helper_win.cc @@ -0,0 +1,182 @@ +// Copyright (c) 2012 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 "content/browser/accessibility/dump_accessibility_tree_helper.h" + +#include <oleacc.h> + +#include <map> +#include <string> + +#include "base/file_path.h" +#include "base/string_util.h" +#include "content/browser/accessibility/browser_accessibility_win.h" +#include "third_party/iaccessible2/ia2_api_all.h" + +namespace { +std::map<int32, string16> role_string_map; +std::map<int32, string16> state_string_map; +} // namespace + +// Convenience macros for generating readable strings. +#define ROLE_MAP(x) role_string_map[x] = L#x; +#define STATE_MAP(x) state_string_map[x] = L#x; + +void DumpAccessibilityTreeHelper::Initialize() { + ROLE_MAP(IA2_ROLE_UNKNOWN) + ROLE_MAP(IA2_ROLE_CANVAS) + ROLE_MAP(IA2_ROLE_CAPTION) + ROLE_MAP(IA2_ROLE_CHECK_MENU_ITEM) + ROLE_MAP(IA2_ROLE_COLOR_CHOOSER) + ROLE_MAP(IA2_ROLE_DATE_EDITOR) + ROLE_MAP(IA2_ROLE_DESKTOP_ICON) + ROLE_MAP(IA2_ROLE_DESKTOP_PANE) + ROLE_MAP(IA2_ROLE_DIRECTORY_PANE) + ROLE_MAP(IA2_ROLE_EDITBAR) + ROLE_MAP(IA2_ROLE_EMBEDDED_OBJECT) + ROLE_MAP(IA2_ROLE_ENDNOTE) + ROLE_MAP(IA2_ROLE_FILE_CHOOSER) + ROLE_MAP(IA2_ROLE_FONT_CHOOSER) + ROLE_MAP(IA2_ROLE_FOOTER) + ROLE_MAP(IA2_ROLE_FOOTNOTE) + ROLE_MAP(IA2_ROLE_FORM) + ROLE_MAP(IA2_ROLE_FRAME) + ROLE_MAP(IA2_ROLE_GLASS_PANE) + ROLE_MAP(IA2_ROLE_HEADER) + ROLE_MAP(IA2_ROLE_HEADING) + ROLE_MAP(IA2_ROLE_ICON) + ROLE_MAP(IA2_ROLE_IMAGE_MAP) + ROLE_MAP(IA2_ROLE_INPUT_METHOD_WINDOW) + ROLE_MAP(IA2_ROLE_INTERNAL_FRAME) + ROLE_MAP(IA2_ROLE_LABEL) + ROLE_MAP(IA2_ROLE_LAYERED_PANE) + ROLE_MAP(IA2_ROLE_NOTE) + ROLE_MAP(IA2_ROLE_OPTION_PANE) + ROLE_MAP(IA2_ROLE_PAGE) + ROLE_MAP(IA2_ROLE_PARAGRAPH) + ROLE_MAP(IA2_ROLE_RADIO_MENU_ITEM) + ROLE_MAP(IA2_ROLE_REDUNDANT_OBJECT) + ROLE_MAP(IA2_ROLE_ROOT_PANE) + ROLE_MAP(IA2_ROLE_RULER) + ROLE_MAP(IA2_ROLE_SCROLL_PANE) + ROLE_MAP(IA2_ROLE_SECTION) + ROLE_MAP(IA2_ROLE_SHAPE) + ROLE_MAP(IA2_ROLE_SPLIT_PANE) + ROLE_MAP(IA2_ROLE_TEAR_OFF_MENU) + ROLE_MAP(IA2_ROLE_TERMINAL) + ROLE_MAP(IA2_ROLE_TEXT_FRAME) + ROLE_MAP(IA2_ROLE_TOGGLE_BUTTON) + ROLE_MAP(IA2_ROLE_VIEW_PORT) + + // MSAA roles. + ROLE_MAP(ROLE_SYSTEM_TITLEBAR) + ROLE_MAP(ROLE_SYSTEM_MENUBAR) + ROLE_MAP(ROLE_SYSTEM_SCROLLBAR) + ROLE_MAP(ROLE_SYSTEM_GRIP) + ROLE_MAP(ROLE_SYSTEM_SOUND) + ROLE_MAP(ROLE_SYSTEM_CURSOR) + ROLE_MAP(ROLE_SYSTEM_CARET) + ROLE_MAP(ROLE_SYSTEM_ALERT) + ROLE_MAP(ROLE_SYSTEM_WINDOW) + ROLE_MAP(ROLE_SYSTEM_CLIENT) + ROLE_MAP(ROLE_SYSTEM_MENUPOPUP) + ROLE_MAP(ROLE_SYSTEM_MENUITEM) + ROLE_MAP(ROLE_SYSTEM_TOOLTIP) + ROLE_MAP(ROLE_SYSTEM_APPLICATION) + ROLE_MAP(ROLE_SYSTEM_DOCUMENT) + ROLE_MAP(ROLE_SYSTEM_PANE) + ROLE_MAP(ROLE_SYSTEM_CHART) + ROLE_MAP(ROLE_SYSTEM_DIALOG) + ROLE_MAP(ROLE_SYSTEM_BORDER) + ROLE_MAP(ROLE_SYSTEM_GROUPING) + ROLE_MAP(ROLE_SYSTEM_SEPARATOR) + ROLE_MAP(ROLE_SYSTEM_TOOLBAR) + ROLE_MAP(ROLE_SYSTEM_STATUSBAR) + ROLE_MAP(ROLE_SYSTEM_TABLE) + ROLE_MAP(ROLE_SYSTEM_COLUMNHEADER) + ROLE_MAP(ROLE_SYSTEM_ROWHEADER) + ROLE_MAP(ROLE_SYSTEM_COLUMN) + ROLE_MAP(ROLE_SYSTEM_ROW) + ROLE_MAP(ROLE_SYSTEM_CELL) + ROLE_MAP(ROLE_SYSTEM_LINK) + ROLE_MAP(ROLE_SYSTEM_HELPBALLOON) + ROLE_MAP(ROLE_SYSTEM_CHARACTER) + ROLE_MAP(ROLE_SYSTEM_LIST) + ROLE_MAP(ROLE_SYSTEM_LISTITEM) + ROLE_MAP(ROLE_SYSTEM_OUTLINE) + ROLE_MAP(ROLE_SYSTEM_OUTLINEITEM) + ROLE_MAP(ROLE_SYSTEM_PAGETAB) + ROLE_MAP(ROLE_SYSTEM_PROPERTYPAGE) + ROLE_MAP(ROLE_SYSTEM_INDICATOR) + ROLE_MAP(ROLE_SYSTEM_GRAPHIC) + ROLE_MAP(ROLE_SYSTEM_STATICTEXT) + ROLE_MAP(ROLE_SYSTEM_TEXT) + ROLE_MAP(ROLE_SYSTEM_PUSHBUTTON) + ROLE_MAP(ROLE_SYSTEM_CHECKBUTTON) + ROLE_MAP(ROLE_SYSTEM_RADIOBUTTON) + ROLE_MAP(ROLE_SYSTEM_COMBOBOX) + ROLE_MAP(ROLE_SYSTEM_DROPLIST) + ROLE_MAP(ROLE_SYSTEM_PROGRESSBAR) + ROLE_MAP(ROLE_SYSTEM_DIAL) + ROLE_MAP(ROLE_SYSTEM_HOTKEYFIELD) + ROLE_MAP(ROLE_SYSTEM_SLIDER) + ROLE_MAP(ROLE_SYSTEM_SPINBUTTON) + ROLE_MAP(ROLE_SYSTEM_DIAGRAM) + ROLE_MAP(ROLE_SYSTEM_ANIMATION) + ROLE_MAP(ROLE_SYSTEM_EQUATION) + ROLE_MAP(ROLE_SYSTEM_BUTTONDROPDOWN) + ROLE_MAP(ROLE_SYSTEM_BUTTONMENU) + ROLE_MAP(ROLE_SYSTEM_BUTTONDROPDOWNGRID) + ROLE_MAP(ROLE_SYSTEM_WHITESPACE) + ROLE_MAP(ROLE_SYSTEM_PAGETABLIST) + ROLE_MAP(ROLE_SYSTEM_CLOCK) + ROLE_MAP(ROLE_SYSTEM_SPLITBUTTON) + ROLE_MAP(ROLE_SYSTEM_IPADDRESS) + ROLE_MAP(ROLE_SYSTEM_OUTLINEBUTTON) + + STATE_MAP(IA2_STATE_ACTIVE) + STATE_MAP(IA2_STATE_ARMED) + STATE_MAP(IA2_STATE_DEFUNCT) + STATE_MAP(IA2_STATE_EDITABLE) + STATE_MAP(IA2_STATE_HORIZONTAL) + STATE_MAP(IA2_STATE_ICONIFIED) + STATE_MAP(IA2_STATE_INVALID_ENTRY) + STATE_MAP(IA2_STATE_MANAGES_DESCENDANTS) + STATE_MAP(IA2_STATE_MODAL) + STATE_MAP(IA2_STATE_MULTI_LINE) + STATE_MAP(IA2_STATE_OPAQUE) + STATE_MAP(IA2_STATE_REQUIRED) + STATE_MAP(IA2_STATE_SELECTABLE_TEXT) + STATE_MAP(IA2_STATE_SINGLE_LINE) + STATE_MAP(IA2_STATE_STALE) + STATE_MAP(IA2_STATE_SUPPORTS_AUTOCOMPLETION) + STATE_MAP(IA2_STATE_TRANSIENT) + STATE_MAP(IA2_STATE_VERTICAL) +} + +string16 DumpAccessibilityTreeHelper::ToString(BrowserAccessibility* node) { + if (role_string_map.empty()) + Initialize(); + + BrowserAccessibilityWin* acc_obj = node->toBrowserAccessibilityWin(); + string16 state; + std::map<int32, string16>::iterator it; + + for (it = state_string_map.begin(); it != state_string_map.end(); ++it) { + if (it->first & acc_obj->ia2_state()) + state += L"|" + state_string_map[it->first]; + } + return acc_obj->name() + L"|" + role_string_map[acc_obj->ia2_role()] + L"|" + + state; +} + +const FilePath::StringType DumpAccessibilityTreeHelper::GetActualFileSuffix() + const { + return FILE_PATH_LITERAL("-actual-win.txt"); +} + +const FilePath::StringType DumpAccessibilityTreeHelper::GetExpectedFileSuffix() + const { + return FILE_PATH_LITERAL("-expected-win.txt"); +} |