Index: chrome/browser/extensions/api/automation_internal/automation_util.cc |
diff --git a/chrome/browser/extensions/api/automation_internal/automation_util.cc b/chrome/browser/extensions/api/automation_internal/automation_util.cc |
index b5168d607dd0ebac5de1dbcdc3f0f3dbf74c057e..cbd2f9b62a89a6262e869da879054f8fe3cd45c0 100644 |
--- a/chrome/browser/extensions/api/automation_internal/automation_util.cc |
+++ b/chrome/browser/extensions/api/automation_internal/automation_util.cc |
@@ -10,6 +10,11 @@ |
#include "base/values.h" |
#include "chrome/browser/accessibility/ax_tree_id_registry.h" |
#include "chrome/common/extensions/api/automation_internal.h" |
+#include "content/public/browser/browser_context.h" |
+#include "content/public/browser/browser_plugin_guest_manager.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 "extensions/browser/event_router.h" |
#include "ui/accessibility/ax_enums.h" |
#include "ui/accessibility/ax_node_data.h" |
@@ -152,6 +157,29 @@ void DispatchAccessibilityEventsToAutomation( |
linked_ptr<api::automation_internal::AXNodeData> out_node( |
new api::automation_internal::AXNodeData()); |
PopulateNodeData(src, out_node); |
+ if (src.HasBoolAttribute(ui::AX_ATTR_IS_AX_TREE_HOST)) { |
+ const auto& iter = event.node_to_browser_plugin_instance_id_map.find( |
+ src.id); |
+ if (iter != event.node_to_browser_plugin_instance_id_map.end()) { |
+ int instance_id = iter->second; |
+ content::BrowserPluginGuestManager* guest_manager = |
+ browser_context->GetGuestManager(); |
+ content::WebContents* guest_web_contents = |
+ guest_manager->GetGuestByInstanceID(event.process_id, |
+ instance_id); |
+ if (guest_web_contents) { |
+ content::RenderFrameHost* guest_rfh = |
+ guest_web_contents->GetMainFrame(); |
+ int guest_tree_id = |
+ AXTreeIDRegistry::GetInstance()->GetOrCreateAXTreeID( |
+ guest_rfh->GetProcess()->GetID(), |
+ guest_rfh->GetRoutingID()); |
+ out_node->int_attributes->additional_properties.SetInteger( |
+ ToString(ui::AX_ATTR_CHILD_TREE_ID), |
+ guest_tree_id); |
+ } |
+ } |
+ } |
ax_tree_update.nodes.push_back(out_node); |
} |