diff options
author | ctguil@chromium.org <ctguil@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-31 11:54:31 +0000 |
---|---|---|
committer | ctguil@chromium.org <ctguil@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-31 11:54:31 +0000 |
commit | 520cb7d74997ad71aa26cbb842dc7eec75be4f49 (patch) | |
tree | 01761cfd3fb461bd60d612138e77c8a1c4dfdb2b /chrome/browser/renderer_host | |
parent | 4a188ca7f4aeb5b84187029bc2b61dcbee1797a8 (diff) | |
download | chromium_src-520cb7d74997ad71aa26cbb842dc7eec75be4f49.zip chromium_src-520cb7d74997ad71aa26cbb842dc7eec75be4f49.tar.gz chromium_src-520cb7d74997ad71aa26cbb842dc7eec75be4f49.tar.bz2 |
Update browser cache of accessibility tree on renderer sub-tree changes.
WebKit sister patch: http://trac.webkit.org/changeset/66305
BUG=13291
TEST=interactive_ui_tests --gtest_filter=AccessibilityWinBrowserTest.TestDynamicAccessibilityTree
TEST=unit_tests --gtest_filter=BrowserAccessibilityTest.TestChildrenChange
TEST=unit_tests --gtest_filter=BrowserAccessibilityTest.TestChildrenChangeNoLeaks
Review URL: http://codereview.chromium.org/3117036
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@57983 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/renderer_host')
7 files changed, 43 insertions, 0 deletions
diff --git a/chrome/browser/renderer_host/render_view_host.cc b/chrome/browser/renderer_host/render_view_host.cc index 70c6b96..9850ab1 100644 --- a/chrome/browser/renderer_host/render_view_host.cc +++ b/chrome/browser/renderer_host/render_view_host.cc @@ -837,6 +837,8 @@ void RenderViewHost::OnMessageReceived(const IPC::Message& msg) { OnAccessibilityFocusChange) IPC_MESSAGE_HANDLER(ViewHostMsg_AccessibilityObjectStateChange, OnAccessibilityObjectStateChange) + IPC_MESSAGE_HANDLER(ViewHostMsg_AccessibilityObjectChildrenChange, + OnAccessibilityObjectChildrenChange) IPC_MESSAGE_HANDLER(ViewHostMsg_OnCSSInserted, OnCSSInserted) IPC_MESSAGE_HANDLER(ViewHostMsg_PageContents, OnPageContents) IPC_MESSAGE_HANDLER(ViewHostMsg_PageTranslated, OnPageTranslated) @@ -1970,6 +1972,18 @@ void RenderViewHost::OnAccessibilityObjectStateChange(int acc_obj_id) { view()->OnAccessibilityObjectStateChange(acc_obj_id); } +void RenderViewHost::OnAccessibilityObjectChildrenChange( + const std::vector<webkit_glue::WebAccessibility>& acc_changes) { + view()->OnAccessibilityObjectChildrenChange(acc_changes); + + if (acc_changes.size() > 0) { + NotificationService::current()->Notify( + NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, + Source<RenderViewHost>(this), + NotificationService::NoDetails()); + } +} + void RenderViewHost::OnAccessibilityTree( const webkit_glue::WebAccessibility& tree) { if (view()) diff --git a/chrome/browser/renderer_host/render_view_host.h b/chrome/browser/renderer_host/render_view_host.h index 3010910..1d92cd9 100644 --- a/chrome/browser/renderer_host/render_view_host.h +++ b/chrome/browser/renderer_host/render_view_host.h @@ -654,6 +654,8 @@ class RenderViewHost : public RenderWidgetHost { void OnExtensionPostMessage(int port_id, const std::string& message); void OnAccessibilityFocusChange(int acc_obj_id); void OnAccessibilityObjectStateChange(int acc_obj_id); + void OnAccessibilityObjectChildrenChange( + const std::vector<webkit_glue::WebAccessibility>& acc_changes); void OnAccessibilityTree(const webkit_glue::WebAccessibility& tree); void OnCSSInserted(); void OnPageContents(const GURL& url, diff --git a/chrome/browser/renderer_host/render_widget_host.cc b/chrome/browser/renderer_host/render_widget_host.cc index 0a06602..30766ea 100644 --- a/chrome/browser/renderer_host/render_widget_host.cc +++ b/chrome/browser/renderer_host/render_widget_host.cc @@ -1166,6 +1166,10 @@ void RenderWidgetHost::AccessibilityDoDefaultAction(int acc_obj_id) { Send(new ViewMsg_AccessibilityDoDefaultAction(routing_id(), acc_obj_id)); } +void RenderWidgetHost::AccessibilityObjectChildrenChangeAck() { + Send(new ViewMsg_AccessibilityObjectChildrenChange_ACK(routing_id())); +} + void RenderWidgetHost::ProcessKeyboardEventAck(int type, bool processed) { if (key_queue_.size() == 0) { LOG(ERROR) << "Got a KeyEvent back from the renderer but we " diff --git a/chrome/browser/renderer_host/render_widget_host.h b/chrome/browser/renderer_host/render_widget_host.h index eac130e..ad31f2e 100644 --- a/chrome/browser/renderer_host/render_widget_host.h +++ b/chrome/browser/renderer_host/render_widget_host.h @@ -385,6 +385,9 @@ class RenderWidgetHost : public IPC::Channel::Listener, // on a node with this accessibility object id. void AccessibilityDoDefaultAction(int acc_obj_id); + // Acknowledges a ViewHostMsg_AccessibilityObjectChildrenChange message. + void AccessibilityObjectChildrenChangeAck(); + // Sets the active state (i.e., control tints). virtual void SetActive(bool active); diff --git a/chrome/browser/renderer_host/render_widget_host_view.h b/chrome/browser/renderer_host/render_widget_host_view.h index d651943..d4c09de 100644 --- a/chrome/browser/renderer_host/render_widget_host_view.h +++ b/chrome/browser/renderer_host/render_widget_host_view.h @@ -10,6 +10,9 @@ #include <OpenGL/OpenGL.h> #endif +#include <string> +#include <vector> + #include "app/surface/transport_dib.h" #include "gfx/native_widget_types.h" #include "third_party/skia/include/core/SkBitmap.h" @@ -250,6 +253,8 @@ class RenderWidgetHostView { const webkit_glue::WebAccessibility& tree) { } virtual void OnAccessibilityFocusChange(int acc_obj_id) { } virtual void OnAccessibilityObjectStateChange(int acc_obj_id) { } + virtual void OnAccessibilityObjectChildrenChange( + const std::vector<webkit_glue::WebAccessibility>& acc_changes) { } protected: // Interface class only, do not construct. diff --git a/chrome/browser/renderer_host/render_widget_host_view_win.cc b/chrome/browser/renderer_host/render_widget_host_view_win.cc index ac1be0b..defdc61 100644 --- a/chrome/browser/renderer_host/render_widget_host_view_win.cc +++ b/chrome/browser/renderer_host/render_widget_host_view_win.cc @@ -1511,6 +1511,14 @@ void RenderWidgetHostViewWin::OnAccessibilityObjectStateChange(int acc_obj_id) { } } +void RenderWidgetHostViewWin::OnAccessibilityObjectChildrenChange( + const std::vector<webkit_glue::WebAccessibility>& acc_changes) { + if (browser_accessibility_manager_.get()) { + browser_accessibility_manager_->OnAccessibilityObjectChildrenChange( + acc_changes); + } +} + void RenderWidgetHostViewWin::Observe(NotificationType type, const NotificationSource& source, const NotificationDetails& details) { @@ -1553,6 +1561,10 @@ void RenderWidgetHostViewWin::AccessibilityDoDefaultAction(int acc_obj_id) { render_widget_host_->AccessibilityDoDefaultAction(acc_obj_id); } +void RenderWidgetHostViewWin::AccessibilityObjectChildrenChangeAck() { + render_widget_host_->AccessibilityObjectChildrenChangeAck(); +} + LRESULT RenderWidgetHostViewWin::OnGetObject(UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled) { if (lparam != OBJID_CLIENT) { diff --git a/chrome/browser/renderer_host/render_widget_host_view_win.h b/chrome/browser/renderer_host/render_widget_host_view_win.h index 9d17aa6..00f8c38 100644 --- a/chrome/browser/renderer_host/render_widget_host_view_win.h +++ b/chrome/browser/renderer_host/render_widget_host_view_win.h @@ -157,6 +157,8 @@ class RenderWidgetHostViewWin const webkit_glue::WebAccessibility& tree); virtual void OnAccessibilityFocusChange(int acc_obj_id); virtual void OnAccessibilityObjectStateChange(int acc_obj_id); + virtual void OnAccessibilityObjectChildrenChange( + const std::vector<webkit_glue::WebAccessibility>& acc_obj); // Implementation of NotificationObserver: virtual void Observe(NotificationType type, @@ -166,6 +168,7 @@ class RenderWidgetHostViewWin // Implementation of BrowserAccessibilityDelegate: virtual void SetAccessibilityFocus(int acc_obj_id); virtual void AccessibilityDoDefaultAction(int acc_obj_id); + virtual void AccessibilityObjectChildrenChangeAck(); protected: // Windows Message Handlers |