| Index: chrome/browser/extensions/api/automation_internal/automation_internal_api.cc
|
| diff --git a/chrome/browser/extensions/api/automation_internal/automation_internal_api.cc b/chrome/browser/extensions/api/automation_internal/automation_internal_api.cc
|
| index 58efba5f7592f7e215f84d71488abb3f54384211..5f2e8c862a18f3231547b456665f47539d5e59b7 100644
|
| --- a/chrome/browser/extensions/api/automation_internal/automation_internal_api.cc
|
| +++ b/chrome/browser/extensions/api/automation_internal/automation_internal_api.cc
|
| @@ -12,6 +12,7 @@
|
| #include "chrome/browser/accessibility/ax_tree_id_registry.h"
|
| #include "chrome/browser/extensions/api/automation_internal/automation_action_adapter.h"
|
| #include "chrome/browser/extensions/api/automation_internal/automation_event_router.h"
|
| +#include "chrome/browser/extensions/api/automation_internal/automation_util.h"
|
| #include "chrome/browser/extensions/api/tabs/tabs_constants.h"
|
| #include "chrome/browser/extensions/extension_tab_util.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| @@ -22,16 +23,12 @@
|
| #include "chrome/common/extensions/manifest_handlers/automation.h"
|
| #include "content/public/browser/ax_event_notification_details.h"
|
| #include "content/public/browser/browser_accessibility_state.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/render_view_host.h"
|
| #include "content/public/browser/render_widget_host.h"
|
| #include "content/public/browser/render_widget_host_view.h"
|
| #include "content/public/browser/web_contents.h"
|
| -#include "content/public/browser/web_contents_observer.h"
|
| -#include "content/public/browser/web_contents_user_data.h"
|
| #include "extensions/common/extension_messages.h"
|
| #include "extensions/common/permissions/permissions_data.h"
|
|
|
| @@ -48,7 +45,6 @@
|
| namespace extensions {
|
|
|
| namespace {
|
| -
|
| const int kDesktopTreeID = 0;
|
| const char kCannotRequestAutomationOnPage[] =
|
| "Cannot request automation tree on url \"*\". "
|
| @@ -197,66 +193,24 @@
|
| void AccessibilityEventReceived(
|
| const std::vector<content::AXEventNotificationDetails>& details)
|
| override {
|
| - std::vector<content::AXEventNotificationDetails>::const_iterator iter =
|
| - details.begin();
|
| - for (; iter != details.end(); ++iter) {
|
| - const content::AXEventNotificationDetails& event = *iter;
|
| - int tree_id = AXTreeIDRegistry::GetInstance()->GetOrCreateAXTreeID(
|
| - event.process_id, event.routing_id);
|
| - ExtensionMsg_AccessibilityEventParams params;
|
| - params.tree_id = tree_id;
|
| - params.id = event.id;
|
| - params.event_type = event.event_type;
|
| - params.update.node_id_to_clear = event.node_id_to_clear;
|
| - params.update.nodes = event.nodes;
|
| - params.location_offset =
|
| - web_contents()->GetContainerBounds().OffsetFromOrigin();
|
| -
|
| - for (size_t i = 0; i < params.update.nodes.size(); ++i) {
|
| - ui::AXNodeData& node = params.update.nodes[i];
|
| - if (node.HasBoolAttribute(ui::AX_ATTR_IS_AX_TREE_HOST)) {
|
| - const auto& iter = event.node_to_browser_plugin_instance_id_map.find(
|
| - node.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());
|
| - node.AddIntAttribute(ui::AX_ATTR_CHILD_TREE_ID, guest_tree_id);
|
| - }
|
| - }
|
| - }
|
| - }
|
| -
|
| - AutomationEventRouter* router = AutomationEventRouter::GetInstance();
|
| - router->DispatchAccessibilityEvent(params);
|
| - }
|
| + automation_util::DispatchAccessibilityEventsToAutomation(
|
| + details, browser_context_,
|
| + web_contents()->GetContainerBounds().OffsetFromOrigin());
|
| }
|
|
|
| void RenderFrameDeleted(
|
| content::RenderFrameHost* render_frame_host) override {
|
| - int tree_id = AXTreeIDRegistry::GetInstance()->GetOrCreateAXTreeID(
|
| + automation_util::DispatchTreeDestroyedEventToAutomation(
|
| render_frame_host->GetProcess()->GetID(),
|
| - render_frame_host->GetRoutingID());
|
| - AXTreeIDRegistry::GetInstance()->RemoveAXTreeID(tree_id);
|
| - AutomationEventRouter::GetInstance()->DispatchTreeDestroyedEvent(
|
| - tree_id,
|
| + render_frame_host->GetRoutingID(),
|
| browser_context_);
|
| }
|
|
|
| private:
|
| friend class content::WebContentsUserData<AutomationWebContentsObserver>;
|
|
|
| - explicit AutomationWebContentsObserver(content::WebContents* web_contents)
|
| + AutomationWebContentsObserver(
|
| + content::WebContents* web_contents)
|
| : content::WebContentsObserver(web_contents),
|
| browser_context_(web_contents->GetBrowserContext()) {}
|
|
|
| @@ -291,7 +245,6 @@
|
| if (!contents)
|
| return RespondNow(Error("No active tab"));
|
| }
|
| -
|
| content::RenderFrameHost* rfh = contents->GetMainFrame();
|
| if (!rfh)
|
| return RespondNow(Error("Could not enable accessibility for active tab"));
|
| @@ -303,7 +256,6 @@
|
|
|
| AutomationWebContentsObserver::CreateForWebContents(contents);
|
| contents->EnableTreeOnlyAccessibilityMode();
|
| -
|
| int ax_tree_id = AXTreeIDRegistry::GetInstance()->GetOrCreateAXTreeID(
|
| rfh->GetProcess()->GetID(), rfh->GetRoutingID());
|
|
|
| @@ -318,12 +270,11 @@
|
| }
|
|
|
| ExtensionFunction::ResponseAction AutomationInternalEnableFrameFunction::Run() {
|
| - // TODO(dtseng): Limited to desktop tree for now pending out of proc iframes.
|
| +// TODO(dtseng): Limited to desktop tree for now pending out of proc iframes.
|
| using api::automation_internal::EnableFrame::Params;
|
|
|
| scoped_ptr<Params> params(Params::Create(*args_));
|
| EXTENSION_FUNCTION_VALIDATE(params.get());
|
| -
|
| AXTreeIDRegistry::FrameID frame_id =
|
| AXTreeIDRegistry::GetInstance()->GetFrameID(params->tree_id);
|
| content::RenderFrameHost* rfh =
|
|
|