Index: content/renderer/render_frame_impl.cc |
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc |
index 7f05db586db58ce7b7c414b9d101da3f18a82f67..6b819f80f30f13c36bd7c7c0dd26f175b82ad20b 100644 |
--- a/content/renderer/render_frame_impl.cc |
+++ b/content/renderer/render_frame_impl.cc |
@@ -47,6 +47,8 @@ |
#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" |
@@ -412,6 +414,8 @@ 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)); |
@@ -502,8 +506,8 @@ void RenderFrameImpl::PepperTextInputTypeChanged( |
GetRenderWidget()->UpdateTextInputState( |
RenderWidget::NO_SHOW_IME, RenderWidget::FROM_NON_IME); |
- if (render_view_->renderer_accessibility()) |
- render_view_->renderer_accessibility()->FocusedNodeChanged(WebNode()); |
+ if (renderer_accessibility()) |
+ renderer_accessibility()->FocusedNodeChanged(WebNode()); |
} |
void RenderFrameImpl::PepperCaretPositionChanged( |
@@ -717,6 +721,8 @@ 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 |
@@ -1167,6 +1173,25 @@ 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); |
} |
@@ -3136,6 +3161,17 @@ 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, |