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

Unified 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, 8 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/accessibility/frame_tree_accessibility_unittest.cc
diff --git a/content/browser/accessibility/frame_tree_accessibility_unittest.cc b/content/browser/accessibility/frame_tree_accessibility_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..6aa02d82580bc173909064970629facd2a70aca8
--- /dev/null
+++ b/content/browser/accessibility/frame_tree_accessibility_unittest.cc
@@ -0,0 +1,177 @@
+// Copyright (c) 2014 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 "base/strings/string16.h"
+#include "base/strings/utf_string_conversions.h"
+#include "content/browser/accessibility/browser_accessibility.h"
+#include "content/browser/accessibility/browser_accessibility_manager.h"
+#include "content/browser/accessibility/frame_tree_accessibility.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace content {
+namespace {
+
+class TestBrowserAccessibilityDelegate
+ : public BrowserAccessibilityDelegate {
+ public:
+ virtual void AccessibilitySetFocus(int acc_obj_id) OVERRIDE {}
+ virtual void AccessibilityDoDefaultAction(int acc_obj_id) OVERRIDE {}
+ virtual void AccessibilityShowMenu(int acc_obj_id) OVERRIDE {}
+ virtual void AccessibilityScrollToMakeVisible(
+ int acc_obj_id, gfx::Rect subfocus) OVERRIDE {}
+ virtual void AccessibilityScrollToPoint(
+ int acc_obj_id, gfx::Point point) OVERRIDE {}
+ virtual void AccessibilitySetTextSelection(
+ int acc_obj_id, int start_offset, int end_offset) OVERRIDE {}
+ virtual bool AccessibilityViewHasFocus() const OVERRIDE {
+ return false;
+ }
+ virtual gfx::Rect AccessibilityGetViewBounds() const OVERRIDE {
+ return gfx::Rect();
+ }
+ virtual gfx::Point AccessibilityOriginInScreen(
+ const gfx::Rect& bounds) const OVERRIDE {
+ return gfx::Point();
+ }
+ virtual void AccessibilityFatalError() OVERRIDE {
+ LOG(FATAL) << "Fatal error, aborting test";
+ }
+};
+
+} // anonymous namespace
+
+//
+// All of these tests use the same web page spanning two frames:
+//
+// Outer Frame:
+//
+// 1 AX_ROLE_ROOT_WEB_AREA
+// 2 AX_ROLE_IFRAME
+//
+// Inner Frame:
+//
+// 1 AX_ROLE_ROOT_WEB_AREA
+// 2 AX_ROLE_BUTTON
+//
+class FrameTreeAccessibilityTest : public testing::Test {
+ public:
+ FrameTreeAccessibilityTest();
+ virtual ~FrameTreeAccessibilityTest();
+
+ protected:
+ virtual void SetUp() OVERRIDE;
+ void LinkFrames();
+
+ TestBrowserAccessibilityDelegate outer_frame_;
+ TestBrowserAccessibilityDelegate inner_frame_;
+ scoped_ptr<BrowserAccessibilityManager> outer_manager_;
+ scoped_ptr<BrowserAccessibilityManager> inner_manager_;
+
+ DISALLOW_COPY_AND_ASSIGN(FrameTreeAccessibilityTest);
+};
+
+FrameTreeAccessibilityTest::FrameTreeAccessibilityTest() {
+}
+
+FrameTreeAccessibilityTest::~FrameTreeAccessibilityTest() {
+}
+
+void FrameTreeAccessibilityTest::SetUp() {
+ ui::AXNodeData outer_root;
+ outer_root.id = 1;
+ outer_root.role = ui::AX_ROLE_ROOT_WEB_AREA;
+ outer_root.state = 0;
+ outer_root.child_ids.push_back(2);
+
+ ui::AXNodeData outer_iframe;
+ outer_iframe.id = 2;
+ outer_iframe.role = ui::AX_ROLE_IFRAME;
+ outer_iframe.state = 0;
+
+ outer_manager_.reset(BrowserAccessibilityManager::Create(
+ MakeAXTreeUpdate(outer_root, outer_iframe), &outer_frame_));
+
+ ui::AXNodeData inner_root;
+ inner_root.id = 1;
+ inner_root.role = ui::AX_ROLE_ROOT_WEB_AREA;
+ inner_root.state = 0;
+ inner_root.child_ids.push_back(2);
+
+ ui::AXNodeData inner_button;
+ inner_button.id = 2;
+ inner_button.role = ui::AX_ROLE_BUTTON;
+ inner_button.state = 0;
+
+ inner_manager_.reset(BrowserAccessibilityManager::Create(
+ MakeAXTreeUpdate(inner_root, inner_button), &inner_frame_));
+
+ FrameTreeAccessibility* frames = FrameTreeAccessibility::GetInstance();
+ frames->OnFrameCreated(&outer_frame_);
+ frames->SetFrameAccessibilityManager(&outer_frame_, outer_manager_.get());
+ frames->OnFrameCreated(&inner_frame_);
+ frames->SetFrameAccessibilityManager(&inner_frame_, inner_manager_.get());
+}
+
+void FrameTreeAccessibilityTest::LinkFrames() {
+ FrameTreeAccessibility* frames = FrameTreeAccessibility::GetInstance();
+ BrowserAccessibility* outer_root = outer_manager_->GetRoot();
+ BrowserAccessibility* outer_iframe = outer_root->PlatformGetChild(0);
+ outer_iframe->SetChildFrameId(frames->GetFrameId(&inner_frame_));
+ inner_manager_->SetParentFrameIds(
+ frames->GetFrameId(&outer_frame_),
+ outer_iframe->GetId());
+}
+
+TEST_F(FrameTreeAccessibilityTest, GetChildAndGetParent) {
+ BrowserAccessibility* outer_root = outer_manager_->GetRoot();
+ BrowserAccessibility* outer_iframe = outer_root->PlatformGetChild(0);
+ ASSERT_EQ(0U, outer_iframe->PlatformChildCount());
+
+ LinkFrames();
+
+ ASSERT_EQ(1U, outer_iframe->PlatformChildCount());
+ BrowserAccessibility* inner_root = outer_iframe->PlatformGetChild(0);
+ ASSERT_EQ(ui::AX_ROLE_ROOT_WEB_AREA, inner_root->GetRole());
+
+ BrowserAccessibility* inner_root_parent = inner_root->GetParent();
+ ASSERT_EQ(inner_root_parent, outer_iframe);
+}
+
+TEST_F(FrameTreeAccessibilityTest, IsDescendantOf) {
+ LinkFrames();
+ BrowserAccessibility* outer_root = outer_manager_->GetRoot();
+ BrowserAccessibility* outer_iframe = outer_root->PlatformGetChild(0);
+ BrowserAccessibility* inner_root = inner_manager_->GetRoot();
+ BrowserAccessibility* inner_button = inner_root->PlatformGetChild(0);
+
+ EXPECT_TRUE(outer_iframe->IsDescendantOf(outer_root));
+ EXPECT_TRUE(inner_root->IsDescendantOf(outer_root));
+ EXPECT_TRUE(inner_button->IsDescendantOf(outer_root));
+ EXPECT_TRUE(inner_root->IsDescendantOf(outer_iframe));
+ EXPECT_TRUE(inner_button->IsDescendantOf(outer_iframe));
+
+ EXPECT_FALSE(outer_root->IsDescendantOf(outer_iframe));
+ EXPECT_FALSE(outer_root->IsDescendantOf(inner_root));
+ EXPECT_FALSE(outer_root->IsDescendantOf(inner_button));
+ EXPECT_FALSE(outer_iframe->IsDescendantOf(inner_root));
+ EXPECT_FALSE(outer_iframe->IsDescendantOf(inner_button));
+}
+
+TEST_F(FrameTreeAccessibilityTest, InnerFrameVanishing) {
+ BrowserAccessibility* outer_root = outer_manager_->GetRoot();
+ BrowserAccessibility* outer_iframe = outer_root->PlatformGetChild(0);
+ LinkFrames();
+
+ ASSERT_EQ(1U, outer_iframe->PlatformChildCount());
+ BrowserAccessibility* inner_root = outer_iframe->PlatformGetChild(0);
+ ASSERT_EQ(ui::AX_ROLE_ROOT_WEB_AREA, inner_root->GetRole());
+
+ FrameTreeAccessibility* frames = FrameTreeAccessibility::GetInstance();
+ frames->OnFrameDeleted(&inner_frame_);
+ inner_manager_.reset(NULL);
+
+ ASSERT_EQ(0U, outer_iframe->PlatformChildCount());
+}
+
+} // namespace content

Powered by Google App Engine
This is Rietveld 408576698