Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1283)

Unified Diff: chrome/browser/extensions/api/automation_internal/automation_internal_api.cc

Issue 1251723003: Revert of Re-land: Reimplement automation API on top of C++-backed AXTree. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 =

Powered by Google App Engine
This is Rietveld 408576698