OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/blink_ax_tree_source.h" | 5 #include "content/renderer/accessibility/blink_ax_tree_source.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 | 8 |
9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
(...skipping 19 matching lines...) Expand all Loading... |
30 #include "third_party/WebKit/public/web/WebPlugin.h" | 30 #include "third_party/WebKit/public/web/WebPlugin.h" |
31 #include "third_party/WebKit/public/web/WebPluginContainer.h" | 31 #include "third_party/WebKit/public/web/WebPluginContainer.h" |
32 #include "third_party/WebKit/public/web/WebView.h" | 32 #include "third_party/WebKit/public/web/WebView.h" |
33 | 33 |
34 using base::ASCIIToUTF16; | 34 using base::ASCIIToUTF16; |
35 using base::UTF16ToUTF8; | 35 using base::UTF16ToUTF8; |
36 using blink::WebAXObject; | 36 using blink::WebAXObject; |
37 using blink::WebDocument; | 37 using blink::WebDocument; |
38 using blink::WebDocumentType; | 38 using blink::WebDocumentType; |
39 using blink::WebElement; | 39 using blink::WebElement; |
40 using blink::WebLocalFrame; | 40 using blink::WebFrame; |
41 using blink::WebNode; | 41 using blink::WebNode; |
42 using blink::WebPlugin; | 42 using blink::WebPlugin; |
43 using blink::WebPluginContainer; | 43 using blink::WebPluginContainer; |
44 using blink::WebVector; | 44 using blink::WebVector; |
45 using blink::WebView; | 45 using blink::WebView; |
46 | 46 |
47 namespace content { | 47 namespace content { |
48 | 48 |
49 namespace { | 49 namespace { |
50 | 50 |
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
424 | 424 |
425 // Browser plugin (used in a <webview>). | 425 // Browser plugin (used in a <webview>). |
426 if (node_to_browser_plugin_instance_id_map_) { | 426 if (node_to_browser_plugin_instance_id_map_) { |
427 BrowserPlugin* browser_plugin = BrowserPlugin::GetFromNode(element); | 427 BrowserPlugin* browser_plugin = BrowserPlugin::GetFromNode(element); |
428 if (browser_plugin) { | 428 if (browser_plugin) { |
429 (*node_to_browser_plugin_instance_id_map_)[dst->id] = | 429 (*node_to_browser_plugin_instance_id_map_)[dst->id] = |
430 browser_plugin->browser_plugin_instance_id(); | 430 browser_plugin->browser_plugin_instance_id(); |
431 dst->AddBoolAttribute(ui::AX_ATTR_IS_AX_TREE_HOST, true); | 431 dst->AddBoolAttribute(ui::AX_ATTR_IS_AX_TREE_HOST, true); |
432 } | 432 } |
433 } | 433 } |
| 434 |
| 435 // Out-of-process iframe. |
| 436 if (is_iframe && node_to_frame_routing_id_map_) { |
| 437 WebFrame* frame = WebFrame::fromFrameOwnerElement(element); |
| 438 |
| 439 if (frame->isWebRemoteFrame()) { |
| 440 RenderFrameProxy* render_frame_proxy = |
| 441 RenderFrameProxy::FromWebFrame(frame); |
| 442 |
| 443 DCHECK(render_frame_proxy); |
| 444 (*node_to_frame_routing_id_map_)[dst->id] = |
| 445 render_frame_proxy->routing_id(); |
| 446 dst->AddBoolAttribute(ui::AX_ATTR_IS_AX_TREE_HOST, true); |
| 447 } |
| 448 } |
434 } | 449 } |
435 | 450 |
436 if (src.isInLiveRegion()) { | 451 if (src.isInLiveRegion()) { |
437 dst->AddBoolAttribute(ui::AX_ATTR_LIVE_ATOMIC, src.liveRegionAtomic()); | 452 dst->AddBoolAttribute(ui::AX_ATTR_LIVE_ATOMIC, src.liveRegionAtomic()); |
438 dst->AddBoolAttribute(ui::AX_ATTR_LIVE_BUSY, src.liveRegionBusy()); | 453 dst->AddBoolAttribute(ui::AX_ATTR_LIVE_BUSY, src.liveRegionBusy()); |
439 if (src.liveRegionBusy()) | 454 if (src.liveRegionBusy()) |
440 dst->state |= (1 << ui::AX_STATE_BUSY); | 455 dst->state |= (1 << ui::AX_STATE_BUSY); |
441 if (!src.liveRegionStatus().isEmpty()) { | 456 if (!src.liveRegionStatus().isEmpty()) { |
442 dst->AddStringAttribute(ui::AX_ATTR_LIVE_STATUS, | 457 dst->AddStringAttribute(ui::AX_ATTR_LIVE_STATUS, |
443 UTF16ToUTF8(src.liveRegionStatus())); | 458 UTF16ToUTF8(src.liveRegionStatus())); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
491 dst->AddIntAttribute(ui::AX_ATTR_SCROLL_X, scroll_offset.width()); | 506 dst->AddIntAttribute(ui::AX_ATTR_SCROLL_X, scroll_offset.width()); |
492 dst->AddIntAttribute(ui::AX_ATTR_SCROLL_Y, scroll_offset.height()); | 507 dst->AddIntAttribute(ui::AX_ATTR_SCROLL_Y, scroll_offset.height()); |
493 | 508 |
494 const gfx::Size& min_offset = document.minimumScrollOffset(); | 509 const gfx::Size& min_offset = document.minimumScrollOffset(); |
495 dst->AddIntAttribute(ui::AX_ATTR_SCROLL_X_MIN, min_offset.width()); | 510 dst->AddIntAttribute(ui::AX_ATTR_SCROLL_X_MIN, min_offset.width()); |
496 dst->AddIntAttribute(ui::AX_ATTR_SCROLL_Y_MIN, min_offset.height()); | 511 dst->AddIntAttribute(ui::AX_ATTR_SCROLL_Y_MIN, min_offset.height()); |
497 | 512 |
498 const gfx::Size& max_offset = document.maximumScrollOffset(); | 513 const gfx::Size& max_offset = document.maximumScrollOffset(); |
499 dst->AddIntAttribute(ui::AX_ATTR_SCROLL_X_MAX, max_offset.width()); | 514 dst->AddIntAttribute(ui::AX_ATTR_SCROLL_X_MAX, max_offset.width()); |
500 dst->AddIntAttribute(ui::AX_ATTR_SCROLL_Y_MAX, max_offset.height()); | 515 dst->AddIntAttribute(ui::AX_ATTR_SCROLL_Y_MAX, max_offset.height()); |
501 | |
502 if (node_to_frame_routing_id_map_ && !src.equals(GetRoot())) { | |
503 WebLocalFrame* frame = document.frame(); | |
504 RenderFrameImpl* render_frame = RenderFrameImpl::FromWebFrame(frame); | |
505 if (render_frame) { | |
506 (*node_to_frame_routing_id_map_)[dst->id] = | |
507 render_frame->GetRoutingID(); | |
508 dst->AddBoolAttribute(ui::AX_ATTR_IS_AX_TREE_HOST, true); | |
509 } else { | |
510 RenderFrameProxy* render_frame_proxy = | |
511 RenderFrameProxy::FromWebFrame(frame); | |
512 if (render_frame_proxy) { | |
513 (*node_to_frame_routing_id_map_)[dst->id] = | |
514 render_frame_proxy->routing_id(); | |
515 dst->AddBoolAttribute(ui::AX_ATTR_IS_AX_TREE_HOST, true); | |
516 } | |
517 } | |
518 } | |
519 } | 516 } |
520 | 517 |
521 if (dst->role == ui::AX_ROLE_TABLE) { | 518 if (dst->role == ui::AX_ROLE_TABLE) { |
522 int column_count = src.columnCount(); | 519 int column_count = src.columnCount(); |
523 int row_count = src.rowCount(); | 520 int row_count = src.rowCount(); |
524 if (column_count > 0 && row_count > 0) { | 521 if (column_count > 0 && row_count > 0) { |
525 std::set<int32> unique_cell_id_set; | 522 std::set<int32> unique_cell_id_set; |
526 std::vector<int32> cell_ids; | 523 std::vector<int32> cell_ids; |
527 std::vector<int32> unique_cell_ids; | 524 std::vector<int32> unique_cell_ids; |
528 dst->AddIntAttribute(ui::AX_ATTR_TABLE_COLUMN_COUNT, column_count); | 525 dst->AddIntAttribute(ui::AX_ATTR_TABLE_COLUMN_COUNT, column_count); |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
628 AddIntListAttributeFromWebObjects(ui::AX_ATTR_OWNS_IDS, owns, dst); | 625 AddIntListAttributeFromWebObjects(ui::AX_ATTR_OWNS_IDS, owns, dst); |
629 } | 626 } |
630 | 627 |
631 blink::WebDocument BlinkAXTreeSource::GetMainDocument() const { | 628 blink::WebDocument BlinkAXTreeSource::GetMainDocument() const { |
632 if (render_frame_ && render_frame_->GetWebFrame()) | 629 if (render_frame_ && render_frame_->GetWebFrame()) |
633 return render_frame_->GetWebFrame()->document(); | 630 return render_frame_->GetWebFrame()->document(); |
634 return WebDocument(); | 631 return WebDocument(); |
635 } | 632 } |
636 | 633 |
637 } // namespace content | 634 } // namespace content |
OLD | NEW |