diff options
5 files changed, 24 insertions, 4 deletions
diff --git a/content/browser/accessibility/accessibility_ipc_error_browsertest.cc b/content/browser/accessibility/accessibility_ipc_error_browsertest.cc index da6921f..7ff3d27 100644 --- a/content/browser/accessibility/accessibility_ipc_error_browsertest.cc +++ b/content/browser/accessibility/accessibility_ipc_error_browsertest.cc @@ -175,7 +175,7 @@ IN_PROC_BROWSER_TEST_F(AccessibilityIpcErrorBrowserTest, break; AccessibilityNotificationWaiter waiter( - shell(), AccessibilityModeComplete, ui::AX_EVENT_LAYOUT_COMPLETE); + shell(), AccessibilityModeComplete, ui::AX_EVENT_LOAD_COMPLETE); waiter.WaitForNotification(); } diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc index eaf6916..526ccaf 100644 --- a/content/browser/frame_host/render_frame_host_impl.cc +++ b/content/browser/frame_host/render_frame_host_impl.cc @@ -512,6 +512,11 @@ void RenderFrameHostImpl::AccessibilitySetAccessibilityFocus(int acc_obj_id) { Send(new AccessibilityMsg_SetAccessibilityFocus(routing_id_, acc_obj_id)); } +void RenderFrameHostImpl::AccessibilityReset() { + accessibility_reset_token_ = g_next_accessibility_reset_token++; + Send(new AccessibilityMsg_Reset(routing_id_, accessibility_reset_token_)); +} + void RenderFrameHostImpl::AccessibilityFatalError() { browser_accessibility_manager_.reset(NULL); if (accessibility_reset_token_) diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h index 0301082..bd64035 100644 --- a/content/browser/frame_host/render_frame_host_impl.h +++ b/content/browser/frame_host/render_frame_host_impl.h @@ -376,6 +376,9 @@ class CONTENT_EXPORT RenderFrameHostImpl // the accessibility mode. void RequestAXTreeSnapshot(AXTreeSnapshotCallback callback); + // Resets the accessibility serializer in the renderer. + void AccessibilityReset(); + // 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 diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc index 3aedda6..d4a71ad 100644 --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc @@ -209,6 +209,10 @@ void SetAccessibilityModeOnFrame(AccessibilityMode mode, static_cast<RenderFrameHostImpl*>(frame_host)->SetAccessibilityMode(mode); } +void ResetAccessibility(RenderFrameHost* rfh) { + static_cast<RenderFrameHostImpl*>(rfh)->AccessibilityReset(); +} + } // namespace WebContents* WebContents::Create(const WebContents::CreateParams& params) { @@ -853,7 +857,10 @@ const std::string& WebContentsImpl::GetUserAgentOverride() const { } void WebContentsImpl::EnableTreeOnlyAccessibilityMode() { - AddAccessibilityMode(AccessibilityModeTreeOnly); + if (GetAccessibilityMode() == AccessibilityModeTreeOnly) + ForEachFrame(base::Bind(&ResetAccessibility)); + else + AddAccessibilityMode(AccessibilityModeTreeOnly); } bool WebContentsImpl::IsTreeOnlyAccessibilityModeForTesting() const { diff --git a/content/renderer/accessibility/renderer_accessibility.cc b/content/renderer/accessibility/renderer_accessibility.cc index b5f7b60..6e89e51 100644 --- a/content/renderer/accessibility/renderer_accessibility.cc +++ b/content/renderer/accessibility/renderer_accessibility.cc @@ -397,8 +397,13 @@ void RendererAccessibility::OnReset(int reset_token) { pending_events_.clear(); const WebDocument& document = GetMainDocument(); - if (!document.isNull()) - HandleAXEvent(document.accessibilityObject(), ui::AX_EVENT_LAYOUT_COMPLETE); + if (!document.isNull()) { + // Tree-only mode gets used by the automation extension API which requires a + // load complete event to invoke listener callbacks. + ui::AXEvent evt = document.accessibilityObject().isLoaded() + ? ui::AX_EVENT_LOAD_COMPLETE : ui::AX_EVENT_LAYOUT_COMPLETE; + HandleAXEvent(document.accessibilityObject(), evt); + } } void RendererAccessibility::OnScrollToMakeVisible( |