OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/renderer/accessibility/renderer_accessibility_complete.h" | 5 #include "content/renderer/accessibility/renderer_accessibility_complete.h" |
6 | 6 |
7 #include <queue> | 7 #include <queue> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
11 #include "content/renderer/accessibility/accessibility_node_serializer.h" | 11 #include "content/renderer/accessibility/accessibility_node_serializer.h" |
12 #include "content/renderer/render_view_impl.h" | 12 #include "content/renderer/render_view_impl.h" |
13 #include "third_party/WebKit/public/web/WebAXObject.h" | 13 #include "third_party/WebKit/public/web/WebAXObject.h" |
14 #include "third_party/WebKit/public/web/WebDocument.h" | 14 #include "third_party/WebKit/public/web/WebDocument.h" |
15 #include "third_party/WebKit/public/web/WebFrame.h" | 15 #include "third_party/WebKit/public/web/WebFrame.h" |
16 #include "third_party/WebKit/public/web/WebInputElement.h" | 16 #include "third_party/WebKit/public/web/WebInputElement.h" |
17 #include "third_party/WebKit/public/web/WebNode.h" | 17 #include "third_party/WebKit/public/web/WebNode.h" |
18 #include "third_party/WebKit/public/web/WebView.h" | 18 #include "third_party/WebKit/public/web/WebView.h" |
19 | 19 |
20 using WebKit::WebAXObject; | 20 using blink::WebAXObject; |
21 using WebKit::WebDocument; | 21 using blink::WebDocument; |
22 using WebKit::WebFrame; | 22 using blink::WebFrame; |
23 using WebKit::WebNode; | 23 using blink::WebNode; |
24 using WebKit::WebPoint; | 24 using blink::WebPoint; |
25 using WebKit::WebRect; | 25 using blink::WebRect; |
26 using WebKit::WebSize; | 26 using blink::WebSize; |
27 using WebKit::WebView; | 27 using blink::WebView; |
28 | 28 |
29 namespace content { | 29 namespace content { |
30 | 30 |
31 RendererAccessibilityComplete::RendererAccessibilityComplete( | 31 RendererAccessibilityComplete::RendererAccessibilityComplete( |
32 RenderViewImpl* render_view) | 32 RenderViewImpl* render_view) |
33 : RendererAccessibility(render_view), | 33 : RendererAccessibility(render_view), |
34 weak_factory_(this), | 34 weak_factory_(this), |
35 browser_root_(NULL), | 35 browser_root_(NULL), |
36 last_scroll_offset_(gfx::Size()), | 36 last_scroll_offset_(gfx::Size()), |
37 ack_pending_(false) { | 37 ack_pending_(false) { |
38 WebAXObject::enableAccessibility(); | 38 WebAXObject::enableAccessibility(); |
39 WebAXObject::enableInlineTextBoxAccessibility(); | 39 WebAXObject::enableInlineTextBoxAccessibility(); |
40 | 40 |
41 const WebDocument& document = GetMainDocument(); | 41 const WebDocument& document = GetMainDocument(); |
42 if (!document.isNull()) { | 42 if (!document.isNull()) { |
43 // It's possible that the webview has already loaded a webpage without | 43 // It's possible that the webview has already loaded a webpage without |
44 // accessibility being enabled. Initialize the browser's cached | 44 // accessibility being enabled. Initialize the browser's cached |
45 // accessibility tree by sending it a notification. | 45 // accessibility tree by sending it a notification. |
46 HandleWebAccessibilityEvent(document.accessibilityObject(), | 46 HandleWebAccessibilityEvent(document.accessibilityObject(), |
47 WebKit::WebAXEventLayoutComplete); | 47 blink::WebAXEventLayoutComplete); |
48 } | 48 } |
49 } | 49 } |
50 | 50 |
51 RendererAccessibilityComplete::~RendererAccessibilityComplete() { | 51 RendererAccessibilityComplete::~RendererAccessibilityComplete() { |
52 } | 52 } |
53 | 53 |
54 bool RendererAccessibilityComplete::OnMessageReceived( | 54 bool RendererAccessibilityComplete::OnMessageReceived( |
55 const IPC::Message& message) { | 55 const IPC::Message& message) { |
56 bool handled = true; | 56 bool handled = true; |
57 IPC_BEGIN_MESSAGE_MAP(RendererAccessibilityComplete, message) | 57 IPC_BEGIN_MESSAGE_MAP(RendererAccessibilityComplete, message) |
(...skipping 16 matching lines...) Expand all Loading... |
74 | 74 |
75 void RendererAccessibilityComplete::FocusedNodeChanged(const WebNode& node) { | 75 void RendererAccessibilityComplete::FocusedNodeChanged(const WebNode& node) { |
76 const WebDocument& document = GetMainDocument(); | 76 const WebDocument& document = GetMainDocument(); |
77 if (document.isNull()) | 77 if (document.isNull()) |
78 return; | 78 return; |
79 | 79 |
80 if (node.isNull()) { | 80 if (node.isNull()) { |
81 // When focus is cleared, implicitly focus the document. | 81 // When focus is cleared, implicitly focus the document. |
82 // TODO(dmazzoni): Make WebKit send this notification instead. | 82 // TODO(dmazzoni): Make WebKit send this notification instead. |
83 HandleWebAccessibilityEvent(document.accessibilityObject(), | 83 HandleWebAccessibilityEvent(document.accessibilityObject(), |
84 WebKit::WebAXEventBlur); | 84 blink::WebAXEventBlur); |
85 } | 85 } |
86 } | 86 } |
87 | 87 |
88 void RendererAccessibilityComplete::DidFinishLoad(WebKit::WebFrame* frame) { | 88 void RendererAccessibilityComplete::DidFinishLoad(blink::WebFrame* frame) { |
89 const WebDocument& document = GetMainDocument(); | 89 const WebDocument& document = GetMainDocument(); |
90 if (document.isNull()) | 90 if (document.isNull()) |
91 return; | 91 return; |
92 | 92 |
93 // Check to see if the root accessibility object has changed, to work | 93 // Check to see if the root accessibility object has changed, to work |
94 // around WebKit bugs that cause AXObjectCache to be cleared | 94 // around WebKit bugs that cause AXObjectCache to be cleared |
95 // unnecessarily. | 95 // unnecessarily. |
96 // TODO(dmazzoni): remove this once rdar://5794454 is fixed. | 96 // TODO(dmazzoni): remove this once rdar://5794454 is fixed. |
97 WebAXObject new_root = document.accessibilityObject(); | 97 WebAXObject new_root = document.accessibilityObject(); |
98 if (!browser_root_ || new_root.axID() != browser_root_->id) | 98 if (!browser_root_ || new_root.axID() != browser_root_->id) |
99 HandleWebAccessibilityEvent(new_root, WebKit::WebAXEventLayoutComplete); | 99 HandleWebAccessibilityEvent(new_root, blink::WebAXEventLayoutComplete); |
100 } | 100 } |
101 | 101 |
102 void RendererAccessibilityComplete::HandleWebAccessibilityEvent( | 102 void RendererAccessibilityComplete::HandleWebAccessibilityEvent( |
103 const WebKit::WebAXObject& obj, | 103 const blink::WebAXObject& obj, |
104 WebKit::WebAXEvent event) { | 104 blink::WebAXEvent event) { |
105 const WebDocument& document = GetMainDocument(); | 105 const WebDocument& document = GetMainDocument(); |
106 if (document.isNull()) | 106 if (document.isNull()) |
107 return; | 107 return; |
108 | 108 |
109 gfx::Size scroll_offset = document.frame()->scrollOffset(); | 109 gfx::Size scroll_offset = document.frame()->scrollOffset(); |
110 if (scroll_offset != last_scroll_offset_) { | 110 if (scroll_offset != last_scroll_offset_) { |
111 // Make sure the browser is always aware of the scroll position of | 111 // Make sure the browser is always aware of the scroll position of |
112 // the root document element by posting a generic notification that | 112 // the root document element by posting a generic notification that |
113 // will update it. | 113 // will update it. |
114 // TODO(dmazzoni): remove this as soon as | 114 // TODO(dmazzoni): remove this as soon as |
115 // https://bugs.webkit.org/show_bug.cgi?id=73460 is fixed. | 115 // https://bugs.webkit.org/show_bug.cgi?id=73460 is fixed. |
116 last_scroll_offset_ = scroll_offset; | 116 last_scroll_offset_ = scroll_offset; |
117 if (!obj.equals(document.accessibilityObject())) { | 117 if (!obj.equals(document.accessibilityObject())) { |
118 HandleWebAccessibilityEvent( | 118 HandleWebAccessibilityEvent( |
119 document.accessibilityObject(), | 119 document.accessibilityObject(), |
120 WebKit::WebAXEventLayoutComplete); | 120 blink::WebAXEventLayoutComplete); |
121 } | 121 } |
122 } | 122 } |
123 | 123 |
124 // Add the accessibility object to our cache and ensure it's valid. | 124 // Add the accessibility object to our cache and ensure it's valid. |
125 AccessibilityHostMsg_EventParams acc_event; | 125 AccessibilityHostMsg_EventParams acc_event; |
126 acc_event.id = obj.axID(); | 126 acc_event.id = obj.axID(); |
127 acc_event.event_type = event; | 127 acc_event.event_type = event; |
128 | 128 |
129 // Discard duplicate accessibility events. | 129 // Discard duplicate accessibility events. |
130 for (uint32 i = 0; i < pending_events_.size(); ++i) { | 130 for (uint32 i = 0; i < pending_events_.size(); ++i) { |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
182 | 182 |
183 WebAXObject obj = document.accessibilityObjectFromID( | 183 WebAXObject obj = document.accessibilityObjectFromID( |
184 event.id); | 184 event.id); |
185 if (!obj.updateBackingStoreAndCheckValidity()) | 185 if (!obj.updateBackingStoreAndCheckValidity()) |
186 continue; | 186 continue; |
187 | 187 |
188 // When we get a "selected children changed" event, WebKit | 188 // When we get a "selected children changed" event, WebKit |
189 // doesn't also send us events for each child that changed | 189 // doesn't also send us events for each child that changed |
190 // selection state, so make sure we re-send that whole subtree. | 190 // selection state, so make sure we re-send that whole subtree. |
191 if (event.event_type == | 191 if (event.event_type == |
192 WebKit::WebAXEventSelectedChildrenChanged) { | 192 blink::WebAXEventSelectedChildrenChanged) { |
193 base::hash_map<int32, BrowserTreeNode*>::iterator iter = | 193 base::hash_map<int32, BrowserTreeNode*>::iterator iter = |
194 browser_id_map_.find(obj.axID()); | 194 browser_id_map_.find(obj.axID()); |
195 if (iter != browser_id_map_.end()) | 195 if (iter != browser_id_map_.end()) |
196 ClearBrowserTreeNode(iter->second); | 196 ClearBrowserTreeNode(iter->second); |
197 } | 197 } |
198 | 198 |
199 // The browser may not have this object yet, for example if we get a | 199 // The browser may not have this object yet, for example if we get a |
200 // event on an object that was recently added, or if we get a | 200 // event on an object that was recently added, or if we get a |
201 // event on a node before the page has loaded. Work our way | 201 // event on a node before the page has loaded. Work our way |
202 // up the parent chain until we find a node the browser has, or until | 202 // up the parent chain until we find a node the browser has, or until |
203 // we reach the root. | 203 // we reach the root. |
204 WebAXObject root_object = document.accessibilityObject(); | 204 WebAXObject root_object = document.accessibilityObject(); |
205 int root_id = root_object.axID(); | 205 int root_id = root_object.axID(); |
206 while (browser_id_map_.find(obj.axID()) == browser_id_map_.end() && | 206 while (browser_id_map_.find(obj.axID()) == browser_id_map_.end() && |
207 !obj.isDetached() && | 207 !obj.isDetached() && |
208 obj.axID() != root_id) { | 208 obj.axID() != root_id) { |
209 obj = obj.parentObject(); | 209 obj = obj.parentObject(); |
210 if (event.event_type == | 210 if (event.event_type == |
211 WebKit::WebAXEventChildrenChanged) { | 211 blink::WebAXEventChildrenChanged) { |
212 event.id = obj.axID(); | 212 event.id = obj.axID(); |
213 } | 213 } |
214 } | 214 } |
215 | 215 |
216 if (obj.isDetached()) { | 216 if (obj.isDetached()) { |
217 #ifndef NDEBUG | 217 #ifndef NDEBUG |
218 if (logging_) | 218 if (logging_) |
219 LOG(WARNING) << "Got event on object that is invalid or has" | 219 LOG(WARNING) << "Got event on object that is invalid or has" |
220 << " invalid ancestor. Id: " << obj.axID(); | 220 << " invalid ancestor. Id: " << obj.axID(); |
221 #endif | 221 #endif |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
302 } | 302 } |
303 | 303 |
304 for (unsigned i = 0; i < obj.childCount(); ++i) | 304 for (unsigned i = 0; i < obj.childCount(); ++i) |
305 objs_to_explore.push(obj.childAt(i)); | 305 objs_to_explore.push(obj.childAt(i)); |
306 } | 306 } |
307 | 307 |
308 if (location_changes.size() == 0) | 308 if (location_changes.size() == 0) |
309 return; | 309 return; |
310 | 310 |
311 AccessibilityHostMsg_EventParams event_msg; | 311 AccessibilityHostMsg_EventParams event_msg; |
312 event_msg.event_type = static_cast<WebKit::WebAXEvent>(-1); | 312 event_msg.event_type = static_cast<blink::WebAXEvent>(-1); |
313 event_msg.id = root_object.axID(); | 313 event_msg.id = root_object.axID(); |
314 event_msg.nodes.resize(location_changes.size()); | 314 event_msg.nodes.resize(location_changes.size()); |
315 for (size_t i = 0; i < location_changes.size(); i++) { | 315 for (size_t i = 0; i < location_changes.size(); i++) { |
316 AccessibilityNodeData& serialized_node = event_msg.nodes[i]; | 316 AccessibilityNodeData& serialized_node = event_msg.nodes[i]; |
317 serialized_node.id = location_changes[i]->id; | 317 serialized_node.id = location_changes[i]->id; |
318 serialized_node.location = location_changes[i]->location; | 318 serialized_node.location = location_changes[i]->location; |
319 serialized_node.AddBoolAttribute( | 319 serialized_node.AddBoolAttribute( |
320 AccessibilityNodeData::ATTR_UPDATE_LOCATION_ONLY, true); | 320 AccessibilityNodeData::ATTR_UPDATE_LOCATION_ONLY, true); |
321 } | 321 } |
322 | 322 |
323 event_msgs->push_back(event_msg); | 323 event_msgs->push_back(event_msg); |
324 } | 324 } |
325 | 325 |
326 RendererAccessibilityComplete::BrowserTreeNode* | 326 RendererAccessibilityComplete::BrowserTreeNode* |
327 RendererAccessibilityComplete::CreateBrowserTreeNode() { | 327 RendererAccessibilityComplete::CreateBrowserTreeNode() { |
328 return new RendererAccessibilityComplete::BrowserTreeNode(); | 328 return new RendererAccessibilityComplete::BrowserTreeNode(); |
329 } | 329 } |
330 | 330 |
331 void RendererAccessibilityComplete::SerializeChangedNodes( | 331 void RendererAccessibilityComplete::SerializeChangedNodes( |
332 const WebKit::WebAXObject& obj, | 332 const blink::WebAXObject& obj, |
333 std::vector<AccessibilityNodeData>* dst, | 333 std::vector<AccessibilityNodeData>* dst, |
334 std::set<int>* ids_serialized) { | 334 std::set<int>* ids_serialized) { |
335 if (ids_serialized->find(obj.axID()) != ids_serialized->end()) | 335 if (ids_serialized->find(obj.axID()) != ids_serialized->end()) |
336 return; | 336 return; |
337 ids_serialized->insert(obj.axID()); | 337 ids_serialized->insert(obj.axID()); |
338 | 338 |
339 // This method has three responsibilities: | 339 // This method has three responsibilities: |
340 // 1. Serialize |obj| into an AccessibilityNodeData, and append it to | 340 // 1. Serialize |obj| into an AccessibilityNodeData, and append it to |
341 // the end of the |dst| vector to be send to the browser process. | 341 // the end of the |dst| vector to be send to the browser process. |
342 // 2. Determine if |obj| has any new children that the browser doesn't | 342 // 2. Determine if |obj| has any new children that the browser doesn't |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
425 browser_child_id_map[old_child_id] = old_child; | 425 browser_child_id_map[old_child_id] = old_child; |
426 } | 426 } |
427 } | 427 } |
428 | 428 |
429 // Serialize this node. This fills in all of the fields in | 429 // Serialize this node. This fills in all of the fields in |
430 // AccessibilityNodeData except child_ids, which we handle below. | 430 // AccessibilityNodeData except child_ids, which we handle below. |
431 dst->push_back(AccessibilityNodeData()); | 431 dst->push_back(AccessibilityNodeData()); |
432 AccessibilityNodeData* serialized_node = &dst->back(); | 432 AccessibilityNodeData* serialized_node = &dst->back(); |
433 SerializeAccessibilityNode(obj, serialized_node); | 433 SerializeAccessibilityNode(obj, serialized_node); |
434 if (serialized_node->id == browser_root_->id) | 434 if (serialized_node->id == browser_root_->id) |
435 serialized_node->role = WebKit::WebAXRoleRootWebArea; | 435 serialized_node->role = blink::WebAXRoleRootWebArea; |
436 | 436 |
437 // Iterate over the children, make note of the ones that are new | 437 // Iterate over the children, make note of the ones that are new |
438 // and need to be serialized, and update the BrowserTreeNode | 438 // and need to be serialized, and update the BrowserTreeNode |
439 // data structure to reflect the new tree. | 439 // data structure to reflect the new tree. |
440 std::vector<WebAXObject> children_to_serialize; | 440 std::vector<WebAXObject> children_to_serialize; |
441 int child_count = obj.childCount(); | 441 int child_count = obj.childCount(); |
442 browser_node->children.reserve(child_count); | 442 browser_node->children.reserve(child_count); |
443 for (int i = 0; i < child_count; i++) { | 443 for (int i = 0; i < child_count; i++) { |
444 WebAXObject child = obj.childAt(i); | 444 WebAXObject child = obj.childAt(i); |
445 int child_id = child.axID(); | 445 int child_id = child.axID(); |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
521 obj.scrollToMakeVisibleWithSubFocus( | 521 obj.scrollToMakeVisibleWithSubFocus( |
522 WebRect(subfocus.x(), subfocus.y(), | 522 WebRect(subfocus.x(), subfocus.y(), |
523 subfocus.width(), subfocus.height())); | 523 subfocus.width(), subfocus.height())); |
524 | 524 |
525 // Make sure the browser gets an event when the scroll | 525 // Make sure the browser gets an event when the scroll |
526 // position actually changes. | 526 // position actually changes. |
527 // TODO(dmazzoni): remove this once this bug is fixed: | 527 // TODO(dmazzoni): remove this once this bug is fixed: |
528 // https://bugs.webkit.org/show_bug.cgi?id=73460 | 528 // https://bugs.webkit.org/show_bug.cgi?id=73460 |
529 HandleWebAccessibilityEvent( | 529 HandleWebAccessibilityEvent( |
530 document.accessibilityObject(), | 530 document.accessibilityObject(), |
531 WebKit::WebAXEventLayoutComplete); | 531 blink::WebAXEventLayoutComplete); |
532 } | 532 } |
533 | 533 |
534 void RendererAccessibilityComplete::OnScrollToPoint( | 534 void RendererAccessibilityComplete::OnScrollToPoint( |
535 int acc_obj_id, gfx::Point point) { | 535 int acc_obj_id, gfx::Point point) { |
536 const WebDocument& document = GetMainDocument(); | 536 const WebDocument& document = GetMainDocument(); |
537 if (document.isNull()) | 537 if (document.isNull()) |
538 return; | 538 return; |
539 | 539 |
540 WebAXObject obj = document.accessibilityObjectFromID(acc_obj_id); | 540 WebAXObject obj = document.accessibilityObjectFromID(acc_obj_id); |
541 if (obj.isDetached()) { | 541 if (obj.isDetached()) { |
542 #ifndef NDEBUG | 542 #ifndef NDEBUG |
543 if (logging_) | 543 if (logging_) |
544 LOG(WARNING) << "ScrollToPoint on invalid object id " << acc_obj_id; | 544 LOG(WARNING) << "ScrollToPoint on invalid object id " << acc_obj_id; |
545 #endif | 545 #endif |
546 return; | 546 return; |
547 } | 547 } |
548 | 548 |
549 obj.scrollToGlobalPoint(WebPoint(point.x(), point.y())); | 549 obj.scrollToGlobalPoint(WebPoint(point.x(), point.y())); |
550 | 550 |
551 // Make sure the browser gets an event when the scroll | 551 // Make sure the browser gets an event when the scroll |
552 // position actually changes. | 552 // position actually changes. |
553 // TODO(dmazzoni): remove this once this bug is fixed: | 553 // TODO(dmazzoni): remove this once this bug is fixed: |
554 // https://bugs.webkit.org/show_bug.cgi?id=73460 | 554 // https://bugs.webkit.org/show_bug.cgi?id=73460 |
555 HandleWebAccessibilityEvent( | 555 HandleWebAccessibilityEvent( |
556 document.accessibilityObject(), | 556 document.accessibilityObject(), |
557 WebKit::WebAXEventLayoutComplete); | 557 blink::WebAXEventLayoutComplete); |
558 } | 558 } |
559 | 559 |
560 void RendererAccessibilityComplete::OnSetTextSelection( | 560 void RendererAccessibilityComplete::OnSetTextSelection( |
561 int acc_obj_id, int start_offset, int end_offset) { | 561 int acc_obj_id, int start_offset, int end_offset) { |
562 const WebDocument& document = GetMainDocument(); | 562 const WebDocument& document = GetMainDocument(); |
563 if (document.isNull()) | 563 if (document.isNull()) |
564 return; | 564 return; |
565 | 565 |
566 WebAXObject obj = document.accessibilityObjectFromID(acc_obj_id); | 566 WebAXObject obj = document.accessibilityObjectFromID(acc_obj_id); |
567 if (obj.isDetached()) { | 567 if (obj.isDetached()) { |
568 #ifndef NDEBUG | 568 #ifndef NDEBUG |
569 if (logging_) | 569 if (logging_) |
570 LOG(WARNING) << "SetTextSelection on invalid object id " << acc_obj_id; | 570 LOG(WARNING) << "SetTextSelection on invalid object id " << acc_obj_id; |
571 #endif | 571 #endif |
572 return; | 572 return; |
573 } | 573 } |
574 | 574 |
575 // TODO(dmazzoni): support elements other than <input>. | 575 // TODO(dmazzoni): support elements other than <input>. |
576 WebKit::WebNode node = obj.node(); | 576 blink::WebNode node = obj.node(); |
577 if (!node.isNull() && node.isElementNode()) { | 577 if (!node.isNull() && node.isElementNode()) { |
578 WebKit::WebElement element = node.to<WebKit::WebElement>(); | 578 blink::WebElement element = node.to<blink::WebElement>(); |
579 WebKit::WebInputElement* input_element = | 579 blink::WebInputElement* input_element = |
580 WebKit::toWebInputElement(&element); | 580 blink::toWebInputElement(&element); |
581 if (input_element && input_element->isTextField()) | 581 if (input_element && input_element->isTextField()) |
582 input_element->setSelectionRange(start_offset, end_offset); | 582 input_element->setSelectionRange(start_offset, end_offset); |
583 } | 583 } |
584 } | 584 } |
585 | 585 |
586 void RendererAccessibilityComplete::OnEventsAck() { | 586 void RendererAccessibilityComplete::OnEventsAck() { |
587 DCHECK(ack_pending_); | 587 DCHECK(ack_pending_); |
588 ack_pending_ = false; | 588 ack_pending_ = false; |
589 SendPendingAccessibilityEvents(); | 589 SendPendingAccessibilityEvents(); |
590 } | 590 } |
(...skipping 30 matching lines...) Expand all Loading... |
621 render_view()->GetWebView()->clearFocusedNode(); | 621 render_view()->GetWebView()->clearFocusedNode(); |
622 else | 622 else |
623 obj.setFocused(true); | 623 obj.setFocused(true); |
624 } | 624 } |
625 | 625 |
626 void RendererAccessibilityComplete::OnFatalError() { | 626 void RendererAccessibilityComplete::OnFatalError() { |
627 CHECK(false) << "Invalid accessibility tree."; | 627 CHECK(false) << "Invalid accessibility tree."; |
628 } | 628 } |
629 | 629 |
630 } // namespace content | 630 } // namespace content |
OLD | NEW |