diff options
28 files changed, 115 insertions, 554 deletions
diff --git a/content/browser/accessibility/accessibility_tree_formatter.cc b/content/browser/accessibility/accessibility_tree_formatter.cc index d4c189f..97ce7fe 100644 --- a/content/browser/accessibility/accessibility_tree_formatter.cc +++ b/content/browser/accessibility/accessibility_tree_formatter.cc @@ -66,7 +66,7 @@ void AccessibilityTreeFormatter::RecursiveBuildAccessibilityTree( dict->Set(kChildrenDictAttr, children); for (size_t i = 0; i < node.PlatformChildCount(); ++i) { - BrowserAccessibility* child_node = node.PlatformGetChild(i); + BrowserAccessibility* child_node = node.InternalGetChild(i); base::DictionaryValue* child_dict = new base::DictionaryValue; children->Append(child_dict); RecursiveBuildAccessibilityTree(*child_node, child_dict); diff --git a/content/browser/accessibility/browser_accessibility.cc b/content/browser/accessibility/browser_accessibility.cc index ce558fa..fe71fef 100644 --- a/content/browser/accessibility/browser_accessibility.cc +++ b/content/browser/accessibility/browser_accessibility.cc @@ -26,8 +26,7 @@ BrowserAccessibility* BrowserAccessibility::Create() { BrowserAccessibility::BrowserAccessibility() : manager_(NULL), - node_(NULL), - child_frame_tree_node_id_(0) { + node_(NULL) { } BrowserAccessibility::~BrowserAccessibility() { @@ -64,15 +63,6 @@ bool BrowserAccessibility::PlatformIsLeaf() const { } uint32 BrowserAccessibility::PlatformChildCount() const { - if (child_frame_tree_node_id_ && - manager_ && manager_->delegate()) { - BrowserAccessibilityManager* child_manager = - manager_->delegate()->AccessibilityGetChildFrame( - child_frame_tree_node_id_); - if (child_manager) - return 1; - } - return PlatformIsLeaf() ? 0 : InternalChildCount(); } @@ -93,16 +83,6 @@ bool BrowserAccessibility::IsDescendantOf( BrowserAccessibility* BrowserAccessibility::PlatformGetChild( uint32 child_index) const { - if (child_index == 0 && child_frame_tree_node_id_ && - manager_ && - manager_->delegate()) { - BrowserAccessibilityManager* child_manager = - manager_->delegate()->AccessibilityGetChildFrame( - child_frame_tree_node_id_); - if (child_manager) - return child_manager->GetRoot(); - } - DCHECK(child_index < InternalChildCount()); return InternalGetChild(child_index); } @@ -142,9 +122,7 @@ BrowserAccessibility* BrowserAccessibility::GetParent() const { if (!node_ || !manager_) return NULL; ui::AXNode* parent = node_->parent(); - if (parent) - return manager_->GetFromAXNode(parent); - return manager_->GetCrossFrameParent(); + return parent ? manager_->GetFromAXNode(parent) : NULL; } int32 BrowserAccessibility::GetIndexInParent() const { @@ -702,10 +680,4 @@ int BrowserAccessibility::GetStaticTextLenRecursive() const { return len; } -void BrowserAccessibility::SetChildFrameTreeNodeId( - int64 child_frame_tree_node_id) { - child_frame_tree_node_id_ = child_frame_tree_node_id; - manager_->NotifyAccessibilityEvent(ui::AX_EVENT_CHILDREN_CHANGED, this); -} - } // namespace content diff --git a/content/browser/accessibility/browser_accessibility.h b/content/browser/accessibility/browser_accessibility.h index 912620e..eeb940e 100644 --- a/content/browser/accessibility/browser_accessibility.h +++ b/content/browser/accessibility/browser_accessibility.h @@ -31,13 +31,12 @@ class BrowserAccessibilityWin; // // BrowserAccessibility // -// A BrowserAccessibility object represents one node in the accessibility -// tree on the browser side. It exactly corresponds to one WebAXObject from -// Blink. It's owned by a BrowserAccessibilityManager. +// Class implementing the cross platform interface for the Browser-Renderer +// communication of accessibility information, providing accessibility +// to be used by screen readers and other assistive technology (AT). // -// There are subclasses of BrowserAccessibility for each platform where -// we implement native accessibility APIs. This base class is used occasionally -// for tests. +// An implementation for each platform handles platform specific accessibility +// APIs. // //////////////////////////////////////////////////////////////////////////////// class CONTENT_EXPORT BrowserAccessibility { @@ -246,15 +245,6 @@ class CONTENT_EXPORT BrowserAccessibility { // Append the text from this node and its children. std::string GetTextRecursive() const; - // Identifies the given frame tree node id as the only child of this node, - // so any call to PlatformChildCount/PlatformGetChild will use - // BrowserAccessibilityDelegate::AccessibilityGetChildFrame to retrieve - // the BrowserAccessibilityManager of the child frame and return its root - // node as this node's child. - void SetChildFrameTreeNodeId(int64 child_frame_tree_node_id); - - int64 child_frame_tree_node_id() const { return child_frame_tree_node_id_; } - protected: BrowserAccessibility(); @@ -272,9 +262,7 @@ class CONTENT_EXPORT BrowserAccessibility { std::string name_; std::string value_; - // If nonzero, the frame tree node id of the child frame of this node. - int64 child_frame_tree_node_id_; - + private: DISALLOW_COPY_AND_ASSIGN(BrowserAccessibility); }; diff --git a/content/browser/accessibility/browser_accessibility_manager.cc b/content/browser/accessibility/browser_accessibility_manager.cc index a4e7db5..6bdce2d 100644 --- a/content/browser/accessibility/browser_accessibility_manager.cc +++ b/content/browser/accessibility/browser_accessibility_manager.cc @@ -7,38 +7,9 @@ #include "base/logging.h" #include "content/browser/accessibility/browser_accessibility.h" #include "content/common/accessibility_messages.h" -#include "ui/accessibility/ax_tree_serializer.h" namespace content { -namespace { - -// Recursively searches |ancestor_node| and its descendants for a -// BrowserAccessibility with |child| as its immediate and only child. -// Searches only the frame that |ancestor_node| belongs to, does not descend -// into child frames (but |child| can be the root of another frame). -BrowserAccessibility* FindParentOfNode( - BrowserAccessibility* ancestor_node, BrowserAccessibility* child) { - if (ancestor_node->PlatformChildCount() == 1 && - ancestor_node->PlatformGetChild(0) == child) { - return ancestor_node; - } - - if (ancestor_node->InternalChildCount() == 0) - return NULL; - - for (uint32 i = 0; i < ancestor_node->PlatformChildCount(); ++i) { - BrowserAccessibility* result = FindParentOfNode( - ancestor_node->PlatformGetChild(i), child); - if (result) - return result; - } - - return NULL; -} - -} // namespace. - ui::AXTreeUpdate MakeAXTreeUpdate( const ui::AXNodeData& node1, const ui::AXNodeData& node2 /* = ui::AXNodeData() */, @@ -96,7 +67,7 @@ BrowserAccessibilityManager::BrowserAccessibilityManager( BrowserAccessibilityFactory* factory) : delegate_(delegate), factory_(factory), - tree_(new ui::AXSerializableTree()), + tree_(new ui::AXTree()), focus_(NULL), osk_state_(OSK_ALLOWED) { tree_->SetDelegate(this); @@ -108,7 +79,7 @@ BrowserAccessibilityManager::BrowserAccessibilityManager( BrowserAccessibilityFactory* factory) : delegate_(delegate), factory_(factory), - tree_(new ui::AXSerializableTree()), + tree_(new ui::AXTree()), focus_(NULL), osk_state_(OSK_ALLOWED) { tree_->SetDelegate(this); @@ -392,40 +363,4 @@ void BrowserAccessibilityManager::OnNodeChangeFinished(ui::AXNode* node) { GetFromAXNode(node)->OnUpdateFinished(); } -ui::AXTreeUpdate BrowserAccessibilityManager::SnapshotAXTreeForTesting() { - scoped_ptr<ui::AXTreeSource<const ui::AXNode*> > tree_source( - tree_->CreateTreeSource()); - ui::AXTreeSerializer<const ui::AXNode*> serializer(tree_source.get()); - ui::AXTreeUpdate update; - serializer.SerializeChanges(tree_->GetRoot(), &update); - return update; -} - -void BrowserAccessibilityManager::SetChildFrameTreeNodeId( - int32 node_id, int64 child_frame_tree_node_id) { - BrowserAccessibility* node = GetFromID(node_id); - if (node) { - // The node id passed to us is the web area for the proxy frame. - // In order to replace this node with the child frame, set the - // child frame id on its parent. - BrowserAccessibility* node_parent = node->GetParent(); - if (node_parent) - node_parent->SetChildFrameTreeNodeId(child_frame_tree_node_id); - } -} - -BrowserAccessibility* BrowserAccessibilityManager::GetCrossFrameParent() { - if (!delegate_) - return NULL; - - BrowserAccessibilityManager* parent_frame = - delegate_->AccessibilityGetParentFrame(); - if (!parent_frame) - return NULL; - - // Recursively search the parent frame to find the node that has this - // frame as its child. - return FindParentOfNode(parent_frame->GetRoot(), GetRoot()); -} - } // namespace content diff --git a/content/browser/accessibility/browser_accessibility_manager.h b/content/browser/accessibility/browser_accessibility_manager.h index 5001908..c3f0430 100644 --- a/content/browser/accessibility/browser_accessibility_manager.h +++ b/content/browser/accessibility/browser_accessibility_manager.h @@ -13,7 +13,7 @@ #include "content/common/content_export.h" #include "third_party/WebKit/public/web/WebAXEnums.h" #include "ui/accessibility/ax_node_data.h" -#include "ui/accessibility/ax_serializable_tree.h" +#include "ui/accessibility/ax_tree.h" #include "ui/accessibility/ax_tree_update.h" #include "ui/gfx/native_widget_types.h" @@ -22,7 +22,6 @@ struct AccessibilityHostMsg_LocationChangeParams; namespace content { class BrowserAccessibility; -class BrowserAccessibilityManager; #if defined(OS_ANDROID) class BrowserAccessibilityManagerAndroid; #endif @@ -43,12 +42,6 @@ CONTENT_EXPORT ui::AXTreeUpdate MakeAXTreeUpdate( const ui::AXNodeData& node9 = ui::AXNodeData()); // Class that can perform actions on behalf of the BrowserAccessibilityManager. -// Note: BrowserAccessibilityManager should never cache any of the return -// values from any of these interfaces, especially those that return pointers. -// They may only be valid within this call stack. That policy eliminates any -// concerns about ownership and lifecycle issues; none of these interfaces -// transfer ownership and no return values are guaranteed to be valid outside -// of the current call stack. class CONTENT_EXPORT BrowserAccessibilityDelegate { public: virtual ~BrowserAccessibilityDelegate() {} @@ -70,9 +63,6 @@ class CONTENT_EXPORT BrowserAccessibilityDelegate { virtual void AccessibilityFatalError() = 0; virtual gfx::AcceleratedWidget AccessibilityGetAcceleratedWidget() = 0; virtual gfx::NativeViewAccessible AccessibilityGetNativeViewAccessible() = 0; - virtual BrowserAccessibilityManager* AccessibilityGetChildFrame( - int64 frame_tree_node_id) = 0; - virtual BrowserAccessibilityManager* AccessibilityGetParentFrame() = 0; }; class CONTENT_EXPORT BrowserAccessibilityFactory { @@ -199,13 +189,6 @@ class CONTENT_EXPORT BrowserAccessibilityManager : public ui::AXTreeDelegate { delegate_ = delegate; } - // Get a snapshot of the current tree as an AXTreeUpdate. - ui::AXTreeUpdate SnapshotAXTreeForTesting(); - - // Frame tree support. - void SetChildFrameTreeNodeId(int32 node_id, int64 child_frame_tree_node_id); - BrowserAccessibility* GetCrossFrameParent(); - protected: BrowserAccessibilityManager( BrowserAccessibilityDelegate* delegate, @@ -242,6 +225,21 @@ class CONTENT_EXPORT BrowserAccessibilityManager : public ui::AXTreeDelegate { OSK_ALLOWED }; + // Update a set of nodes using data received from the renderer + // process. + bool UpdateNodes(const std::vector<ui::AXNodeData>& nodes); + + // Update one node from the tree using data received from the renderer + // process. Returns true on success, false on fatal error. + bool UpdateNode(const ui::AXNodeData& src); + + void SetRoot(BrowserAccessibility* root); + + BrowserAccessibility* CreateNode( + BrowserAccessibility* parent, + int32 id, + int32 index_in_parent); + protected: // The object that can perform actions on our behalf. BrowserAccessibilityDelegate* delegate_; @@ -250,7 +248,7 @@ class CONTENT_EXPORT BrowserAccessibilityManager : public ui::AXTreeDelegate { scoped_ptr<BrowserAccessibilityFactory> factory_; // The underlying tree of accessibility objects. - scoped_ptr<ui::AXSerializableTree> tree_; + scoped_ptr<ui::AXTree> tree_; // The node that currently has focus. ui::AXNode* focus_; diff --git a/content/browser/accessibility/browser_accessibility_manager_unittest.cc b/content/browser/accessibility/browser_accessibility_manager_unittest.cc index 28bbf9d..89e1abf 100644 --- a/content/browser/accessibility/browser_accessibility_manager_unittest.cc +++ b/content/browser/accessibility/browser_accessibility_manager_unittest.cc @@ -97,13 +97,6 @@ class TestBrowserAccessibilityDelegate OVERRIDE { return NULL; } - virtual BrowserAccessibilityManager* AccessibilityGetChildFrame( - int64 frame_tree_node_id) OVERRIDE { - return NULL; - } - virtual BrowserAccessibilityManager* AccessibilityGetParentFrame() OVERRIDE { - return NULL; - } bool got_fatal_error() const { return got_fatal_error_; } void reset_got_fatal_error() { got_fatal_error_ = false; } diff --git a/content/browser/accessibility/site_per_process_accessibility_browsertest.cc b/content/browser/accessibility/site_per_process_accessibility_browsertest.cc deleted file mode 100644 index 2e6533e..0000000 --- a/content/browser/accessibility/site_per_process_accessibility_browsertest.cc +++ /dev/null @@ -1,144 +0,0 @@ -// 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/command_line.h" -#include "base/strings/stringprintf.h" -#include "content/browser/accessibility/browser_accessibility.h" -#include "content/browser/accessibility/browser_accessibility_manager.h" -#include "content/browser/accessibility/browser_accessibility_state_impl.h" -#include "content/browser/frame_host/cross_process_frame_connector.h" -#include "content/browser/frame_host/frame_tree.h" -#include "content/browser/frame_host/render_frame_proxy_host.h" -#include "content/browser/frame_host/render_widget_host_view_child_frame.h" -#include "content/browser/renderer_host/render_view_host_impl.h" -#include "content/browser/site_per_process_browsertest.h" -#include "content/browser/web_contents/web_contents_impl.h" -#include "content/public/browser/notification_observer.h" -#include "content/public/browser/notification_service.h" -#include "content/public/browser/notification_types.h" -#include "content/public/browser/web_contents_observer.h" -#include "content/public/common/content_switches.h" -#include "content/public/test/browser_test_utils.h" -#include "content/public/test/content_browser_test.h" -#include "content/public/test/content_browser_test_utils.h" -#include "content/public/test/test_utils.h" -#include "content/shell/browser/shell.h" -#include "content/test/accessibility_browser_test_utils.h" -#include "content/test/content_browser_test_utils_internal.h" -#include "net/dns/mock_host_resolver.h" -#include "url/gurl.h" - -namespace content { - -class SitePerProcessAccessibilityBrowserTest - : public SitePerProcessBrowserTest { - public: - SitePerProcessAccessibilityBrowserTest() {} -}; - -#if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS)) -#define MAYBE_CrossSiteIframeAccessibility CrossSiteIframeAccessibility -#else -#define MAYBE_CrossSiteIframeAccessibility DISABLED_CrossSiteIframeAccessibility -#endif - -IN_PROC_BROWSER_TEST_F(SitePerProcessAccessibilityBrowserTest, - MAYBE_CrossSiteIframeAccessibility) { - // Enable full accessibility for all current and future WebContents. - BrowserAccessibilityState::GetInstance()->EnableAccessibility(); - - AccessibilityNotificationWaiter main_frame_accessibility_waiter( - shell(), AccessibilityModeComplete, - ui::AX_EVENT_LOAD_COMPLETE); - - host_resolver()->AddRule("*", "127.0.0.1"); - ASSERT_TRUE(test_server()->Start()); - GURL main_url(test_server()->GetURL("files/site_per_process_main.html")); - NavigateToURL(shell(), main_url); - - // It is safe to obtain the root frame tree node here, as it doesn't change. - FrameTreeNode* root = - static_cast<WebContentsImpl*>(shell()->web_contents())-> - GetFrameTree()->root(); - - // Load same-site page into iframe. - FrameTreeNode* child = root->child_at(0); - GURL http_url(test_server()->GetURL("files/title1.html")); - NavigateFrameToURL(child, http_url); - - // These must stay in scope with replace_host. - GURL::Replacements replace_host; - std::string foo_com("foo.com"); - - // Load cross-site page into iframe. - GURL cross_site_url(test_server()->GetURL("files/title2.html")); - replace_host.SetHostStr(foo_com); - cross_site_url = cross_site_url.ReplaceComponents(replace_host); - NavigateFrameToURL(root->child_at(0), cross_site_url); - - // Ensure that we have created a new process for the subframe. - ASSERT_EQ(1U, root->child_count()); - SiteInstance* site_instance = child->current_frame_host()->GetSiteInstance(); - EXPECT_NE(shell()->web_contents()->GetSiteInstance(), site_instance); - - // Wait until the accessibility tree from both the main frame and - // cross-process iframe load. - RenderFrameHostImpl* child_frame = static_cast<RenderFrameHostImpl*>( - child->current_frame_host()); - AccessibilityNotificationWaiter child_frame_accessibility_waiter( - child_frame, ui::AX_EVENT_NONE); - main_frame_accessibility_waiter.WaitForNotification(); - child_frame_accessibility_waiter.WaitForNotification(); - - RenderFrameHostImpl* main_frame = static_cast<RenderFrameHostImpl*>( - shell()->web_contents()->GetMainFrame()); - BrowserAccessibilityManager* main_frame_manager = - main_frame->browser_accessibility_manager(); - VLOG(1) << "Main frame accessibility tree:\n" - << main_frame_manager->SnapshotAXTreeForTesting().ToString(); - - BrowserAccessibilityManager* child_frame_manager = - child_frame->browser_accessibility_manager(); - VLOG(1) << "Child frame accessibility tree:\n" - << child_frame_manager->SnapshotAXTreeForTesting().ToString(); - - // Assert that we can walk from the main frame down into the child frame - // directly, getting correct roles and data along the way. - BrowserAccessibility* ax_root = main_frame_manager->GetRoot(); - ASSERT_EQ(ui::AX_ROLE_ROOT_WEB_AREA, ax_root->GetRole()); - ASSERT_EQ(1U, ax_root->PlatformChildCount()); - - BrowserAccessibility* ax_group = ax_root->PlatformGetChild(0); - ASSERT_EQ(ui::AX_ROLE_GROUP, ax_group->GetRole()); - ASSERT_EQ(1U, ax_group->PlatformChildCount()); - - BrowserAccessibility* ax_iframe = ax_group->PlatformGetChild(0); - ASSERT_EQ(ui::AX_ROLE_IFRAME, ax_iframe->GetRole()); - ASSERT_EQ(1U, ax_iframe->PlatformChildCount()); - - BrowserAccessibility* ax_scroll_area = ax_iframe->PlatformGetChild(0); - ASSERT_EQ(ui::AX_ROLE_SCROLL_AREA, ax_scroll_area->GetRole()); - ASSERT_EQ(1U, ax_scroll_area->PlatformChildCount()); - - BrowserAccessibility* ax_child_frame_root = - ax_scroll_area->PlatformGetChild(0); - ASSERT_EQ(ui::AX_ROLE_ROOT_WEB_AREA, ax_child_frame_root->GetRole()); - ASSERT_EQ(1U, ax_child_frame_root->PlatformChildCount()); - ASSERT_EQ("Title Of Awesomeness", ax_child_frame_root->name()); - - BrowserAccessibility* ax_child_frame_group = - ax_child_frame_root->PlatformGetChild(0); - ASSERT_EQ(ui::AX_ROLE_GROUP, ax_child_frame_group->GetRole()); - ASSERT_EQ(1U, ax_child_frame_group->PlatformChildCount()); - - BrowserAccessibility* ax_child_frame_static_text = - ax_child_frame_group->PlatformGetChild(0); - ASSERT_EQ(ui::AX_ROLE_STATIC_TEXT, ax_child_frame_static_text->GetRole()); - ASSERT_EQ(0U, ax_child_frame_static_text->PlatformChildCount()); - - // Last, check that the parent of the child frame root is correct. - ASSERT_EQ(ax_child_frame_root->GetParent(), ax_scroll_area); -} - -} // namespace content diff --git a/content/browser/frame_host/frame_tree.cc b/content/browser/frame_host/frame_tree.cc index 3415e46..de6c69b 100644 --- a/content/browser/frame_host/frame_tree.cc +++ b/content/browser/frame_host/frame_tree.cc @@ -14,7 +14,6 @@ #include "content/browser/frame_host/navigator.h" #include "content/browser/frame_host/render_frame_host_factory.h" #include "content/browser/frame_host/render_frame_host_impl.h" -#include "content/browser/frame_host/render_frame_proxy_host.h" #include "content/browser/renderer_host/render_view_host_factory.h" #include "content/browser/renderer_host/render_view_host_impl.h" #include "content/public/browser/browser_thread.h" @@ -43,6 +42,20 @@ bool FrameTreeNodeForId(int64 frame_tree_node_id, return true; } +bool FrameTreeNodeForRoutingId(int routing_id, + int process_id, + FrameTreeNode** out_node, + FrameTreeNode* node) { + // TODO(creis): Look through the swapped out RFHs as well. + if (node->current_frame_host()->GetProcess()->GetID() == process_id && + node->current_frame_host()->GetRoutingID() == routing_id) { + *out_node = node; + // Terminate iteration once the node has been found. + return false; + } + return true; +} + // Iterate over the FrameTree to reset any node affected by the loss of the // given RenderViewHost's process. bool ResetNodesForNewProcess(RenderViewHost* render_view_host, @@ -107,23 +120,10 @@ FrameTreeNode* FrameTree::FindByID(int64 frame_tree_node_id) { } FrameTreeNode* FrameTree::FindByRoutingID(int routing_id, int process_id) { - RenderFrameHostImpl* render_frame_host = - RenderFrameHostImpl::FromID(process_id, routing_id); - if (render_frame_host) { - FrameTreeNode* result = render_frame_host->frame_tree_node(); - if (this == result->frame_tree()) - return result; - } - - RenderFrameProxyHost* render_frame_proxy_host = - RenderFrameProxyHost::FromID(process_id, routing_id); - if (render_frame_proxy_host) { - FrameTreeNode* result = render_frame_proxy_host->frame_tree_node(); - if (this == result->frame_tree()) - return result; - } - - return NULL; + FrameTreeNode* node = NULL; + ForEach( + base::Bind(&FrameTreeNodeForRoutingId, routing_id, process_id, &node)); + return node; } void FrameTree::ForEach( diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc index e4b677a..d21b843 100644 --- a/content/browser/frame_host/render_frame_host_impl.cc +++ b/content/browser/frame_host/render_frame_host_impl.cc @@ -24,7 +24,6 @@ #include "content/browser/frame_host/navigator.h" #include "content/browser/frame_host/render_frame_host_delegate.h" #include "content/browser/frame_host/render_frame_proxy_host.h" -#include "content/browser/frame_host/render_widget_host_view_child_frame.h" #include "content/browser/renderer_host/input/input_router.h" #include "content/browser/renderer_host/input/timeout_monitor.h" #include "content/browser/renderer_host/render_process_host_impl.h" @@ -474,38 +473,6 @@ gfx::NativeViewAccessible return NULL; } -BrowserAccessibilityManager* RenderFrameHostImpl::AccessibilityGetChildFrame( - int64 frame_tree_node_id) { - FrameTreeNode* child_node = FrameTree::GloballyFindByID(frame_tree_node_id); - if (!child_node) - return NULL; - - // We should have gotten a node in the same frame tree. - CHECK(child_node->frame_tree() == frame_tree_node()->frame_tree()); - - RenderFrameHostImpl* child_rfhi = child_node->current_frame_host(); - - // Return NULL if this isn't an out-of-process iframe. Same-process iframes - // are already part of the accessibility tree. - if (child_rfhi->GetProcess()->GetID() == GetProcess()->GetID()) - return NULL; - - return child_rfhi->GetOrCreateBrowserAccessibilityManager(); -} - -BrowserAccessibilityManager* -RenderFrameHostImpl::AccessibilityGetParentFrame() { - FrameTreeNode* parent_node = frame_tree_node()->parent(); - if (!parent_node) - return NULL; - - RenderFrameHostImpl* parent_frame = parent_node->current_frame_host(); - if (!parent_frame) - return NULL; - - return parent_frame->GetOrCreateBrowserAccessibilityManager(); -} - bool RenderFrameHostImpl::CreateRenderFrame(int parent_routing_id) { TRACE_EVENT0("navigation", "RenderFrameHostImpl::CreateRenderFrame"); DCHECK(!IsRenderFrameLive()) << "Creating frame twice"; @@ -1033,33 +1000,6 @@ void RenderFrameHostImpl::OnAccessibilityEvents( browser_accessibility_manager_->OnAccessibilityEvents(params); } - if (browser_accessibility_manager_) { - // Get the frame routing ids from out-of-process iframes and use them - // to notify our BrowserAccessibilityManager of the frame tree node id of - // any of its child frames. - for (unsigned int i = 0; i < params.size(); ++i) { - const AccessibilityHostMsg_EventParams& param = params[i]; - std::map<int32, int>::const_iterator iter; - for (iter = param.node_to_frame_routing_id_map.begin(); - iter != param.node_to_frame_routing_id_map.end(); - ++iter) { - // This is the id of the accessibility node that has a child frame. - int32 node_id = iter->first; - // The routing id from either a RenderFrame or a RenderFrameProxy. - int frame_routing_id = iter->second; - - FrameTree* frame_tree = frame_tree_node()->frame_tree(); - FrameTreeNode* child_frame_tree_node = frame_tree->FindByRoutingID( - GetProcess()->GetID(), frame_routing_id); - if (child_frame_tree_node) { - browser_accessibility_manager_->SetChildFrameTreeNodeId( - node_id, child_frame_tree_node->frame_tree_node_id()); - } - } - } - } - - // Send the updates to the automation extension API. std::vector<AXEventNotificationDetails> details; details.reserve(params.size()); for (size_t i = 0; i < params.size(); ++i) { @@ -1088,16 +1028,8 @@ void RenderFrameHostImpl::OnAccessibilityEvents( const AccessibilityHostMsg_EventParams& param = params[i]; if (static_cast<int>(param.event_type) < 0) continue; - if (!ax_tree_for_testing_) { - if (browser_accessibility_manager_) { - ax_tree_for_testing_.reset(new ui::AXTree( - browser_accessibility_manager_->SnapshotAXTreeForTesting())); - } else { - ax_tree_for_testing_.reset(new ui::AXTree()); - CHECK(ax_tree_for_testing_->Unserialize(param.update)) - << ax_tree_for_testing_->error(); - } + ax_tree_for_testing_.reset(new ui::AXTree(param.update)); } else { CHECK(ax_tree_for_testing_->Unserialize(param.update)) << ax_tree_for_testing_->error(); diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h index cc97543..702fa64 100644 --- a/content/browser/frame_host/render_frame_host_impl.h +++ b/content/browser/frame_host/render_frame_host_impl.h @@ -110,9 +110,6 @@ class CONTENT_EXPORT RenderFrameHostImpl virtual gfx::AcceleratedWidget AccessibilityGetAcceleratedWidget() OVERRIDE; virtual gfx::NativeViewAccessible AccessibilityGetNativeViewAccessible() OVERRIDE; - virtual BrowserAccessibilityManager* AccessibilityGetChildFrame( - int64 frame_tree_node_id) OVERRIDE; - virtual BrowserAccessibilityManager* AccessibilityGetParentFrame() OVERRIDE; bool CreateRenderFrame(int parent_routing_id); bool IsRenderFrameLive(); diff --git a/content/browser/frame_host/render_frame_proxy_host.cc b/content/browser/frame_host/render_frame_proxy_host.cc index 35ed286..acbd80e 100644 --- a/content/browser/frame_host/render_frame_proxy_host.cc +++ b/content/browser/frame_host/render_frame_proxy_host.cc @@ -4,7 +4,6 @@ #include "content/browser/frame_host/render_frame_proxy_host.h" -#include "base/lazy_instance.h" #include "content/browser/frame_host/cross_process_frame_connector.h" #include "content/browser/frame_host/frame_tree.h" #include "content/browser/frame_host/frame_tree_node.h" @@ -14,42 +13,16 @@ #include "content/browser/renderer_host/render_widget_host_view_base.h" #include "content/browser/site_instance_impl.h" #include "content/common/frame_messages.h" -#include "content/public/browser/browser_thread.h" #include "ipc/ipc_message.h" namespace content { -namespace { - -// The (process id, routing id) pair that identifies one RenderFrameProxy. -typedef std::pair<int32, int32> RenderFrameProxyHostID; -typedef base::hash_map<RenderFrameProxyHostID, RenderFrameProxyHost*> - RoutingIDFrameProxyMap; -base::LazyInstance<RoutingIDFrameProxyMap> g_routing_id_frame_proxy_map = - LAZY_INSTANCE_INITIALIZER; - -} - -// static -RenderFrameProxyHost* RenderFrameProxyHost::FromID(int process_id, - int routing_id) { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - RoutingIDFrameProxyMap* frames = g_routing_id_frame_proxy_map.Pointer(); - RoutingIDFrameProxyMap::iterator it = frames->find( - RenderFrameProxyHostID(process_id, routing_id)); - return it == frames->end() ? NULL : it->second; -} - RenderFrameProxyHost::RenderFrameProxyHost(SiteInstance* site_instance, FrameTreeNode* frame_tree_node) : routing_id_(site_instance->GetProcess()->GetNextRoutingID()), site_instance_(site_instance), frame_tree_node_(frame_tree_node) { GetProcess()->AddRoute(routing_id_, this); - CHECK(g_routing_id_frame_proxy_map.Get().insert( - std::make_pair( - RenderFrameProxyHostID(GetProcess()->GetID(), routing_id_), - this)).second); if (!frame_tree_node_->IsMainFrame() && frame_tree_node_->parent() @@ -72,8 +45,6 @@ RenderFrameProxyHost::~RenderFrameProxyHost() { Send(new FrameMsg_DeleteProxy(routing_id_)); GetProcess()->RemoveRoute(routing_id_); - g_routing_id_frame_proxy_map.Get().erase( - RenderFrameProxyHostID(GetProcess()->GetID(), routing_id_)); } void RenderFrameProxyHost::SetChildRWHView(RenderWidgetHostView* view) { @@ -143,4 +114,5 @@ void RenderFrameProxyHost::DisownOpener() { Send(new FrameMsg_DisownOpener(GetRoutingID())); } + } // namespace content diff --git a/content/browser/frame_host/render_frame_proxy_host.h b/content/browser/frame_host/render_frame_proxy_host.h index 2a34fc2..bba289a 100644 --- a/content/browser/frame_host/render_frame_proxy_host.h +++ b/content/browser/frame_host/render_frame_proxy_host.h @@ -55,8 +55,6 @@ class RenderFrameProxyHost : public IPC::Listener, public IPC::Sender { public: - static RenderFrameProxyHost* FromID(int process_id, int routing_id); - RenderFrameProxyHost(SiteInstance* site_instance, FrameTreeNode* frame_tree_node); virtual ~RenderFrameProxyHost(); @@ -77,8 +75,6 @@ class RenderFrameProxyHost return site_instance_.get(); } - FrameTreeNode* frame_tree_node() const { return frame_tree_node_; }; - void SetChildRWHView(RenderWidgetHostView* view); // TODO(nasko): The following methods should be removed once we don't have a diff --git a/content/browser/frame_host/render_widget_host_view_child_frame.cc b/content/browser/frame_host/render_widget_host_view_child_frame.cc index d92f66a..3c987f2 100644 --- a/content/browser/frame_host/render_widget_host_view_child_frame.cc +++ b/content/browser/frame_host/render_widget_host_view_child_frame.cc @@ -4,7 +4,6 @@ #include "content/browser/frame_host/render_widget_host_view_child_frame.h" -#include "content/browser/accessibility/browser_accessibility_manager.h" #include "content/browser/frame_host/cross_process_frame_connector.h" #include "content/browser/renderer_host/render_widget_host_impl.h" #include "content/common/gpu/gpu_messages.h" @@ -342,8 +341,9 @@ SkColorType RenderWidgetHostViewChildFrame::PreferredReadbackFormat() { BrowserAccessibilityManager* RenderWidgetHostViewChildFrame::CreateBrowserAccessibilityManager( BrowserAccessibilityDelegate* delegate) { - return BrowserAccessibilityManager::Create( - BrowserAccessibilityManager::GetEmptyDocument(), delegate); + // This eventually needs to be implemented for cross-process iframes. + // http://crbug.com/368298 + return NULL; } } // namespace content diff --git a/content/browser/site_per_process_browsertest.cc b/content/browser/site_per_process_browsertest.cc index 6e25b6a..88d0404 100644 --- a/content/browser/site_per_process_browsertest.cc +++ b/content/browser/site_per_process_browsertest.cc @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "content/browser/site_per_process_browsertest.h" - #include "base/command_line.h" #include "base/strings/stringprintf.h" #include "content/browser/frame_host/cross_process_frame_connector.h" @@ -18,11 +16,13 @@ #include "content/public/browser/web_contents_observer.h" #include "content/public/common/content_switches.h" #include "content/public/test/browser_test_utils.h" +#include "content/public/test/content_browser_test.h" #include "content/public/test/content_browser_test_utils.h" #include "content/public/test/test_utils.h" #include "content/shell/browser/shell.h" #include "content/test/content_browser_test_utils_internal.h" #include "net/dns/mock_host_resolver.h" +#include "url/gurl.h" namespace content { @@ -149,44 +149,46 @@ void RedirectNotificationObserver::Observe( running_ = false; } -// -// SitePerProcessBrowserTest -// - -SitePerProcessBrowserTest::SitePerProcessBrowserTest() { -}; - -void SitePerProcessBrowserTest::StartFrameAtDataURL() { - std::string data_url_script = +class SitePerProcessBrowserTest : public ContentBrowserTest { + public: + SitePerProcessBrowserTest() {} + + protected: + // Start at a data URL so each extra navigation creates a navigation entry. + // (The first navigation will silently be classified as AUTO_SUBFRAME.) + // TODO(creis): This won't be necessary when we can wait for LOAD_STOP. + void StartFrameAtDataURL() { + std::string data_url_script = "var iframes = document.getElementById('test');iframes.src=" "'data:text/html,dataurl';"; - ASSERT_TRUE(ExecuteScript(shell()->web_contents(), data_url_script)); -} + ASSERT_TRUE(ExecuteScript(shell()->web_contents(), data_url_script)); + } -bool SitePerProcessBrowserTest::NavigateIframeToURL(Shell* window, - const GURL& url, - std::string iframe_id) { - // TODO(creis): This should wait for LOAD_STOP, but cross-site subframe - // navigations generate extra DidStartLoading and DidStopLoading messages. - // Until we replace swappedout:// with frame proxies, we need to listen for - // something else. For now, we trigger NEW_SUBFRAME navigations and listen - // for commit. - std::string script = base::StringPrintf( - "setTimeout(\"" - "var iframes = document.getElementById('%s');iframes.src='%s';" - "\",0)", - iframe_id.c_str(), url.spec().c_str()); - WindowedNotificationObserver load_observer( - NOTIFICATION_NAV_ENTRY_COMMITTED, - Source<NavigationController>( - &window->web_contents()->GetController())); - bool result = ExecuteScript(window->web_contents(), script); - load_observer.Wait(); - return result; -} + bool NavigateIframeToURL(Shell* window, + const GURL& url, + std::string iframe_id) { + // TODO(creis): This should wait for LOAD_STOP, but cross-site subframe + // navigations generate extra DidStartLoading and DidStopLoading messages. + // Until we replace swappedout:// with frame proxies, we need to listen for + // something else. For now, we trigger NEW_SUBFRAME navigations and listen + // for commit. + std::string script = base::StringPrintf( + "setTimeout(\"" + "var iframes = document.getElementById('%s');iframes.src='%s';" + "\",0)", + iframe_id.c_str(), url.spec().c_str()); + WindowedNotificationObserver load_observer( + NOTIFICATION_NAV_ENTRY_COMMITTED, + Source<NavigationController>( + &window->web_contents()->GetController())); + bool result = ExecuteScript(window->web_contents(), script); + load_observer.Wait(); + return result; + } -void SitePerProcessBrowserTest::SetUpCommandLine(CommandLine* command_line) { - command_line->AppendSwitch(switches::kSitePerProcess); + virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { + command_line->AppendSwitch(switches::kSitePerProcess); + } }; // Ensure that we can complete a cross-process subframe navigation. diff --git a/content/browser/site_per_process_browsertest.h b/content/browser/site_per_process_browsertest.h deleted file mode 100644 index a596019..0000000 --- a/content/browser/site_per_process_browsertest.h +++ /dev/null @@ -1,29 +0,0 @@ -// 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 "content/public/test/content_browser_test.h" -#include "url/gurl.h" - -namespace content { - -class Shell; - -class SitePerProcessBrowserTest : public ContentBrowserTest { - public: - SitePerProcessBrowserTest(); - - protected: - // Start at a data URL so each extra navigation creates a navigation entry. - // (The first navigation will silently be classified as AUTO_SUBFRAME.) - // TODO(creis): This won't be necessary when we can wait for LOAD_STOP. - void StartFrameAtDataURL(); - - bool NavigateIframeToURL(Shell* window, - const GURL& url, - std::string iframe_id); - - virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE; -}; - -} // namespace content diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h index 4a86a48..922829c 100644 --- a/content/browser/web_contents/web_contents_impl.h +++ b/content/browser/web_contents/web_contents_impl.h @@ -687,8 +687,6 @@ class CONTENT_EXPORT WebContentsImpl FRIEND_TEST_ALL_PREFIXES(NavigationControllerTest, HistoryNavigate); FRIEND_TEST_ALL_PREFIXES(RenderFrameHostManagerTest, PageDoesBackAndReload); FRIEND_TEST_ALL_PREFIXES(SitePerProcessBrowserTest, CrossSiteIframe); - FRIEND_TEST_ALL_PREFIXES(SitePerProcessAccessibilityBrowserTest, - CrossSiteIframeAccessibility); // So InterstitialPageImpl can access SetIsLoading. friend class InterstitialPageImpl; diff --git a/content/common/accessibility_messages.h b/content/common/accessibility_messages.h index 2be0c77..adb5284 100644 --- a/content/common/accessibility_messages.h +++ b/content/common/accessibility_messages.h @@ -51,17 +51,10 @@ IPC_STRUCT_TRAITS_BEGIN(ui::AXTreeUpdate) IPC_STRUCT_TRAITS_MEMBER(nodes) IPC_STRUCT_TRAITS_END() -typedef std::map<int32, int> FrameIDMap; - IPC_STRUCT_BEGIN(AccessibilityHostMsg_EventParams) // The tree update. IPC_STRUCT_MEMBER(ui::AXTreeUpdate, update) - // Mapping from node id to routing id of its child frame - either the - // routing id of a RenderFrame or a RenderFrameProxy for an out-of-process - // iframe. - IPC_STRUCT_MEMBER(FrameIDMap, node_to_frame_routing_id_map) - // Type of event. IPC_STRUCT_MEMBER(ui::AXEvent, event_type) diff --git a/content/content_tests.gypi b/content/content_tests.gypi index 6c20827..b13ee86 100644 --- a/content/content_tests.gypi +++ b/content/content_tests.gypi @@ -1129,7 +1129,6 @@ 'browser/accessibility/android_hit_testing_browsertest.cc', 'browser/accessibility/cross_platform_accessibility_browsertest.cc', 'browser/accessibility/dump_accessibility_tree_browsertest.cc', - 'browser/accessibility/site_per_process_accessibility_browsertest.cc', 'browser/battery_status/battery_status_browsertest.cc', 'browser/compositor/image_transport_factory_browsertest.cc', 'browser/bookmarklet_browsertest.cc', @@ -1173,7 +1172,6 @@ 'browser/service_worker/service_worker_browsertest.cc', 'browser/session_history_browsertest.cc', 'browser/shared_worker/worker_browsertest.cc', - 'browser/site_per_process_browsertest.h', 'browser/site_per_process_browsertest.cc', 'browser/speech/speech_recognition_browsertest.cc', 'browser/tracing/tracing_controller_browsertest.cc', diff --git a/content/renderer/accessibility/blink_ax_tree_source.cc b/content/renderer/accessibility/blink_ax_tree_source.cc index 068f03a..a60b4df 100644 --- a/content/renderer/accessibility/blink_ax_tree_source.cc +++ b/content/renderer/accessibility/blink_ax_tree_source.cc @@ -11,7 +11,6 @@ #include "base/strings/utf_string_conversions.h" #include "content/renderer/accessibility/blink_ax_enum_conversion.h" #include "content/renderer/render_frame_impl.h" -#include "content/renderer/render_frame_proxy.h" #include "content/renderer/render_view_impl.h" #include "third_party/WebKit/public/platform/WebRect.h" #include "third_party/WebKit/public/platform/WebSize.h" @@ -23,8 +22,6 @@ #include "third_party/WebKit/public/web/WebDocumentType.h" #include "third_party/WebKit/public/web/WebElement.h" #include "third_party/WebKit/public/web/WebFormControlElement.h" -#include "third_party/WebKit/public/web/WebFrame.h" -#include "third_party/WebKit/public/web/WebLocalFrame.h" #include "third_party/WebKit/public/web/WebInputElement.h" #include "third_party/WebKit/public/web/WebNode.h" #include "third_party/WebKit/public/web/WebView.h" @@ -35,7 +32,7 @@ using blink::WebAXObject; using blink::WebDocument; using blink::WebDocumentType; using blink::WebElement; -using blink::WebLocalFrame; +using blink::WebFrame; using blink::WebNode; using blink::WebVector; using blink::WebView; @@ -113,11 +110,6 @@ bool BlinkAXTreeSource::IsInTree(blink::WebAXObject node) const { return false; } -void BlinkAXTreeSource::CollectChildFrameIdMapping( - std::map<int32, int>* node_to_frame_routing_id_map) { - node_to_frame_routing_id_map_ = node_to_frame_routing_id_map; -} - blink::WebAXObject BlinkAXTreeSource::GetRoot() const { return GetMainDocument().accessibilityObject(); } @@ -456,22 +448,6 @@ void BlinkAXTreeSource::SerializeNode(blink::WebAXObject src, const gfx::Size& max_offset = document.maximumScrollOffset(); dst->AddIntAttribute(ui::AX_ATTR_SCROLL_X_MAX, max_offset.width()); dst->AddIntAttribute(ui::AX_ATTR_SCROLL_Y_MAX, max_offset.height()); - - if (node_to_frame_routing_id_map_ && !src.equals(GetRoot())) { - WebLocalFrame* frame = document.frame(); - RenderFrameImpl* render_frame = RenderFrameImpl::FromWebFrame(frame); - if (render_frame) { - node_to_frame_routing_id_map_->insert(std::pair<int32, int>( - dst->id, render_frame->GetRoutingID())); - } else { - RenderFrameProxy* render_frame_proxy = - RenderFrameProxy::FromWebFrame(frame); - if (render_frame_proxy) { - node_to_frame_routing_id_map_->insert(std::pair<int32, int>( - dst->id, render_frame_proxy->routing_id())); - } - } - } } if (dst->role == ui::AX_ROLE_TABLE) { @@ -574,8 +550,11 @@ void BlinkAXTreeSource::SerializeNode(blink::WebAXObject src, } blink::WebDocument BlinkAXTreeSource::GetMainDocument() const { - if (render_frame_ && render_frame_->GetWebFrame()) - return render_frame_->GetWebFrame()->document(); + WebView* view = render_frame_->render_view()->GetWebView(); + WebFrame* main_frame = view ? view->mainFrame() : NULL; + + if (main_frame) + return main_frame->document(); return WebDocument(); } diff --git a/content/renderer/accessibility/blink_ax_tree_source.h b/content/renderer/accessibility/blink_ax_tree_source.h index c58ee81..007df07 100644 --- a/content/renderer/accessibility/blink_ax_tree_source.h +++ b/content/renderer/accessibility/blink_ax_tree_source.h @@ -19,12 +19,6 @@ class BlinkAXTreeSource BlinkAXTreeSource(RenderFrameImpl* render_frame); virtual ~BlinkAXTreeSource(); - // Call this to have BlinkAXTreeSource collect a mapping from - // node ids to the frame routing id for an out-of-process iframe during - // calls to SerializeNode. - void CollectChildFrameIdMapping( - std::map<int32, int>* node_to_frame_routing_id_map); - // Walks up the ancestor chain to see if this is a descendant of the root. bool IsInTree(blink::WebAXObject node) const; @@ -48,8 +42,6 @@ class BlinkAXTreeSource private: RenderFrameImpl* render_frame_; - std::map<int32, int>* node_to_frame_routing_id_map_; - }; } // namespace content diff --git a/content/renderer/accessibility/renderer_accessibility.cc b/content/renderer/accessibility/renderer_accessibility.cc index e3522b6..1bf4022 100644 --- a/content/renderer/accessibility/renderer_accessibility.cc +++ b/content/renderer/accessibility/renderer_accessibility.cc @@ -26,8 +26,12 @@ RendererAccessibility::~RendererAccessibility() { } WebDocument RendererAccessibility::GetMainDocument() { - if (render_frame_ && render_frame_->GetWebFrame()) - return render_frame_->GetWebFrame()->document(); + WebView* view = render_frame_->render_view()->GetWebView(); + WebFrame* main_frame = view ? view->mainFrame() : NULL; + + if (main_frame) + return main_frame->document(); + return WebDocument(); } diff --git a/content/renderer/accessibility/renderer_accessibility_complete.cc b/content/renderer/accessibility/renderer_accessibility_complete.cc index 4a5bdda..ae01a3d 100644 --- a/content/renderer/accessibility/renderer_accessibility_complete.cc +++ b/content/renderer/accessibility/renderer_accessibility_complete.cc @@ -207,8 +207,6 @@ void RendererAccessibilityComplete::SendPendingAccessibilityEvents() { } AccessibilityHostMsg_EventParams event_msg; - tree_source_.CollectChildFrameIdMapping( - &event_msg.node_to_frame_routing_id_map); event_msg.event_type = event.event_type; event_msg.id = event.id; serializer_.SerializeChanges(obj, &event_msg.update); diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index bb7025e..68748c6 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc @@ -3190,11 +3190,6 @@ blink::WebScreenOrientationClient* return screen_orientation_dispatcher_; } -void RenderFrameImpl::postAccessibilityEvent(const blink::WebAXObject& obj, - blink::WebAXEvent event) { - HandleWebAccessibilityEvent(obj, event); -} - void RenderFrameImpl::DidPlay(blink::WebMediaPlayer* player) { Send(new FrameHostMsg_MediaPlayingNotification( routing_id_, reinterpret_cast<int64>(player), player->hasVideo(), diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h index 53e379f..d8cdfc38 100644 --- a/content/renderer/render_frame_impl.h +++ b/content/renderer/render_frame_impl.h @@ -437,8 +437,6 @@ class CONTENT_EXPORT RenderFrameImpl virtual void initializeChildFrame(const blink::WebRect& frame_rect, float scale_factor); virtual blink::WebScreenOrientationClient* webScreenOrientationClient(); - virtual void postAccessibilityEvent(const blink::WebAXObject& obj, - blink::WebAXEvent event); // WebMediaPlayerDelegate implementation: virtual void DidPlay(blink::WebMediaPlayer* player) OVERRIDE; diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc index f0865b0..6f874fd 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc @@ -1997,6 +1997,11 @@ int RenderViewImpl::historyForwardListCount() { return history_list_length_ - historyBackListCount() - 1; } +void RenderViewImpl::postAccessibilityEvent( + const WebAXObject& obj, blink::WebAXEvent event) { + main_render_frame()->HandleWebAccessibilityEvent(obj, event); +} + // blink::WebWidgetClient ---------------------------------------------------- void RenderViewImpl::didFocus() { diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h index 6727118..3593c93 100644 --- a/content/renderer/render_view_impl.h +++ b/content/renderer/render_view_impl.h @@ -417,6 +417,8 @@ class CONTENT_EXPORT RenderViewImpl virtual void navigateBackForwardSoon(int offset); virtual int historyBackListCount(); virtual int historyForwardListCount(); + virtual void postAccessibilityEvent( + const blink::WebAXObject& obj, blink::WebAXEvent event); virtual blink::WebSpeechRecognizer* speechRecognizer(); virtual void zoomLimitsChanged(double minimum_level, double maximum_level); virtual void zoomLevelChanged(); diff --git a/content/test/accessibility_browser_test_utils.cc b/content/test/accessibility_browser_test_utils.cc index ef43896..ae514ae 100644 --- a/content/test/accessibility_browser_test_utils.cc +++ b/content/test/accessibility_browser_test_utils.cc @@ -21,11 +21,12 @@ namespace content { AccessibilityNotificationWaiter::AccessibilityNotificationWaiter(Shell* shell) - : event_to_wait_for_(ui::AX_EVENT_NONE), + : shell_(shell), + event_to_wait_for_(ui::AX_EVENT_NONE), loop_runner_(new MessageLoopRunner()), weak_factory_(this), event_target_id_(0) { - WebContents* web_contents = shell->web_contents(); + WebContents* web_contents = shell_->web_contents(); frame_host_ = static_cast<RenderFrameHostImpl*>( web_contents->GetMainFrame()); frame_host_->SetAccessibilityCallbackForTesting( @@ -37,12 +38,13 @@ AccessibilityNotificationWaiter::AccessibilityNotificationWaiter( Shell* shell, AccessibilityMode accessibility_mode, ui::AXEvent event_type) - : event_to_wait_for_(event_type), + : shell_(shell), + event_to_wait_for_(event_type), loop_runner_(new MessageLoopRunner()), weak_factory_(this), event_target_id_(0) { WebContentsImpl* web_contents = static_cast<WebContentsImpl*>( - shell->web_contents()); + shell_->web_contents()); frame_host_ = static_cast<RenderFrameHostImpl*>( web_contents->GetMainFrame()); frame_host_->SetAccessibilityCallbackForTesting( @@ -51,19 +53,6 @@ AccessibilityNotificationWaiter::AccessibilityNotificationWaiter( web_contents->AddAccessibilityMode(accessibility_mode); } -AccessibilityNotificationWaiter::AccessibilityNotificationWaiter( - RenderFrameHostImpl* frame_host, - ui::AXEvent event_type) - : frame_host_(frame_host), - event_to_wait_for_(event_type), - loop_runner_(new MessageLoopRunner()), - weak_factory_(this), - event_target_id_(0) { - frame_host_->SetAccessibilityCallbackForTesting( - base::Bind(&AccessibilityNotificationWaiter::OnAccessibilityEvent, - weak_factory_.GetWeakPtr())); -} - AccessibilityNotificationWaiter::~AccessibilityNotificationWaiter() { } diff --git a/content/test/accessibility_browser_test_utils.h b/content/test/accessibility_browser_test_utils.h index 6f3e69c..f1a88a4 100644 --- a/content/test/accessibility_browser_test_utils.h +++ b/content/test/accessibility_browser_test_utils.h @@ -28,9 +28,6 @@ class AccessibilityNotificationWaiter { Shell* shell, AccessibilityMode accessibility_mode, ui::AXEvent event); - AccessibilityNotificationWaiter( - RenderFrameHostImpl* frame_host, - ui::AXEvent event); ~AccessibilityNotificationWaiter(); // Blocks until the specific accessibility notification registered in @@ -54,6 +51,7 @@ class AccessibilityNotificationWaiter { // GetAXTree() is about the page with the url "about:blank". bool IsAboutBlank(); + Shell* shell_; RenderFrameHostImpl* frame_host_; ui::AXEvent event_to_wait_for_; scoped_refptr<MessageLoopRunner> loop_runner_; |