summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormkwst@chromium.org <mkwst@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-07-18 07:42:26 +0000
committermkwst@chromium.org <mkwst@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-07-18 07:42:26 +0000
commitd460a7bc14844dc4a353b1a22d4f7ccd57708f4f (patch)
treea832b5741912099c89278a898120b3e4987b7dfb
parentdb88c3221771a6cfaa090c65b76b645931f067bc (diff)
downloadchromium_src-d460a7bc14844dc4a353b1a22d4f7ccd57708f4f.zip
chromium_src-d460a7bc14844dc4a353b1a22d4f7ccd57708f4f.tar.gz
chromium_src-d460a7bc14844dc4a353b1a22d4f7ccd57708f4f.tar.bz2
Revert of Migrate accessibility from RenderView to RenderFrame. (https://codereview.chromium.org/273423004/)
Reason for revert: Speculative revert to fix XP bots. XP bots started crashing http://build.chromium.org/p/chromium.win/builders/XP%20Tests%20%281%29/builds/32011 and http://build.chromium.org/p/chromium.win/builders/XP%20Tests%20%282%29/builds/34677 This CL is the most suspicious in the range. If it doesn't fix the bots, I'll unrevert it. Original issue's description: > Migrate accessibility from RenderView to RenderFrame and RVH to RFH. > > In preparation for out-of-process iframes, move almost all accessibility > functionality from RenderView to RenderFrame, and from RVHI and RWHI > to RFHI. > > In addition, the accessibility mode is moved to WebContents, and changing > the mode triggers changing it on all frames. > > BUG=368298 > R=jam@chromium.org, kenrb@chromium.org, nick@chromium.org > > Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=283994 TBR=dmazzoni@chromium.org NOTRY=true Review URL: https://codereview.chromium.org/407493002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@284032 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/chrome_browser_application_mac.mm5
-rw-r--r--chrome/browser/extensions/api/automation/automation_apitest.cc15
-rw-r--r--chrome/browser/extensions/api/automation_internal/automation_internal_api.cc66
-rw-r--r--content/browser/accessibility/#browser_accessibility_manager.cc#401
-rw-r--r--content/browser/accessibility/accessibility_mode_browsertest.cc48
-rw-r--r--content/browser/accessibility/accessibility_mode_helper.cc1
-rw-r--r--content/browser/accessibility/accessibility_mode_helper.h2
-rw-r--r--content/browser/accessibility/accessibility_tree_formatter.cc10
-rw-r--r--content/browser/accessibility/accessibility_tree_formatter.h4
-rw-r--r--content/browser/accessibility/accessibility_ui.cc45
-rw-r--r--content/browser/accessibility/android_hit_testing_browsertest.cc9
-rw-r--r--content/browser/accessibility/browser_accessibility_cocoa.mm10
-rw-r--r--content/browser/accessibility/browser_accessibility_manager.h9
-rw-r--r--content/browser/accessibility/browser_accessibility_manager_unittest.cc6
-rw-r--r--content/browser/accessibility/browser_accessibility_manager_win.cc6
-rw-r--r--content/browser/accessibility/browser_accessibility_state_impl.cc46
-rw-r--r--content/browser/accessibility/browser_accessibility_state_impl.h6
-rw-r--r--content/browser/accessibility/dump_accessibility_tree_browsertest.cc7
-rw-r--r--content/browser/android/content_view_core_impl.cc21
-rw-r--r--content/browser/frame_host/interstitial_page_impl.cc13
-rw-r--r--content/browser/frame_host/interstitial_page_impl.h1
-rw-r--r--content/browser/frame_host/render_frame_host_delegate.cc12
-rw-r--r--content/browser/frame_host/render_frame_host_delegate.h20
-rw-r--r--content/browser/frame_host/render_frame_host_impl.cc190
-rw-r--r--content/browser/frame_host/render_frame_host_impl.h68
-rw-r--r--content/browser/renderer_host/legacy_render_widget_host_win.cc6
-rw-r--r--content/browser/renderer_host/legacy_render_widget_host_win.h2
-rw-r--r--content/browser/renderer_host/render_view_host_delegate.h5
-rw-r--r--content/browser/renderer_host/render_view_host_impl.cc73
-rw-r--r--content/browser/renderer_host/render_view_host_impl.h37
-rw-r--r--content/browser/renderer_host/render_widget_host_delegate.cc13
-rw-r--r--content/browser/renderer_host/render_widget_host_delegate.h10
-rw-r--r--content/browser/renderer_host/render_widget_host_impl.cc125
-rw-r--r--content/browser/renderer_host/render_widget_host_impl.h66
-rw-r--r--content/browser/renderer_host/render_widget_host_view_android.cc32
-rw-r--r--content/browser/renderer_host/render_widget_host_view_android.h3
-rw-r--r--content/browser/renderer_host/render_widget_host_view_aura.cc44
-rw-r--r--content/browser/renderer_host/render_widget_host_view_aura.h3
-rw-r--r--content/browser/renderer_host/render_widget_host_view_base.cc19
-rw-r--r--content/browser/renderer_host/render_widget_host_view_base.h19
-rw-r--r--content/browser/renderer_host/render_widget_host_view_mac.h6
-rw-r--r--content/browser/renderer_host/render_widget_host_view_mac.mm64
-rw-r--r--content/browser/web_contents/web_contents_impl.cc116
-rw-r--r--content/browser/web_contents/web_contents_impl.h38
-rw-r--r--content/common/accessibility_mode_enums.h38
-rw-r--r--content/common/frame_message_enums.h2
-rw-r--r--content/common/frame_messages.h7
-rw-r--r--content/common/view_message_enums.h30
-rw-r--r--content/common/view_messages.h8
-rw-r--r--content/public/browser/render_frame_host.h9
-rw-r--r--content/public/browser/render_widget_host.h36
-rw-r--r--content/public/browser/web_contents.h12
-rw-r--r--content/public/test/render_view_test.cc3
-rw-r--r--content/renderer/accessibility/blink_ax_tree_source.cc12
-rw-r--r--content/renderer/accessibility/blink_ax_tree_source.h6
-rw-r--r--content/renderer/accessibility/renderer_accessibility.cc9
-rw-r--r--content/renderer/accessibility/renderer_accessibility.h17
-rw-r--r--content/renderer/accessibility/renderer_accessibility_browsertest.cc19
-rw-r--r--content/renderer/accessibility/renderer_accessibility_complete.cc18
-rw-r--r--content/renderer/accessibility/renderer_accessibility_complete.h7
-rw-r--r--content/renderer/accessibility/renderer_accessibility_focus_only.cc22
-rw-r--r--content/renderer/accessibility/renderer_accessibility_focus_only.h10
-rw-r--r--content/renderer/render_frame_impl.cc40
-rw-r--r--content/renderer/render_frame_impl.h30
-rw-r--r--content/renderer/render_thread_impl.cc3
-rw-r--r--content/renderer/render_view_browsertest.cc34
-rw-r--r--content/renderer/render_view_impl.cc51
-rw-r--r--content/renderer/render_view_impl.h23
-rw-r--r--content/renderer/render_view_impl_params.cc6
-rw-r--r--content/renderer/render_view_impl_params.h4
-rw-r--r--content/test/accessibility_browser_test_utils.cc22
-rw-r--r--content/test/accessibility_browser_test_utils.h6
72 files changed, 833 insertions, 1353 deletions
diff --git a/chrome/browser/chrome_browser_application_mac.mm b/chrome/browser/chrome_browser_application_mac.mm
index c48d6cc..3368c06 100644
--- a/chrome/browser/chrome_browser_application_mac.mm
+++ b/chrome/browser/chrome_browser_application_mac.mm
@@ -538,6 +538,11 @@ void SwizzleInit() {
if ([attribute isEqualToString:@"AXEnhancedUserInterface"] &&
[value intValue] == 1) {
content::BrowserAccessibilityState::GetInstance()->OnScreenReaderDetected();
+ for (TabContentsIterator it; !it.done(); it.Next()) {
+ if (content::WebContents* contents = *it)
+ if (content::RenderViewHost* rvh = contents->GetRenderViewHost())
+ rvh->EnableFullAccessibilityMode();
+ }
}
return [super accessibilitySetValue:value forAttribute:attribute];
}
diff --git a/chrome/browser/extensions/api/automation/automation_apitest.cc b/chrome/browser/extensions/api/automation/automation_apitest.cc
index c05e123..a3e48e6 100644
--- a/chrome/browser/extensions/api/automation/automation_apitest.cc
+++ b/chrome/browser/extensions/api/automation/automation_apitest.cc
@@ -75,8 +75,12 @@ IN_PROC_BROWSER_TEST_F(AutomationApiTest, TestRendererAccessibilityEnabled) {
ASSERT_EQ(1, browser()->tab_strip_model()->count());
content::WebContents* const tab =
browser()->tab_strip_model()->GetWebContentsAt(0);
- ASSERT_FALSE(tab->IsFullAccessibilityModeForTesting());
- ASSERT_FALSE(tab->IsTreeOnlyAccessibilityModeForTesting());
+ content::RenderWidgetHost* rwh =
+ tab->GetRenderWidgetHostView()->GetRenderWidgetHost();
+ ASSERT_NE((content::RenderWidgetHost*)NULL, rwh)
+ << "Couldn't get RenderWidgetHost";
+ ASSERT_FALSE(rwh->IsFullAccessibilityModeForTesting());
+ ASSERT_FALSE(rwh->IsTreeOnlyAccessibilityModeForTesting());
base::FilePath extension_path =
test_data_dir_.AppendASCII("automation/tests/basic");
@@ -84,8 +88,11 @@ IN_PROC_BROWSER_TEST_F(AutomationApiTest, TestRendererAccessibilityEnabled) {
LoadExtension(extension_path);
ASSERT_TRUE(got_tree.WaitUntilSatisfied());
- ASSERT_FALSE(tab->IsFullAccessibilityModeForTesting());
- ASSERT_TRUE(tab->IsTreeOnlyAccessibilityModeForTesting());
+ rwh = tab->GetRenderWidgetHostView()->GetRenderWidgetHost();
+ ASSERT_NE((content::RenderWidgetHost*)NULL, rwh)
+ << "Couldn't get RenderWidgetHost";
+ ASSERT_FALSE(rwh->IsFullAccessibilityModeForTesting());
+ ASSERT_TRUE(rwh->IsTreeOnlyAccessibilityModeForTesting());
}
#if defined(ADDRESS_SANITIZER)
diff --git a/chrome/browser/extensions/api/automation_internal/automation_internal_api.cc b/chrome/browser/extensions/api/automation_internal/automation_internal_api.cc
index a2b93f8..62b038e 100644
--- a/chrome/browser/extensions/api/automation_internal/automation_internal_api.cc
+++ b/chrome/browser/extensions/api/automation_internal/automation_internal_api.cc
@@ -16,8 +16,8 @@
#include "chrome/common/extensions/api/automation_internal.h"
#include "chrome/common/extensions/manifest_handlers/automation.h"
#include "content/public/browser/ax_event_notification_details.h"
-#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_process_host.h"
+#include "content/public/browser/render_view_host.h"
#include "content/public/browser/render_widget_host.h"
#include "content/public/browser/render_widget_host_view.h"
#include "content/public/browser/web_contents.h"
@@ -78,11 +78,11 @@ class AutomationWebContentsObserver
details, browser_context_);
}
- virtual void RenderFrameDeleted(
- content::RenderFrameHost* render_frame_host) OVERRIDE {
+ virtual void RenderViewDeleted(
+ content::RenderViewHost* render_view_host) OVERRIDE {
automation_util::DispatchTreeDestroyedEventToAutomation(
- render_frame_host->GetProcess()->GetID(),
- render_frame_host->GetRoutingID(),
+ render_view_host->GetProcess()->GetID(),
+ render_view_host->GetRoutingID(),
browser_context_);
}
@@ -99,35 +99,35 @@ class AutomationWebContentsObserver
DISALLOW_COPY_AND_ASSIGN(AutomationWebContentsObserver);
};
-// Helper class that implements an action adapter for a |RenderFrameHost|.
-class RenderFrameHostActionAdapter : public AutomationActionAdapter {
+// Helper class that implements an action adapter for a |RenderWidgetHost|.
+class RenderWidgetHostActionAdapter : public AutomationActionAdapter {
public:
- explicit RenderFrameHostActionAdapter(content::RenderFrameHost* rfh)
- : rfh_(rfh) {}
+ explicit RenderWidgetHostActionAdapter(content::RenderWidgetHost* rwh)
+ : rwh_(rwh) {}
- virtual ~RenderFrameHostActionAdapter() {}
+ virtual ~RenderWidgetHostActionAdapter() {}
// AutomationActionAdapter implementation.
virtual void DoDefault(int32 id) OVERRIDE {
- rfh_->AccessibilityDoDefaultAction(id);
+ rwh_->AccessibilityDoDefaultAction(id);
}
virtual void Focus(int32 id) OVERRIDE {
- rfh_->AccessibilitySetFocus(id);
+ rwh_->AccessibilitySetFocus(id);
}
virtual void MakeVisible(int32 id) OVERRIDE {
- rfh_->AccessibilityScrollToMakeVisible(id, gfx::Rect());
+ rwh_->AccessibilityScrollToMakeVisible(id, gfx::Rect());
}
virtual void SetSelection(int32 id, int32 start, int32 end) OVERRIDE {
- rfh_->AccessibilitySetTextSelection(id, start, end);
+ rwh_->AccessibilitySetTextSelection(id, start, end);
}
private:
- content::RenderFrameHost* rfh_;
+ content::RenderWidgetHost* rwh_;
- DISALLOW_COPY_AND_ASSIGN(RenderFrameHostActionAdapter);
+ DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostActionAdapter);
};
ExtensionFunction::ResponseAction
@@ -156,8 +156,9 @@ AutomationInternalEnableTabFunction::Run() {
if (!contents)
return RespondNow(Error("No active tab"));
}
- content::RenderFrameHost* rfh = contents->GetMainFrame();
- if (!rfh)
+ content::RenderWidgetHost* rwh =
+ contents->GetRenderWidgetHostView()->GetRenderWidgetHost();
+ if (!rwh)
return RespondNow(Error("Could not enable accessibility for active tab"));
if (!CanRequestAutomation(GetExtension(), automation_info, contents)) {
@@ -165,10 +166,10 @@ AutomationInternalEnableTabFunction::Run() {
Error(kCannotRequestAutomationOnPage, contents->GetURL().spec()));
}
AutomationWebContentsObserver::CreateForWebContents(contents);
- contents->EnableTreeOnlyAccessibilityMode();
+ rwh->EnableTreeOnlyAccessibilityMode();
return RespondNow(
ArgumentList(api::automation_internal::EnableTab::Results::Create(
- rfh->GetProcess()->GetID(), rfh->GetRoutingID())));
+ rwh->GetProcess()->GetID(), rwh->GetRoutingID())));
}
ExtensionFunction::ResponseAction
@@ -191,20 +192,21 @@ AutomationInternalPerformActionFunction::Run() {
" platform does not support desktop automation"));
#endif // defined(OS_CHROMEOS)
}
- content::RenderFrameHost* rfh =
- content::RenderFrameHost::FromID(params->args.process_id,
- params->args.routing_id);
- if (!rfh)
- return RespondNow(Error("Ignoring action on destroyed node"));
+ content::RenderWidgetHost* rwh = content::RenderWidgetHost::FromID(
+ params->args.process_id, params->args.routing_id);
- const content::WebContents* contents =
- content::WebContents::FromRenderFrameHost(rfh);
- if (!CanRequestAutomation(GetExtension(), automation_info, contents)) {
- return RespondNow(
- Error(kCannotRequestAutomationOnPage, contents->GetURL().spec()));
+ if (!rwh)
+ return RespondNow(Error("Ignoring action on destroyed node"));
+ if (rwh->IsRenderView()) {
+ const content::RenderViewHost* rvh = content::RenderViewHost::From(rwh);
+ const content::WebContents* contents =
+ content::WebContents::FromRenderViewHost(rvh);
+ if (!CanRequestAutomation(GetExtension(), automation_info, contents)) {
+ return RespondNow(
+ Error(kCannotRequestAutomationOnPage, contents->GetURL().spec()));
+ }
}
-
- RenderFrameHostActionAdapter adapter(rfh);
+ RenderWidgetHostActionAdapter adapter(rwh);
return RouteActionToAdapter(params.get(), &adapter);
}
diff --git a/content/browser/accessibility/#browser_accessibility_manager.cc# b/content/browser/accessibility/#browser_accessibility_manager.cc#
deleted file mode 100644
index b84ff23..0000000
--- a/content/browser/accessibility/#browser_accessibility_manager.cc#
+++ /dev/null
@@ -1,401 +0,0 @@
-// 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/browser_accessibility_manager.h"
-
-#include "base/logging.h"
-#include "content/browser/accessibility/browser_accessibility.h"
-#include "content/common/accessibility_messages.h"
-
-namespace content {
-
-ui::AXTreeUpdate MakeAXTreeUpdate(
- const ui::AXNodeData& node1,
- const ui::AXNodeData& node2 /* = ui::AXNodeData() */,
- const ui::AXNodeData& node3 /* = ui::AXNodeData() */,
- const ui::AXNodeData& node4 /* = ui::AXNodeData() */,
- const ui::AXNodeData& node5 /* = ui::AXNodeData() */,
- const ui::AXNodeData& node6 /* = ui::AXNodeData() */,
- const ui::AXNodeData& node7 /* = ui::AXNodeData() */,
- const ui::AXNodeData& node8 /* = ui::AXNodeData() */,
- const ui::AXNodeData& node9 /* = ui::AXNodeData() */) {
- CR_DEFINE_STATIC_LOCAL(ui::AXNodeData, empty_data, ());
- int32 no_id = empty_data.id;
-
- ui::AXTreeUpdate update;
- update.nodes.push_back(node1);
- if (node2.id != no_id)
- update.nodes.push_back(node2);
- if (node3.id != no_id)
- update.nodes.push_back(node3);
- if (node4.id != no_id)
- update.nodes.push_back(node4);
- if (node5.id != no_id)
- update.nodes.push_back(node5);
- if (node6.id != no_id)
- update.nodes.push_back(node6);
- if (node7.id != no_id)
- update.nodes.push_back(node7);
- if (node8.id != no_id)
- update.nodes.push_back(node8);
- if (node9.id != no_id)
- update.nodes.push_back(node9);
- return update;
-}
-
-BrowserAccessibility* BrowserAccessibilityFactory::Create() {
- return BrowserAccessibility::Create();
-}
-
-#if !defined(OS_MACOSX) && \
- !defined(OS_WIN) && \
- !defined(OS_ANDROID) \
-// We have subclassess of BrowserAccessibilityManager on Mac, Win, and Android.
-// These are the default implementations of these functions
-
-// static
-BrowserAccessibilityManager* BrowserAccessibilityManager::Create(
- const ui::AXTreeUpdate& initial_tree,
- BrowserAccessibilityDelegate* delegate,
- BrowserAccessibilityFactory* factory) {
- return new BrowserAccessibilityManager(initial_tree, delegate, factory);
-}
-
-// static
-ui::AXTreeUpdate BrowserAccessibilityManager::GetEmptyDocument() {
- ui::AXNodeData empty_document;
- empty_document.id = 0;
- empty_document.role = ui::AX_ROLE_ROOT_WEB_AREA;
- ui::AXTreeUpdate update;
- update.nodes.push_back(empty_document);
- return update;
-}
-#endif
-
-BrowserAccessibilityManager::BrowserAccessibilityManager(
- BrowserAccessibilityDelegate* delegate,
- BrowserAccessibilityFactory* factory)
- : delegate_(delegate),
- factory_(factory),
- tree_(new ui::AXTree()),
- focus_(NULL),
- osk_state_(OSK_ALLOWED) {
- tree_->SetDelegate(this);
-}
-
-BrowserAccessibilityManager::BrowserAccessibilityManager(
- const ui::AXTreeUpdate& initial_tree,
- BrowserAccessibilityDelegate* delegate,
- BrowserAccessibilityFactory* factory)
- : delegate_(delegate),
- factory_(factory),
- tree_(new ui::AXTree()),
- focus_(NULL),
- osk_state_(OSK_ALLOWED) {
- tree_->SetDelegate(this);
- Initialize(initial_tree);
-}
-
-BrowserAccessibilityManager::~BrowserAccessibilityManager() {
- tree_.reset(NULL);
-}
-
-void BrowserAccessibilityManager::Initialize(
- const ui::AXTreeUpdate& initial_tree) {
- if (!tree_->Unserialize(initial_tree)) {
- if (delegate_) {
- LOG(ERROR) << tree_->error();
- delegate_->AccessibilityFatalError();
- } else {
- LOG(FATAL) << tree_->error();
- }
- }
-
- if (!focus_)
- SetFocus(tree_->GetRoot(), false);
-}
-
-BrowserAccessibility* BrowserAccessibilityManager::GetRoot() {
- return GetFromAXNode(tree_->GetRoot());
-}
-
-BrowserAccessibility* BrowserAccessibilityManager::GetFromAXNode(
- ui::AXNode* node) {
- return GetFromID(node->id());
-}
-
-BrowserAccessibility* BrowserAccessibilityManager::GetFromID(int32 id) {
- base::hash_map<int32, BrowserAccessibility*>::iterator iter =
- id_wrapper_map_.find(id);
- if (iter != id_wrapper_map_.end())
- return iter->second;
- return NULL;
-}
-
-void BrowserAccessibilityManager::OnWindowFocused() {
- if (focus_)
- NotifyAccessibilityEvent(ui::AX_EVENT_FOCUS, GetFromAXNode(focus_));
-}
-
-void BrowserAccessibilityManager::OnWindowBlurred() {
- if (focus_)
- NotifyAccessibilityEvent(ui::AX_EVENT_BLUR, GetFromAXNode(focus_));
-}
-
-void BrowserAccessibilityManager::OnNavigation(bool is_reload) {
- // Exit if we don't even have the first document loaded yet.
- if (GetRoot()->GetId() == 0)
- return;
-
- LOG(ERROR) << "AX: BrowserAccessibilityManager::OnNavigation " << is_reload;
- // Create an update that replaces the current tree with an empty document
- // (which should be in the "busy" state by default) and apply it.
- ui::AXTreeUpdate update = GetEmptyDocument();
-
- LOG(ERROR) << "AX: OnNavigation empty doc update state: "
- << update.nodes[0].state;
-
- update.nodes[0].id = GetRoot()->GetId();
-
- LOG(ERROR) << "AX: State before unserializing the empty doc: "
- << GetRoot()->GetState();
- LOG(ERROR) << "AX: Root id before unserializing the empty doc: "
- << GetRoot()->GetId();
- LOG(ERROR) << "AX: Root children before: "
- << GetRoot()->PlatformChildCount();
-
- LOG(ERROR) << "AX: State of first node in update: "
- << update.nodes[0].state;
-
- CHECK(tree_->Unserialize(update));
- LOG(ERROR) << "AX: State after unserializing the empty doc: "
- << GetRoot()->GetState();
- LOG(ERROR) << "AX: Root id after unserializing the empty doc: "
- << GetRoot()->GetId();
- LOG(ERROR) << "AX: Root children after: "
- << GetRoot()->PlatformChildCount();
-}
-
-void BrowserAccessibilityManager::GotMouseDown() {
- osk_state_ = OSK_ALLOWED_WITHIN_FOCUSED_OBJECT;
- NotifyAccessibilityEvent(ui::AX_EVENT_FOCUS, GetFromAXNode(focus_));
-}
-
-bool BrowserAccessibilityManager::UseRootScrollOffsetsWhenComputingBounds() {
- return true;
-}
-
-void BrowserAccessibilityManager::OnAccessibilityEvents(
- const std::vector<AccessibilityHostMsg_EventParams>& params) {
- bool should_send_initial_focus = false;
-
- // Process all changes to the accessibility tree first.
- for (uint32 index = 0; index < params.size(); index++) {
- const AccessibilityHostMsg_EventParams& param = params[index];
- if (!tree_->Unserialize(param.update)) {
- if (delegate_) {
- LOG(ERROR) << tree_->error();
- delegate_->AccessibilityFatalError();
- } else {
- CHECK(false) << tree_->error();
- }
- return;
- }
-
- // Set focus to the root if it's not anywhere else.
- if (!focus_) {
- SetFocus(tree_->GetRoot(), false);
- should_send_initial_focus = true;
- }
- }
-
- OnTreeUpdateFinished();
-
- if (should_send_initial_focus &&
- (!delegate_ || delegate_->AccessibilityViewHasFocus())) {
- NotifyAccessibilityEvent(ui::AX_EVENT_FOCUS, GetFromAXNode(focus_));
- }
-
- // Now iterate over the events again and fire the events.
- for (uint32 index = 0; index < params.size(); index++) {
- const AccessibilityHostMsg_EventParams& param = params[index];
-
- // Find the node corresponding to the id that's the target of the
- // event (which may not be the root of the update tree).
- ui::AXNode* node = tree_->GetFromId(param.id);
- if (!node)
- continue;
-
- ui::AXEvent event_type = param.event_type;
- if (event_type == ui::AX_EVENT_FOCUS ||
- event_type == ui::AX_EVENT_BLUR) {
- SetFocus(node, false);
-
- if (osk_state_ != OSK_DISALLOWED_BECAUSE_TAB_HIDDEN &&
- osk_state_ != OSK_DISALLOWED_BECAUSE_TAB_JUST_APPEARED)
- osk_state_ = OSK_ALLOWED;
-
- // Don't send a native focus event if the window itself doesn't
- // have focus.
- if (delegate_ && !delegate_->AccessibilityViewHasFocus())
- continue;
- }
-
- // Send the event event to the operating system.
- NotifyAccessibilityEvent(event_type, GetFromAXNode(node));
- }
-}
-
-void BrowserAccessibilityManager::OnLocationChanges(
- const std::vector<AccessibilityHostMsg_LocationChangeParams>& params) {
- for (size_t i = 0; i < params.size(); ++i) {
- BrowserAccessibility* obj = GetFromID(params[i].id);
- if (!obj)
- continue;
- ui::AXNode* node = obj->node();
- node->SetLocation(params[i].new_location);
- obj->OnLocationChanged();
- }
-}
-
-BrowserAccessibility* BrowserAccessibilityManager::GetActiveDescendantFocus(
- BrowserAccessibility* root) {
- BrowserAccessibility* node = BrowserAccessibilityManager::GetFocus(root);
- if (!node)
- return NULL;
-
- int active_descendant_id;
- if (node->GetIntAttribute(ui::AX_ATTR_ACTIVEDESCENDANT_ID,
- &active_descendant_id)) {
- BrowserAccessibility* active_descendant =
- node->manager()->GetFromID(active_descendant_id);
- if (active_descendant)
- return active_descendant;
- }
- return node;
-}
-
-BrowserAccessibility* BrowserAccessibilityManager::GetFocus(
- BrowserAccessibility* root) {
- if (focus_ && (!root || focus_->IsDescendantOf(root->node())))
- return GetFromAXNode(focus_);
-
- return NULL;
-}
-
-void BrowserAccessibilityManager::SetFocus(ui::AXNode* node, bool notify) {
- if (focus_ != node)
- focus_ = node;
-
- if (notify && node && delegate_)
- delegate_->AccessibilitySetFocus(node->id());
-}
-
-void BrowserAccessibilityManager::SetFocus(
- BrowserAccessibility* obj, bool notify) {
- if (obj->node())
- SetFocus(obj->node(), notify);
-}
-
-void BrowserAccessibilityManager::DoDefaultAction(
- const BrowserAccessibility& node) {
- if (delegate_)
- delegate_->AccessibilityDoDefaultAction(node.GetId());
-}
-
-void BrowserAccessibilityManager::ScrollToMakeVisible(
- const BrowserAccessibility& node, gfx::Rect subfocus) {
- if (delegate_) {
- delegate_->AccessibilityScrollToMakeVisible(node.GetId(), subfocus);
- }
-}
-
-void BrowserAccessibilityManager::ScrollToPoint(
- const BrowserAccessibility& node, gfx::Point point) {
- if (delegate_) {
- delegate_->AccessibilityScrollToPoint(node.GetId(), point);
- }
-}
-
-void BrowserAccessibilityManager::SetTextSelection(
- const BrowserAccessibility& node, int start_offset, int end_offset) {
- if (delegate_) {
- delegate_->AccessibilitySetTextSelection(
- node.GetId(), start_offset, end_offset);
- }
-}
-
-gfx::Rect BrowserAccessibilityManager::GetViewBounds() {
- if (delegate_)
- return delegate_->AccessibilityGetViewBounds();
- return gfx::Rect();
-}
-
-BrowserAccessibility* BrowserAccessibilityManager::NextInTreeOrder(
- BrowserAccessibility* node) {
- if (!node)
- return NULL;
-
- if (node->PlatformChildCount() > 0)
- return node->PlatformGetChild(0);
- while (node) {
- if (node->GetParent() &&
- node->GetIndexInParent() <
- static_cast<int>(node->GetParent()->PlatformChildCount()) - 1) {
- return node->GetParent()->PlatformGetChild(node->GetIndexInParent() + 1);
- }
- node = node->GetParent();
- }
-
- return NULL;
-}
-
-BrowserAccessibility* BrowserAccessibilityManager::PreviousInTreeOrder(
- BrowserAccessibility* node) {
- if (!node)
- return NULL;
-
- if (node->GetParent() && node->GetIndexInParent() > 0) {
- node = node->GetParent()->PlatformGetChild(node->GetIndexInParent() - 1);
- while (node->PlatformChildCount() > 0)
- node = node->PlatformGetChild(node->PlatformChildCount() - 1);
- return node;
- }
-
- return node->GetParent();
-}
-
-void BrowserAccessibilityManager::OnNodeWillBeDeleted(ui::AXNode* node) {
- if (node == focus_ && tree_) {
- if (node != tree_->GetRoot())
- SetFocus(tree_->GetRoot(), false);
- else
- focus_ = NULL;
- }
- if (id_wrapper_map_.find(node->id()) == id_wrapper_map_.end())
- return;
- GetFromAXNode(node)->Destroy();
- id_wrapper_map_.erase(node->id());
-}
-
-void BrowserAccessibilityManager::OnNodeCreated(ui::AXNode* node) {
- BrowserAccessibility* wrapper = factory_->Create();
- wrapper->Init(this, node);
- id_wrapper_map_[node->id()] = wrapper;
- wrapper->OnDataChanged();
-}
-
-void BrowserAccessibilityManager::OnNodeChanged(ui::AXNode* node) {
- GetFromAXNode(node)->OnDataChanged();
-}
-
-void BrowserAccessibilityManager::OnNodeCreationFinished(ui::AXNode* node) {
- GetFromAXNode(node)->OnUpdateFinished();
-}
-
-void BrowserAccessibilityManager::OnNodeChangeFinished(ui::AXNode* node) {
- GetFromAXNode(node)->OnUpdateFinished();
-}
-
-} // namespace content
diff --git a/content/browser/accessibility/accessibility_mode_browsertest.cc b/content/browser/accessibility/accessibility_mode_browsertest.cc
index 9e85a9a..5e191bd 100644
--- a/content/browser/accessibility/accessibility_mode_browsertest.cc
+++ b/content/browser/accessibility/accessibility_mode_browsertest.cc
@@ -5,7 +5,6 @@
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/browser/renderer_host/render_widget_host_impl.h"
#include "content/browser/renderer_host/render_widget_host_view_base.h"
-#include "content/browser/web_contents/web_contents_impl.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/render_widget_host.h"
#include "content/public/browser/render_widget_host_view.h"
@@ -24,20 +23,29 @@ const char kMinimalPageDataURL[] =
class AccessibilityModeTest : public ContentBrowserTest {
protected:
- WebContentsImpl* web_contents() {
- return static_cast<WebContentsImpl*>(shell()->web_contents());
+ WebContents* web_contents() {
+ return shell()->web_contents();
+ }
+
+ RenderWidgetHostImpl* rwhi() {
+ RenderWidgetHost* rwh =
+ web_contents()->GetRenderWidgetHostView()->GetRenderWidgetHost();
+ return RenderWidgetHostImpl::From(rwh);
+ }
+
+ RenderWidgetHostViewBase* host_view() {
+ return static_cast<RenderWidgetHostViewBase*>(
+ shell()->web_contents()->GetRenderWidgetHostView());
}
void ExpectBrowserAccessibilityManager(bool expect_bam,
std::string message = "") {
if (expect_bam) {
- EXPECT_NE(
- (BrowserAccessibilityManager*)NULL,
- web_contents()->GetRootBrowserAccessibilityManager()) << message;
+ EXPECT_NE((BrowserAccessibilityManager*)NULL,
+ host_view()->GetBrowserAccessibilityManager()) << message;
} else {
- EXPECT_EQ(
- (BrowserAccessibilityManager*)NULL,
- web_contents()->GetRootBrowserAccessibilityManager()) << message;
+ EXPECT_EQ((BrowserAccessibilityManager*)NULL,
+ host_view()->GetBrowserAccessibilityManager()) << message;
}
}
};
@@ -45,28 +53,28 @@ class AccessibilityModeTest : public ContentBrowserTest {
IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AccessibilityModeOff) {
NavigateToURL(shell(), GURL(kMinimalPageDataURL));
- EXPECT_EQ(AccessibilityModeOff, web_contents()->GetAccessibilityMode());
+ EXPECT_EQ(AccessibilityModeOff, rwhi()->accessibility_mode());
ExpectBrowserAccessibilityManager(false);
}
IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AccessibilityModeComplete) {
NavigateToURL(shell(), GURL(kMinimalPageDataURL));
- ASSERT_EQ(AccessibilityModeOff, web_contents()->GetAccessibilityMode());
+ ASSERT_EQ(AccessibilityModeOff, rwhi()->accessibility_mode());
AccessibilityNotificationWaiter waiter(shell());
- web_contents()->AddAccessibilityMode(AccessibilityModeComplete);
- EXPECT_EQ(AccessibilityModeComplete, web_contents()->GetAccessibilityMode());
+ rwhi()->AddAccessibilityMode(AccessibilityModeComplete);
+ EXPECT_EQ(AccessibilityModeComplete, rwhi()->accessibility_mode());
waiter.WaitForNotification();
ExpectBrowserAccessibilityManager(true);
}
IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AccessibilityModeTreeOnly) {
NavigateToURL(shell(), GURL(kMinimalPageDataURL));
- ASSERT_EQ(AccessibilityModeOff, web_contents()->GetAccessibilityMode());
+ ASSERT_EQ(AccessibilityModeOff, rwhi()->accessibility_mode());
AccessibilityNotificationWaiter waiter(shell());
- web_contents()->AddAccessibilityMode(AccessibilityModeTreeOnly);
- EXPECT_EQ(AccessibilityModeTreeOnly, web_contents()->GetAccessibilityMode());
+ rwhi()->AddAccessibilityMode(AccessibilityModeTreeOnly);
+ EXPECT_EQ(AccessibilityModeTreeOnly, rwhi()->accessibility_mode());
waiter.WaitForNotification();
// No BrowserAccessibilityManager expected for AccessibilityModeTreeOnly
ExpectBrowserAccessibilityManager(false);
@@ -76,16 +84,16 @@ IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AddingModes) {
NavigateToURL(shell(), GURL(kMinimalPageDataURL));
AccessibilityNotificationWaiter waiter(shell());
- web_contents()->AddAccessibilityMode(AccessibilityModeTreeOnly);
- EXPECT_EQ(AccessibilityModeTreeOnly, web_contents()->GetAccessibilityMode());
+ rwhi()->AddAccessibilityMode(AccessibilityModeTreeOnly);
+ EXPECT_EQ(AccessibilityModeTreeOnly, rwhi()->accessibility_mode());
waiter.WaitForNotification();
ExpectBrowserAccessibilityManager(false,
"Should be no BrowserAccessibilityManager "
"for AccessibilityModeTreeOnly");
AccessibilityNotificationWaiter waiter2(shell());
- web_contents()->AddAccessibilityMode(AccessibilityModeComplete);
- EXPECT_EQ(AccessibilityModeComplete, web_contents()->GetAccessibilityMode());
+ rwhi()->AddAccessibilityMode(AccessibilityModeComplete);
+ EXPECT_EQ(AccessibilityModeComplete, rwhi()->accessibility_mode());
waiter2.WaitForNotification();
ExpectBrowserAccessibilityManager(true,
"Should be a BrowserAccessibilityManager "
diff --git a/content/browser/accessibility/accessibility_mode_helper.cc b/content/browser/accessibility/accessibility_mode_helper.cc
index a8cacb3..7988595 100644
--- a/content/browser/accessibility/accessibility_mode_helper.cc
+++ b/content/browser/accessibility/accessibility_mode_helper.cc
@@ -2,7 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "base/logging.h"
#include "content/browser/accessibility/accessibility_mode_helper.h"
#if defined(OS_WIN)
diff --git a/content/browser/accessibility/accessibility_mode_helper.h b/content/browser/accessibility/accessibility_mode_helper.h
index 3885ddc..c12c206 100644
--- a/content/browser/accessibility/accessibility_mode_helper.h
+++ b/content/browser/accessibility/accessibility_mode_helper.h
@@ -5,8 +5,8 @@
#ifndef CONTENT_BROWSER_ACCESSIBILITY_ACCESSIBILITY_MODE_HELPER_H_
#define CONTENT_BROWSER_ACCESSIBILITY_ACCESSIBILITY_MODE_HELPER_H_
-#include "content/common/accessibility_mode_enums.h"
#include "content/common/content_export.h"
+#include "content/common/view_message_enums.h"
namespace content {
diff --git a/content/browser/accessibility/accessibility_tree_formatter.cc b/content/browser/accessibility/accessibility_tree_formatter.cc
index 97ce7fe..cca61a5 100644
--- a/content/browser/accessibility/accessibility_tree_formatter.cc
+++ b/content/browser/accessibility/accessibility_tree_formatter.cc
@@ -12,7 +12,7 @@
#include "base/strings/utf_string_conversions.h"
#include "content/browser/accessibility/browser_accessibility_manager.h"
#include "content/browser/renderer_host/render_widget_host_view_base.h"
-#include "content/browser/web_contents/web_contents_impl.h"
+#include "content/public/browser/render_view_host.h"
#include "content/public/browser/web_contents.h"
namespace content {
@@ -30,10 +30,12 @@ AccessibilityTreeFormatter::AccessibilityTreeFormatter(
// static
AccessibilityTreeFormatter* AccessibilityTreeFormatter::Create(
- WebContents* web_contents) {
+ RenderViewHost* rvh) {
+ RenderWidgetHostViewBase* host_view = static_cast<RenderWidgetHostViewBase*>(
+ WebContents::FromRenderViewHost(rvh)->GetRenderWidgetHostView());
+
BrowserAccessibilityManager* manager =
- static_cast<WebContentsImpl*>(web_contents)->
- GetRootBrowserAccessibilityManager();
+ host_view->GetBrowserAccessibilityManager();
if (!manager)
return NULL;
diff --git a/content/browser/accessibility/accessibility_tree_formatter.h b/content/browser/accessibility/accessibility_tree_formatter.h
index 39c6a4aa..a290886 100644
--- a/content/browser/accessibility/accessibility_tree_formatter.h
+++ b/content/browser/accessibility/accessibility_tree_formatter.h
@@ -16,7 +16,7 @@
namespace content {
-class WebContents;
+class RenderViewHost;
// A utility class for formatting platform-specific accessibility information,
// for use in testing, debugging, and developer tools.
@@ -27,7 +27,7 @@ class CONTENT_EXPORT AccessibilityTreeFormatter {
explicit AccessibilityTreeFormatter(BrowserAccessibility* root);
virtual ~AccessibilityTreeFormatter();
- static AccessibilityTreeFormatter* Create(WebContents* wc);
+ static AccessibilityTreeFormatter* Create(RenderViewHost* rvh);
// Populates the given DictionaryValue with the accessibility tree.
// The dictionary contains a key/value pair for each attribute of the node,
diff --git a/content/browser/accessibility/accessibility_ui.cc b/content/browser/accessibility/accessibility_ui.cc
index 155a1e9..628c545 100644
--- a/content/browser/accessibility/accessibility_ui.cc
+++ b/content/browser/accessibility/accessibility_ui.cc
@@ -15,7 +15,6 @@
#include "content/browser/accessibility/browser_accessibility_state_impl.h"
#include "content/browser/renderer_host/render_widget_host_impl.h"
#include "content/browser/renderer_host/render_widget_host_view_base.h"
-#include "content/browser/web_contents/web_contents_impl.h"
#include "content/common/view_message_enums.h"
#include "content/public/browser/favicon_status.h"
#include "content/public/browser/navigation_entry.h"
@@ -64,11 +63,11 @@ base::DictionaryValue* BuildTargetDescriptor(
}
base::DictionaryValue* BuildTargetDescriptor(RenderViewHost* rvh) {
- WebContentsImpl* web_contents = static_cast<WebContentsImpl*>(
- WebContents::FromRenderViewHost(rvh));
- AccessibilityMode accessibility_mode = web_contents->GetAccessibilityMode();
-
+ WebContents* web_contents = WebContents::FromRenderViewHost(rvh);
std::string title;
+ RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(rvh);
+ AccessibilityMode accessibility_mode = rwhi->accessibility_mode();
+
GURL url;
GURL favicon_url;
if (web_contents) {
@@ -179,15 +178,14 @@ void AccessibilityUI::ToggleAccessibility(const base::ListValue* args) {
RenderViewHost* rvh = RenderViewHost::FromID(process_id, route_id);
if (!rvh)
return;
- WebContentsImpl* web_contents = static_cast<WebContentsImpl*>(
- WebContents::FromRenderViewHost(rvh));
- AccessibilityMode mode = web_contents->GetAccessibilityMode();
- if ((mode & AccessibilityModeComplete) != AccessibilityModeComplete) {
- web_contents->AddAccessibilityMode(AccessibilityModeComplete);
- } else {
- web_contents->SetAccessibilityMode(
- BrowserAccessibilityStateImpl::GetInstance()->accessibility_mode());
- }
+ RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(rvh);
+ if (!rwhi)
+ return;
+ AccessibilityMode mode = rwhi->accessibility_mode();
+ if ((mode & AccessibilityModeComplete) != AccessibilityModeComplete)
+ rwhi->AddAccessibilityMode(AccessibilityModeComplete);
+ else
+ rwhi->ResetAccessibilityMode();
}
void AccessibilityUI::ToggleGlobalAccessibility(const base::ListValue* args) {
@@ -222,10 +220,25 @@ void AccessibilityUI::RequestAccessibilityTree(const base::ListValue* args) {
}
scoped_ptr<base::DictionaryValue> result(BuildTargetDescriptor(rvh));
- WebContents* web_contents = WebContents::FromRenderViewHost(rvh);
+ RenderWidgetHostViewBase* host_view = static_cast<RenderWidgetHostViewBase*>(
+ WebContents::FromRenderViewHost(rvh)->GetRenderWidgetHostView());
+ if (!host_view) {
+ result->Set("error",
+ new base::StringValue("Could not get accessibility tree."));
+ web_ui()->CallJavascriptFunction("accessibility.showTree", *(result.get()));
+ return;
+ }
scoped_ptr<AccessibilityTreeFormatter> formatter(
- AccessibilityTreeFormatter::Create(web_contents));
+ AccessibilityTreeFormatter::Create(rvh));
base::string16 accessibility_contents_utf16;
+ BrowserAccessibilityManager* manager =
+ host_view->GetBrowserAccessibilityManager();
+ if (!manager) {
+ result->Set("error",
+ new base::StringValue("Could not get accessibility tree."));
+ web_ui()->CallJavascriptFunction("accessibility.showTree", *(result.get()));
+ return;
+ }
std::vector<AccessibilityTreeFormatter::Filter> filters;
filters.push_back(AccessibilityTreeFormatter::Filter(
base::ASCIIToUTF16("*"),
diff --git a/content/browser/accessibility/android_hit_testing_browsertest.cc b/content/browser/accessibility/android_hit_testing_browsertest.cc
index 1e54cd8..1070f6e 100644
--- a/content/browser/accessibility/android_hit_testing_browsertest.cc
+++ b/content/browser/accessibility/android_hit_testing_browsertest.cc
@@ -17,7 +17,8 @@
#include "content/browser/accessibility/accessibility_tree_formatter.h"
#include "content/browser/accessibility/browser_accessibility.h"
#include "content/browser/accessibility/browser_accessibility_manager.h"
-#include "content/browser/web_contents/web_contents_impl.h"
+#include "content/browser/renderer_host/render_view_host_impl.h"
+#include "content/browser/renderer_host/render_widget_host_view_base.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/content_paths.h"
#include "content/public/common/content_switches.h"
@@ -58,10 +59,10 @@ IN_PROC_BROWSER_TEST_F(AndroidHitTestingBrowserTest,
waiter.WaitForNotification();
// Get the BrowserAccessibilityManager.
- WebContentsImpl* web_contents =
- static_cast<WebContentsImpl*>(shell()->web_contents());
+ RenderWidgetHostViewBase* host_view = static_cast<RenderWidgetHostViewBase*>(
+ shell()->web_contents()->GetRenderWidgetHostView());
BrowserAccessibilityManager* manager =
- web_contents->GetRootBrowserAccessibilityManager();
+ host_view->GetBrowserAccessibilityManager();
// Send a hit test request, and wait for the hover event in response.
AccessibilityNotificationWaiter hover_waiter(
diff --git a/content/browser/accessibility/browser_accessibility_cocoa.mm b/content/browser/accessibility/browser_accessibility_cocoa.mm
index bdc96d3..2ed21f4 100644
--- a/content/browser/accessibility/browser_accessibility_cocoa.mm
+++ b/content/browser/accessibility/browser_accessibility_cocoa.mm
@@ -1550,12 +1550,7 @@ NSDictionary* attributeToMethodNameMap = nil;
[self delegate]->AccessibilityDoDefaultAction(
browserAccessibility_->GetId());
} else if ([action isEqualToString:NSAccessibilityShowMenuAction]) {
- NSPoint objOrigin = [self origin];
- NSSize size = [[self size] sizeValue];
- gfx::Point origin = [self delegate]->AccessibilityOriginInScreen(
- gfx::Rect(objOrigin.x, objOrigin.y, size.width, size.height));
- origin.Offset(size.width / 2, size.height / 2);
- [self delegate]->AccessibilityShowMenu(origin);
+ [self delegate]->AccessibilityShowMenu(browserAccessibility_->GetId());
}
}
@@ -1580,11 +1575,10 @@ NSDictionary* attributeToMethodNameMap = nil;
return;
if ([attribute isEqualToString:NSAccessibilityFocusedAttribute]) {
- BrowserAccessibilityManager* manager = browserAccessibility_->manager();
NSNumber* focusedNumber = value;
BOOL focused = [focusedNumber intValue];
if (focused)
- manager->SetFocus(browserAccessibility_, true);
+ [self delegate]->AccessibilitySetFocus(browserAccessibility_->GetId());
}
if ([attribute isEqualToString:NSAccessibilitySelectedTextRangeAttribute]) {
NSRange range = [(NSValue*)value rangeValue];
diff --git a/content/browser/accessibility/browser_accessibility_manager.h b/content/browser/accessibility/browser_accessibility_manager.h
index 4898e4e..ae0bc30 100644
--- a/content/browser/accessibility/browser_accessibility_manager.h
+++ b/content/browser/accessibility/browser_accessibility_manager.h
@@ -47,11 +47,11 @@ class CONTENT_EXPORT BrowserAccessibilityDelegate {
virtual ~BrowserAccessibilityDelegate() {}
virtual void AccessibilitySetFocus(int acc_obj_id) = 0;
virtual void AccessibilityDoDefaultAction(int acc_obj_id) = 0;
- virtual void AccessibilityShowMenu(const gfx::Point& global_point) = 0;
+ virtual void AccessibilityShowMenu(int acc_obj_id) = 0;
virtual void AccessibilityScrollToMakeVisible(
- int acc_obj_id, const gfx::Rect& subfocus) = 0;
+ int acc_obj_id, gfx::Rect subfocus) = 0;
virtual void AccessibilityScrollToPoint(
- int acc_obj_id, const gfx::Point& point) = 0;
+ int acc_obj_id, gfx::Point point) = 0;
virtual void AccessibilitySetTextSelection(
int acc_obj_id, int start_offset, int end_offset) = 0;
virtual bool AccessibilityViewHasFocus() const = 0;
@@ -183,9 +183,6 @@ class CONTENT_EXPORT BrowserAccessibilityManager : public ui::AXTreeDelegate {
virtual void OnRootChanged(ui::AXNode* new_root) OVERRIDE {}
BrowserAccessibilityDelegate* delegate() const { return delegate_; }
- void set_delegate(BrowserAccessibilityDelegate* delegate) {
- delegate_ = delegate;
- }
protected:
BrowserAccessibilityManager(
diff --git a/content/browser/accessibility/browser_accessibility_manager_unittest.cc b/content/browser/accessibility/browser_accessibility_manager_unittest.cc
index 55925e1..ddff85f 100644
--- a/content/browser/accessibility/browser_accessibility_manager_unittest.cc
+++ b/content/browser/accessibility/browser_accessibility_manager_unittest.cc
@@ -69,11 +69,11 @@ class TestBrowserAccessibilityDelegate
virtual void AccessibilitySetFocus(int acc_obj_id) OVERRIDE {}
virtual void AccessibilityDoDefaultAction(int acc_obj_id) OVERRIDE {}
- virtual void AccessibilityShowMenu(const gfx::Point& point) OVERRIDE {}
+ virtual void AccessibilityShowMenu(int acc_obj_id) OVERRIDE {}
virtual void AccessibilityScrollToMakeVisible(
- int acc_obj_id, const gfx::Rect& subfocus) OVERRIDE {}
+ int acc_obj_id, gfx::Rect subfocus) OVERRIDE {}
virtual void AccessibilityScrollToPoint(
- int acc_obj_id, const gfx::Point& point) OVERRIDE {}
+ 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 {
diff --git a/content/browser/accessibility/browser_accessibility_manager_win.cc b/content/browser/accessibility/browser_accessibility_manager_win.cc
index 05e2fd5..0bb3b60 100644
--- a/content/browser/accessibility/browser_accessibility_manager_win.cc
+++ b/content/browser/accessibility/browser_accessibility_manager_win.cc
@@ -55,7 +55,7 @@ BrowserAccessibilityManagerWin::~BrowserAccessibilityManagerWin() {
tracked_scroll_object_ = NULL;
}
if (accessible_hwnd_)
- accessible_hwnd_->OnManagerDeleted(this);
+ accessible_hwnd_->OnManagerDeleted();
}
// static
@@ -75,11 +75,7 @@ ui::AXTreeUpdate BrowserAccessibilityManagerWin::GetEmptyDocument() {
void BrowserAccessibilityManagerWin::SetAccessibleHWND(
LegacyRenderWidgetHostHWND* accessible_hwnd) {
- if (accessible_hwnd_)
- accessible_hwnd_->OnManagerDeleted(this);
-
accessible_hwnd_ = accessible_hwnd;
-
if (accessible_hwnd_) {
accessible_hwnd_->set_browser_accessibility_manager(this);
parent_hwnd_ = accessible_hwnd_->GetParent();
diff --git a/content/browser/accessibility/browser_accessibility_state_impl.cc b/content/browser/accessibility/browser_accessibility_state_impl.cc
index 7fdab1a..f45c31d 100644
--- a/content/browser/accessibility/browser_accessibility_state_impl.cc
+++ b/content/browser/accessibility/browser_accessibility_state_impl.cc
@@ -9,8 +9,9 @@
#include "base/timer/timer.h"
#include "content/browser/accessibility/accessibility_mode_helper.h"
#include "content/browser/renderer_host/render_widget_host_impl.h"
-#include "content/browser/web_contents/web_contents_impl.h"
#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/render_process_host.h"
+#include "content/public/browser/render_widget_host_iterator.h"
#include "content/public/common/content_switches.h"
#include "ui/gfx/sys_color_change_listener.h"
@@ -98,10 +99,20 @@ void BrowserAccessibilityStateImpl::ResetAccessibilityModeValue() {
void BrowserAccessibilityStateImpl::ResetAccessibilityMode() {
ResetAccessibilityModeValue();
- std::vector<WebContentsImpl*> web_contents_vector =
- WebContentsImpl::GetAllWebContents();
- for (size_t i = 0; i < web_contents_vector.size(); ++i)
- web_contents_vector[i]->SetAccessibilityMode(accessibility_mode());
+ // Iterate over all RenderWidgetHosts, even swapped out ones in case
+ // they become active again.
+ scoped_ptr<RenderWidgetHostIterator> widgets(
+ RenderWidgetHostImpl::GetAllRenderWidgetHosts());
+ while (RenderWidgetHost* widget = widgets->GetNextHost()) {
+ // Ignore processes that don't have a connection, such as crashed tabs.
+ if (!widget->GetProcess()->HasConnection())
+ continue;
+ if (!widget->IsRenderView())
+ continue;
+
+ RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget);
+ rwhi->ResetAccessibilityMode();
+ }
}
bool BrowserAccessibilityStateImpl::IsAccessibleBrowser() {
@@ -147,7 +158,7 @@ void BrowserAccessibilityStateImpl::AddAccessibilityMode(
accessibility_mode_ =
content::AddAccessibilityModeTo(accessibility_mode_, mode);
- AddOrRemoveFromAllWebContents(mode, true);
+ AddOrRemoveFromRenderWidgets(mode, true);
}
void BrowserAccessibilityStateImpl::RemoveAccessibilityMode(
@@ -161,19 +172,28 @@ void BrowserAccessibilityStateImpl::RemoveAccessibilityMode(
accessibility_mode_ =
content::RemoveAccessibilityModeFrom(accessibility_mode_, mode);
- AddOrRemoveFromAllWebContents(mode, false);
+ AddOrRemoveFromRenderWidgets(mode, false);
}
-void BrowserAccessibilityStateImpl::AddOrRemoveFromAllWebContents(
+void BrowserAccessibilityStateImpl::AddOrRemoveFromRenderWidgets(
AccessibilityMode mode,
bool add) {
- std::vector<WebContentsImpl*> web_contents_vector =
- WebContentsImpl::GetAllWebContents();
- for (size_t i = 0; i < web_contents_vector.size(); ++i) {
+ // Iterate over all RenderWidgetHosts, even swapped out ones in case
+ // they become active again.
+ scoped_ptr<RenderWidgetHostIterator> widgets(
+ RenderWidgetHostImpl::GetAllRenderWidgetHosts());
+ while (RenderWidgetHost* widget = widgets->GetNextHost()) {
+ // Ignore processes that don't have a connection, such as crashed tabs.
+ if (!widget->GetProcess()->HasConnection())
+ continue;
+ if (!widget->IsRenderView())
+ continue;
+
+ RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget);
if (add)
- web_contents_vector[i]->AddAccessibilityMode(mode);
+ rwhi->AddAccessibilityMode(mode);
else
- web_contents_vector[i]->RemoveAccessibilityMode(mode);
+ rwhi->RemoveAccessibilityMode(mode);
}
}
diff --git a/content/browser/accessibility/browser_accessibility_state_impl.h b/content/browser/accessibility/browser_accessibility_state_impl.h
index 6529d2d..2a1b1c6 100644
--- a/content/browser/accessibility/browser_accessibility_state_impl.h
+++ b/content/browser/accessibility/browser_accessibility_state_impl.h
@@ -10,7 +10,7 @@
#include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "base/memory/singleton.h"
-#include "content/common/accessibility_mode_enums.h"
+#include "content/common/view_message_enums.h"
#include "content/public/browser/browser_accessibility_state.h"
namespace content {
@@ -76,9 +76,9 @@ class CONTENT_EXPORT BrowserAccessibilityStateImpl
void UpdatePlatformSpecificHistograms();
- // Updates the accessibility mode of all web contents, including swapped out
+ // Updates the accessibility mode of all render widgets, including swapped out
// ones. |add| specifies whether the mode should be added or removed.
- void AddOrRemoveFromAllWebContents(AccessibilityMode mode, bool add);
+ void AddOrRemoveFromRenderWidgets(AccessibilityMode mode, bool add);
AccessibilityMode accessibility_mode_;
diff --git a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
index b97da81..543b06c 100644
--- a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
+++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
@@ -19,7 +19,6 @@
#include "content/browser/accessibility/browser_accessibility_manager.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/browser/renderer_host/render_widget_host_view_base.h"
-#include "content/browser/web_contents/web_contents_impl.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/content_paths.h"
#include "content/public/common/content_switches.h"
@@ -182,10 +181,10 @@ void DumpAccessibilityTreeTest::RunTest(
NavigateToURL(shell(), url);
waiter.WaitForNotification();
- WebContentsImpl* web_contents = static_cast<WebContentsImpl*>(
- shell()->web_contents());
+ RenderWidgetHostViewBase* host_view = static_cast<RenderWidgetHostViewBase*>(
+ shell()->web_contents()->GetRenderWidgetHostView());
AccessibilityTreeFormatter formatter(
- web_contents->GetRootBrowserAccessibilityManager()->GetRoot());
+ host_view->GetBrowserAccessibilityManager()->GetRoot());
// Parse filters in the test file.
std::vector<Filter> filters;
diff --git a/content/browser/android/content_view_core_impl.cc b/content/browser/android/content_view_core_impl.cc
index 6f54245..dabf69c9 100644
--- a/content/browser/android/content_view_core_impl.cc
+++ b/content/browser/android/content_view_core_impl.cc
@@ -17,7 +17,6 @@
#include "cc/layers/layer.h"
#include "cc/layers/solid_color_layer.h"
#include "cc/output/begin_frame_args.h"
-#include "content/browser/accessibility/browser_accessibility_state_impl.h"
#include "content/browser/android/gesture_event_type.h"
#include "content/browser/android/interstitial_page_delegate_android.h"
#include "content/browser/android/java/gin_java_bridge_dispatcher_host.h"
@@ -42,6 +41,7 @@
#include "content/common/input/web_input_event_traits.h"
#include "content/common/input_messages.h"
#include "content/common/view_messages.h"
+#include "content/public/browser/browser_accessibility_state.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/favicon_status.h"
@@ -1513,21 +1513,24 @@ bool ContentViewCoreImpl::IsFullscreenRequiredForOrientationLock() const {
void ContentViewCoreImpl::SetAccessibilityEnabledInternal(bool enabled) {
accessibility_enabled_ = enabled;
- BrowserAccessibilityStateImpl* accessibility_state =
- BrowserAccessibilityStateImpl::GetInstance();
+ RenderWidgetHostViewAndroid* host_view = GetRenderWidgetHostViewAndroid();
+ if (!host_view)
+ return;
+ RenderWidgetHostImpl* host_impl = RenderWidgetHostImpl::From(
+ host_view->GetRenderWidgetHost());
+ BrowserAccessibilityState* accessibility_state =
+ BrowserAccessibilityState::GetInstance();
if (enabled) {
// This enables accessibility globally unless it was explicitly disallowed
// by a command-line flag.
accessibility_state->OnScreenReaderDetected();
// If it was actually enabled globally, enable it for this RenderWidget now.
- if (accessibility_state->IsAccessibleBrowser() && web_contents_)
- web_contents_->AddAccessibilityMode(AccessibilityModeComplete);
+ if (accessibility_state->IsAccessibleBrowser() && host_impl)
+ host_impl->AddAccessibilityMode(AccessibilityModeComplete);
} else {
accessibility_state->ResetAccessibilityMode();
- if (web_contents_) {
- web_contents_->SetAccessibilityMode(
- accessibility_state->accessibility_mode());
- }
+ if (host_impl)
+ host_impl->ResetAccessibilityMode();
}
}
diff --git a/content/browser/frame_host/interstitial_page_impl.cc b/content/browser/frame_host/interstitial_page_impl.cc
index 1a1ed43..a4ea299 100644
--- a/content/browser/frame_host/interstitial_page_impl.cc
+++ b/content/browser/frame_host/interstitial_page_impl.cc
@@ -432,13 +432,6 @@ void InterstitialPageImpl::UpdateTitle(
controller_->delegate()->NotifyNavigationStateChanged(INVALIDATE_TYPE_TITLE);
}
-AccessibilityMode InterstitialPageImpl::GetAccessibilityMode() const {
- if (web_contents_)
- return static_cast<WebContentsImpl*>(web_contents_)->GetAccessibilityMode();
- else
- return AccessibilityModeOff;
-}
-
RenderViewHostDelegateView* InterstitialPageImpl::GetDelegateView() {
return rvh_delegate_view_.get();
}
@@ -540,11 +533,7 @@ void InterstitialPageImpl::HandleKeyboardEvent(
#if defined(OS_WIN)
gfx::NativeViewAccessible
InterstitialPageImpl::GetParentNativeViewAccessible() {
- if (web_contents_) {
- WebContentsImpl* wci = static_cast<WebContentsImpl*>(web_contents_);
- return wci->GetParentNativeViewAccessible();
- }
- return NULL;
+ return render_widget_host_delegate_->GetParentNativeViewAccessible();
}
#endif
diff --git a/content/browser/frame_host/interstitial_page_impl.h b/content/browser/frame_host/interstitial_page_impl.h
index 7f2d4d7..8068fd3 100644
--- a/content/browser/frame_host/interstitial_page_impl.h
+++ b/content/browser/frame_host/interstitial_page_impl.h
@@ -119,7 +119,6 @@ class CONTENT_EXPORT InterstitialPageImpl
int32 page_id,
const base::string16& title,
base::i18n::TextDirection title_direction) OVERRIDE;
- virtual AccessibilityMode GetAccessibilityMode() const OVERRIDE;
// RenderViewHostDelegate implementation:
virtual RenderViewHostDelegateView* GetDelegateView() OVERRIDE;
diff --git a/content/browser/frame_host/render_frame_host_delegate.cc b/content/browser/frame_host/render_frame_host_delegate.cc
index f5d07e3..d333185 100644
--- a/content/browser/frame_host/render_frame_host_delegate.cc
+++ b/content/browser/frame_host/render_frame_host_delegate.cc
@@ -7,7 +7,6 @@
#include "base/callback.h"
#include "base/strings/string16.h"
#include "content/browser/frame_host/render_frame_host_delegate.h"
-#include "ui/gfx/native_widget_types.h"
#include "url/gurl.h"
namespace content {
@@ -44,15 +43,4 @@ void RenderFrameHostDelegate::RequestMediaAccessPermission(
scoped_ptr<MediaStreamUI>());
}
-AccessibilityMode RenderFrameHostDelegate::GetAccessibilityMode() const {
- return AccessibilityModeOff;
-}
-
-#if defined(OS_WIN)
-gfx::NativeViewAccessible
- RenderFrameHostDelegate::GetParentNativeViewAccessible() {
- return NULL;
-}
-#endif // defined(OS_WIN)
-
} // namespace content
diff --git a/content/browser/frame_host/render_frame_host_delegate.h b/content/browser/frame_host/render_frame_host_delegate.h
index 6150d46..4d53936 100644
--- a/content/browser/frame_host/render_frame_host_delegate.h
+++ b/content/browser/frame_host/render_frame_host_delegate.h
@@ -5,19 +5,12 @@
#ifndef CONTENT_BROWSER_FRAME_HOST_RENDER_FRAME_HOST_DELEGATE_H_
#define CONTENT_BROWSER_FRAME_HOST_RENDER_FRAME_HOST_DELEGATE_H_
-#include <vector>
-
#include "base/basictypes.h"
#include "base/i18n/rtl.h"
#include "content/common/content_export.h"
-#include "content/common/frame_message_enums.h"
#include "content/public/common/javascript_message_type.h"
#include "content/public/common/media_stream_request.h"
-#if defined(OS_WIN)
-#include "ui/gfx/native_widget_types.h"
-#endif
-
class GURL;
namespace IPC {
@@ -27,7 +20,6 @@ class Message;
namespace content {
class RenderFrameHost;
class WebContents;
-struct AXEventNotificationDetails;
struct ContextMenuParams;
// An interface implemented by an object interested in knowing about the state
@@ -127,18 +119,6 @@ class CONTENT_EXPORT RenderFrameHostDelegate {
const MediaStreamRequest& request,
const MediaResponseCallback& callback);
- // Get the accessibility mode for the WebContents that owns this frame.
- virtual AccessibilityMode GetAccessibilityMode() const;
-
- // Invoked when an accessibility event is received from the renderer.
- virtual void AccessibilityEventReceived(
- const std::vector<AXEventNotificationDetails>& details) {}
-
-#if defined(OS_WIN)
- // Returns the frame's parent's NativeViewAccessible.
- virtual gfx::NativeViewAccessible GetParentNativeViewAccessible();
-#endif
-
protected:
virtual ~RenderFrameHostDelegate() {}
};
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index 72dcc54..7e017ee 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -9,9 +9,6 @@
#include "base/lazy_instance.h"
#include "base/metrics/user_metrics_action.h"
#include "base/time/time.h"
-#include "content/browser/accessibility/accessibility_mode_helper.h"
-#include "content/browser/accessibility/browser_accessibility_manager.h"
-#include "content/browser/accessibility/browser_accessibility_state_impl.h"
#include "content/browser/child_process_security_policy_impl.h"
#include "content/browser/frame_host/cross_process_frame_connector.h"
#include "content/browser/frame_host/cross_site_transferring_request.h"
@@ -25,17 +22,13 @@
#include "content/browser/renderer_host/render_process_host_impl.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/browser/renderer_host/render_widget_host_impl.h"
-#include "content/browser/renderer_host/render_widget_host_view_base.h"
#include "content/browser/transition_request_manager.h"
-#include "content/common/accessibility_messages.h"
#include "content/common/desktop_notification_messages.h"
#include "content/common/frame_messages.h"
#include "content/common/input_messages.h"
#include "content/common/inter_process_time_ticks_converter.h"
#include "content/common/render_frame_setup.mojom.h"
#include "content/common/swapped_out_messages.h"
-#include "content/public/browser/ax_event_notification_details.h"
-#include "content/public/browser/browser_accessibility_state.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/content_browser_client.h"
#include "content/public/browser/desktop_notification_delegate.h"
@@ -45,7 +38,6 @@
#include "content/public/common/content_constants.h"
#include "content/public/common/url_constants.h"
#include "content/public/common/url_utils.h"
-#include "ui/accessibility/ax_tree.h"
#include "url/gurl.h"
using base::TimeDelta;
@@ -354,80 +346,11 @@ bool RenderFrameHostImpl::OnMessageReceived(const IPC::Message &msg) {
OnCancelDesktopNotification)
IPC_MESSAGE_HANDLER(FrameHostMsg_TextSurroundingSelectionResponse,
OnTextSurroundingSelectionResponse)
- IPC_MESSAGE_HANDLER(AccessibilityHostMsg_Events, OnAccessibilityEvents)
- IPC_MESSAGE_HANDLER(AccessibilityHostMsg_LocationChanges,
- OnAccessibilityLocationChanges)
IPC_END_MESSAGE_MAP()
return handled;
}
-void RenderFrameHostImpl::AccessibilitySetFocus(int object_id) {
- Send(new AccessibilityMsg_SetFocus(routing_id_, object_id));
-}
-
-void RenderFrameHostImpl::AccessibilityDoDefaultAction(int object_id) {
- Send(new AccessibilityMsg_DoDefaultAction(routing_id_, object_id));
-}
-
-void RenderFrameHostImpl::AccessibilityShowMenu(
- const gfx::Point& global_point) {
- RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>(
- render_view_host_->GetView());
- if (view)
- view->AccessibilityShowMenu(global_point);
-}
-
-void RenderFrameHostImpl::AccessibilityScrollToMakeVisible(
- int acc_obj_id, const gfx::Rect& subfocus) {
- Send(new AccessibilityMsg_ScrollToMakeVisible(
- routing_id_, acc_obj_id, subfocus));
-}
-
-void RenderFrameHostImpl::AccessibilityScrollToPoint(
- int acc_obj_id, const gfx::Point& point) {
- Send(new AccessibilityMsg_ScrollToPoint(
- routing_id_, acc_obj_id, point));
-}
-
-void RenderFrameHostImpl::AccessibilitySetTextSelection(
- int object_id, int start_offset, int end_offset) {
- Send(new AccessibilityMsg_SetTextSelection(
- routing_id_, object_id, start_offset, end_offset));
-}
-
-bool RenderFrameHostImpl::AccessibilityViewHasFocus() const {
- RenderWidgetHostView* view = render_view_host_->GetView();
- if (view)
- return view->HasFocus();
- return false;
-}
-
-gfx::Rect RenderFrameHostImpl::AccessibilityGetViewBounds() const {
- RenderWidgetHostView* view = render_view_host_->GetView();
- if (view)
- return view->GetViewBounds();
- return gfx::Rect();
-}
-
-gfx::Point RenderFrameHostImpl::AccessibilityOriginInScreen(
- const gfx::Rect& bounds) const {
- RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>(
- render_view_host_->GetView());
- if (view)
- return view->AccessibilityOriginInScreen(bounds);
- return gfx::Point();
-}
-
-void RenderFrameHostImpl::AccessibilityHitTest(const gfx::Point& point) {
- Send(new AccessibilityMsg_HitTest(routing_id_, point));
-}
-
-void RenderFrameHostImpl::AccessibilityFatalError() {
- Send(new AccessibilityMsg_FatalError(routing_id_));
- browser_accessibility_manager_.reset(NULL);
-}
-
void RenderFrameHostImpl::Init() {
GetProcess()->ResumeRequestsForView(routing_id_);
}
@@ -849,7 +772,6 @@ void RenderFrameHostImpl::OnUpdateEncoding(const std::string& encoding_name) {
delegate_->UpdateEncoding(this, encoding_name);
}
-
void RenderFrameHostImpl::OnBeginNavigation(
const FrameHostMsg_BeginNavigation_Params& params) {
#if defined(USE_BROWSER_SIDE_NAVIGATION)
@@ -857,78 +779,6 @@ void RenderFrameHostImpl::OnBeginNavigation(
#endif
}
-void RenderFrameHostImpl::OnAccessibilityEvents(
- const std::vector<AccessibilityHostMsg_EventParams>& params) {
- RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>(
- render_view_host_->GetView());
-
-
- AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode();
- if ((accessibility_mode != AccessibilityModeOff) && view &&
- RenderViewHostImpl::IsRVHStateActive(render_view_host_->rvh_state())) {
- if (accessibility_mode & AccessibilityModeFlagPlatform) {
- GetOrCreateBrowserAccessibilityManager();
- if (browser_accessibility_manager_)
- browser_accessibility_manager_->OnAccessibilityEvents(params);
- }
-
- std::vector<AXEventNotificationDetails> details;
- details.reserve(params.size());
- for (size_t i = 0; i < params.size(); ++i) {
- const AccessibilityHostMsg_EventParams& param = params[i];
- AXEventNotificationDetails detail(param.update.node_id_to_clear,
- param.update.nodes,
- param.event_type,
- param.id,
- GetProcess()->GetID(),
- routing_id_);
- details.push_back(detail);
- }
-
- delegate_->AccessibilityEventReceived(details);
- }
-
- // Always send an ACK or the renderer can be in a bad state.
- Send(new AccessibilityMsg_Events_ACK(routing_id_));
-
- // The rest of this code is just for testing; bail out if we're not
- // in that mode.
- if (accessibility_testing_callback_.is_null())
- return;
-
- for (size_t i = 0; i < params.size(); i++) {
- const AccessibilityHostMsg_EventParams& param = params[i];
- if (static_cast<int>(param.event_type) < 0)
- continue;
- if (!ax_tree_for_testing_) {
- ax_tree_for_testing_.reset(new ui::AXTree(param.update));
- } else {
- CHECK(ax_tree_for_testing_->Unserialize(param.update))
- << ax_tree_for_testing_->error();
- }
- accessibility_testing_callback_.Run(param.event_type, param.id);
- }
-}
-
-void RenderFrameHostImpl::OnAccessibilityLocationChanges(
- const std::vector<AccessibilityHostMsg_LocationChangeParams>& params) {
- RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>(
- render_view_host_->GetView());
- if (view &&
- RenderViewHostImpl::IsRVHStateActive(render_view_host_->rvh_state())) {
- AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode();
- if (accessibility_mode & AccessibilityModeFlagPlatform) {
- if (!browser_accessibility_manager_) {
- browser_accessibility_manager_.reset(
- view->CreateBrowserAccessibilityManager(this));
- }
- if (browser_accessibility_manager_)
- browser_accessibility_manager_->OnLocationChanges(params);
- }
- // TODO(aboxhall): send location change events to web contents observers too
- }
-}
-
void RenderFrameHostImpl::SetPendingShutdown(const base::Closure& on_swap_out) {
render_view_host_->SetPendingShutdown(on_swap_out);
}
@@ -1096,46 +946,6 @@ void RenderFrameHostImpl::DesktopNotificationPermissionRequestDone(
routing_id_, callback_context));
}
-void RenderFrameHostImpl::SetAccessibilityMode(AccessibilityMode mode) {
- Send(new FrameMsg_SetAccessibilityMode(routing_id_, mode));
-}
-
-void RenderFrameHostImpl::SetAccessibilityCallbackForTesting(
- const base::Callback<void(ui::AXEvent, int)>& callback) {
- accessibility_testing_callback_ = callback;
-}
-
-const ui::AXTree* RenderFrameHostImpl::GetAXTreeForTesting() {
- return ax_tree_for_testing_.get();
-}
-
-BrowserAccessibilityManager*
- RenderFrameHostImpl::GetOrCreateBrowserAccessibilityManager() {
- RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>(
- render_view_host_->GetView());
- if (view &&
- !browser_accessibility_manager_) {
- browser_accessibility_manager_.reset(
- view->CreateBrowserAccessibilityManager(this));
- }
- return browser_accessibility_manager_.get();
-}
-
-#if defined(OS_WIN)
-void RenderFrameHostImpl::SetParentNativeViewAccessible(
- gfx::NativeViewAccessible accessible_parent) {
- RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>(
- render_view_host_->GetView());
- if (view)
- view->SetParentNativeViewAccessible(accessible_parent);
-}
-
-gfx::NativeViewAccessible
-RenderFrameHostImpl::GetParentNativeViewAccessible() const {
- return delegate_->GetParentNativeViewAccessible();
-}
-#endif // defined(OS_WIN)
-
void RenderFrameHostImpl::SetHasPendingTransitionRequest(
bool has_pending_request) {
BrowserThread::PostTask(
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h
index 0aeb37f..86e05d6 100644
--- a/content/browser/frame_host/render_frame_host_impl.h
+++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -13,19 +13,14 @@
#include "base/memory/weak_ptr.h"
#include "base/strings/string16.h"
#include "base/time/time.h"
-#include "content/browser/accessibility/browser_accessibility_manager.h"
-#include "content/common/accessibility_mode_enums.h"
#include "content/common/content_export.h"
#include "content/common/mojo/service_registry_impl.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/common/javascript_message_type.h"
#include "content/public/common/page_transition_types.h"
#include "third_party/WebKit/public/web/WebTextDirection.h"
-#include "ui/accessibility/ax_node_data.h"
class GURL;
-struct AccessibilityHostMsg_EventParams;
-struct AccessibilityHostMsg_LocationChangeParams;
struct FrameHostMsg_DidFailProvisionalLoadWithError_Params;
struct FrameHostMsg_OpenURL_Params;
struct FrameHostMsg_BeginNavigation_Params;
@@ -52,9 +47,7 @@ struct GlobalRequestID;
struct Referrer;
struct ShowDesktopNotificationHostMsgParams;
-class CONTENT_EXPORT RenderFrameHostImpl
- : public RenderFrameHost,
- public BrowserAccessibilityDelegate {
+class CONTENT_EXPORT RenderFrameHostImpl : public RenderFrameHost {
public:
static RenderFrameHostImpl* FromID(int process_id, int routing_id);
@@ -83,23 +76,6 @@ class CONTENT_EXPORT RenderFrameHostImpl
// IPC::Listener
virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
- // BrowserAccessibilityDelegate
- virtual void AccessibilitySetFocus(int acc_obj_id) OVERRIDE;
- virtual void AccessibilityDoDefaultAction(int acc_obj_id) OVERRIDE;
- virtual void AccessibilityShowMenu(const gfx::Point& global_point) OVERRIDE;
- virtual void AccessibilityScrollToMakeVisible(
- int acc_obj_id, const gfx::Rect& subfocus) OVERRIDE;
- virtual void AccessibilityScrollToPoint(
- int acc_obj_id, const gfx::Point& point) OVERRIDE;
- virtual void AccessibilitySetTextSelection(
- int acc_obj_id, int start_offset, int end_offset) OVERRIDE;
- virtual bool AccessibilityViewHasFocus() const OVERRIDE;
- virtual gfx::Rect AccessibilityGetViewBounds() const OVERRIDE;
- virtual gfx::Point AccessibilityOriginInScreen(const gfx::Rect& bounds)
- const OVERRIDE;
- virtual void AccessibilityHitTest(const gfx::Point& point) OVERRIDE;
- virtual void AccessibilityFatalError() OVERRIDE;
-
void Init();
int routing_id() const { return routing_id_; }
void OnCreateChildFrame(int new_routing_id,
@@ -203,37 +179,6 @@ class CONTENT_EXPORT RenderFrameHostImpl
// hear the response or commit.
void SetHasPendingTransitionRequest(bool has_pending_request);
- // Send a message to the renderer process to change the accessibility mode.
- void SetAccessibilityMode(AccessibilityMode AccessibilityMode);
-
- // Turn on accessibility testing. The given callback will be run
- // every time an accessibility notification is received from the
- // renderer process, and the accessibility tree it sent can be
- // retrieved using GetAXTreeForTesting().
- void SetAccessibilityCallbackForTesting(
- const base::Callback<void(ui::AXEvent, int)>& callback);
-
- // Returns a snapshot of the accessibility tree received from the
- // renderer as of the last time an accessibility notification was
- // received.
- const ui::AXTree* GetAXTreeForTesting();
-
- // Access the BrowserAccessibilityManager if it already exists.
- BrowserAccessibilityManager* browser_accessibility_manager() const {
- return browser_accessibility_manager_.get();
- }
-
- // If accessibility is enabled, get the BrowserAccessibilityManager for
- // this frame, or create one if it doesn't exist yet, otherwise return
- // NULL.
- BrowserAccessibilityManager* GetOrCreateBrowserAccessibilityManager();
-
-#if defined(OS_WIN)
- void SetParentNativeViewAccessible(
- gfx::NativeViewAccessible accessible_parent);
- gfx::NativeViewAccessible GetParentNativeViewAccessible() const;
-#endif
-
protected:
friend class RenderFrameHostFactory;
@@ -304,10 +249,6 @@ class CONTENT_EXPORT RenderFrameHostImpl
void OnUpdateEncoding(const std::string& encoding);
void OnBeginNavigation(
const FrameHostMsg_BeginNavigation_Params& params);
- void OnAccessibilityEvents(
- const std::vector<AccessibilityHostMsg_EventParams>& params);
- void OnAccessibilityLocationChanges(
- const std::vector<AccessibilityHostMsg_LocationChangeParams>& params);
// Returns whether the given URL is allowed to commit in the current process.
// This is a more conservative check than RenderProcessHost::FilterURL, since
@@ -369,13 +310,6 @@ class CONTENT_EXPORT RenderFrameHostImpl
base::WeakPtrFactory<RenderFrameHostImpl> weak_ptr_factory_;
- scoped_ptr<BrowserAccessibilityManager> browser_accessibility_manager_;
-
- // Callback when an event is received, for testing.
- base::Callback<void(ui::AXEvent, int)> accessibility_testing_callback_;
- // The most recently received accessibility tree - for testing only.
- scoped_ptr<ui::AXTree> ax_tree_for_testing_;
-
DISALLOW_COPY_AND_ASSIGN(RenderFrameHostImpl);
};
diff --git a/content/browser/renderer_host/legacy_render_widget_host_win.cc b/content/browser/renderer_host/legacy_render_widget_host_win.cc
index db8ca80..9c2e1a2 100644
--- a/content/browser/renderer_host/legacy_render_widget_host_win.cc
+++ b/content/browser/renderer_host/legacy_render_widget_host_win.cc
@@ -70,10 +70,8 @@ HWND LegacyRenderWidgetHostHWND::GetParent() {
return ::GetParent(hwnd());
}
-void LegacyRenderWidgetHostHWND::OnManagerDeleted(
- content::BrowserAccessibilityManagerWin* manager) {
- if (manager_ == manager)
- manager_ = NULL;
+void LegacyRenderWidgetHostHWND::OnManagerDeleted() {
+ manager_ = NULL;
}
void LegacyRenderWidgetHostHWND::Show() {
diff --git a/content/browser/renderer_host/legacy_render_widget_host_win.h b/content/browser/renderer_host/legacy_render_widget_host_win.h
index ce08a0e..eb7d832 100644
--- a/content/browser/renderer_host/legacy_render_widget_host_win.h
+++ b/content/browser/renderer_host/legacy_render_widget_host_win.h
@@ -99,7 +99,7 @@ class CONTENT_EXPORT LegacyRenderWidgetHostHWND
manager_ = manager;
}
- void OnManagerDeleted(content::BrowserAccessibilityManagerWin* manager);
+ void OnManagerDeleted();
// Functions to show and hide the window.
void Show();
diff --git a/content/browser/renderer_host/render_view_host_delegate.h b/content/browser/renderer_host/render_view_host_delegate.h
index 4a44123..a9dea8b 100644
--- a/content/browser/renderer_host/render_view_host_delegate.h
+++ b/content/browser/renderer_host/render_view_host_delegate.h
@@ -51,6 +51,7 @@ class SessionStorageNamespace;
class SiteInstance;
class WebContents;
class WebContentsImpl;
+struct AXEventNotificationDetails;
struct FileChooserParams;
struct GlobalRequestID;
struct NativeWebKeyboardEvent;
@@ -283,6 +284,10 @@ class CONTENT_EXPORT RenderViewHostDelegate {
// created by the RenderViewHost.
virtual FrameTree* GetFrameTree();
+ // Invoked when an accessibility event is received from the renderer.
+ virtual void AccessibilityEventReceived(
+ const std::vector<AXEventNotificationDetails>& details) {}
+
protected:
virtual ~RenderViewHostDelegate() {}
};
diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc
index a5b1d60..4184fde 100644
--- a/content/browser/renderer_host/render_view_host_impl.cc
+++ b/content/browser/renderer_host/render_view_host_impl.cc
@@ -23,6 +23,7 @@
#include "base/time/time.h"
#include "base/values.h"
#include "cc/base/switches.h"
+#include "content/browser/accessibility/browser_accessibility_manager.h"
#include "content/browser/child_process_security_policy_impl.h"
#include "content/browser/cross_site_request_manager.h"
#include "content/browser/dom_storage/session_storage_namespace_impl.h"
@@ -40,6 +41,7 @@
#include "content/browser/renderer_host/render_view_host_delegate.h"
#include "content/browser/renderer_host/render_view_host_delegate_view.h"
#include "content/browser/renderer_host/render_widget_host_view_base.h"
+#include "content/common/accessibility_messages.h"
#include "content/common/browser_plugin/browser_plugin_messages.h"
#include "content/common/content_switches_internal.h"
#include "content/common/drag_messages.h"
@@ -74,6 +76,7 @@
#include "net/base/network_change_notifier.h"
#include "net/url_request/url_request_context_getter.h"
#include "third_party/skia/include/core/SkBitmap.h"
+#include "ui/accessibility/ax_tree.h"
#include "ui/base/touch/touch_device.h"
#include "ui/base/touch/touch_enabled.h"
#include "ui/base/ui_base_switches.h"
@@ -305,6 +308,7 @@ bool RenderViewHostImpl::CreateRenderView(
params.window_was_created_with_opener = window_was_created_with_opener;
params.next_page_id = next_page_id;
GetWebScreenInfo(&params.screen_info);
+ params.accessibility_mode = accessibility_mode();
Send(new ViewMsg_New(params));
@@ -973,6 +977,9 @@ bool RenderViewHostImpl::OnMessageReceived(const IPC::Message& msg) {
IPC_MESSAGE_HANDLER(ViewHostMsg_HidePopup, OnHidePopup)
#endif
IPC_MESSAGE_HANDLER(ViewHostMsg_RunFileChooser, OnRunFileChooser)
+ IPC_MESSAGE_HANDLER(AccessibilityHostMsg_Events, OnAccessibilityEvents)
+ IPC_MESSAGE_HANDLER(AccessibilityHostMsg_LocationChanges,
+ OnAccessibilityLocationChanges)
IPC_MESSAGE_HANDLER(ViewHostMsg_FocusedNodeTouched, OnFocusedNodeTouched)
// Have the super handle all other messages.
IPC_MESSAGE_UNHANDLED(
@@ -1430,6 +1437,11 @@ void RenderViewHostImpl::DisownOpener() {
Send(new ViewMsg_DisownOpener(GetRoutingID()));
}
+void RenderViewHostImpl::SetAccessibilityCallbackForTesting(
+ const base::Callback<void(ui::AXEvent, int)>& callback) {
+ accessibility_testing_callback_ = callback;
+}
+
void RenderViewHostImpl::UpdateWebkitPreferences(const WebPreferences& prefs) {
Send(new ViewMsg_UpdateWebPreferences(GetRoutingID(), prefs));
}
@@ -1495,6 +1507,67 @@ void RenderViewHostImpl::NotifyMoveOrResizeStarted() {
Send(new ViewMsg_MoveOrResizeStarted(GetRoutingID()));
}
+void RenderViewHostImpl::OnAccessibilityEvents(
+ const std::vector<AccessibilityHostMsg_EventParams>& params) {
+ if ((accessibility_mode() != AccessibilityModeOff) && view_ &&
+ IsRVHStateActive(rvh_state_)) {
+ if (accessibility_mode() & AccessibilityModeFlagPlatform) {
+ view_->CreateBrowserAccessibilityManagerIfNeeded();
+ BrowserAccessibilityManager* manager =
+ view_->GetBrowserAccessibilityManager();
+ if (manager)
+ manager->OnAccessibilityEvents(params);
+ }
+
+ std::vector<AXEventNotificationDetails> details;
+ for (unsigned int i = 0; i < params.size(); ++i) {
+ const AccessibilityHostMsg_EventParams& param = params[i];
+ AXEventNotificationDetails detail(param.update.node_id_to_clear,
+ param.update.nodes,
+ param.event_type,
+ param.id,
+ GetProcess()->GetID(),
+ GetRoutingID());
+ details.push_back(detail);
+ }
+
+ delegate_->AccessibilityEventReceived(details);
+ }
+
+ // Always send an ACK or the renderer can be in a bad state.
+ Send(new AccessibilityMsg_Events_ACK(GetRoutingID()));
+
+ // The rest of this code is just for testing; bail out if we're not
+ // in that mode.
+ if (accessibility_testing_callback_.is_null())
+ return;
+
+ for (unsigned i = 0; i < params.size(); i++) {
+ const AccessibilityHostMsg_EventParams& param = params[i];
+ if (static_cast<int>(param.event_type) < 0)
+ continue;
+ if (!ax_tree_)
+ ax_tree_.reset(new ui::AXTree(param.update));
+ else
+ CHECK(ax_tree_->Unserialize(param.update)) << ax_tree_->error();
+ accessibility_testing_callback_.Run(param.event_type, param.id);
+ }
+}
+
+void RenderViewHostImpl::OnAccessibilityLocationChanges(
+ const std::vector<AccessibilityHostMsg_LocationChangeParams>& params) {
+ if (view_ && IsRVHStateActive(rvh_state_)) {
+ if (accessibility_mode() & AccessibilityModeFlagPlatform) {
+ view_->CreateBrowserAccessibilityManagerIfNeeded();
+ BrowserAccessibilityManager* manager =
+ view_->GetBrowserAccessibilityManager();
+ if (manager)
+ manager->OnLocationChanges(params);
+ }
+ // TODO(aboxhall): send location change events to web contents observers too
+ }
+}
+
void RenderViewHostImpl::OnDidZoomURL(double zoom_level,
const GURL& url) {
HostZoomMapImpl* host_zoom_map = static_cast<HostZoomMapImpl*>(
diff --git a/content/browser/renderer_host/render_view_host_impl.h b/content/browser/renderer_host/render_view_host_impl.h
index e2a9764..204d31c 100644
--- a/content/browser/renderer_host/render_view_host_impl.h
+++ b/content/browser/renderer_host/render_view_host_impl.h
@@ -25,10 +25,13 @@
#include "third_party/WebKit/public/web/WebConsoleMessage.h"
#include "third_party/WebKit/public/web/WebPopupType.h"
#include "third_party/skia/include/core/SkColor.h"
+#include "ui/accessibility/ax_node_data.h"
#include "ui/base/window_open_disposition.h"
class SkBitmap;
class FrameMsg_Navigate;
+struct AccessibilityHostMsg_EventParams;
+struct AccessibilityHostMsg_LocationChangeParams;
struct MediaPlayerAction;
struct ViewHostMsg_CreateWindow_Params;
struct ViewHostMsg_ShowPopup_Params;
@@ -405,6 +408,30 @@ class CONTENT_EXPORT RenderViewHostImpl
// Set the opener to null in the renderer process.
void DisownOpener();
+ // Turn on accessibility testing. The given callback will be run
+ // every time an accessibility notification is received from the
+ // renderer process, and the accessibility tree it sent can be
+ // retrieved using accessibility_tree_for_testing().
+ void SetAccessibilityCallbackForTesting(
+ const base::Callback<void(ui::AXEvent, int)>& callback);
+
+ // Only valid if SetAccessibilityCallbackForTesting was called and
+ // the callback was run at least once. Returns a snapshot of the
+ // accessibility tree received from the renderer as of the last time
+ // an accessibility notification was received.
+ const ui::AXTree& ax_tree_for_testing() {
+ CHECK(ax_tree_.get());
+ return *ax_tree_.get();
+ }
+
+ // Set accessibility callbacks.
+ void SetAccessibilityLayoutCompleteCallbackForTesting(
+ const base::Closure& callback);
+ void SetAccessibilityLoadCompleteCallbackForTesting(
+ const base::Closure& callback);
+ void SetAccessibilityOtherCallbackForTesting(
+ const base::Closure& callback);
+
bool is_waiting_for_beforeunload_ack() {
return is_waiting_for_beforeunload_ack_;
}
@@ -485,6 +512,10 @@ class CONTENT_EXPORT RenderViewHostImpl
void OnUpdateInspectorSetting(const std::string& key,
const std::string& value);
void OnClosePageACK();
+ void OnAccessibilityEvents(
+ const std::vector<AccessibilityHostMsg_EventParams>& params);
+ void OnAccessibilityLocationChanges(
+ const std::vector<AccessibilityHostMsg_LocationChangeParams>& params);
void OnDidZoomURL(double zoom_level, const GURL& url);
void OnRunFileChooser(const FileChooserParams& params);
void OnFocusedNodeTouched(bool editable);
@@ -577,6 +608,12 @@ class CONTENT_EXPORT RenderViewHostImpl
// TODO(nasko): Move to RenderFrameHost, as this is per-frame state.
bool unload_ack_is_for_cross_site_transition_;
+ // Accessibility callback for testing.
+ base::Callback<void(ui::AXEvent, int)> accessibility_testing_callback_;
+
+ // The most recently received accessibility tree - for testing only.
+ scoped_ptr<ui::AXTree> ax_tree_;
+
// True if the render view can be shut down suddenly.
bool sudden_termination_allowed_;
diff --git a/content/browser/renderer_host/render_widget_host_delegate.cc b/content/browser/renderer_host/render_widget_host_delegate.cc
index a3a474f..23687d0 100644
--- a/content/browser/renderer_host/render_widget_host_delegate.cc
+++ b/content/browser/renderer_host/render_widget_host_delegate.cc
@@ -2,7 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "base/basictypes.h"
#include "content/browser/renderer_host/render_widget_host_delegate.h"
namespace content {
@@ -28,19 +27,9 @@ bool RenderWidgetHostDelegate::HandleGestureEvent(
return false;
}
-BrowserAccessibilityManager*
- RenderWidgetHostDelegate::GetRootBrowserAccessibilityManager() {
- return NULL;
-}
-
-BrowserAccessibilityManager*
- RenderWidgetHostDelegate::GetOrCreateRootBrowserAccessibilityManager() {
- return NULL;
-}
-
#if defined(OS_WIN)
gfx::NativeViewAccessible
- RenderWidgetHostDelegate::GetParentNativeViewAccessible() {
+RenderWidgetHostDelegate::GetParentNativeViewAccessible() {
return NULL;
}
#endif
diff --git a/content/browser/renderer_host/render_widget_host_delegate.h b/content/browser/renderer_host/render_widget_host_delegate.h
index 0efed29..91ce943 100644
--- a/content/browser/renderer_host/render_widget_host_delegate.h
+++ b/content/browser/renderer_host/render_widget_host_delegate.h
@@ -16,7 +16,6 @@ class WebGestureEvent;
namespace content {
-class BrowserAccessibilityManager;
class RenderWidgetHostImpl;
struct NativeWebKeyboardEvent;
@@ -63,15 +62,8 @@ class CONTENT_EXPORT RenderWidgetHostDelegate {
// Notifies that RenderWidgetHost will toggle touch emulation.
virtual void OnTouchEmulationEnabled(bool enabled) {}
- // Get the root BrowserAccessibilityManager for this frame tree.
- virtual BrowserAccessibilityManager* GetRootBrowserAccessibilityManager();
-
- // Get the root BrowserAccessibilityManager for this frame tree,
- // or create it if it doesn't exist.
- virtual BrowserAccessibilityManager*
- GetOrCreateRootBrowserAccessibilityManager();
-
#if defined(OS_WIN)
+ // Returns the widget's parent's NativeViewAccessible.
virtual gfx::NativeViewAccessible GetParentNativeViewAccessible();
#endif
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
index 8ca48bc..24c6a21 100644
--- a/content/browser/renderer_host/render_widget_host_impl.cc
+++ b/content/browser/renderer_host/render_widget_host_impl.cc
@@ -45,6 +45,7 @@
#include "content/browser/renderer_host/render_widget_host_delegate.h"
#include "content/browser/renderer_host/render_widget_host_view_base.h"
#include "content/browser/renderer_host/render_widget_resize_helper.h"
+#include "content/common/accessibility_messages.h"
#include "content/common/content_constants_internal.h"
#include "content/common/cursors/webcursor.h"
#include "content/common/gpu/gpu_messages.h"
@@ -171,6 +172,7 @@ RenderWidgetHostImpl::RenderWidgetHostImpl(RenderWidgetHostDelegate* delegate,
overdraw_bottom_height_(0.f),
should_auto_resize_(false),
waiting_for_screen_rects_ack_(false),
+ accessibility_mode_(AccessibilityModeOff),
needs_repainting_on_restore_(false),
is_unresponsive_(false),
in_flight_event_count_(0),
@@ -218,6 +220,9 @@ RenderWidgetHostImpl::RenderWidgetHostImpl(RenderWidgetHostDelegate* delegate,
if (!hidden)
process_->WidgetRestored();
+ accessibility_mode_ =
+ BrowserAccessibilityStateImpl::GetInstance()->accessibility_mode();
+
input_router_.reset(new InputRouterImpl(
process_, this, this, routing_id_, GetInputRouterConfigForPlatform()));
@@ -841,6 +846,22 @@ void RenderWidgetHostImpl::StopHangMonitorTimeout() {
RendererIsResponsive();
}
+void RenderWidgetHostImpl::EnableFullAccessibilityMode() {
+ AddAccessibilityMode(AccessibilityModeComplete);
+}
+
+bool RenderWidgetHostImpl::IsFullAccessibilityModeForTesting() {
+ return accessibility_mode() == AccessibilityModeComplete;
+}
+
+void RenderWidgetHostImpl::EnableTreeOnlyAccessibilityMode() {
+ AddAccessibilityMode(AccessibilityModeTreeOnly);
+}
+
+bool RenderWidgetHostImpl::IsTreeOnlyAccessibilityModeForTesting() {
+ return accessibility_mode() == AccessibilityModeTreeOnly;
+}
+
void RenderWidgetHostImpl::ForwardMouseEvent(const WebMouseEvent& mouse_event) {
ForwardMouseEventWithLatencyInfo(mouse_event, ui::LatencyInfo());
}
@@ -1885,6 +1906,92 @@ void RenderWidgetHostImpl::SetEditCommandsForNextKeyEvent(
Send(new InputMsg_SetEditCommandsForNextKeyEvent(GetRoutingID(), commands));
}
+void RenderWidgetHostImpl::AddAccessibilityMode(AccessibilityMode mode) {
+ SetAccessibilityMode(
+ content::AddAccessibilityModeTo(accessibility_mode_, mode));
+}
+
+void RenderWidgetHostImpl::RemoveAccessibilityMode(AccessibilityMode mode) {
+ SetAccessibilityMode(
+ content::RemoveAccessibilityModeFrom(accessibility_mode_, mode));
+}
+
+void RenderWidgetHostImpl::ResetAccessibilityMode() {
+ SetAccessibilityMode(
+ BrowserAccessibilityStateImpl::GetInstance()->accessibility_mode());
+}
+
+void RenderWidgetHostImpl::SetAccessibilityMode(AccessibilityMode mode) {
+ accessibility_mode_ = mode;
+ Send(new ViewMsg_SetAccessibilityMode(GetRoutingID(), mode));
+}
+
+void RenderWidgetHostImpl::AccessibilitySetFocus(int object_id) {
+ Send(new AccessibilityMsg_SetFocus(GetRoutingID(), object_id));
+ view_->OnAccessibilitySetFocus(object_id);
+}
+
+void RenderWidgetHostImpl::AccessibilityDoDefaultAction(int object_id) {
+ Send(new AccessibilityMsg_DoDefaultAction(GetRoutingID(), object_id));
+}
+
+void RenderWidgetHostImpl::AccessibilityShowMenu(int object_id) {
+ view_->AccessibilityShowMenu(object_id);
+}
+
+void RenderWidgetHostImpl::AccessibilityScrollToMakeVisible(
+ int acc_obj_id, gfx::Rect subfocus) {
+ Send(new AccessibilityMsg_ScrollToMakeVisible(
+ GetRoutingID(), acc_obj_id, subfocus));
+}
+
+void RenderWidgetHostImpl::AccessibilityScrollToPoint(
+ int acc_obj_id, gfx::Point point) {
+ Send(new AccessibilityMsg_ScrollToPoint(
+ GetRoutingID(), acc_obj_id, point));
+}
+
+void RenderWidgetHostImpl::AccessibilitySetTextSelection(
+ int object_id, int start_offset, int end_offset) {
+ Send(new AccessibilityMsg_SetTextSelection(
+ GetRoutingID(), object_id, start_offset, end_offset));
+}
+
+bool RenderWidgetHostImpl::AccessibilityViewHasFocus() const {
+ return view_->HasFocus();
+}
+
+gfx::Rect RenderWidgetHostImpl::AccessibilityGetViewBounds() const {
+ return view_->GetViewBounds();
+}
+
+gfx::Point RenderWidgetHostImpl::AccessibilityOriginInScreen(
+ const gfx::Rect& bounds) const {
+ return view_->AccessibilityOriginInScreen(bounds);
+}
+
+void RenderWidgetHostImpl::AccessibilityHitTest(const gfx::Point& point) {
+ Send(new AccessibilityMsg_HitTest(GetRoutingID(), point));
+}
+
+void RenderWidgetHostImpl::AccessibilityFatalError() {
+ Send(new AccessibilityMsg_FatalError(GetRoutingID()));
+ view_->SetBrowserAccessibilityManager(NULL);
+}
+
+#if defined(OS_WIN)
+void RenderWidgetHostImpl::SetParentNativeViewAccessible(
+ gfx::NativeViewAccessible accessible_parent) {
+ if (view_)
+ view_->SetParentNativeViewAccessible(accessible_parent);
+}
+
+gfx::NativeViewAccessible
+RenderWidgetHostImpl::GetParentNativeViewAccessible() const {
+ return delegate_->GetParentNativeViewAccessible();
+}
+#endif
+
void RenderWidgetHostImpl::ExecuteEditCommand(const std::string& command,
const std::string& value) {
Send(new InputMsg_ExecuteEditCommand(GetRoutingID(), command, value));
@@ -2234,24 +2341,6 @@ void RenderWidgetHostImpl::AddLatencyInfoComponentIds(
}
}
-BrowserAccessibilityManager*
- RenderWidgetHostImpl::GetRootBrowserAccessibilityManager() {
- return delegate_ ? delegate_->GetRootBrowserAccessibilityManager() : NULL;
-}
-
-BrowserAccessibilityManager*
- RenderWidgetHostImpl::GetOrCreateRootBrowserAccessibilityManager() {
- return delegate_ ?
- delegate_->GetOrCreateRootBrowserAccessibilityManager() : NULL;
-}
-
-#if defined(OS_WIN)
-gfx::NativeViewAccessible
- RenderWidgetHostImpl::GetParentNativeViewAccessible() {
- return delegate_ ? delegate_->GetParentNativeViewAccessible() : NULL;
-}
-#endif
-
SkColorType RenderWidgetHostImpl::PreferredReadbackFormat() {
if (view_)
return view_->PreferredReadbackFormat();
diff --git a/content/browser/renderer_host/render_widget_host_impl.h b/content/browser/renderer_host/render_widget_host_impl.h
index a26f609..6f884b6 100644
--- a/content/browser/renderer_host/render_widget_host_impl.h
+++ b/content/browser/renderer_host/render_widget_host_impl.h
@@ -24,6 +24,7 @@
#include "base/timer/timer.h"
#include "build/build_config.h"
#include "cc/resources/shared_bitmap.h"
+#include "content/browser/accessibility/browser_accessibility_manager.h"
#include "content/browser/renderer_host/event_with_latency_info.h"
#include "content/browser/renderer_host/input/input_ack_handler.h"
#include "content/browser/renderer_host/input/input_router_client.h"
@@ -77,7 +78,6 @@ class WebLayer;
#endif
namespace content {
-class BrowserAccessibilityManager;
class InputRouter;
class MockRenderWidgetHost;
class RenderWidgetHostDelegate;
@@ -95,7 +95,8 @@ class CONTENT_EXPORT RenderWidgetHostImpl
public InputRouterClient,
public InputAckHandler,
public TouchEmulatorClient,
- public IPC::Listener {
+ public IPC::Listener,
+ public BrowserAccessibilityDelegate {
public:
// routing_id can be MSG_ROUTING_NONE, in which case the next available
// routing id is taken from the RenderProcessHost.
@@ -140,6 +141,10 @@ class CONTENT_EXPORT RenderWidgetHostImpl
virtual void LockBackingStore() OVERRIDE;
virtual void UnlockBackingStore() OVERRIDE;
#endif
+ virtual void EnableFullAccessibilityMode() OVERRIDE;
+ virtual bool IsFullAccessibilityModeForTesting() OVERRIDE;
+ virtual void EnableTreeOnlyAccessibilityMode() OVERRIDE;
+ virtual bool IsTreeOnlyAccessibilityModeForTesting() OVERRIDE;
virtual void ForwardMouseEvent(
const blink::WebMouseEvent& mouse_event) OVERRIDE;
virtual void ForwardWheelEvent(
@@ -169,6 +174,23 @@ class CONTENT_EXPORT RenderWidgetHostImpl
virtual SkColorType PreferredReadbackFormat() OVERRIDE;
+ // BrowserAccessibilityDelegate
+ 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;
+ virtual gfx::Rect AccessibilityGetViewBounds() const OVERRIDE;
+ virtual gfx::Point AccessibilityOriginInScreen(const gfx::Rect& bounds)
+ const OVERRIDE;
+ virtual void AccessibilityHitTest(const gfx::Point& point) OVERRIDE;
+ virtual void AccessibilityFatalError() OVERRIDE;
+
// Forces redraw in the renderer and when the update reaches the browser
// grabs snapshot from the compositor. Returns PNG-encoded snapshot.
void GetSnapshotFromBrowser(
@@ -373,6 +395,30 @@ class CONTENT_EXPORT RenderWidgetHostImpl
void SetEditCommandsForNextKeyEvent(
const std::vector<EditCommand>& commands);
+ // Gets the accessibility mode.
+ AccessibilityMode accessibility_mode() const {
+ return accessibility_mode_;
+ }
+
+ // Adds the given accessibility mode to the current accessibility mode bitmap.
+ void AddAccessibilityMode(AccessibilityMode mode);
+
+ // Removes the given accessibility mode from the current accessibility mode
+ // bitmap, managing the bits that are shared with other modes such that a
+ // bit will only be turned off when all modes that depend on it have been
+ // removed.
+ void RemoveAccessibilityMode(AccessibilityMode mode);
+
+ // Resets the accessibility mode to the default setting in
+ // BrowserStateAccessibilityImpl.
+ void ResetAccessibilityMode();
+
+#if defined(OS_WIN)
+ void SetParentNativeViewAccessible(
+ gfx::NativeViewAccessible accessible_parent);
+ gfx::NativeViewAccessible GetParentNativeViewAccessible() const;
+#endif
+
// Executes the edit command on the RenderView.
void ExecuteEditCommand(const std::string& command,
const std::string& value);
@@ -474,17 +520,6 @@ class CONTENT_EXPORT RenderWidgetHostImpl
InputRouter* input_router() { return input_router_.get(); }
- // Get the BrowserAccessibilityManager for the root of the frame tree,
- BrowserAccessibilityManager* GetRootBrowserAccessibilityManager();
-
- // Get the BrowserAccessibilityManager for the root of the frame tree,
- // or create it if it doesn't already exist.
- BrowserAccessibilityManager* GetOrCreateRootBrowserAccessibilityManager();
-
-#if defined(OS_WIN)
- gfx::NativeViewAccessible GetParentNativeViewAccessible();
-#endif
-
protected:
virtual RenderWidgetHostImpl* AsRenderWidgetHostImpl() OVERRIDE;
@@ -674,6 +709,9 @@ class CONTENT_EXPORT RenderWidgetHostImpl
int snapshot_id,
scoped_refptr<base::RefCountedBytes> png_data);
+ // Send a message to the renderer process to change the accessibility mode.
+ void SetAccessibilityMode(AccessibilityMode AccessibilityMode);
+
// Our delegate, which wants to know mainly about keyboard events.
// It will remain non-NULL until DetachDelegate() is called.
RenderWidgetHostDelegate* delegate_;
@@ -745,6 +783,8 @@ class CONTENT_EXPORT RenderWidgetHostImpl
gfx::Rect last_view_screen_rect_;
gfx::Rect last_window_screen_rect_;
+ AccessibilityMode accessibility_mode_;
+
// Keyboard event listeners.
std::vector<KeyPressEventCallback> key_press_event_callbacks_;
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
index a56a1f1..cf5cf24 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -1150,16 +1150,20 @@ void RenderWidgetHostViewAndroid::OnSetNeedsFlushInput() {
content_view_core_->GetWindowAndroid()->RequestVSyncUpdate();
}
-BrowserAccessibilityManager*
- RenderWidgetHostViewAndroid::CreateBrowserAccessibilityManager(
- BrowserAccessibilityDelegate* delegate) {
- base::android::ScopedJavaLocalRef<jobject> obj;
- if (content_view_core_)
- obj = content_view_core_->GetJavaObject();
- return new BrowserAccessibilityManagerAndroid(
- obj,
- BrowserAccessibilityManagerAndroid::GetEmptyDocument(),
- delegate);
+void RenderWidgetHostViewAndroid::CreateBrowserAccessibilityManagerIfNeeded() {
+ if (!host_ || host_->accessibility_mode() != AccessibilityModeComplete)
+ return;
+
+ if (!GetBrowserAccessibilityManager()) {
+ base::android::ScopedJavaLocalRef<jobject> obj;
+ if (content_view_core_)
+ obj = content_view_core_->GetJavaObject();
+ SetBrowserAccessibilityManager(
+ new BrowserAccessibilityManagerAndroid(
+ obj,
+ BrowserAccessibilityManagerAndroid::GetEmptyDocument(),
+ host_));
+ }
}
bool RenderWidgetHostViewAndroid::LockMouse() {
@@ -1264,14 +1268,12 @@ void RenderWidgetHostViewAndroid::SetContentViewCore(
content_view_core_ = content_view_core;
- BrowserAccessibilityManager* manager = NULL;
- if (host_)
- manager = host_->GetRootBrowserAccessibilityManager();
- if (manager) {
+ if (GetBrowserAccessibilityManager()) {
base::android::ScopedJavaLocalRef<jobject> obj;
if (content_view_core_)
obj = content_view_core_->GetJavaObject();
- manager->ToBrowserAccessibilityManagerAndroid()->SetContentViewCore(obj);
+ GetBrowserAccessibilityManager()->ToBrowserAccessibilityManagerAndroid()->
+ SetContentViewCore(obj);
}
AttachLayers();
diff --git a/content/browser/renderer_host/render_widget_host_view_android.h b/content/browser/renderer_host/render_widget_host_view_android.h
index 6d05761..6bbd636 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.h
+++ b/content/browser/renderer_host/render_widget_host_view_android.h
@@ -148,8 +148,7 @@ class CONTENT_EXPORT RenderWidgetHostViewAndroid
virtual void OnSetNeedsFlushInput() OVERRIDE;
virtual void GestureEventAck(const blink::WebGestureEvent& event,
InputEventAckState ack_result) OVERRIDE;
- virtual BrowserAccessibilityManager* CreateBrowserAccessibilityManager(
- BrowserAccessibilityDelegate* delegate) OVERRIDE;
+ virtual void CreateBrowserAccessibilityManagerIfNeeded() OVERRIDE;
virtual bool LockMouse() OVERRIDE;
virtual void UnlockMouse() OVERRIDE;
virtual void OnSwapCompositorFrame(
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc
index ad9fffb..205f3fc 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -651,8 +651,9 @@ gfx::NativeViewAccessible RenderWidgetHostViewAura::GetNativeViewAccessible() {
if (!host)
return static_cast<gfx::NativeViewAccessible>(NULL);
HWND hwnd = host->GetAcceleratedWidget();
- BrowserAccessibilityManager* manager =
- host_->GetOrCreateRootBrowserAccessibilityManager();
+
+ CreateBrowserAccessibilityManagerIfNeeded();
+ BrowserAccessibilityManager* manager = GetBrowserAccessibilityManager();
if (manager)
return manager->GetRoot()->ToBrowserAccessibilityWin();
#endif
@@ -1042,10 +1043,8 @@ void RenderWidgetHostViewAura::OnSwapCompositorFrame(
#if defined(OS_WIN)
void RenderWidgetHostViewAura::SetParentNativeViewAccessible(
gfx::NativeViewAccessible accessible_parent) {
- BrowserAccessibilityManager* manager =
- host_->GetRootBrowserAccessibilityManager();
- if (manager) {
- manager->ToBrowserAccessibilityManagerWin()
+ if (GetBrowserAccessibilityManager()) {
+ GetBrowserAccessibilityManager()->ToBrowserAccessibilityManagerWin()
->set_parent_iaccessible(accessible_parent);
}
}
@@ -1192,21 +1191,22 @@ InputEventAckState RenderWidgetHostViewAura::FilterInputEvent(
: INPUT_EVENT_ACK_STATE_NOT_CONSUMED;
}
-BrowserAccessibilityManager*
-RenderWidgetHostViewAura::CreateBrowserAccessibilityManager(
- BrowserAccessibilityDelegate* delegate) {
- BrowserAccessibilityManager* manager = NULL;
+void RenderWidgetHostViewAura::CreateBrowserAccessibilityManagerIfNeeded() {
#if defined(OS_WIN)
- gfx::NativeViewAccessible accessible_parent =
- host_->GetParentNativeViewAccessible();
- manager = new BrowserAccessibilityManagerWin(
- legacy_render_widget_host_HWND_, accessible_parent,
- BrowserAccessibilityManagerWin::GetEmptyDocument(), delegate);
+ if (!GetBrowserAccessibilityManager()) {
+ gfx::NativeViewAccessible accessible_parent =
+ host_->GetParentNativeViewAccessible();
+ SetBrowserAccessibilityManager(new BrowserAccessibilityManagerWin(
+ legacy_render_widget_host_HWND_, accessible_parent,
+ BrowserAccessibilityManagerWin::GetEmptyDocument(), host_));
+ }
#else
- manager = BrowserAccessibilityManager::Create(
- BrowserAccessibilityManager::GetEmptyDocument(), delegate);
+ if (!GetBrowserAccessibilityManager()) {
+ SetBrowserAccessibilityManager(
+ BrowserAccessibilityManager::Create(
+ BrowserAccessibilityManager::GetEmptyDocument(), host_));
+ }
#endif
- return manager;
}
gfx::GLSurfaceHandle RenderWidgetHostViewAura::GetCompositingSurface() {
@@ -2048,8 +2048,7 @@ void RenderWidgetHostViewAura::OnWindowFocused(aura::Window* gained_focus,
host_->SetInputMethodActive(false);
}
- BrowserAccessibilityManager* manager =
- host_->GetRootBrowserAccessibilityManager();
+ BrowserAccessibilityManager* manager = GetBrowserAccessibilityManager();
if (manager)
manager->OnWindowFocused();
} else if (window_ == lost_focus) {
@@ -2065,8 +2064,7 @@ void RenderWidgetHostViewAura::OnWindowFocused(aura::Window* gained_focus,
if (overscroll_controller_)
overscroll_controller_->Cancel();
- BrowserAccessibilityManager* manager =
- host_->GetRootBrowserAccessibilityManager();
+ BrowserAccessibilityManager* manager = GetBrowserAccessibilityManager();
if (manager)
manager->OnWindowBlurred();
@@ -2312,7 +2310,7 @@ void RenderWidgetHostViewAura::InternalSetBounds(const gfx::Rect& rect) {
BrowserAccessibilityManagerWin* manager =
static_cast<BrowserAccessibilityManagerWin*>(
- host_->GetRootBrowserAccessibilityManager());
+ GetBrowserAccessibilityManager());
if (manager)
manager->SetAccessibleHWND(legacy_render_widget_host_HWND_);
}
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.h b/content/browser/renderer_host/render_widget_host_view_aura.h
index e8c19d7..05f5493 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.h
+++ b/content/browser/renderer_host/render_widget_host_view_aura.h
@@ -218,8 +218,7 @@ class CONTENT_EXPORT RenderWidgetHostViewAura
virtual InputEventAckState FilterInputEvent(
const blink::WebInputEvent& input_event) OVERRIDE;
virtual gfx::GLSurfaceHandle GetCompositingSurface() OVERRIDE;
- virtual BrowserAccessibilityManager* CreateBrowserAccessibilityManager(
- BrowserAccessibilityDelegate* delegate) OVERRIDE;
+ virtual void CreateBrowserAccessibilityManagerIfNeeded() OVERRIDE;
virtual bool LockMouse() OVERRIDE;
virtual void UnlockMouse() OVERRIDE;
virtual void OnSwapCompositorFrame(
diff --git a/content/browser/renderer_host/render_widget_host_view_base.cc b/content/browser/renderer_host/render_widget_host_view_base.cc
index cfc1a40..c9d3ebb 100644
--- a/content/browser/renderer_host/render_widget_host_view_base.cc
+++ b/content/browser/renderer_host/render_widget_host_view_base.cc
@@ -484,13 +484,22 @@ blink::WebPopupType RenderWidgetHostViewBase::GetPopupType() {
}
BrowserAccessibilityManager*
-RenderWidgetHostViewBase::CreateBrowserAccessibilityManager(
- BrowserAccessibilityDelegate* delegate) {
- NOTREACHED();
- return NULL;
+ RenderWidgetHostViewBase::GetBrowserAccessibilityManager() const {
+ return browser_accessibility_manager_.get();
+}
+
+void RenderWidgetHostViewBase::CreateBrowserAccessibilityManagerIfNeeded() {
+}
+
+void RenderWidgetHostViewBase::SetBrowserAccessibilityManager(
+ BrowserAccessibilityManager* manager) {
+ browser_accessibility_manager_.reset(manager);
+}
+
+void RenderWidgetHostViewBase::OnAccessibilitySetFocus(int acc_obj_id) {
}
-void RenderWidgetHostViewBase::AccessibilityShowMenu(const gfx::Point& point) {
+void RenderWidgetHostViewBase::AccessibilityShowMenu(int acc_obj_id) {
}
gfx::Point RenderWidgetHostViewBase::AccessibilityOriginInScreen(
diff --git a/content/browser/renderer_host/render_widget_host_view_base.h b/content/browser/renderer_host/render_widget_host_view_base.h
index 182976f..8f84a99 100644
--- a/content/browser/renderer_host/render_widget_host_view_base.h
+++ b/content/browser/renderer_host/render_widget_host_view_base.h
@@ -50,7 +50,6 @@ struct WebScreenInfo;
}
namespace content {
-class BrowserAccessibilityDelegate;
class BrowserAccessibilityManager;
class SyntheticGesture;
class SyntheticGestureTarget;
@@ -89,6 +88,11 @@ class CONTENT_EXPORT RenderWidgetHostViewBase : public RenderWidgetHostView,
blink::WebPopupType GetPopupType();
+ // Get the BrowserAccessibilityManager if it exists, may return NULL.
+ BrowserAccessibilityManager* GetBrowserAccessibilityManager() const;
+
+ void SetBrowserAccessibilityManager(BrowserAccessibilityManager* manager);
+
// Return a value that is incremented each time the renderer swaps a new frame
// to the view.
uint32 RendererFrameNumber();
@@ -147,11 +151,13 @@ class CONTENT_EXPORT RenderWidgetHostViewBase : public RenderWidgetHostView,
// Return true if frame subscription is supported on this platform.
virtual bool CanSubscribeFrame() const;
- // Create a BrowserAccessibilityManager for this view.
- virtual BrowserAccessibilityManager* CreateBrowserAccessibilityManager(
- BrowserAccessibilityDelegate* delegate);
+ // Create a BrowserAccessibilityManager for this view if it's possible to
+ // create one and if one doesn't exist already. Some ports may not create
+ // one depending on the current state.
+ virtual void CreateBrowserAccessibilityManagerIfNeeded();
- virtual void AccessibilityShowMenu(const gfx::Point& point);
+ virtual void OnAccessibilitySetFocus(int acc_obj_id);
+ virtual void AccessibilityShowMenu(int acc_obj_id);
virtual gfx::Point AccessibilityOriginInScreen(const gfx::Rect& bounds);
virtual SkColorType PreferredReadbackFormat();
@@ -420,6 +426,9 @@ protected:
private:
void FlushInput();
+ // Manager of the tree representation of the WebKit render tree.
+ scoped_ptr<BrowserAccessibilityManager> browser_accessibility_manager_;
+
gfx::Rect current_display_area_;
uint32 renderer_frame_number_;
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.h b/content/browser/renderer_host/render_widget_host_view_mac.h
index 0c1e553..6d3987a 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.h
+++ b/content/browser/renderer_host/render_widget_host_view_mac.h
@@ -311,11 +311,11 @@ class CONTENT_EXPORT RenderWidgetHostViewMac
uint32 output_surface_id, scoped_ptr<cc::CompositorFrame> frame) OVERRIDE;
virtual void AcceleratedSurfaceInitialized(int host_id,
int route_id) OVERRIDE;
- virtual BrowserAccessibilityManager* CreateBrowserAccessibilityManager(
- BrowserAccessibilityDelegate* delegate) OVERRIDE;
+ virtual void CreateBrowserAccessibilityManagerIfNeeded() OVERRIDE;
virtual gfx::Point AccessibilityOriginInScreen(const gfx::Rect& bounds)
OVERRIDE;
- virtual void AccessibilityShowMenu(const gfx::Point& point) OVERRIDE;
+ virtual void OnAccessibilitySetFocus(int acc_obj_id) OVERRIDE;
+ virtual void AccessibilityShowMenu(int acc_obj_id) OVERRIDE;
virtual bool PostProcessEventForPluginIme(
const NativeWebKeyboardEvent& event) OVERRIDE;
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm
index 17c73d5..8225582 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
@@ -2065,13 +2065,14 @@ void RenderWidgetHostViewMac::SetBackgroundOpaque(bool opaque) {
render_widget_host_->SetBackgroundOpaque(opaque);
}
-BrowserAccessibilityManager*
- RenderWidgetHostViewMac::CreateBrowserAccessibilityManager(
- BrowserAccessibilityDelegate* delegate) {
- return new BrowserAccessibilityManagerMac(
- cocoa_view_,
- BrowserAccessibilityManagerMac::GetEmptyDocument(),
- delegate);
+void RenderWidgetHostViewMac::CreateBrowserAccessibilityManagerIfNeeded() {
+ if (!GetBrowserAccessibilityManager()) {
+ SetBrowserAccessibilityManager(
+ new BrowserAccessibilityManagerMac(
+ cocoa_view_,
+ BrowserAccessibilityManagerMac::GetEmptyDocument(),
+ render_widget_host_));
+ }
}
gfx::Point RenderWidgetHostViewMac::AccessibilityOriginInScreen(
@@ -2086,9 +2087,33 @@ gfx::Point RenderWidgetHostViewMac::AccessibilityOriginInScreen(
return gfx::Point(originInScreen.x, originInScreen.y);
}
-void RenderWidgetHostViewMac::AccessibilityShowMenu(const gfx::Point& point) {
- NSPoint location = NSMakePoint(point.x(), point.y());
+void RenderWidgetHostViewMac::OnAccessibilitySetFocus(int accObjId) {
+ // Immediately set the focused item even though we have not officially set
+ // focus on it as VoiceOver expects to get the focused item after this
+ // method returns.
+ BrowserAccessibilityManager* manager = GetBrowserAccessibilityManager();
+ if (manager)
+ manager->SetFocus(manager->GetFromID(accObjId), false);
+}
+
+void RenderWidgetHostViewMac::AccessibilityShowMenu(int accObjId) {
+ BrowserAccessibilityManager* manager = GetBrowserAccessibilityManager();
+ if (!manager)
+ return;
+ BrowserAccessibilityCocoa* obj =
+ manager->GetFromID(accObjId)->ToBrowserAccessibilityCocoa();
+
+ // Performs a right click copying WebKit's
+ // accessibilityPerformShowMenuAction.
+ NSPoint objOrigin = [obj origin];
+ NSSize size = [[obj size] sizeValue];
+ gfx::Point origin = AccessibilityOriginInScreen(
+ gfx::Rect(objOrigin.x, objOrigin.y, size.width, size.height));
+ NSPoint location = NSMakePoint(origin.x(), origin.y());
location = [[cocoa_view_ window] convertScreenToBase:location];
+ location.x += size.width/2;
+ location.y += size.height/2;
+
NSEvent* fakeRightClick = [NSEvent
mouseEventWithType:NSRightMouseDown
location:location
@@ -2103,6 +2128,8 @@ void RenderWidgetHostViewMac::AccessibilityShowMenu(const gfx::Point& point) {
[cocoa_view_ mouseEvent:fakeRightClick];
}
+
+
void RenderWidgetHostViewMac::SetTextInputActive(bool active) {
if (active) {
if (text_input_type_ == ui::TEXT_INPUT_TYPE_PASSWORD)
@@ -3150,7 +3177,7 @@ void RenderWidgetHostViewMac::AcceleratedLayerDidDrawFrame(bool succeeded) {
- (id)accessibilityAttributeValue:(NSString *)attribute {
BrowserAccessibilityManager* manager =
- renderWidgetHostView_->GetHost()->GetRootBrowserAccessibilityManager();
+ renderWidgetHostView_->GetBrowserAccessibilityManager();
// Contents specifies document view of RenderWidgetHostViewCocoa provided by
// BrowserAccessibilityManager. Children includes all subviews in addition to
@@ -3175,28 +3202,25 @@ void RenderWidgetHostViewMac::AcceleratedLayerDidDrawFrame(bool succeeded) {
}
- (id)accessibilityHitTest:(NSPoint)point {
- BrowserAccessibilityManager* manager =
- renderWidgetHostView_->GetHost()->GetRootBrowserAccessibilityManager();
- if (!manager)
+ if (!renderWidgetHostView_->GetBrowserAccessibilityManager())
return self;
NSPoint pointInWindow = [[self window] convertScreenToBase:point];
NSPoint localPoint = [self convertPoint:pointInWindow fromView:nil];
localPoint.y = NSHeight([self bounds]) - localPoint.y;
- BrowserAccessibilityCocoa* root =
- manager->GetRoot()->ToBrowserAccessibilityCocoa();
+ BrowserAccessibilityCocoa* root = renderWidgetHostView_->
+ GetBrowserAccessibilityManager()->
+ GetRoot()->ToBrowserAccessibilityCocoa();
id obj = [root accessibilityHitTest:localPoint];
return obj;
}
- (BOOL)accessibilityIsIgnored {
- BrowserAccessibilityManager* manager =
- renderWidgetHostView_->GetHost()->GetRootBrowserAccessibilityManager();
- return !manager;
+ return !renderWidgetHostView_->GetBrowserAccessibilityManager();
}
- (NSUInteger)accessibilityGetIndexOf:(id)child {
BrowserAccessibilityManager* manager =
- renderWidgetHostView_->GetHost()->GetRootBrowserAccessibilityManager();
+ renderWidgetHostView_->GetBrowserAccessibilityManager();
// Only child is root.
if (manager &&
manager->GetRoot()->ToBrowserAccessibilityCocoa() == child) {
@@ -3208,7 +3232,7 @@ void RenderWidgetHostViewMac::AcceleratedLayerDidDrawFrame(bool succeeded) {
- (id)accessibilityFocusedUIElement {
BrowserAccessibilityManager* manager =
- renderWidgetHostView_->GetHost()->GetRootBrowserAccessibilityManager();
+ renderWidgetHostView_->GetBrowserAccessibilityManager();
if (manager) {
BrowserAccessibility* focused_item = manager->GetFocus(NULL);
DCHECK(focused_item);
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 5c9cd72..0471f0b 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -18,8 +18,6 @@
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "base/time/time.h"
-#include "content/browser/accessibility/accessibility_mode_helper.h"
-#include "content/browser/accessibility/browser_accessibility_state_impl.h"
#include "content/browser/browser_plugin/browser_plugin_embedder.h"
#include "content/browser/browser_plugin/browser_plugin_guest.h"
#include "content/browser/child_process_security_policy_impl.h"
@@ -74,7 +72,6 @@
#include "content/public/browser/navigation_details.h"
#include "content/public/browser/notification_details.h"
#include "content/public/browser/notification_service.h"
-#include "content/public/browser/render_widget_host_iterator.h"
#include "content/public/browser/resource_request_details.h"
#include "content/public/browser/storage_partition.h"
#include "content/public/browser/user_metrics.h"
@@ -216,16 +213,6 @@ bool ForEachFrameInternal(
return true;
}
-bool ForEachPendingFrameInternal(
- const base::Callback<void(RenderFrameHost*)>& on_frame,
- FrameTreeNode* node) {
- RenderFrameHost* pending_frame_host =
- node->render_manager()->pending_frame_host();
- if (pending_frame_host)
- on_frame.Run(pending_frame_host);
- return true;
-}
-
void SendToAllFramesInternal(IPC::Message* message, RenderFrameHost* rfh) {
IPC::Message* message_copy = new IPC::Message(*message);
message_copy->set_routing_id(rfh->GetRoutingID());
@@ -241,11 +228,6 @@ void AddRenderWidgetHostViewToSet(std::set<RenderWidgetHostView*>* set,
set->insert(rwhv);
}
-void SetAccessibilityModeOnFrame(AccessibilityMode mode,
- RenderFrameHost* frame_host) {
- static_cast<RenderFrameHostImpl*>(frame_host)->SetAccessibilityMode(mode);
-}
-
} // namespace
WebContents* WebContents::Create(const WebContents::CreateParams& params) {
@@ -374,9 +356,7 @@ WebContentsImpl::WebContentsImpl(
fullscreen_widget_had_focus_at_shutdown_(false),
is_subframe_(false),
touch_emulation_enabled_(false),
- last_dialog_suppressed_(false),
- accessibility_mode_(
- BrowserAccessibilityStateImpl::GetInstance()->accessibility_mode()) {
+ last_dialog_suppressed_(false) {
for (size_t i = 0; i < g_created_callbacks.Get().size(); i++)
g_created_callbacks.Get().at(i).Run(this);
frame_tree_.SetFrameRemoveListener(
@@ -475,30 +455,6 @@ WebContentsImpl* WebContentsImpl::CreateWithOpener(
return new_contents;
}
-// static
-std::vector<WebContentsImpl*> WebContentsImpl::GetAllWebContents() {
- std::vector<WebContentsImpl*> result;
- scoped_ptr<RenderWidgetHostIterator> widgets(
- RenderWidgetHostImpl::GetRenderWidgetHosts());
- std::set<WebContentsImpl*> web_contents_set;
- while (RenderWidgetHost* rwh = widgets->GetNextHost()) {
- if (!rwh->IsRenderView())
- continue;
- RenderViewHost* rvh = RenderViewHost::From(rwh);
- if (!rvh)
- continue;
- WebContents* web_contents = WebContents::FromRenderViewHost(rvh);
- if (!web_contents)
- continue;
- WebContentsImpl* wci = static_cast<WebContentsImpl*>(web_contents);
- if (web_contents_set.find(wci) == web_contents_set.end()) {
- web_contents_set.insert(wci);
- result.push_back(wci);
- }
- }
- return result;
-}
-
RenderFrameHostManager* WebContentsImpl::GetRenderManagerForTesting() {
return GetRenderManager();
}
@@ -724,29 +680,6 @@ WebContentsView* WebContentsImpl::GetView() const {
return view_.get();
}
-void WebContentsImpl::SetAccessibilityMode(AccessibilityMode mode) {
- if (mode == accessibility_mode_)
- return;
-
- accessibility_mode_ = mode;
- frame_tree_.ForEach(
- base::Bind(&ForEachFrameInternal,
- base::Bind(&SetAccessibilityModeOnFrame, mode)));
- frame_tree_.ForEach(
- base::Bind(&ForEachPendingFrameInternal,
- base::Bind(&SetAccessibilityModeOnFrame, mode)));
-}
-
-void WebContentsImpl::AddAccessibilityMode(AccessibilityMode mode) {
- SetAccessibilityMode(
- content::AddAccessibilityModeTo(accessibility_mode_, mode));
-}
-
-void WebContentsImpl::RemoveAccessibilityMode(AccessibilityMode mode) {
- SetAccessibilityMode(
- content::RemoveAccessibilityModeFrom(accessibility_mode_, mode));
-}
-
WebUI* WebContentsImpl::CreateWebUI(const GURL& url) {
WebUIImpl* web_ui = new WebUIImpl(this);
WebUIController* controller = WebUIControllerFactoryRegistry::GetInstance()->
@@ -795,25 +728,12 @@ const std::string& WebContentsImpl::GetUserAgentOverride() const {
return renderer_preferences_.user_agent_override;
}
-void WebContentsImpl::EnableTreeOnlyAccessibilityMode() {
- AddAccessibilityMode(AccessibilityModeTreeOnly);
-}
-
-bool WebContentsImpl::IsTreeOnlyAccessibilityModeForTesting() const {
- return accessibility_mode_ == AccessibilityModeTreeOnly;
-}
-
-bool WebContentsImpl::IsFullAccessibilityModeForTesting() const {
- return accessibility_mode_ == AccessibilityModeComplete;
-}
-
#if defined(OS_WIN)
void WebContentsImpl::SetParentNativeViewAccessible(
gfx::NativeViewAccessible accessible_parent) {
accessible_parent_ = accessible_parent;
- RenderFrameHostImpl* rfh = static_cast<RenderFrameHostImpl*>(GetMainFrame());
- if (rfh)
- rfh->SetParentNativeViewAccessible(accessible_parent);
+ if (GetRenderViewHost())
+ GetRenderViewHostImpl()->SetParentNativeViewAccessible(accessible_parent);
}
#endif
@@ -1374,6 +1294,12 @@ bool WebContentsImpl::HandleGestureEvent(
return false;
}
+#if defined(OS_WIN)
+gfx::NativeViewAccessible WebContentsImpl::GetParentNativeViewAccessible() {
+ return accessible_parent_;
+}
+#endif
+
void WebContentsImpl::HandleMouseDown() {
if (delegate_)
delegate_->HandleMouseDown();
@@ -1769,10 +1695,6 @@ FrameTree* WebContentsImpl::GetFrameTree() {
return &frame_tree_;
}
-AccessibilityMode WebContentsImpl::GetAccessibilityMode() const {
- return accessibility_mode_;
-}
-
void WebContentsImpl::AccessibilityEventReceived(
const std::vector<AXEventNotificationDetails>& details) {
FOR_EACH_OBSERVER(
@@ -1810,18 +1732,6 @@ void WebContentsImpl::OnTouchEmulationEnabled(bool enabled) {
view_->SetOverscrollControllerEnabled(CanOverscrollContent());
}
-BrowserAccessibilityManager*
- WebContentsImpl::GetRootBrowserAccessibilityManager() {
- RenderFrameHostImpl* rfh = static_cast<RenderFrameHostImpl*>(GetMainFrame());
- return rfh ? rfh->browser_accessibility_manager() : NULL;
-}
-
-BrowserAccessibilityManager*
- WebContentsImpl::GetOrCreateRootBrowserAccessibilityManager() {
- RenderFrameHostImpl* rfh = static_cast<RenderFrameHostImpl*>(GetMainFrame());
- return rfh ? rfh->GetOrCreateBrowserAccessibilityManager() : NULL;
-}
-
void WebContentsImpl::UpdatePreferredSize(const gfx::Size& pref_size) {
const gfx::Size old_size = GetPreferredSize();
preferred_size_ = pref_size;
@@ -3295,7 +3205,6 @@ void WebContentsImpl::RenderFrameCreated(RenderFrameHost* render_frame_host) {
FOR_EACH_OBSERVER(WebContentsObserver,
observers_,
RenderFrameCreated(render_frame_host));
- SetAccessibilityModeOnFrame(accessibility_mode_, render_frame_host);
}
void WebContentsImpl::RenderFrameDeleted(RenderFrameHost* render_frame_host) {
@@ -3418,12 +3327,6 @@ bool WebContentsImpl::IsNeverVisible() {
return delegate_->IsNeverVisible(this);
}
-#if defined(OS_WIN)
-gfx::NativeViewAccessible WebContentsImpl::GetParentNativeViewAccessible() {
- return accessible_parent_;
-}
-#endif
-
RenderViewHostDelegateView* WebContentsImpl::GetDelegateView() {
return render_view_host_delegate_view_;
}
@@ -3482,7 +3385,6 @@ void WebContentsImpl::RenderViewCreated(RenderViewHost* render_view_host) {
RenderFrameHost* main_frame = render_view_host->GetMainFrame();
FOR_EACH_OBSERVER(
WebContentsObserver, observers_, RenderFrameCreated(main_frame));
- SetAccessibilityModeOnFrame(accessibility_mode_, main_frame);
}
void WebContentsImpl::RenderViewReady(RenderViewHost* rvh) {
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h
index 91b2d4b..b001642 100644
--- a/content/browser/web_contents/web_contents_impl.h
+++ b/content/browser/web_contents/web_contents_impl.h
@@ -23,7 +23,6 @@
#include "content/browser/frame_host/render_frame_host_manager.h"
#include "content/browser/renderer_host/render_view_host_delegate.h"
#include "content/browser/renderer_host/render_widget_host_delegate.h"
-#include "content/common/accessibility_mode_enums.h"
#include "content/common/content_export.h"
#include "content/public/browser/color_chooser.h"
#include "content/public/browser/notification_observer.h"
@@ -96,8 +95,6 @@ class CONTENT_EXPORT WebContentsImpl
const WebContents::CreateParams& params,
WebContentsImpl* opener);
- static std::vector<WebContentsImpl*> GetAllWebContents();
-
// Returns the opener WebContentsImpl, if any. This can be set to null if the
// opener is closed or the page clears its window.opener.
WebContentsImpl* opener() const { return opener_; }
@@ -174,19 +171,6 @@ class CONTENT_EXPORT WebContentsImpl
bool should_normally_be_visible() { return should_normally_be_visible_; }
- // Broadcasts the mode change to all frames.
- void SetAccessibilityMode(AccessibilityMode mode);
-
- // Adds the given accessibility mode to the current accessibility mode
- // bitmap.
- void AddAccessibilityMode(AccessibilityMode mode);
-
- // Removes the given accessibility mode from the current accessibility
- // mode bitmap, managing the bits that are shared with other modes such
- // that a bit will only be turned off when all modes that depend on it
- // have been removed.
- void RemoveAccessibilityMode(AccessibilityMode mode);
-
// WebContents ------------------------------------------------------
virtual WebContentsDelegate* GetDelegate() OVERRIDE;
virtual void SetDelegate(WebContentsDelegate* delegate) OVERRIDE;
@@ -212,9 +196,6 @@ class CONTENT_EXPORT WebContentsImpl
virtual WebUI* GetCommittedWebUI() const OVERRIDE;
virtual void SetUserAgentOverride(const std::string& override) OVERRIDE;
virtual const std::string& GetUserAgentOverride() const OVERRIDE;
- virtual void EnableTreeOnlyAccessibilityMode() OVERRIDE;
- virtual bool IsTreeOnlyAccessibilityModeForTesting() const OVERRIDE;
- virtual bool IsFullAccessibilityModeForTesting() const OVERRIDE;
#if defined(OS_WIN)
virtual void SetParentNativeViewAccessible(
gfx::NativeViewAccessible accessible_parent) OVERRIDE;
@@ -374,12 +355,6 @@ class CONTENT_EXPORT WebContentsImpl
const std::string& encoding) OVERRIDE;
virtual WebContents* GetAsWebContents() OVERRIDE;
virtual bool IsNeverVisible() OVERRIDE;
- virtual AccessibilityMode GetAccessibilityMode() const OVERRIDE;
- virtual void AccessibilityEventReceived(
- const std::vector<AXEventNotificationDetails>& details) OVERRIDE;
-#if defined(OS_WIN)
- virtual gfx::NativeViewAccessible GetParentNativeViewAccessible() OVERRIDE;
-#endif
// RenderViewHostDelegate ----------------------------------------------------
virtual RenderViewHostDelegateView* GetDelegateView() OVERRIDE;
@@ -468,6 +443,8 @@ class CONTENT_EXPORT WebContentsImpl
SiteInstance* instance) OVERRIDE;
virtual SessionStorageNamespaceMap GetSessionStorageNamespaceMap() OVERRIDE;
virtual FrameTree* GetFrameTree() OVERRIDE;
+ virtual void AccessibilityEventReceived(
+ const std::vector<AXEventNotificationDetails>& details) OVERRIDE;
// NavigatorDelegate ---------------------------------------------------------
@@ -532,10 +509,9 @@ class CONTENT_EXPORT WebContentsImpl
const blink::WebGestureEvent& event) OVERRIDE;
virtual void DidSendScreenRects(RenderWidgetHostImpl* rwh) OVERRIDE;
virtual void OnTouchEmulationEnabled(bool enabled) OVERRIDE;
- virtual BrowserAccessibilityManager* GetRootBrowserAccessibilityManager()
- OVERRIDE;
- virtual BrowserAccessibilityManager*
- GetOrCreateRootBrowserAccessibilityManager() OVERRIDE;
+#if defined(OS_WIN)
+ virtual gfx::NativeViewAccessible GetParentNativeViewAccessible() OVERRIDE;
+#endif
// RenderFrameHostManager::Delegate ------------------------------------------
@@ -1178,10 +1154,6 @@ class CONTENT_EXPORT WebContentsImpl
scoped_ptr<ScreenOrientationDispatcherHost>
screen_orientation_dispatcher_host_;
- // The accessibility mode for all frames. This is queried when each frame
- // is created, and broadcast to all frames when it changes.
- AccessibilityMode accessibility_mode_;
-
DISALLOW_COPY_AND_ASSIGN(WebContentsImpl);
};
diff --git a/content/common/accessibility_mode_enums.h b/content/common/accessibility_mode_enums.h
deleted file mode 100644
index ee51d6b..0000000
--- a/content/common/accessibility_mode_enums.h
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 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.
-
-#ifndef CONTENT_COMMON_ACCESSIBILITY_MODE_ENUMS_H_
-#define CONTENT_COMMON_ACCESSIBILITY_MODE_ENUMS_H_
-
-// Note: keep enums in content/browser/resources/accessibility/accessibility.js
-// in sync with these two enums.
-enum AccessibilityModeFlag {
- // Accessibility updates are processed to create platform trees and events are
- // passed to platform APIs in the browser.
- AccessibilityModeFlagPlatform = 1 << 0,
-
- // Accessibility is on, and the full tree is computed. If this flag is off,
- // only limited information about editable text nodes is sent to the browser
- // process. Useful for implementing limited UIA on tablets.
- AccessibilityModeFlagFullTree = 1 << 1,
-};
-
-enum AccessibilityMode {
- // All accessibility is off.
- AccessibilityModeOff = 0,
-
- // Renderer accessibility is on, platform APIs are called, but only limited
- // information is available (see AccessibilityModeFlagEditableTextOnly).
- AccessibilityModeEditableTextOnly = AccessibilityModeFlagPlatform,
-
- // Renderer accessibility is on, and platform APIs are called.
- AccessibilityModeComplete =
- AccessibilityModeFlagPlatform | AccessibilityModeFlagFullTree,
-
- // Renderer accessibility is on, and events are passed to any extensions
- // requesting automation, but not to platform accessibility.
- AccessibilityModeTreeOnly = AccessibilityModeFlagFullTree,
-};
-
-#endif // CONTENT_COMMON_ACCESSIBILITY_MODE_ENUMS_H_
diff --git a/content/common/frame_message_enums.h b/content/common/frame_message_enums.h
index c459896..d2f9d8a 100644
--- a/content/common/frame_message_enums.h
+++ b/content/common/frame_message_enums.h
@@ -5,7 +5,7 @@
#ifndef CONTENT_COMMON_FRAME_MESSAGES_ENUMS_H_
#define CONTENT_COMMON_FRAME_MESSAGES_ENUMS_H_
-#include "content/common/accessibility_mode_enums.h"
+#include "ipc/ipc_message_macros.h"
struct FrameMsg_Navigate_Type {
public:
diff --git a/content/common/frame_messages.h b/content/common/frame_messages.h
index 6f7bb5e..66ab428 100644
--- a/content/common/frame_messages.h
+++ b/content/common/frame_messages.h
@@ -26,9 +26,6 @@
#define IPC_MESSAGE_START FrameMsgStart
-IPC_ENUM_TRAITS_MIN_MAX_VALUE(AccessibilityMode,
- AccessibilityModeOff,
- AccessibilityModeComplete)
IPC_ENUM_TRAITS_MIN_MAX_VALUE(content::JavaScriptMessageType,
content::JAVASCRIPT_MESSAGE_TYPE_ALERT,
content::JAVASCRIPT_MESSAGE_TYPE_PROMPT)
@@ -395,10 +392,6 @@ IPC_MESSAGE_ROUTED1(FrameMsg_TextSurroundingSelectionRequest,
// needed to support navigation transitions.
IPC_MESSAGE_ROUTED1(FrameMsg_AddStyleSheetByURL, std::string)
-// Change the accessibility mode in the renderer process.
-IPC_MESSAGE_ROUTED1(FrameMsg_SetAccessibilityMode,
- AccessibilityMode)
-
// -----------------------------------------------------------------------------
// Messages sent from the renderer to the browser.
diff --git a/content/common/view_message_enums.h b/content/common/view_message_enums.h
index 4d3d193..37179e8 100644
--- a/content/common/view_message_enums.h
+++ b/content/common/view_message_enums.h
@@ -22,4 +22,34 @@ struct ViewHostMsg_UpdateRect_Flags {
}
};
+// Note: keep enums in content/browser/resources/accessibility/accessibility.js
+// in sync with these two enums.
+enum AccessibilityModeFlag {
+ // Accessibility updates are processed to create platform trees and events are
+ // passed to platform APIs in the browser.
+ AccessibilityModeFlagPlatform = 1 << 0,
+
+ // Accessibility is on, and the full tree is computed. If this flag is off,
+ // only limited information about editable text nodes is sent to the browser
+ // process. Useful for implementing limited UIA on tablets.
+ AccessibilityModeFlagFullTree = 1 << 1,
+};
+
+enum AccessibilityMode {
+ // All accessibility is off.
+ AccessibilityModeOff = 0,
+
+ // Renderer accessibility is on, platform APIs are called, but only limited
+ // information is available (see AccessibilityModeFlagEditableTextOnly).
+ AccessibilityModeEditableTextOnly = AccessibilityModeFlagPlatform,
+
+ // Renderer accessibility is on, and platform APIs are called.
+ AccessibilityModeComplete =
+ AccessibilityModeFlagPlatform | AccessibilityModeFlagFullTree,
+
+ // Renderer accessibility is on, and events are passed to any extensions
+ // requesting automation, but not to platform accessibility.
+ AccessibilityModeTreeOnly = AccessibilityModeFlagFullTree,
+};
+
#endif // CONTENT_COMMON_VIEW_MESSAGES_ENUMS_H_
diff --git a/content/common/view_messages.h b/content/common/view_messages.h
index e55e51e..f4a765a 100644
--- a/content/common/view_messages.h
+++ b/content/common/view_messages.h
@@ -68,6 +68,7 @@
#define IPC_MESSAGE_START ViewMsgStart
+IPC_ENUM_TRAITS(AccessibilityMode)
IPC_ENUM_TRAITS(blink::WebMediaPlayerAction::Type)
IPC_ENUM_TRAITS(blink::WebPluginAction::Type)
IPC_ENUM_TRAITS(blink::WebPopupType)
@@ -478,6 +479,9 @@ IPC_STRUCT_BEGIN(ViewMsg_New_Params)
// The properties of the screen associated with the view.
IPC_STRUCT_MEMBER(blink::WebScreenInfo, screen_info)
+
+ // The accessibility mode of the renderer.
+ IPC_STRUCT_MEMBER(AccessibilityMode, accessibility_mode)
IPC_STRUCT_END()
IPC_STRUCT_BEGIN(ViewMsg_PostMessage_Params)
@@ -865,6 +869,10 @@ IPC_MESSAGE_ROUTED2(ViewMsg_SavePageAsMHTML,
IPC_MESSAGE_CONTROL1(ViewMsg_TempCrashWithData,
GURL /* data */)
+// Change the accessibility mode in the renderer process.
+IPC_MESSAGE_ROUTED1(ViewMsg_SetAccessibilityMode,
+ AccessibilityMode)
+
// An acknowledge to ViewHostMsg_MultipleTargetsTouched to notify the renderer
// process to release the magnified image.
IPC_MESSAGE_ROUTED1(ViewMsg_ReleaseDisambiguationPopupBitmap,
diff --git a/content/public/browser/render_frame_host.h b/content/public/browser/render_frame_host.h
index dde20fe..31f4d8d 100644
--- a/content/public/browser/render_frame_host.h
+++ b/content/public/browser/render_frame_host.h
@@ -12,7 +12,6 @@
#include "ipc/ipc_listener.h"
#include "ipc/ipc_sender.h"
#include "ui/gfx/native_widget_types.h"
-#include "ui/gfx/rect.h"
#include "url/gurl.h"
namespace base {
@@ -73,14 +72,6 @@ class CONTENT_EXPORT RenderFrameHost : public IPC::Listener,
virtual void ExecuteJavaScript(const base::string16& javascript,
const JavaScriptResultCallback& callback) = 0;
- // Accessibility actions.
- virtual void AccessibilitySetFocus(int acc_obj_id) = 0;
- virtual void AccessibilityDoDefaultAction(int acc_obj_id) = 0;
- virtual void AccessibilityScrollToMakeVisible(
- int acc_obj_id, const gfx::Rect& subfocus) = 0;
- virtual void AccessibilitySetTextSelection(
- int acc_obj_id, int start_offset, int end_offset) = 0;
-
// Temporary until we get rid of RenderViewHost.
virtual RenderViewHost* GetRenderViewHost() = 0;
diff --git a/content/public/browser/render_widget_host.h b/content/public/browser/render_widget_host.h
index a87e3fa..049ee70 100644
--- a/content/public/browser/render_widget_host.h
+++ b/content/public/browser/render_widget_host.h
@@ -189,6 +189,42 @@ class CONTENT_EXPORT RenderWidgetHost : public IPC::Sender {
virtual void UnlockBackingStore() = 0;
#endif
+ // Send a command to the renderer to turn on full accessibility.
+ virtual void EnableFullAccessibilityMode() = 0;
+
+ // Check whether this RenderWidget has full accessibility mode.
+ virtual bool IsFullAccessibilityModeForTesting() = 0;
+
+ // Send a command to the renderer to turn on tree only accessibility.
+ virtual void EnableTreeOnlyAccessibilityMode() = 0;
+
+ // Check whether this RenderWidget has tree-only accessibility mode.
+ virtual bool IsTreeOnlyAccessibilityModeForTesting() = 0;
+
+ // Relay a request from assistive technology to perform the default action
+ // on a given node.
+ virtual void AccessibilityDoDefaultAction(int object_id) = 0;
+
+ // Relay a request from assistive technology to set focus to a given node.
+ virtual void AccessibilitySetFocus(int object_id) = 0;
+
+ // Relay a request from assistive technology to make a given object
+ // visible by scrolling as many scrollable containers as necessary.
+ // In addition, if it's not possible to make the entire object visible,
+ // scroll so that the |subfocus| rect is visible at least. The subfocus
+ // rect is in local coordinates of the object itself.
+ virtual void AccessibilityScrollToMakeVisible(
+ int acc_obj_id, gfx::Rect subfocus) = 0;
+
+ // Relay a request from assistive technology to move a given object
+ // to a specific location, in the WebContents area coordinate space, i.e.
+ // (0, 0) is the top-left corner of the WebContents.
+ virtual void AccessibilityScrollToPoint(int acc_obj_id, gfx::Point point) = 0;
+
+ // Relay a request from assistive technology to set text selection.
+ virtual void AccessibilitySetTextSelection(
+ int acc_obj_id, int start_offset, int end_offset) = 0;
+
// Forwards the given message to the renderer. These are called by
// the view when it has received a message.
virtual void ForwardMouseEvent(
diff --git a/content/public/browser/web_contents.h b/content/public/browser/web_contents.h
index b163306..b39553e 100644
--- a/content/public/browser/web_contents.h
+++ b/content/public/browser/web_contents.h
@@ -222,18 +222,6 @@ class WebContents : public PageNavigator,
virtual void SetUserAgentOverride(const std::string& override) = 0;
virtual const std::string& GetUserAgentOverride() const = 0;
- // Enable the accessibility tree for this WebContents in the renderer,
- // but don't enable creating a native accessibility tree on the browser
- // side.
- virtual void EnableTreeOnlyAccessibilityMode() = 0;
-
- // Returns true only if "tree only" accessibility mode is on.
- virtual bool IsTreeOnlyAccessibilityModeForTesting() const = 0;
-
- // Returns true only if complete accessibility mode is on, meaning there's
- // both renderer accessibility, and a native browser accessibility tree.
- virtual bool IsFullAccessibilityModeForTesting() const = 0;
-
#if defined(OS_WIN)
virtual void SetParentNativeViewAccessible(
gfx::NativeViewAccessible accessible_parent) = 0;
diff --git a/content/public/test/render_view_test.cc b/content/public/test/render_view_test.cc
index f4e44ca..0a19197 100644
--- a/content/public/test/render_view_test.cc
+++ b/content/public/test/render_view_test.cc
@@ -198,7 +198,8 @@ void RenderViewTest::SetUp() {
false, // hidden
false, // never_visible
1, // next_page_id
- blink::WebScreenInfo());
+ blink::WebScreenInfo(),
+ AccessibilityModeOff);
view->AddRef();
view_ = view;
}
diff --git a/content/renderer/accessibility/blink_ax_tree_source.cc b/content/renderer/accessibility/blink_ax_tree_source.cc
index 76944de3..4b675a3 100644
--- a/content/renderer/accessibility/blink_ax_tree_source.cc
+++ b/content/renderer/accessibility/blink_ax_tree_source.cc
@@ -10,7 +10,6 @@
#include "base/strings/string_util.h"
#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_view_impl.h"
#include "third_party/WebKit/public/platform/WebRect.h"
#include "third_party/WebKit/public/platform/WebSize.h"
@@ -33,7 +32,6 @@ using blink::WebAXObject;
using blink::WebDocument;
using blink::WebDocumentType;
using blink::WebElement;
-using blink::WebFrame;
using blink::WebLocalFrame;
using blink::WebNode;
using blink::WebVector;
@@ -95,8 +93,8 @@ void AddIntListAttributeFromWebObjects(ui::AXIntListAttribute attr,
} // Anonymous namespace
-BlinkAXTreeSource::BlinkAXTreeSource(RenderFrameImpl* render_frame)
- : render_frame_(render_frame) {
+BlinkAXTreeSource::BlinkAXTreeSource(RenderViewImpl* render_view)
+ : render_view_(render_view) {
}
BlinkAXTreeSource::~BlinkAXTreeSource() {
@@ -552,11 +550,13 @@ void BlinkAXTreeSource::SerializeNode(blink::WebAXObject src,
}
blink::WebDocument BlinkAXTreeSource::GetMainDocument() const {
- WebView* view = render_frame_->render_view()->GetWebView();
- WebFrame* main_frame = view ? view->mainFrame() : NULL;
+ WebView* view = render_view_->GetWebView();
+ WebLocalFrame* main_frame =
+ view ? view->mainFrame()->toWebLocalFrame() : 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 007df07..52b9082 100644
--- a/content/renderer/accessibility/blink_ax_tree_source.h
+++ b/content/renderer/accessibility/blink_ax_tree_source.h
@@ -11,12 +11,12 @@
namespace content {
-class RenderFrameImpl;
+class RenderViewImpl;
class BlinkAXTreeSource
: public ui::AXTreeSource<blink::WebAXObject> {
public:
- BlinkAXTreeSource(RenderFrameImpl* render_frame);
+ BlinkAXTreeSource(RenderViewImpl* render_view);
virtual ~BlinkAXTreeSource();
// Walks up the ancestor chain to see if this is a descendant of the root.
@@ -41,7 +41,7 @@ class BlinkAXTreeSource
blink::WebDocument GetMainDocument() const;
private:
- RenderFrameImpl* render_frame_;
+ RenderViewImpl* render_view_;
};
} // namespace content
diff --git a/content/renderer/accessibility/renderer_accessibility.cc b/content/renderer/accessibility/renderer_accessibility.cc
index 1bf4022..9a575a1 100644
--- a/content/renderer/accessibility/renderer_accessibility.cc
+++ b/content/renderer/accessibility/renderer_accessibility.cc
@@ -4,7 +4,6 @@
#include "content/renderer/accessibility/renderer_accessibility.h"
-#include "content/renderer/render_frame_impl.h"
#include "content/renderer/render_view_impl.h"
#include "third_party/WebKit/public/web/WebDocument.h"
#include "third_party/WebKit/public/web/WebFrame.h"
@@ -17,16 +16,16 @@ using blink::WebView;
namespace content {
RendererAccessibility::RendererAccessibility(
- RenderFrameImpl* render_frame)
- : RenderFrameObserver(render_frame),
- render_frame_(render_frame) {
+ RenderViewImpl* render_view)
+ : RenderViewObserver(render_view),
+ render_view_(render_view) {
}
RendererAccessibility::~RendererAccessibility() {
}
WebDocument RendererAccessibility::GetMainDocument() {
- WebView* view = render_frame_->render_view()->GetWebView();
+ WebView* view = render_view()->GetWebView();
WebFrame* main_frame = view ? view->mainFrame() : NULL;
if (main_frame)
diff --git a/content/renderer/accessibility/renderer_accessibility.h b/content/renderer/accessibility/renderer_accessibility.h
index b10d21f..9ddb6ed 100644
--- a/content/renderer/accessibility/renderer_accessibility.h
+++ b/content/renderer/accessibility/renderer_accessibility.h
@@ -6,7 +6,7 @@
#define CONTENT_RENDERER_ACCESSIBILITY_RENDERER_ACCESSIBILITY_H_
#include "content/common/accessibility_messages.h"
-#include "content/public/renderer/render_frame_observer.h"
+#include "content/public/renderer/render_view_observer.h"
#include "third_party/WebKit/public/web/WebAXObject.h"
namespace blink {
@@ -14,7 +14,7 @@ class WebDocument;
};
namespace content {
-class RenderFrameImpl;
+class RenderViewImpl;
enum RendererAccessibilityType {
// Turns on Blink accessibility and provides a full accessibility
@@ -34,9 +34,9 @@ enum RendererAccessibilityType {
// by automation tools, and Windows 8 uses them to determine when the
// on-screen keyboard should be shown.
//
-// An instance of this class (or rather, a subclass) belongs to RenderFrameImpl.
+// An instance of this class (or rather, a subclass) belongs to RenderViewImpl.
// Accessibility is initialized based on the AccessibilityMode of
-// RenderFrameImpl; it lazily starts as Off or EditableTextOnly depending on
+// RenderViewImpl; it lazily starts as Off or EditableTextOnly depending on
// the operating system, and switches to Complete if assistive technology is
// detected or a flag is set.
//
@@ -58,15 +58,14 @@ enum RendererAccessibilityType {
// to support opening the on-screen keyboard in response to
// touch events on Windows 8 in Metro mode.
//
-class CONTENT_EXPORT RendererAccessibility : public RenderFrameObserver {
+class CONTENT_EXPORT RendererAccessibility : public RenderViewObserver {
public:
- explicit RendererAccessibility(RenderFrameImpl* render_frame);
+ explicit RendererAccessibility(RenderViewImpl* render_view);
virtual ~RendererAccessibility();
// Called when an accessibility notification occurs in Blink.
virtual void HandleWebAccessibilityEvent(
const blink::WebAXObject& obj, blink::WebAXEvent event) = 0;
- virtual void FocusedNodeChanged(const blink::WebNode& node) = 0;
// Gets the type of this RendererAccessibility object. Primarily intended for
// testing.
@@ -77,8 +76,8 @@ class CONTENT_EXPORT RendererAccessibility : public RenderFrameObserver {
// no view or frame.
blink::WebDocument GetMainDocument();
- // The RenderFrameImpl that owns us.
- RenderFrameImpl* render_frame_;
+ // The RenderViewImpl that owns us.
+ RenderViewImpl* render_view_;
DISALLOW_COPY_AND_ASSIGN(RendererAccessibility);
};
diff --git a/content/renderer/accessibility/renderer_accessibility_browsertest.cc b/content/renderer/accessibility/renderer_accessibility_browsertest.cc
index 6bb5c79..2ea3b39 100644
--- a/content/renderer/accessibility/renderer_accessibility_browsertest.cc
+++ b/content/renderer/accessibility/renderer_accessibility_browsertest.cc
@@ -8,7 +8,6 @@
#include "content/common/view_message_enums.h"
#include "content/public/test/render_view_test.h"
#include "content/renderer/accessibility/renderer_accessibility_complete.h"
-#include "content/renderer/render_frame_impl.h"
#include "content/renderer/render_view_impl.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/WebKit/public/platform/WebSize.h"
@@ -24,8 +23,8 @@ namespace content {
class TestRendererAccessibilityComplete : public RendererAccessibilityComplete {
public:
- explicit TestRendererAccessibilityComplete(RenderFrameImpl* render_frame)
- : RendererAccessibilityComplete(render_frame) {
+ explicit TestRendererAccessibilityComplete(RenderViewImpl* render_view)
+ : RendererAccessibilityComplete(render_view) {
}
void SendPendingAccessibilityEvents() {
@@ -51,7 +50,7 @@ class RendererAccessibilityTest : public RenderViewTest {
}
void SetMode(AccessibilityMode mode) {
- frame()->OnSetAccessibilityMode(mode);
+ view()->OnSetAccessibilityMode(mode);
}
void GetLastAccEvent(
@@ -241,7 +240,7 @@ TEST_F(RendererAccessibilityTest, SendFullAccessibilityTreeOnReload) {
// Creating a RendererAccessibilityComplete should sent the tree
// to the browser.
scoped_ptr<TestRendererAccessibilityComplete> accessibility(
- new TestRendererAccessibilityComplete(frame()));
+ new TestRendererAccessibilityComplete(view()));
accessibility->SendPendingAccessibilityEvents();
EXPECT_EQ(4, CountAccessibilityNodesSentToBrowser());
@@ -311,7 +310,7 @@ TEST_F(RendererAccessibilityTest,
// Creating a RendererAccessibilityComplete should send the tree
// to the browser.
scoped_ptr<TestRendererAccessibilityComplete> accessibility(
- new TestRendererAccessibilityComplete(frame()));
+ new TestRendererAccessibilityComplete(view()));
accessibility->SendPendingAccessibilityEvents();
EXPECT_EQ(5, CountAccessibilityNodesSentToBrowser());
@@ -365,7 +364,7 @@ TEST_F(RendererAccessibilityTest, HideAccessibilityObject) {
LoadHTML(html.c_str());
scoped_ptr<TestRendererAccessibilityComplete> accessibility(
- new TestRendererAccessibilityComplete(frame()));
+ new TestRendererAccessibilityComplete(view()));
accessibility->SendPendingAccessibilityEvents();
EXPECT_EQ(4, CountAccessibilityNodesSentToBrowser());
@@ -417,7 +416,7 @@ TEST_F(RendererAccessibilityTest, ShowAccessibilityObject) {
LoadHTML(html.c_str());
scoped_ptr<TestRendererAccessibilityComplete> accessibility(
- new TestRendererAccessibilityComplete(frame()));
+ new TestRendererAccessibilityComplete(view()));
accessibility->SendPendingAccessibilityEvents();
EXPECT_EQ(3, CountAccessibilityNodesSentToBrowser());
@@ -461,7 +460,7 @@ TEST_F(RendererAccessibilityTest, DetachAccessibilityObject) {
LoadHTML(html.c_str());
scoped_ptr<TestRendererAccessibilityComplete> accessibility(
- new TestRendererAccessibilityComplete(frame()));
+ new TestRendererAccessibilityComplete(view()));
accessibility->SendPendingAccessibilityEvents();
EXPECT_EQ(7, CountAccessibilityNodesSentToBrowser());
@@ -529,7 +528,7 @@ TEST_F(RendererAccessibilityTest, EventOnObjectNotInTree) {
LoadHTML(html.c_str());
scoped_ptr<TestRendererAccessibilityComplete> accessibility(
- new TestRendererAccessibilityComplete(frame()));
+ new TestRendererAccessibilityComplete(view()));
accessibility->SendPendingAccessibilityEvents();
EXPECT_EQ(3, CountAccessibilityNodesSentToBrowser());
diff --git a/content/renderer/accessibility/renderer_accessibility_complete.cc b/content/renderer/accessibility/renderer_accessibility_complete.cc
index fd64718..2e72dde 100644
--- a/content/renderer/accessibility/renderer_accessibility_complete.cc
+++ b/content/renderer/accessibility/renderer_accessibility_complete.cc
@@ -9,7 +9,6 @@
#include "base/bind.h"
#include "base/message_loop/message_loop.h"
#include "content/renderer/accessibility/blink_ax_enum_conversion.h"
-#include "content/renderer/render_frame_impl.h"
#include "content/renderer/render_view_impl.h"
#include "third_party/WebKit/public/web/WebAXObject.h"
#include "third_party/WebKit/public/web/WebDocument.h"
@@ -29,10 +28,10 @@ using blink::WebView;
namespace content {
RendererAccessibilityComplete::RendererAccessibilityComplete(
- RenderFrameImpl* render_frame)
- : RendererAccessibility(render_frame),
+ RenderViewImpl* render_view)
+ : RendererAccessibility(render_view),
weak_factory_(this),
- tree_source_(render_frame),
+ tree_source_(render_view),
serializer_(&tree_source_),
last_scroll_offset_(gfx::Size()),
ack_pending_(false) {
@@ -92,6 +91,13 @@ void RendererAccessibilityComplete::FocusedNodeChanged(const WebNode& node) {
}
}
+void RendererAccessibilityComplete::DidFinishLoad(blink::WebLocalFrame* frame) {
+ const WebDocument& document = GetMainDocument();
+ if (document.isNull())
+ return;
+}
+
+
void RendererAccessibilityComplete::HandleWebAccessibilityEvent(
const blink::WebAXObject& obj, blink::WebAXEvent event) {
HandleAXEvent(obj, AXEventFromBlink(event));
@@ -156,7 +162,7 @@ void RendererAccessibilityComplete::SendPendingAccessibilityEvents() {
if (pending_events_.empty())
return;
- if (render_frame_->is_swapped_out())
+ if (render_view_->is_swapped_out())
return;
ack_pending_ = true;
@@ -381,7 +387,7 @@ void RendererAccessibilityComplete::OnSetFocus(int acc_obj_id) {
// By convention, calling SetFocus on the root of the tree should clear the
// current focus. Otherwise set the focus to the new node.
if (acc_obj_id == root.axID())
- render_frame_->GetRenderView()->GetWebView()->clearFocusedElement();
+ render_view()->GetWebView()->clearFocusedElement();
else
obj.setFocused(true);
}
diff --git a/content/renderer/accessibility/renderer_accessibility_complete.h b/content/renderer/accessibility/renderer_accessibility_complete.h
index cb34c15..507b734 100644
--- a/content/renderer/accessibility/renderer_accessibility_complete.h
+++ b/content/renderer/accessibility/renderer_accessibility_complete.h
@@ -37,17 +37,18 @@ class RenderViewImpl;
class CONTENT_EXPORT RendererAccessibilityComplete
: public RendererAccessibility {
public:
- explicit RendererAccessibilityComplete(RenderFrameImpl* render_frame);
+ explicit RendererAccessibilityComplete(RenderViewImpl* render_view);
virtual ~RendererAccessibilityComplete();
- // RenderFrameObserver implementation.
+ // RenderView::Observer implementation.
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
+ virtual void FocusedNodeChanged(const blink::WebNode& node) OVERRIDE;
+ virtual void DidFinishLoad(blink::WebLocalFrame* frame) OVERRIDE;
// RendererAccessibility.
virtual void HandleWebAccessibilityEvent(
const blink::WebAXObject& obj, blink::WebAXEvent event) OVERRIDE;
virtual RendererAccessibilityType GetType() OVERRIDE;
- virtual void FocusedNodeChanged(const blink::WebNode& node) OVERRIDE;
void HandleAXEvent(const blink::WebAXObject& obj, ui::AXEvent event);
diff --git a/content/renderer/accessibility/renderer_accessibility_focus_only.cc b/content/renderer/accessibility/renderer_accessibility_focus_only.cc
index 4391412..bda3e8f 100644
--- a/content/renderer/accessibility/renderer_accessibility_focus_only.cc
+++ b/content/renderer/accessibility/renderer_accessibility_focus_only.cc
@@ -4,7 +4,6 @@
#include "content/renderer/accessibility/renderer_accessibility_focus_only.h"
-#include "content/renderer/render_frame_impl.h"
#include "content/renderer/render_view_impl.h"
#include "third_party/WebKit/public/web/WebDocument.h"
#include "third_party/WebKit/public/web/WebElement.h"
@@ -27,8 +26,8 @@ const int kInitialId = 2;
namespace content {
RendererAccessibilityFocusOnly::RendererAccessibilityFocusOnly(
- RenderFrameImpl* render_frame)
- : RendererAccessibility(render_frame),
+ RenderViewImpl* render_view)
+ : RendererAccessibility(render_view),
next_id_(kInitialId) {
}
@@ -49,12 +48,17 @@ void RendererAccessibilityFocusOnly::FocusedNodeChanged(const WebNode& node) {
HandleFocusedNodeChanged(node, true);
}
-void RendererAccessibilityFocusOnly::DidFinishLoad() {
+void RendererAccessibilityFocusOnly::DidFinishLoad(
+ blink::WebLocalFrame* frame) {
+ WebView* view = render_view()->GetWebView();
+ if (view->focusedFrame() != frame)
+ return;
+
+ WebDocument document = frame->document();
// Send an accessible tree to the browser, but do not post a native
// focus event. This is important so that if focus is initially in an
// editable text field, Windows will know to pop up the keyboard if the
// user touches it and focus doesn't change.
- const WebDocument& document = GetMainDocument();
HandleFocusedNodeChanged(document.focusedElement(), false);
}
@@ -70,13 +74,13 @@ void RendererAccessibilityFocusOnly::HandleFocusedNodeChanged(
// Check HasIMETextFocus first, because it will correctly handle
// focus in a text box inside a ppapi plug-in. Otherwise fall back on
// checking the focused node in Blink.
- if (render_frame_->render_view()->HasIMETextFocus()) {
+ if (render_view_->HasIMETextFocus()) {
node_has_focus = true;
node_is_editable_text = true;
} else {
node_has_focus = !node.isNull();
node_is_editable_text =
- node_has_focus && render_frame_->render_view()->IsEditableNode(node);
+ node_has_focus && render_view_->IsEditableNode(node);
}
std::vector<AccessibilityHostMsg_EventParams> events;
@@ -105,7 +109,7 @@ void RendererAccessibilityFocusOnly::HandleFocusedNodeChanged(
(1 << ui::AX_STATE_FOCUSABLE);
if (!node_has_focus)
root.state |= (1 << ui::AX_STATE_FOCUSED);
- root.location = gfx::Rect(render_frame_->render_view()->size());
+ root.location = gfx::Rect(render_view_->size());
root.child_ids.push_back(next_id_);
child.id = next_id_;
@@ -114,7 +118,7 @@ void RendererAccessibilityFocusOnly::HandleFocusedNodeChanged(
if (!node.isNull() && node.isElementNode()) {
child.location = gfx::Rect(
const_cast<WebNode&>(node).to<WebElement>().boundsInViewportSpace());
- } else if (render_frame_->render_view()->HasIMETextFocus()) {
+ } else if (render_view_->HasIMETextFocus()) {
child.location = root.location;
} else {
child.location = gfx::Rect();
diff --git a/content/renderer/accessibility/renderer_accessibility_focus_only.h b/content/renderer/accessibility/renderer_accessibility_focus_only.h
index 5306808..806cd4b 100644
--- a/content/renderer/accessibility/renderer_accessibility_focus_only.h
+++ b/content/renderer/accessibility/renderer_accessibility_focus_only.h
@@ -9,7 +9,7 @@
namespace content {
-// This is an accessibility implementation that only handles whatever
+// This is an accsessibility implementation that only handles whatever
// node has focus, ignoring everything else. It's here because on Windows 8,
// we need to use accessibility APIs to tell the operating system when a
// touch should pop up the on-screen keyboard, but it's not worth the
@@ -49,17 +49,17 @@ namespace content {
// bounds.
class RendererAccessibilityFocusOnly : public RendererAccessibility {
public:
- explicit RendererAccessibilityFocusOnly(RenderFrameImpl* render_frame);
+ explicit RendererAccessibilityFocusOnly(RenderViewImpl* render_view);
virtual ~RendererAccessibilityFocusOnly();
// RendererAccessibility implementation.
virtual void HandleWebAccessibilityEvent(
const blink::WebAXObject& obj, blink::WebAXEvent event) OVERRIDE;
virtual RendererAccessibilityType GetType() OVERRIDE;
- virtual void FocusedNodeChanged(const blink::WebNode& node) OVERRIDE;
- // RenderFrameObserver implementation.
- virtual void DidFinishLoad() OVERRIDE;
+ // RenderView::Observer implementation.
+ virtual void FocusedNodeChanged(const blink::WebNode& node) OVERRIDE;
+ virtual void DidFinishLoad(blink::WebLocalFrame* frame) OVERRIDE;
private:
void HandleFocusedNodeChanged(const blink::WebNode& node,
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index a8baba2..85308be 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -47,8 +47,6 @@
#include "content/public/renderer/navigation_state.h"
#include "content/public/renderer/render_frame_observer.h"
#include "content/renderer/accessibility/renderer_accessibility.h"
-#include "content/renderer/accessibility/renderer_accessibility_complete.h"
-#include "content/renderer/accessibility/renderer_accessibility_focus_only.h"
#include "content/renderer/browser_plugin/browser_plugin.h"
#include "content/renderer/browser_plugin/browser_plugin_manager.h"
#include "content/renderer/child_frame_compositing_helper.h"
@@ -413,8 +411,6 @@ RenderFrameImpl::RenderFrameImpl(RenderViewImpl* render_view, int routing_id)
geolocation_dispatcher_(NULL),
push_messaging_dispatcher_(NULL),
screen_orientation_dispatcher_(NULL),
- accessibility_mode_(AccessibilityModeOff),
- renderer_accessibility_(NULL),
weak_factory_(this) {
std::pair<RoutingIDFrameMap::iterator, bool> result =
g_routing_id_frame_map.Get().insert(std::make_pair(routing_id_, this));
@@ -505,8 +501,8 @@ void RenderFrameImpl::PepperTextInputTypeChanged(
GetRenderWidget()->UpdateTextInputState(
RenderWidget::NO_SHOW_IME, RenderWidget::FROM_NON_IME);
- if (renderer_accessibility())
- renderer_accessibility()->FocusedNodeChanged(WebNode());
+ if (render_view_->renderer_accessibility())
+ render_view_->renderer_accessibility()->FocusedNodeChanged(WebNode());
}
void RenderFrameImpl::PepperCaretPositionChanged(
@@ -727,8 +723,6 @@ bool RenderFrameImpl::OnMessageReceived(const IPC::Message& msg) {
OnTextSurroundingSelectionRequest)
IPC_MESSAGE_HANDLER(FrameMsg_AddStyleSheetByURL,
OnAddStyleSheetByURL)
- IPC_MESSAGE_HANDLER(FrameMsg_SetAccessibilityMode,
- OnSetAccessibilityMode)
#if defined(OS_MACOSX)
IPC_MESSAGE_HANDLER(InputMsg_CopyToFindPboard, OnCopyToFindPboard)
#endif
@@ -1184,25 +1178,6 @@ void RenderFrameImpl::OnExtendSelectionAndDelete(int before, int after) {
frame_->extendSelectionAndDelete(before, after);
}
-void RenderFrameImpl::OnSetAccessibilityMode(AccessibilityMode new_mode) {
- if (accessibility_mode_ == new_mode)
- return;
- accessibility_mode_ = new_mode;
- if (renderer_accessibility_) {
- delete renderer_accessibility_;
- renderer_accessibility_ = NULL;
- }
- if (accessibility_mode_ == AccessibilityModeOff)
- return;
-
- if (accessibility_mode_ & AccessibilityModeFlagFullTree)
- renderer_accessibility_ = new RendererAccessibilityComplete(this);
-#if !defined(OS_ANDROID)
- else
- renderer_accessibility_ = new RendererAccessibilityFocusOnly(this);
-#endif
-}
-
void RenderFrameImpl::OnReload(bool ignore_cache) {
frame_->reload(ignore_cache);
}
@@ -3160,17 +3135,6 @@ void RenderFrameImpl::didChangeLoadProgress(double load_progress) {
Send(new FrameHostMsg_DidChangeLoadProgress(routing_id_, load_progress));
}
-void RenderFrameImpl::HandleWebAccessibilityEvent(
- const blink::WebAXObject& obj, blink::WebAXEvent event) {
- if (renderer_accessibility_)
- renderer_accessibility_->HandleWebAccessibilityEvent(obj, event);
-}
-
-void RenderFrameImpl::FocusedNodeChanged(const WebNode& node) {
- if (renderer_accessibility_)
- renderer_accessibility_->FocusedNodeChanged(node);
-}
-
WebNavigationPolicy RenderFrameImpl::DecidePolicyForNavigation(
RenderFrame* render_frame,
WebFrame* frame,
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index 3cd7082..e9e8270 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -14,7 +14,6 @@
#include "base/memory/weak_ptr.h"
#include "base/observer_list.h"
#include "base/process/process_handle.h"
-#include "content/common/accessibility_mode_enums.h"
#include "content/common/mojo/service_registry_impl.h"
#include "content/public/common/javascript_message_type.h"
#include "content/public/common/referrer.h"
@@ -23,7 +22,6 @@
#include "content/renderer/render_frame_proxy.h"
#include "content/renderer/renderer_webcookiejar_impl.h"
#include "ipc/ipc_message.h"
-#include "third_party/WebKit/public/web/WebAXObject.h"
#include "third_party/WebKit/public/web/WebDataSource.h"
#include "third_party/WebKit/public/web/WebFrameClient.h"
#include "third_party/WebKit/public/web/WebHistoryCommitType.h"
@@ -67,7 +65,6 @@ class MidiDispatcher;
class NotificationProvider;
class PepperPluginInstanceImpl;
class PushMessagingDispatcher;
-class RendererAccessibility;
class RendererCdmManager;
class RendererMediaPlayerManager;
class RendererPpapiHost;
@@ -151,22 +148,6 @@ class CONTENT_EXPORT RenderFrameImpl
virtual void didStopLoading();
virtual void didChangeLoadProgress(double load_progress);
- AccessibilityMode accessibility_mode() {
- return accessibility_mode_;
- }
-
- RendererAccessibility* renderer_accessibility() {
- return renderer_accessibility_;
- }
-
- void HandleWebAccessibilityEvent(const blink::WebAXObject& obj,
- blink::WebAXEvent event);
-
- // TODO(dmazzoni): the only reason this is here is to plumb it through to
- // RendererAccessibility. It should be part of RenderFrameObserver, once
- // blink has a separate accessibility tree per frame.
- void FocusedNodeChanged(const blink::WebNode& node);
-
#if defined(ENABLE_PLUGINS)
// Notification that a PPAPI plugin has been created.
void PepperPluginCreated(RendererPpapiHost* host);
@@ -438,7 +419,6 @@ class CONTENT_EXPORT RenderFrameImpl
private:
friend class RenderFrameObserver;
- friend class RendererAccessibilityTest;
FRIEND_TEST_ALL_PREFIXES(RendererAccessibilityTest,
AccessibilityMessagesQueueWhileSwappedOut);
FRIEND_TEST_ALL_PREFIXES(RenderFrameImplTest,
@@ -449,8 +429,6 @@ class CONTENT_EXPORT RenderFrameImpl
FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, SendSwapOutACK);
FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest,
SetEditableSelectionAndComposition);
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest,
- OnSetAccessibilityMode);
typedef std::map<GURL, double> HostZoomLevels;
@@ -498,7 +476,6 @@ class CONTENT_EXPORT RenderFrameImpl
void OnReload(bool ignore_cache);
void OnTextSurroundingSelectionRequest(size_t max_length);
void OnAddStyleSheetByURL(const std::string& url);
- void OnSetAccessibilityMode(AccessibilityMode new_mode);
#if defined(OS_MACOSX)
void OnCopyToFindPboard();
#endif
@@ -687,13 +664,6 @@ class CONTENT_EXPORT RenderFrameImpl
// initialized.
ScreenOrientationDispatcher* screen_orientation_dispatcher_;
- // The current accessibility mode.
- AccessibilityMode accessibility_mode_;
-
- // Only valid if |accessibility_mode_| is anything other than
- // AccessibilityModeOff.
- RendererAccessibility* renderer_accessibility_;
-
base::WeakPtrFactory<RenderFrameImpl> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(RenderFrameImpl);
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
index acafe55..952c7d7 100644
--- a/content/renderer/render_thread_impl.cc
+++ b/content/renderer/render_thread_impl.cc
@@ -1349,7 +1349,8 @@ void RenderThreadImpl::OnCreateNewView(const ViewMsg_New_Params& params) {
params.hidden,
params.never_visible,
params.next_page_id,
- params.screen_info);
+ params.screen_info,
+ params.accessibility_mode);
}
GpuChannelHost* RenderThreadImpl::EstablishGpuChannelSync(
diff --git a/content/renderer/render_view_browsertest.cc b/content/renderer/render_view_browsertest.cc
index c3b4489..83e282f 100644
--- a/content/renderer/render_view_browsertest.cc
+++ b/content/renderer/render_view_browsertest.cc
@@ -2334,30 +2334,30 @@ TEST_F(RenderViewImplTest, ServiceWorkerNetworkProviderSetup) {
}
TEST_F(RenderViewImplTest, OnSetAccessibilityMode) {
- ASSERT_EQ(AccessibilityModeOff, frame()->accessibility_mode());
- ASSERT_EQ((RendererAccessibility*) NULL, frame()->renderer_accessibility());
+ ASSERT_EQ(AccessibilityModeOff, view()->accessibility_mode());
+ ASSERT_EQ((RendererAccessibility*) NULL, view()->renderer_accessibility());
- frame()->OnSetAccessibilityMode(AccessibilityModeTreeOnly);
- ASSERT_EQ(AccessibilityModeTreeOnly, frame()->accessibility_mode());
- ASSERT_NE((RendererAccessibility*) NULL, frame()->renderer_accessibility());
+ view()->OnSetAccessibilityMode(AccessibilityModeTreeOnly);
+ ASSERT_EQ(AccessibilityModeTreeOnly, view()->accessibility_mode());
+ ASSERT_NE((RendererAccessibility*) NULL, view()->renderer_accessibility());
ASSERT_EQ(RendererAccessibilityTypeComplete,
- frame()->renderer_accessibility()->GetType());
+ view()->renderer_accessibility()->GetType());
- frame()->OnSetAccessibilityMode(AccessibilityModeOff);
- ASSERT_EQ(AccessibilityModeOff, frame()->accessibility_mode());
- ASSERT_EQ((RendererAccessibility*) NULL, frame()->renderer_accessibility());
+ view()->OnSetAccessibilityMode(AccessibilityModeOff);
+ ASSERT_EQ(AccessibilityModeOff, view()->accessibility_mode());
+ ASSERT_EQ((RendererAccessibility*) NULL, view()->renderer_accessibility());
- frame()->OnSetAccessibilityMode(AccessibilityModeComplete);
- ASSERT_EQ(AccessibilityModeComplete, frame()->accessibility_mode());
- ASSERT_NE((RendererAccessibility*) NULL, frame()->renderer_accessibility());
+ view()->OnSetAccessibilityMode(AccessibilityModeComplete);
+ ASSERT_EQ(AccessibilityModeComplete, view()->accessibility_mode());
+ ASSERT_NE((RendererAccessibility*) NULL, view()->renderer_accessibility());
ASSERT_EQ(RendererAccessibilityTypeComplete,
- frame()->renderer_accessibility()->GetType());
+ view()->renderer_accessibility()->GetType());
- frame()->OnSetAccessibilityMode(AccessibilityModeEditableTextOnly);
- ASSERT_EQ(AccessibilityModeEditableTextOnly, frame()->accessibility_mode());
- ASSERT_NE((RendererAccessibility*) NULL, frame()->renderer_accessibility());
+ view()->OnSetAccessibilityMode(AccessibilityModeEditableTextOnly);
+ ASSERT_EQ(AccessibilityModeEditableTextOnly, view()->accessibility_mode());
+ ASSERT_NE((RendererAccessibility*) NULL, view()->renderer_accessibility());
ASSERT_EQ(RendererAccessibilityTypeFocusOnly,
- frame()->renderer_accessibility()->GetType());
+ view()->renderer_accessibility()->GetType());
}
TEST_F(RenderViewImplTest, ScreenMetricsEmulation) {
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index 13d98ca..4aeb478 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -727,6 +727,8 @@ RenderViewImpl::RenderViewImpl(RenderViewImplParams* params)
speech_recognition_dispatcher_(NULL),
browser_plugin_manager_(NULL),
devtools_agent_(NULL),
+ accessibility_mode_(AccessibilityModeOff),
+ renderer_accessibility_(NULL),
mouse_lock_dispatcher_(NULL),
#if defined(OS_ANDROID)
expected_content_intent_id_(0),
@@ -859,6 +861,9 @@ void RenderViewImpl::Initialize(RenderViewImplParams* params) {
history_controller_.reset(new HistoryController(this));
+ // Create renderer_accessibility_ if needed.
+ OnSetAccessibilityMode(params->accessibility_mode);
+
new IdleUserDetector(this);
if (command_line.HasSwitch(switches::kDomAutomationController))
@@ -1201,7 +1206,8 @@ RenderViewImpl* RenderViewImpl::Create(
bool hidden,
bool never_visible,
int32 next_page_id,
- const blink::WebScreenInfo& screen_info) {
+ const blink::WebScreenInfo& screen_info,
+ AccessibilityMode accessibility_mode) {
DCHECK(routing_id != MSG_ROUTING_NONE);
RenderViewImplParams params(opener_id,
window_was_created_with_opener,
@@ -1218,7 +1224,8 @@ RenderViewImpl* RenderViewImpl::Create(
hidden,
never_visible,
next_page_id,
- screen_info);
+ screen_info,
+ accessibility_mode);
RenderViewImpl* render_view = NULL;
if (g_create_render_view_impl)
render_view = g_create_render_view_impl(&params);
@@ -1406,6 +1413,7 @@ bool RenderViewImpl::OnMessageReceived(const IPC::Message& message) {
IPC_MESSAGE_HANDLER(ViewMsg_SetHistoryLengthAndPrune,
OnSetHistoryLengthAndPrune)
IPC_MESSAGE_HANDLER(ViewMsg_EnableViewSourceMode, OnEnableViewSourceMode)
+ IPC_MESSAGE_HANDLER(ViewMsg_SetAccessibilityMode, OnSetAccessibilityMode)
IPC_MESSAGE_HANDLER(ViewMsg_DisownOpener, OnDisownOpener)
IPC_MESSAGE_HANDLER(ViewMsg_ReleaseDisambiguationPopupBitmap,
OnReleaseDisambiguationPopupBitmap)
@@ -1747,7 +1755,8 @@ WebView* RenderViewImpl::createView(WebLocalFrame* creator,
params.disposition == NEW_BACKGROUND_TAB, // hidden
never_visible,
1, // next_page_id
- screen_info_);
+ screen_info_,
+ accessibility_mode_);
view->opened_by_user_gesture_ = params.user_gesture;
// Record whether the creator frame is trying to suppress the opener field.
@@ -2031,9 +2040,6 @@ void RenderViewImpl::focusedNodeChanged(const WebNode& node) {
Send(new ViewHostMsg_FocusedNodeChanged(routing_id_, IsEditableNode(node)));
FOR_EACH_OBSERVER(RenderViewObserver, observers_, FocusedNodeChanged(node));
-
- // TODO(dmazzoni): this should be part of RenderFrameObserver.
- main_render_frame()->FocusedNodeChanged(node);
}
void RenderViewImpl::didUpdateLayout() {
@@ -2066,7 +2072,9 @@ int RenderViewImpl::historyForwardListCount() {
void RenderViewImpl::postAccessibilityEvent(
const WebAXObject& obj, blink::WebAXEvent event) {
- main_render_frame()->HandleWebAccessibilityEvent(obj, event);
+ if (renderer_accessibility_) {
+ renderer_accessibility_->HandleWebAccessibilityEvent(obj, event);
+ }
}
void RenderViewImpl::didUpdateInspectorSetting(const WebString& key,
@@ -3413,6 +3421,25 @@ void RenderViewImpl::OnSetBackgroundOpaque(bool opaque) {
compositor_->setHasTransparentBackground(!opaque);
}
+void RenderViewImpl::OnSetAccessibilityMode(AccessibilityMode new_mode) {
+ if (accessibility_mode_ == new_mode)
+ return;
+ accessibility_mode_ = new_mode;
+ if (renderer_accessibility_) {
+ delete renderer_accessibility_;
+ renderer_accessibility_ = NULL;
+ }
+ if (accessibility_mode_ == AccessibilityModeOff)
+ return;
+
+ if (accessibility_mode_ & AccessibilityModeFlagFullTree)
+ renderer_accessibility_ = new RendererAccessibilityComplete(this);
+#if !defined(OS_ANDROID)
+ else
+ renderer_accessibility_ = new RendererAccessibilityFocusOnly(this);
+#endif
+}
+
void RenderViewImpl::OnSetActive(bool active) {
if (webview())
webview()->setIsActive(active);
@@ -4107,12 +4134,10 @@ bool RenderViewImpl::didTapMultipleTargets(
const WebVector<WebRect>& target_rects) {
// Never show a disambiguation popup when accessibility is enabled,
// as this interferes with "touch exploration".
- AccessibilityMode accessibility_mode =
- main_render_frame()->accessibility_mode();
- bool matches_accessibility_mode_complete =
- (accessibility_mode & AccessibilityModeComplete) ==
- AccessibilityModeComplete;
- if (matches_accessibility_mode_complete)
+ bool matchesAccessibilityModeComplete =
+ (accessibility_mode_ & AccessibilityModeComplete) ==
+ AccessibilityModeComplete;
+ if (matchesAccessibilityModeComplete)
return false;
gfx::Rect finger_rect(
diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h
index 207a082..6efc709 100644
--- a/content/renderer/render_view_impl.h
+++ b/content/renderer/render_view_impl.h
@@ -139,6 +139,7 @@ class PepperPluginInstanceImpl;
class RenderViewImplTest;
class RenderViewObserver;
class RenderViewTest;
+class RendererAccessibility;
class RendererDateTimePicker;
class RendererWebColorChooserImpl;
class SpeechRecognitionDispatcher;
@@ -184,7 +185,8 @@ class CONTENT_EXPORT RenderViewImpl
bool hidden,
bool never_visible,
int32 next_page_id,
- const blink::WebScreenInfo& screen_info);
+ const blink::WebScreenInfo& screen_info,
+ AccessibilityMode accessibility_mode);
// Used by content_layouttest_support to hook into the creation of
// RenderViewImpls.
@@ -218,6 +220,14 @@ class CONTENT_EXPORT RenderViewImpl
RenderFrameImpl* main_render_frame() { return main_render_frame_.get(); }
+ AccessibilityMode accessibility_mode() {
+ return accessibility_mode_;
+ }
+
+ RendererAccessibility* renderer_accessibility() {
+ return renderer_accessibility_;
+ }
+
MouseLockDispatcher* mouse_lock_dispatcher() {
return mouse_lock_dispatcher_;
}
@@ -563,9 +573,9 @@ class CONTENT_EXPORT RenderViewImpl
// For unit tests.
friend class ExternalPopupMenuTest;
friend class PepperDeviceTest;
+ friend class RendererAccessibilityTest;
friend class RenderViewImplTest;
friend class RenderViewTest;
- friend class RendererAccessibilityTest;
// TODO(nasko): Temporarily friend RenderFrameImpl, so we don't duplicate
// utility functions needed in both classes, while we move frame specific
@@ -589,6 +599,7 @@ class CONTENT_EXPORT RenderViewImpl
FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, OnHandleKeyboardEvent);
FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, OnImeTypeChanged);
FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, OnNavStateChanged);
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, OnSetAccessibilityMode);
FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, OnSetTextDirection);
FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, OnUpdateWebPreferences);
FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest,
@@ -713,6 +724,7 @@ class CONTENT_EXPORT RenderViewImpl
void OnPostMessageEvent(const ViewMsg_PostMessage_Params& params);
void OnReleaseDisambiguationPopupBitmap(const cc::SharedBitmapId& id);
void OnResetPageEncodingToDefault();
+ void OnSetAccessibilityMode(AccessibilityMode new_mode);
void OnSetActive(bool active);
void OnSetBackgroundOpaque(bool opaque);
void OnExitFullscreen();
@@ -1033,6 +1045,13 @@ class CONTENT_EXPORT RenderViewImpl
DevToolsAgent* devtools_agent_;
+ // The current accessibility mode.
+ AccessibilityMode accessibility_mode_;
+
+ // Only valid if |accessibility_mode_| is anything other than
+ // AccessibilityModeOff.
+ RendererAccessibility* renderer_accessibility_;
+
// Mouse Lock dispatcher attached to this view.
MouseLockDispatcher* mouse_lock_dispatcher_;
diff --git a/content/renderer/render_view_impl_params.cc b/content/renderer/render_view_impl_params.cc
index 6864a3d..81522d8 100644
--- a/content/renderer/render_view_impl_params.cc
+++ b/content/renderer/render_view_impl_params.cc
@@ -22,7 +22,8 @@ RenderViewImplParams::RenderViewImplParams(
bool hidden,
bool never_visible,
int32 next_page_id,
- const blink::WebScreenInfo& screen_info)
+ const blink::WebScreenInfo& screen_info,
+ AccessibilityMode accessibility_mode)
: opener_id(opener_id),
window_was_created_with_opener(window_was_created_with_opener),
renderer_prefs(renderer_prefs),
@@ -38,7 +39,8 @@ RenderViewImplParams::RenderViewImplParams(
hidden(hidden),
never_visible(never_visible),
next_page_id(next_page_id),
- screen_info(screen_info) {}
+ screen_info(screen_info),
+ accessibility_mode(accessibility_mode) {}
RenderViewImplParams::~RenderViewImplParams() {}
diff --git a/content/renderer/render_view_impl_params.h b/content/renderer/render_view_impl_params.h
index ad9a26c..ecd878c 100644
--- a/content/renderer/render_view_impl_params.h
+++ b/content/renderer/render_view_impl_params.h
@@ -37,7 +37,8 @@ struct CONTENT_EXPORT RenderViewImplParams {
bool hidden,
bool never_visible,
int32 next_page_id,
- const blink::WebScreenInfo& screen_info);
+ const blink::WebScreenInfo& screen_info,
+ AccessibilityMode accessibility_mode);
~RenderViewImplParams();
int32 opener_id;
@@ -56,6 +57,7 @@ struct CONTENT_EXPORT RenderViewImplParams {
bool never_visible;
int32 next_page_id;
const blink::WebScreenInfo& screen_info;
+ AccessibilityMode accessibility_mode;
};
} // namespace content
diff --git a/content/test/accessibility_browser_test_utils.cc b/content/test/accessibility_browser_test_utils.cc
index e91b2cf..ba0331c 100644
--- a/content/test/accessibility_browser_test_utils.cc
+++ b/content/test/accessibility_browser_test_utils.cc
@@ -8,9 +8,8 @@
#include "base/logging.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
-#include "content/browser/frame_host/render_frame_host_impl.h"
+#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/browser/renderer_host/render_widget_host_view_base.h"
-#include "content/browser/web_contents/web_contents_impl.h"
#include "content/common/view_message_enums.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/url_constants.h"
@@ -27,9 +26,9 @@ AccessibilityNotificationWaiter::AccessibilityNotificationWaiter(Shell* shell)
weak_factory_(this),
event_target_id_(0) {
WebContents* web_contents = shell_->web_contents();
- frame_host_ = static_cast<RenderFrameHostImpl*>(
- web_contents->GetMainFrame());
- frame_host_->SetAccessibilityCallbackForTesting(
+ view_host_ = static_cast<RenderViewHostImpl*>(
+ web_contents->GetRenderViewHost());
+ view_host_->SetAccessibilityCallbackForTesting(
base::Bind(&AccessibilityNotificationWaiter::OnAccessibilityEvent,
weak_factory_.GetWeakPtr()));
}
@@ -43,14 +42,13 @@ AccessibilityNotificationWaiter::AccessibilityNotificationWaiter(
loop_runner_(new MessageLoopRunner()),
weak_factory_(this),
event_target_id_(0) {
- WebContentsImpl* web_contents = static_cast<WebContentsImpl*>(
- shell_->web_contents());
- frame_host_ = static_cast<RenderFrameHostImpl*>(
- web_contents->GetMainFrame());
- frame_host_->SetAccessibilityCallbackForTesting(
+ WebContents* web_contents = shell_->web_contents();
+ view_host_ = static_cast<RenderViewHostImpl*>(
+ web_contents->GetRenderViewHost());
+ view_host_->SetAccessibilityCallbackForTesting(
base::Bind(&AccessibilityNotificationWaiter::OnAccessibilityEvent,
weak_factory_.GetWeakPtr()));
- web_contents->AddAccessibilityMode(accessibility_mode);
+ view_host_->AddAccessibilityMode(accessibility_mode);
}
AccessibilityNotificationWaiter::~AccessibilityNotificationWaiter() {
@@ -61,7 +59,7 @@ void AccessibilityNotificationWaiter::WaitForNotification() {
}
const ui::AXTree& AccessibilityNotificationWaiter::GetAXTree() const {
- return *frame_host_->GetAXTreeForTesting();
+ return view_host_->ax_tree_for_testing();
}
void AccessibilityNotificationWaiter::OnAccessibilityEvent(
diff --git a/content/test/accessibility_browser_test_utils.h b/content/test/accessibility_browser_test_utils.h
index 2e22b6f..5111e3c 100644
--- a/content/test/accessibility_browser_test_utils.h
+++ b/content/test/accessibility_browser_test_utils.h
@@ -6,14 +6,14 @@
#define CONTENT_TEST_ACCESSIBILITY_BROWSER_TEST_UTILS_H_
#include "base/memory/weak_ptr.h"
-#include "content/common/accessibility_mode_enums.h"
+#include "content/common/view_message_enums.h"
#include "ui/accessibility/ax_node_data.h"
#include "ui/accessibility/ax_tree.h"
namespace content {
class MessageLoopRunner;
-class RenderFrameHostImpl;
+class RenderViewHostImpl;
class Shell;
// Create an instance of this class *before* doing any operation that
@@ -53,7 +53,7 @@ class AccessibilityNotificationWaiter {
bool IsAboutBlank();
Shell* shell_;
- RenderFrameHostImpl* frame_host_;
+ RenderViewHostImpl* view_host_;
ui::AXEvent event_to_wait_for_;
scoped_refptr<MessageLoopRunner> loop_runner_;
base::WeakPtrFactory<AccessibilityNotificationWaiter> weak_factory_;