Index: chrome/browser/ui/ash/accessibility/ax_tree_source_ash.cc |
diff --git a/chrome/browser/ui/ash/accessibility/ax_tree_source_ash.cc b/chrome/browser/ui/ash/accessibility/ax_tree_source_ash.cc |
index 6bc75025c087d569cccc2e1fbcd4558e510f9e37..d4c63689d55f4a71d8a2e9d46713f80fb2a61aa5 100644 |
--- a/chrome/browser/ui/ash/accessibility/ax_tree_source_ash.cc |
+++ b/chrome/browser/ui/ash/accessibility/ax_tree_source_ash.cc |
@@ -6,8 +6,15 @@ |
#include <vector> |
+#include "chrome/browser/accessibility/ax_tree_id_registry.h" |
+#include "chrome/browser/ui/ash/accessibility/automation_manager_ash.h" |
+#include "content/public/browser/render_frame_host.h" |
+#include "content/public/browser/render_process_host.h" |
+#include "content/public/browser/web_contents.h" |
#include "ui/views/accessibility/ax_aura_obj_cache.h" |
#include "ui/views/accessibility/ax_aura_obj_wrapper.h" |
+#include "ui/views/accessibility/ax_view_obj_wrapper.h" |
+#include "ui/views/controls/webview/webview.h" |
using views::AXAuraObjCache; |
using views::AXAuraObjWrapper; |
@@ -90,6 +97,20 @@ AXAuraObjWrapper* AXTreeSourceAsh::GetNull() const { |
void AXTreeSourceAsh::SerializeNode( |
AXAuraObjWrapper* node, ui::AXNodeData* out_data) const { |
node->Serialize(out_data); |
+ |
+ if (out_data->role == ui::AX_ROLE_WEB_VIEW) { |
+ views::View* view = static_cast<views::AXViewObjWrapper*>(node)->view(); |
+ content::WebContents* contents = |
+ static_cast<views::WebView*>(view)->GetWebContents(); |
+ content::RenderFrameHost* rfh = contents->GetMainFrame(); |
+ if (rfh) { |
+ int process_id = rfh->GetProcess()->GetID(); |
+ int routing_id = rfh->GetRoutingID(); |
+ int ax_tree_id = AXTreeIDRegistry::GetInstance()->GetOrCreateAXTreeID( |
+ process_id, routing_id); |
+ out_data->AddIntAttribute(ui::AX_ATTR_CHILD_TREE_ID, ax_tree_id); |
+ } |
+ } |
} |
std::string AXTreeSourceAsh::ToString( |