Index: chrome/renderer/render_view.cc |
=================================================================== |
--- chrome/renderer/render_view.cc (revision 30964) |
+++ chrome/renderer/render_view.cc (working copy) |
@@ -64,6 +64,7 @@ |
#include "net/base/net_errors.h" |
#include "skia/ext/bitmap_platform_device.h" |
#include "skia/ext/image_operations.h" |
+#include "webkit/api/public/WebAccessibilityCache.h" |
#include "webkit/api/public/WebAccessibilityObject.h" |
#include "webkit/api/public/WebDataSource.h" |
#include "webkit/api/public/WebDevToolsAgent.h" |
@@ -114,6 +115,7 @@ |
using webkit_glue::ImageResourceFetcher; |
using webkit_glue::PasswordForm; |
using webkit_glue::PasswordFormDomManager; |
+using WebKit::WebAccessibilityCache; |
using WebKit::WebAccessibilityObject; |
using WebKit::WebColor; |
using WebKit::WebColorName; |
@@ -1096,9 +1098,9 @@ |
navigation_state->set_transition_type(PageTransition::LINK); |
#if defined(OS_WIN) |
- if (web_accessibility_manager_.get()) { |
+ if (accessibility_.get()) { |
// Clear accessibility info cache. |
- web_accessibility_manager_->ClearAccObjMap(-1, true); |
+ accessibility_->clear(); |
} |
#else |
// TODO(port): accessibility not yet implemented. See http://crbug.com/8288. |
@@ -3140,15 +3142,17 @@ |
const webkit_glue::WebAccessibility::InParams& in_params, |
webkit_glue::WebAccessibility::OutParams* out_params) { |
#if defined(OS_WIN) |
- if (!web_accessibility_manager_.get()) { |
- web_accessibility_manager_.reset( |
- webkit_glue::WebAccessibilityManager::Create()); |
+ if (!accessibility_.get()) { |
+ // TODO(dglazkov): Once implemented for all ports, remove lazy |
+ // instantiation of accessibility_. |
+ accessibility_.reset(WebAccessibilityCache::create()); |
+ accessibility_->initialize(webview()); |
} |
- if (!web_accessibility_manager_->GetAccObjInfo(webview(), in_params, |
- out_params)) { |
- return; |
- } |
+ webkit_glue::WebAccessibility::GetAccObjInfo(accessibility_.get(), |
+ in_params, |
+ out_params); |
+ |
#else // defined(OS_WIN) |
// TODO(port): accessibility not yet implemented |
NOTIMPLEMENTED(); |
@@ -3157,14 +3161,18 @@ |
void RenderView::OnClearAccessibilityInfo(int acc_obj_id, bool clear_all) { |
#if defined(OS_WIN) |
- if (!web_accessibility_manager_.get()) { |
+ if (!accessibility_.get()) { |
// If accessibility is not activated, ignore clearing message. |
return; |
} |
- if (!web_accessibility_manager_->ClearAccObjMap(acc_obj_id, clear_all)) |
+ if (clear_all) { |
+ accessibility_->clear(); |
return; |
+ } |
+ accessibility_->remove(acc_obj_id); |
+ |
#else // defined(OS_WIN) |
// TODO(port): accessibility not yet implemented |
NOTIMPLEMENTED(); |
@@ -3630,13 +3638,15 @@ |
void RenderView::focusAccessibilityObject( |
const WebAccessibilityObject& acc_obj) { |
#if defined(OS_WIN) |
- if (!web_accessibility_manager_.get()) { |
- web_accessibility_manager_.reset( |
- webkit_glue::WebAccessibilityManager::Create()); |
- } |
+ // TODO(dglazkov): Current logic implies that focus change can only be made |
+ // after at least one call to RenderView::OnGetAccessibilityInfo, which is |
+ // where accessibility is initialized. We should determine whether that's |
+ // right. |
+ if (!accessibility_.get()) |
+ return; |
// Retrieve the accessibility object id of the AccessibilityObject. |
- int acc_obj_id = web_accessibility_manager_->FocusAccObj(acc_obj); |
+ int acc_obj_id = accessibility_->addOrGetId(acc_obj); |
// If id is valid, alert the browser side that an accessibility focus change |
// occurred. |