blob: b33da9fe46268f27c3c006a65354884020aa26b4 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/extensions/api/automation_internal/chrome_automation_internal_api_delegate.h"
#include <memory>
#include "chrome/browser/extensions/api/tabs/tabs_constants.h"
#include "chrome/browser/extensions/chrome_extension_function_details.h"
#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/common/extensions/chrome_extension_messages.h"
#include "content/public/browser/web_contents.h"
#include "extensions/common/api/automation.h"
#include "extensions/common/api/automation_internal.h"
#include "extensions/common/extension.h"
#include "extensions/common/manifest_handlers/automation.h"
#include "extensions/common/permissions/permissions_data.h"
#if defined(USE_AURA)
#include "chrome/browser/ui/aura/accessibility/automation_manager_aura.h"
#endif
namespace extensions {
ChromeAutomationInternalApiDelegate::ChromeAutomationInternalApiDelegate() {}
ChromeAutomationInternalApiDelegate::~ChromeAutomationInternalApiDelegate() {}
bool ChromeAutomationInternalApiDelegate::CanRequestAutomation(
const Extension* extension,
const AutomationInfo* automation_info,
content::WebContents* contents) {
if (automation_info->desktop)
return true;
const GURL& url = contents->GetURL();
// TODO(aboxhall): check for webstore URL
if (automation_info->matches.MatchesURL(url))
return true;
int tab_id = ExtensionTabUtil::GetTabId(contents);
std::string unused_error;
return extension->permissions_data()->CanAccessPage(url, tab_id,
&unused_error);
}
bool ChromeAutomationInternalApiDelegate::GetTabById(
int tab_id,
content::BrowserContext* browser_context,
bool include_incognito,
content::WebContents** contents,
std::string* error_msg) {
*error_msg = tabs_constants::kTabNotFoundError;
return ExtensionTabUtil::GetTabById(
tab_id, browser_context, include_incognito,
nullptr, /* browser out param */
nullptr, /* tab strip out param */
contents, nullptr /* tab_index out param */);
}
int ChromeAutomationInternalApiDelegate::GetTabId(
content::WebContents* contents) {
return ExtensionTabUtil::GetTabId(contents);
}
content::WebContents* ChromeAutomationInternalApiDelegate::GetActiveWebContents(
UIThreadExtensionFunction* function) {
return ChromeExtensionFunctionDetails(function)
.GetCurrentBrowser()
->tab_strip_model()
->GetActiveWebContents();
}
void ChromeAutomationInternalApiDelegate::EnableDesktop() {
#if defined(USE_AURA)
AutomationManagerAura::GetInstance()->Enable();
#else
NOTIMPLEMENTED();
#endif
}
ui::AXTreeID ChromeAutomationInternalApiDelegate::GetAXTreeID() {
#if defined(USE_AURA)
return AutomationManagerAura::GetInstance()->ax_tree_id();
#else
NOTIMPLEMENTED();
return ui::AXTreeIDUnknown();
#endif
}
void ChromeAutomationInternalApiDelegate::SetEventBundleSink(
ui::AXEventBundleSink* sink) {
#if defined(USE_AURA)
AutomationManagerAura::GetInstance()->set_event_bundle_sink(sink);
#else
NOTIMPLEMENTED();
#endif
}
content::BrowserContext*
ChromeAutomationInternalApiDelegate::GetActiveUserContext() {
return ProfileManager::GetActiveUserProfile();
}
} // namespace extensions