| Index: content/renderer/render_view.cc
|
| ===================================================================
|
| --- content/renderer/render_view.cc (revision 102682)
|
| +++ content/renderer/render_view.cc (working copy)
|
| @@ -63,6 +63,7 @@
|
| #include "content/renderer/render_view_observer.h"
|
| #include "content/renderer/render_view_visitor.h"
|
| #include "content/renderer/render_widget_fullscreen_pepper.h"
|
| +#include "content/renderer/renderer_accessibility.h"
|
| #include "content/renderer/renderer_webapplicationcachehost_impl.h"
|
| #include "content/renderer/renderer_webstoragenamespace_impl.h"
|
| #include "content/renderer/speech_input_dispatcher.h"
|
| @@ -79,7 +80,6 @@
|
| #include "net/base/net_errors.h"
|
| #include "net/http/http_util.h"
|
| #include "ppapi/c/private/ppb_flash_net_connector.h"
|
| -#include "third_party/WebKit/Source/WebKit/chromium/public/WebAccessibilityCache.h"
|
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebAccessibilityObject.h"
|
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebCString.h"
|
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebDataSource.h"
|
| @@ -138,7 +138,6 @@
|
| #include "webkit/glue/glue_serialize.h"
|
| #include "webkit/glue/media/video_renderer_impl.h"
|
| #include "webkit/glue/password_form_dom_manager.h"
|
| -#include "webkit/glue/webaccessibility.h"
|
| #include "webkit/glue/webdropdata.h"
|
| #include "webkit/glue/webkit_constants.h"
|
| #include "webkit/glue/webkit_glue.h"
|
| @@ -163,7 +162,6 @@
|
| #include "skia/ext/skia_utils_mac.h"
|
| #endif
|
|
|
| -using WebKit::WebAccessibilityCache;
|
| using WebKit::WebAccessibilityNotification;
|
| using WebKit::WebAccessibilityObject;
|
| using WebKit::WebApplicationCacheHost;
|
| @@ -243,7 +241,6 @@
|
| using webkit_glue::PasswordForm;
|
| using webkit_glue::PasswordFormDomManager;
|
| using webkit_glue::ResourceFetcher;
|
| -using webkit_glue::WebAccessibility;
|
|
|
| //-----------------------------------------------------------------------------
|
|
|
| @@ -274,61 +271,6 @@
|
| result->push_back(urls[i]);
|
| }
|
|
|
| -static bool WebAccessibilityNotificationToViewHostMsg(
|
| - WebAccessibilityNotification notification,
|
| - ViewHostMsg_AccEvent::Value* type) {
|
| - switch (notification) {
|
| - case WebKit::WebAccessibilityNotificationActiveDescendantChanged:
|
| - *type = ViewHostMsg_AccEvent::ACTIVE_DESCENDANT_CHANGED;
|
| - break;
|
| - case WebKit::WebAccessibilityNotificationCheckedStateChanged:
|
| - *type = ViewHostMsg_AccEvent::CHECK_STATE_CHANGED;
|
| - break;
|
| - case WebKit::WebAccessibilityNotificationChildrenChanged:
|
| - *type = ViewHostMsg_AccEvent::CHILDREN_CHANGED;
|
| - break;
|
| - case WebKit::WebAccessibilityNotificationFocusedUIElementChanged:
|
| - *type = ViewHostMsg_AccEvent::FOCUS_CHANGED;
|
| - break;
|
| - case WebKit::WebAccessibilityNotificationLayoutComplete:
|
| - *type = ViewHostMsg_AccEvent::LAYOUT_COMPLETE;
|
| - break;
|
| - case WebKit::WebAccessibilityNotificationLiveRegionChanged:
|
| - *type = ViewHostMsg_AccEvent::LIVE_REGION_CHANGED;
|
| - break;
|
| - case WebKit::WebAccessibilityNotificationLoadComplete:
|
| - *type = ViewHostMsg_AccEvent::LOAD_COMPLETE;
|
| - break;
|
| - case WebKit::WebAccessibilityNotificationMenuListValueChanged:
|
| - *type = ViewHostMsg_AccEvent::MENU_LIST_VALUE_CHANGED;
|
| - break;
|
| - case WebKit::WebAccessibilityNotificationRowCollapsed:
|
| - *type = ViewHostMsg_AccEvent::ROW_COLLAPSED;
|
| - break;
|
| - case WebKit::WebAccessibilityNotificationRowCountChanged:
|
| - *type = ViewHostMsg_AccEvent::ROW_COUNT_CHANGED;
|
| - break;
|
| - case WebKit::WebAccessibilityNotificationRowExpanded:
|
| - *type = ViewHostMsg_AccEvent::ROW_EXPANDED;
|
| - break;
|
| - case WebKit::WebAccessibilityNotificationScrolledToAnchor:
|
| - *type = ViewHostMsg_AccEvent::SCROLLED_TO_ANCHOR;
|
| - break;
|
| - case WebKit::WebAccessibilityNotificationSelectedChildrenChanged:
|
| - *type = ViewHostMsg_AccEvent::SELECTED_CHILDREN_CHANGED;
|
| - break;
|
| - case WebKit::WebAccessibilityNotificationSelectedTextChanged:
|
| - *type = ViewHostMsg_AccEvent::SELECTED_TEXT_CHANGED;
|
| - break;
|
| - case WebKit::WebAccessibilityNotificationValueChanged:
|
| - *type = ViewHostMsg_AccEvent::VALUE_CHANGED;
|
| - break;
|
| - default:
|
| - return false;
|
| - }
|
| - return true;
|
| -}
|
| -
|
| // If |data_source| is non-null and has a NavigationState associated with it,
|
| // the AltErrorPageResourceFetcher is reset.
|
| static void StopAltErrorPageFetcher(WebDataSource* data_source) {
|
| @@ -381,15 +323,13 @@
|
| cached_has_main_frame_horizontal_scrollbar_(false),
|
| cached_has_main_frame_vertical_scrollbar_(false),
|
| ALLOW_THIS_IN_INITIALIZER_LIST(pepper_delegate_(this)),
|
| - ALLOW_THIS_IN_INITIALIZER_LIST(accessibility_method_factory_(this)),
|
| ALLOW_THIS_IN_INITIALIZER_LIST(cookie_jar_(this)),
|
| geolocation_dispatcher_(NULL),
|
| speech_input_dispatcher_(NULL),
|
| device_orientation_dispatcher_(NULL),
|
| - accessibility_ack_pending_(false),
|
| - accessibility_logging_(false),
|
| p2p_socket_dispatcher_(NULL),
|
| devtools_agent_(NULL),
|
| + renderer_accessibility_(NULL),
|
| session_storage_namespace_id_(session_storage_namespace_id),
|
| handling_select_range_(false) {
|
| routing_id_ = routing_id;
|
| @@ -435,12 +375,6 @@
|
|
|
| host_window_ = parent_hwnd;
|
|
|
| - const CommandLine& command_line = *CommandLine::ForCurrentProcess();
|
| - if (command_line.HasSwitch(switches::kEnableAccessibility))
|
| - WebAccessibilityCache::enableAccessibility();
|
| - if (command_line.HasSwitch(switches::kEnableAccessibilityLogging))
|
| - accessibility_logging_ = true;
|
| -
|
| #if defined(ENABLE_P2P_APIS)
|
| p2p_socket_dispatcher_ = new content::P2PSocketDispatcher(this);
|
| #endif
|
| @@ -452,6 +386,9 @@
|
|
|
| devtools_agent_ = new DevToolsAgent(this);
|
|
|
| + renderer_accessibility_ = new RendererAccessibility(this);
|
| +
|
| + const CommandLine& command_line = *CommandLine::ForCurrentProcess();
|
| if (command_line.HasSwitch(switches::kEnableMediaStream)) {
|
| media_stream_impl_ = new MediaStreamImpl(
|
| RenderThread::current()->video_capture_impl_manager());
|
| @@ -554,16 +491,6 @@
|
| observers_.RemoveObserver(observer);
|
| }
|
|
|
| -bool RenderView::RendererAccessibilityNotification::ShouldIncludeChildren() {
|
| - typedef ViewHostMsg_AccessibilityNotification_Params params;
|
| - if (type == WebKit::WebAccessibilityNotificationChildrenChanged ||
|
| - type == WebKit::WebAccessibilityNotificationLoadComplete ||
|
| - type == WebKit::WebAccessibilityNotificationLiveRegionChanged) {
|
| - return true;
|
| - }
|
| - return false;
|
| -}
|
| -
|
| WebKit::WebView* RenderView::webview() const {
|
| return static_cast<WebKit::WebView*>(webwidget());
|
| }
|
| @@ -729,12 +656,6 @@
|
| OnSetEditCommandsForNextKeyEvent)
|
| IPC_MESSAGE_HANDLER(ViewMsg_CustomContextMenuAction,
|
| OnCustomContextMenuAction)
|
| - IPC_MESSAGE_HANDLER(ViewMsg_EnableAccessibility, OnEnableAccessibility)
|
| - IPC_MESSAGE_HANDLER(ViewMsg_SetAccessibilityFocus, OnSetAccessibilityFocus)
|
| - IPC_MESSAGE_HANDLER(ViewMsg_AccessibilityDoDefaultAction,
|
| - OnAccessibilityDoDefaultAction)
|
| - IPC_MESSAGE_HANDLER(ViewMsg_AccessibilityNotifications_ACK,
|
| - OnAccessibilityNotificationsAck)
|
| IPC_MESSAGE_HANDLER(ViewMsg_AsyncOpenFile_ACK, OnAsyncFileOpened)
|
| IPC_MESSAGE_HANDLER(ViewMsg_PpapiBrokerChannelCreated,
|
| OnPpapiBrokerChannelCreated)
|
| @@ -1270,13 +1191,6 @@
|
| // If we end up reusing this WebRequest (for example, due to a #ref click),
|
| // we don't want the transition type to persist. Just clear it.
|
| navigation_state->set_transition_type(PageTransition::LINK);
|
| -
|
| - // Check if the navigation was within the same page, in which case we don't
|
| - // want to clear the accessibility cache.
|
| - if (accessibility_.get() && !navigation_state->was_within_same_page()) {
|
| - accessibility_.reset();
|
| - pending_accessibility_notifications_.clear();
|
| - }
|
| }
|
|
|
| // Tell the embedding application that the title of the active page has changed
|
| @@ -1598,43 +1512,6 @@
|
| RenderThread::RecordUserMetrics(name);
|
| }
|
|
|
| -void RenderView::SendPendingAccessibilityNotifications() {
|
| - if (!accessibility_.get())
|
| - return;
|
| -
|
| - if (pending_accessibility_notifications_.empty())
|
| - return;
|
| -
|
| - // Send all pending accessibility notifications.
|
| - std::vector<ViewHostMsg_AccessibilityNotification_Params> notifications;
|
| - for (size_t i = 0; i < pending_accessibility_notifications_.size(); i++) {
|
| - RendererAccessibilityNotification& notification =
|
| - pending_accessibility_notifications_[i];
|
| - WebAccessibilityObject obj = accessibility_->getObjectById(notification.id);
|
| - if (!obj.isValid())
|
| - continue;
|
| -
|
| - ViewHostMsg_AccessibilityNotification_Params param;
|
| - WebAccessibilityNotificationToViewHostMsg(
|
| - pending_accessibility_notifications_[i].type, ¶m.notification_type);
|
| - param.acc_obj = WebAccessibility(
|
| - obj, accessibility_.get(), notification.ShouldIncludeChildren());
|
| - notifications.push_back(param);
|
| -
|
| -#ifndef NDEBUG
|
| - if (accessibility_logging_) {
|
| - LOG(INFO) << "Accessibility update:\n"
|
| - << param.acc_obj.DebugString(true,
|
| - routing_id_,
|
| - pending_accessibility_notifications_[i].type);
|
| - }
|
| -#endif
|
| - }
|
| - pending_accessibility_notifications_.clear();
|
| - Send(new ViewHostMsg_AccessibilityNotifications(routing_id_, notifications));
|
| - accessibility_ack_pending_ = true;
|
| -}
|
| -
|
| bool RenderView::handleCurrentKeyboardEvent() {
|
| if (edit_commands_.empty())
|
| return false;
|
| @@ -1858,14 +1735,6 @@
|
| void RenderView::focusedNodeChanged(const WebNode& node) {
|
| Send(new ViewHostMsg_FocusedNodeChanged(routing_id_, IsEditableNode(node)));
|
|
|
| - if (WebAccessibilityCache::accessibilityEnabled() && node.isNull()) {
|
| - // TODO(ctguil): Make WebKit send this notification.
|
| - // When focus is cleared notify accessibility that the document is focused.
|
| - postAccessibilityNotification(
|
| - webview()->accessibilityObject(),
|
| - WebKit::WebAccessibilityNotificationFocusedUIElementChanged);
|
| - }
|
| -
|
| FOR_EACH_OBSERVER(RenderViewObserver, observers_, FocusedNodeChanged(node));
|
| }
|
|
|
| @@ -1881,6 +1750,12 @@
|
| return history_list_length_ - historyBackListCount() - 1;
|
| }
|
|
|
| +void RenderView::postAccessibilityNotification(
|
| + const WebAccessibilityObject& obj,
|
| + WebAccessibilityNotification notification) {
|
| + renderer_accessibility_->PostAccessibilityNotification(obj, notification);
|
| +}
|
| +
|
| void RenderView::didUpdateInspectorSetting(const WebString& key,
|
| const WebString& value) {
|
| Send(new ViewHostMsg_UpdateInspectorSetting(routing_id_,
|
| @@ -3740,56 +3615,6 @@
|
| webview()->performMediaPlayerAction(action, location);
|
| }
|
|
|
| -void RenderView::OnEnableAccessibility() {
|
| - if (WebAccessibilityCache::accessibilityEnabled())
|
| - return;
|
| -
|
| - WebAccessibilityCache::enableAccessibility();
|
| -
|
| - if (webview()) {
|
| - // It's possible that the webview has already loaded a webpage without
|
| - // accessibility being enabled. Initialize the browser's cached
|
| - // accessibility tree by sending it a 'load complete' notification.
|
| - postAccessibilityNotification(
|
| - webview()->accessibilityObject(),
|
| - WebKit::WebAccessibilityNotificationLoadComplete);
|
| - }
|
| -}
|
| -
|
| -void RenderView::OnSetAccessibilityFocus(int acc_obj_id) {
|
| - if (!accessibility_.get())
|
| - return;
|
| -
|
| - WebAccessibilityObject obj = accessibility_->getObjectById(acc_obj_id);
|
| - WebAccessibilityObject root = webview()->accessibilityObject();
|
| - if (!obj.isValid() || !root.isValid())
|
| - return;
|
| -
|
| - // By convention, calling SetFocus on the root of the tree should clear the
|
| - // current focus. Otherwise set the focus to the new node.
|
| - if (accessibility_->addOrGetId(obj) == accessibility_->addOrGetId(root))
|
| - webview()->clearFocusedNode();
|
| - else
|
| - obj.setFocused(true);
|
| -}
|
| -
|
| -void RenderView::OnAccessibilityDoDefaultAction(int acc_obj_id) {
|
| - if (!accessibility_.get())
|
| - return;
|
| -
|
| - WebAccessibilityObject obj = accessibility_->getObjectById(acc_obj_id);
|
| - if (!obj.isValid())
|
| - return;
|
| -
|
| - obj.performDefaultAction();
|
| -}
|
| -
|
| -void RenderView::OnAccessibilityNotificationsAck() {
|
| - DCHECK(accessibility_ack_pending_);
|
| - accessibility_ack_pending_ = false;
|
| - SendPendingAccessibilityNotifications();
|
| -}
|
| -
|
| void RenderView::OnGetAllSavableResourceLinksForCurrentPage(
|
| const GURL& page_url) {
|
| // Prepare list to storage all savable resource links.
|
| @@ -4099,72 +3924,6 @@
|
| }
|
| #endif // OS_MACOSX
|
|
|
| -void RenderView::postAccessibilityNotification(
|
| - const WebAccessibilityObject& obj,
|
| - WebAccessibilityNotification notification) {
|
| - if (!accessibility_.get() && webview()) {
|
| - // Create and initialize our accessibility cache
|
| - accessibility_.reset(WebAccessibilityCache::create());
|
| - accessibility_->initialize(webview());
|
| -
|
| - // Load complete should be our first notification sent. Send it manually
|
| - // in cases where we don't get it first to avoid focus problems.
|
| - // TODO(ctguil): Investigate if a different notification is a WebCore bug.
|
| - if (notification != WebKit::WebAccessibilityNotificationLoadComplete) {
|
| - postAccessibilityNotification(accessibility_->getObjectById(1000),
|
| - WebKit::WebAccessibilityNotificationLoadComplete);
|
| - }
|
| - }
|
| -
|
| - if (!accessibility_->isCached(obj)) {
|
| - // The browser doesn't know about objects that are not in the cache. Send a
|
| - // children change for the first accestor that actually is in the cache.
|
| - WebAccessibilityObject parent = obj;
|
| - while (parent.isValid() && !accessibility_->isCached(parent))
|
| - parent = parent.parentObject();
|
| -
|
| - DCHECK(parent.isValid() && accessibility_->isCached(parent));
|
| - if (!parent.isValid())
|
| - return;
|
| - postAccessibilityNotification(
|
| - parent, WebKit::WebAccessibilityNotificationChildrenChanged);
|
| -
|
| - // The parent's children change takes care of the child's children change.
|
| - if (notification == WebKit::WebAccessibilityNotificationChildrenChanged)
|
| - return;
|
| - }
|
| -
|
| - // Add the accessibility object to our cache and ensure it's valid.
|
| - RendererAccessibilityNotification acc_notification;
|
| - acc_notification.id = accessibility_->addOrGetId(obj);
|
| - acc_notification.type = notification;
|
| - if (acc_notification.id < 0)
|
| - return;
|
| -
|
| - ViewHostMsg_AccEvent::Value temp;
|
| - if (!WebAccessibilityNotificationToViewHostMsg(notification, &temp))
|
| - return;
|
| -
|
| - // Discard duplicate accessibility notifications.
|
| - for (uint32 i = 0; i < pending_accessibility_notifications_.size(); i++) {
|
| - if (pending_accessibility_notifications_[i].id == acc_notification.id &&
|
| - pending_accessibility_notifications_[i].type == acc_notification.type) {
|
| - return;
|
| - }
|
| - }
|
| - pending_accessibility_notifications_.push_back(acc_notification);
|
| -
|
| - if (!accessibility_ack_pending_ && accessibility_method_factory_.empty()) {
|
| - // When no accessibility notifications are in-flight post a task to send
|
| - // the notifications to the browser. We use PostTask so that we can queue
|
| - // up additional notifications.
|
| - MessageLoop::current()->PostTask(
|
| - FROM_HERE,
|
| - accessibility_method_factory_.NewRunnableMethod(
|
| - &RenderView::SendPendingAccessibilityNotifications));
|
| - }
|
| -}
|
| -
|
| void RenderView::OnSetEditCommandsForNextKeyEvent(
|
| const EditCommands& edit_commands) {
|
| edit_commands_ = edit_commands;
|
|
|