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