Index: content/renderer/render_view_impl.cc |
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc |
index 13d98cafc042139cdec9a803a2211d0c308399d6..4aeb478c8218af39b7ceed9f72c936913e089f18 100644 |
--- a/content/renderer/render_view_impl.cc |
+++ b/content/renderer/render_view_impl.cc |
@@ -727,6 +727,8 @@ |
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), |
@@ -858,6 +860,9 @@ |
mouse_lock_dispatcher_ = new RenderViewMouseLockDispatcher(this); |
history_controller_.reset(new HistoryController(this)); |
+ |
+ // Create renderer_accessibility_ if needed. |
+ OnSetAccessibilityMode(params->accessibility_mode); |
new IdleUserDetector(this); |
@@ -1201,7 +1206,8 @@ |
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 @@ |
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(¶ms); |
@@ -1406,6 +1413,7 @@ |
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 @@ |
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 @@ |
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 @@ |
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 @@ |
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 @@ |
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( |