| 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
|
|
|