Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(432)

Side by Side Diff: content/browser/accessibility/frame_tree_accessibility_unittest.cc

Issue 252253002: Implement initial support for nesting one ax tree in another. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address feedback Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2014 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 "base/strings/string16.h"
6 #include "base/strings/utf_string_conversions.h"
7 #include "content/browser/accessibility/browser_accessibility.h"
8 #include "content/browser/accessibility/browser_accessibility_manager.h"
9 #include "content/browser/accessibility/frame_tree_accessibility.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 namespace content {
13 namespace {
14
15 class TestBrowserAccessibilityDelegate
16 : public BrowserAccessibilityDelegate {
17 public:
18 virtual void AccessibilitySetFocus(int acc_obj_id) OVERRIDE {}
19 virtual void AccessibilityDoDefaultAction(int acc_obj_id) OVERRIDE {}
20 virtual void AccessibilityShowMenu(int acc_obj_id) OVERRIDE {}
21 virtual void AccessibilityScrollToMakeVisible(
22 int acc_obj_id, gfx::Rect subfocus) OVERRIDE {}
23 virtual void AccessibilityScrollToPoint(
24 int acc_obj_id, gfx::Point point) OVERRIDE {}
25 virtual void AccessibilitySetTextSelection(
26 int acc_obj_id, int start_offset, int end_offset) OVERRIDE {}
27 virtual bool AccessibilityViewHasFocus() const OVERRIDE {
28 return false;
29 }
30 virtual gfx::Rect AccessibilityGetViewBounds() const OVERRIDE {
31 return gfx::Rect();
32 }
33 virtual gfx::Point AccessibilityOriginInScreen(
34 const gfx::Rect& bounds) const OVERRIDE {
35 return gfx::Point();
36 }
37 virtual void AccessibilityFatalError() OVERRIDE {
38 LOG(FATAL) << "Fatal error, aborting test";
39 }
40 };
41
42 } // anonymous namespace
43
44 //
45 // All of these tests use the same web page spanning two frames:
46 //
47 // Outer Frame:
48 //
49 // 1 AX_ROLE_ROOT_WEB_AREA
50 // 2 AX_ROLE_IFRAME
51 //
52 // Inner Frame:
53 //
54 // 1 AX_ROLE_ROOT_WEB_AREA
55 // 2 AX_ROLE_BUTTON
56 //
57 class FrameTreeAccessibilityTest : public testing::Test {
58 public:
59 FrameTreeAccessibilityTest();
60 virtual ~FrameTreeAccessibilityTest();
61
62 protected:
63 virtual void SetUp() OVERRIDE;
64 void LinkFrames();
65
66 TestBrowserAccessibilityDelegate outer_frame_;
67 TestBrowserAccessibilityDelegate inner_frame_;
68 scoped_ptr<BrowserAccessibilityManager> outer_manager_;
69 scoped_ptr<BrowserAccessibilityManager> inner_manager_;
70
71 DISALLOW_COPY_AND_ASSIGN(FrameTreeAccessibilityTest);
72 };
73
74 FrameTreeAccessibilityTest::FrameTreeAccessibilityTest() {
75 }
76
77 FrameTreeAccessibilityTest::~FrameTreeAccessibilityTest() {
78 }
79
80 void FrameTreeAccessibilityTest::SetUp() {
81 ui::AXNodeData outer_root;
82 outer_root.id = 1;
83 outer_root.role = ui::AX_ROLE_ROOT_WEB_AREA;
84 outer_root.state = 0;
85 outer_root.child_ids.push_back(2);
86
87 ui::AXNodeData outer_iframe;
88 outer_iframe.id = 2;
89 outer_iframe.role = ui::AX_ROLE_IFRAME;
90 outer_iframe.state = 0;
91
92 outer_manager_.reset(BrowserAccessibilityManager::Create(
93 MakeAXTreeUpdate(outer_root, outer_iframe), &outer_frame_));
94
95 ui::AXNodeData inner_root;
96 inner_root.id = 1;
97 inner_root.role = ui::AX_ROLE_ROOT_WEB_AREA;
98 inner_root.state = 0;
99 inner_root.child_ids.push_back(2);
100
101 ui::AXNodeData inner_button;
102 inner_button.id = 2;
103 inner_button.role = ui::AX_ROLE_BUTTON;
104 inner_button.state = 0;
105
106 inner_manager_.reset(BrowserAccessibilityManager::Create(
107 MakeAXTreeUpdate(inner_root, inner_button), &inner_frame_));
108
109 FrameTreeAccessibility* frames = FrameTreeAccessibility::GetInstance();
110 frames->OnFrameCreated(&outer_frame_);
111 frames->SetFrameAccessibilityManager(&outer_frame_, outer_manager_.get());
112 frames->OnFrameCreated(&inner_frame_);
113 frames->SetFrameAccessibilityManager(&inner_frame_, inner_manager_.get());
114 }
115
116 void FrameTreeAccessibilityTest::LinkFrames() {
117 FrameTreeAccessibility* frames = FrameTreeAccessibility::GetInstance();
118 BrowserAccessibility* outer_root = outer_manager_->GetRoot();
119 BrowserAccessibility* outer_iframe = outer_root->PlatformGetChild(0);
120 outer_iframe->SetChildFrameId(frames->GetFrameId(&inner_frame_));
121 inner_manager_->SetParentFrameIds(
122 frames->GetFrameId(&outer_frame_),
123 outer_iframe->GetId());
124 }
125
126 TEST_F(FrameTreeAccessibilityTest, GetChildAndGetParent) {
127 BrowserAccessibility* outer_root = outer_manager_->GetRoot();
128 BrowserAccessibility* outer_iframe = outer_root->PlatformGetChild(0);
129 ASSERT_EQ(0U, outer_iframe->PlatformChildCount());
130
131 LinkFrames();
132
133 ASSERT_EQ(1U, outer_iframe->PlatformChildCount());
134 BrowserAccessibility* inner_root = outer_iframe->PlatformGetChild(0);
135 ASSERT_EQ(ui::AX_ROLE_ROOT_WEB_AREA, inner_root->GetRole());
136
137 BrowserAccessibility* inner_root_parent = inner_root->GetParent();
138 ASSERT_EQ(inner_root_parent, outer_iframe);
139 }
140
141 TEST_F(FrameTreeAccessibilityTest, IsDescendantOf) {
142 LinkFrames();
143 BrowserAccessibility* outer_root = outer_manager_->GetRoot();
144 BrowserAccessibility* outer_iframe = outer_root->PlatformGetChild(0);
145 BrowserAccessibility* inner_root = inner_manager_->GetRoot();
146 BrowserAccessibility* inner_button = inner_root->PlatformGetChild(0);
147
148 EXPECT_TRUE(outer_iframe->IsDescendantOf(outer_root));
149 EXPECT_TRUE(inner_root->IsDescendantOf(outer_root));
150 EXPECT_TRUE(inner_button->IsDescendantOf(outer_root));
151 EXPECT_TRUE(inner_root->IsDescendantOf(outer_iframe));
152 EXPECT_TRUE(inner_button->IsDescendantOf(outer_iframe));
153
154 EXPECT_FALSE(outer_root->IsDescendantOf(outer_iframe));
155 EXPECT_FALSE(outer_root->IsDescendantOf(inner_root));
156 EXPECT_FALSE(outer_root->IsDescendantOf(inner_button));
157 EXPECT_FALSE(outer_iframe->IsDescendantOf(inner_root));
158 EXPECT_FALSE(outer_iframe->IsDescendantOf(inner_button));
159 }
160
161 TEST_F(FrameTreeAccessibilityTest, InnerFrameVanishing) {
162 BrowserAccessibility* outer_root = outer_manager_->GetRoot();
163 BrowserAccessibility* outer_iframe = outer_root->PlatformGetChild(0);
164 LinkFrames();
165
166 ASSERT_EQ(1U, outer_iframe->PlatformChildCount());
167 BrowserAccessibility* inner_root = outer_iframe->PlatformGetChild(0);
168 ASSERT_EQ(ui::AX_ROLE_ROOT_WEB_AREA, inner_root->GetRole());
169
170 FrameTreeAccessibility* frames = FrameTreeAccessibility::GetInstance();
171 frames->OnFrameDeleted(&inner_frame_);
172 inner_manager_.reset(NULL);
173
174 ASSERT_EQ(0U, outer_iframe->PlatformChildCount());
175 }
176
177 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698