| OLD | NEW | 
|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "base/command_line.h" | 5 #include "base/command_line.h" | 
| 6 #include "content/common/view_messages.h" | 6 #include "content/common/view_messages.h" | 
| 7 #include "content/public/common/content_switches.h" | 7 #include "content/public/common/content_switches.h" | 
| 8 #include "content/renderer/render_view_impl.h" | 8 #include "content/renderer/render_view_impl.h" | 
| 9 #include "content/renderer/renderer_accessibility.h" | 9 #include "content/renderer/renderer_accessibility.h" | 
| 10 #include "third_party/WebKit/Source/WebKit/chromium/public/WebAccessibilityObjec
     t.h" | 10 #include "third_party/WebKit/Source/WebKit/chromium/public/WebAccessibilityObjec
     t.h" | 
| 11 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h" | 11 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h" | 
| 12 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" | 12 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" | 
|  | 13 #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputElement.h" | 
|  | 14 #include "third_party/WebKit/Source/WebKit/chromium/public/WebNode.h" | 
| 13 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" | 15 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" | 
| 14 #include "webkit/glue/webaccessibility.h" | 16 #include "webkit/glue/webaccessibility.h" | 
| 15 | 17 | 
| 16 using WebKit::WebAccessibilityNotification; | 18 using WebKit::WebAccessibilityNotification; | 
| 17 using WebKit::WebAccessibilityObject; | 19 using WebKit::WebAccessibilityObject; | 
| 18 using WebKit::WebDocument; | 20 using WebKit::WebDocument; | 
| 19 using WebKit::WebFrame; | 21 using WebKit::WebFrame; | 
| 20 using WebKit::WebNode; | 22 using WebKit::WebNode; | 
|  | 23 using WebKit::WebSize; | 
| 21 using WebKit::WebView; | 24 using WebKit::WebView; | 
| 22 using webkit_glue::WebAccessibility; | 25 using webkit_glue::WebAccessibility; | 
| 23 | 26 | 
| 24 bool WebAccessibilityNotificationToViewHostMsg( | 27 bool WebAccessibilityNotificationToViewHostMsg( | 
| 25     WebAccessibilityNotification notification, | 28     WebAccessibilityNotification notification, | 
| 26     ViewHostMsg_AccEvent::Value* type) { | 29     ViewHostMsg_AccEvent::Value* type) { | 
| 27   switch (notification) { | 30   switch (notification) { | 
| 28     case WebKit::WebAccessibilityNotificationActiveDescendantChanged: | 31     case WebKit::WebAccessibilityNotificationActiveDescendantChanged: | 
| 29       *type = ViewHostMsg_AccEvent::ACTIVE_DESCENDANT_CHANGED; | 32       *type = ViewHostMsg_AccEvent::ACTIVE_DESCENDANT_CHANGED; | 
| 30       break; | 33       break; | 
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 97 | 100 | 
| 98 bool RendererAccessibility::OnMessageReceived(const IPC::Message& message) { | 101 bool RendererAccessibility::OnMessageReceived(const IPC::Message& message) { | 
| 99   bool handled = true; | 102   bool handled = true; | 
| 100   IPC_BEGIN_MESSAGE_MAP(RendererAccessibility, message) | 103   IPC_BEGIN_MESSAGE_MAP(RendererAccessibility, message) | 
| 101     IPC_MESSAGE_HANDLER(ViewMsg_EnableAccessibility, OnEnableAccessibility) | 104     IPC_MESSAGE_HANDLER(ViewMsg_EnableAccessibility, OnEnableAccessibility) | 
| 102     IPC_MESSAGE_HANDLER(ViewMsg_SetAccessibilityFocus, OnSetAccessibilityFocus) | 105     IPC_MESSAGE_HANDLER(ViewMsg_SetAccessibilityFocus, OnSetAccessibilityFocus) | 
| 103     IPC_MESSAGE_HANDLER(ViewMsg_AccessibilityDoDefaultAction, | 106     IPC_MESSAGE_HANDLER(ViewMsg_AccessibilityDoDefaultAction, | 
| 104                         OnAccessibilityDoDefaultAction) | 107                         OnAccessibilityDoDefaultAction) | 
| 105     IPC_MESSAGE_HANDLER(ViewMsg_AccessibilityNotifications_ACK, | 108     IPC_MESSAGE_HANDLER(ViewMsg_AccessibilityNotifications_ACK, | 
| 106                         OnAccessibilityNotificationsAck) | 109                         OnAccessibilityNotificationsAck) | 
|  | 110     IPC_MESSAGE_HANDLER(ViewMsg_AccessibilityChangeScrollPosition, | 
|  | 111                         OnChangeScrollPosition) | 
|  | 112     IPC_MESSAGE_HANDLER(ViewMsg_AccessibilitySetTextSelection, | 
|  | 113                         OnSetTextSelection) | 
| 107     IPC_MESSAGE_UNHANDLED(handled = false) | 114     IPC_MESSAGE_UNHANDLED(handled = false) | 
| 108   IPC_END_MESSAGE_MAP() | 115   IPC_END_MESSAGE_MAP() | 
| 109   return handled; | 116   return handled; | 
| 110 } | 117 } | 
| 111 | 118 | 
| 112 void RendererAccessibility::FocusedNodeChanged(const WebNode& node) { | 119 void RendererAccessibility::FocusedNodeChanged(const WebNode& node) { | 
| 113   if (!WebAccessibilityObject::accessibilityEnabled()) | 120   if (!WebAccessibilityObject::accessibilityEnabled()) | 
| 114     return; | 121     return; | 
| 115 | 122 | 
| 116   const WebDocument& document = GetMainDocument(); | 123   const WebDocument& document = GetMainDocument(); | 
| (...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 366 #ifndef NDEBUG | 373 #ifndef NDEBUG | 
| 367     if (logging_) | 374     if (logging_) | 
| 368       LOG(WARNING) << "DoDefaultAction on invalid object id " << acc_obj_id; | 375       LOG(WARNING) << "DoDefaultAction on invalid object id " << acc_obj_id; | 
| 369 #endif | 376 #endif | 
| 370     return; | 377     return; | 
| 371   } | 378   } | 
| 372 | 379 | 
| 373   obj.performDefaultAction(); | 380   obj.performDefaultAction(); | 
| 374 } | 381 } | 
| 375 | 382 | 
|  | 383 void RendererAccessibility::OnChangeScrollPosition( | 
|  | 384     int acc_obj_id, int scroll_x, int scroll_y) { | 
|  | 385   if (!WebAccessibilityObject::accessibilityEnabled()) | 
|  | 386     return; | 
|  | 387 | 
|  | 388   const WebDocument& document = GetMainDocument(); | 
|  | 389   if (document.isNull()) | 
|  | 390     return; | 
|  | 391 | 
|  | 392   WebAccessibilityObject root = document.accessibilityObject(); | 
|  | 393 | 
|  | 394   // TODO(dmazzoni): Support scrolling of any scrollable container, | 
|  | 395   // not just the main document frame. | 
|  | 396   if (acc_obj_id != root.axID()) | 
|  | 397     return; | 
|  | 398 | 
|  | 399   WebFrame* frame = document.frame(); | 
|  | 400   if (!frame) | 
|  | 401     return; | 
|  | 402 | 
|  | 403   WebSize min_offset = frame->minimumScrollOffset(); | 
|  | 404   WebSize max_offset = frame->maximumScrollOffset(); | 
|  | 405   scroll_x = std::max(min_offset.width, scroll_x); | 
|  | 406   scroll_x = std::min(max_offset.width, scroll_x); | 
|  | 407   scroll_y = std::max(min_offset.height, scroll_y); | 
|  | 408   scroll_y = std::min(max_offset.height, scroll_y); | 
|  | 409 | 
|  | 410   frame->setScrollOffset(WebSize(scroll_x, scroll_y)); | 
|  | 411   if (frame->view()) | 
|  | 412     frame->view()->layout(); | 
|  | 413 | 
|  | 414   // Make sure the browser gets a notification when the scroll | 
|  | 415   // position actually changes. | 
|  | 416   // TODO(dmazzoni): remove this once this bug is fixed: | 
|  | 417   // https://bugs.webkit.org/show_bug.cgi?id=73460 | 
|  | 418   PostAccessibilityNotification( | 
|  | 419       root, | 
|  | 420       WebKit::WebAccessibilityNotificationLayoutComplete); | 
|  | 421 } | 
|  | 422 | 
|  | 423 void RendererAccessibility::OnSetTextSelection( | 
|  | 424     int acc_obj_id, int start_offset, int end_offset) { | 
|  | 425   if (!WebAccessibilityObject::accessibilityEnabled()) | 
|  | 426     return; | 
|  | 427 | 
|  | 428   const WebDocument& document = GetMainDocument(); | 
|  | 429   if (document.isNull()) | 
|  | 430     return; | 
|  | 431 | 
|  | 432   WebAccessibilityObject obj = document.accessibilityObjectFromID(acc_obj_id); | 
|  | 433   if (!obj.isValid()) { | 
|  | 434 #ifndef NDEBUG | 
|  | 435     if (logging_) | 
|  | 436       LOG(WARNING) << "SetTextSelection on invalid object id " << acc_obj_id; | 
|  | 437 #endif | 
|  | 438     return; | 
|  | 439   } | 
|  | 440 | 
|  | 441   // TODO(dmazzoni): support elements other than <input>. | 
|  | 442   WebKit::WebNode node = obj.node(); | 
|  | 443   if (!node.isNull() && node.isElementNode()) { | 
|  | 444     WebKit::WebElement element = node.to<WebKit::WebElement>(); | 
|  | 445     WebKit::WebInputElement* input_element = | 
|  | 446         WebKit::toWebInputElement(&element); | 
|  | 447     if (input_element && input_element->isTextField()) | 
|  | 448       input_element->setSelectionRange(start_offset, end_offset); | 
|  | 449   } | 
|  | 450 } | 
|  | 451 | 
| 376 void RendererAccessibility::OnAccessibilityNotificationsAck() { | 452 void RendererAccessibility::OnAccessibilityNotificationsAck() { | 
| 377   DCHECK(ack_pending_); | 453   DCHECK(ack_pending_); | 
| 378   ack_pending_ = false; | 454   ack_pending_ = false; | 
| 379   SendPendingAccessibilityNotifications(); | 455   SendPendingAccessibilityNotifications(); | 
| 380 } | 456 } | 
| 381 | 457 | 
| 382 void RendererAccessibility::OnEnableAccessibility() { | 458 void RendererAccessibility::OnEnableAccessibility() { | 
| 383   if (WebAccessibilityObject::accessibilityEnabled()) | 459   if (WebAccessibilityObject::accessibilityEnabled()) | 
| 384     return; | 460     return; | 
| 385 | 461 | 
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 446 | 522 | 
| 447 WebDocument RendererAccessibility::GetMainDocument() { | 523 WebDocument RendererAccessibility::GetMainDocument() { | 
| 448   WebView* view = render_view()->GetWebView(); | 524   WebView* view = render_view()->GetWebView(); | 
| 449   WebFrame* main_frame = view ? view->mainFrame() : NULL; | 525   WebFrame* main_frame = view ? view->mainFrame() : NULL; | 
| 450 | 526 | 
| 451   if (main_frame) | 527   if (main_frame) | 
| 452     return main_frame->document(); | 528     return main_frame->document(); | 
| 453   else | 529   else | 
| 454     return WebDocument(); | 530     return WebDocument(); | 
| 455 } | 531 } | 
| OLD | NEW | 
|---|