blob: fe6c97ce35848c0ed04a45091fb1aae034639e2f [file] [log] [blame] [edit]
// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "extensions/browser/extensions_browser_client.h"
#include <memory>
#include <optional>
#include "base/files/file_path.h"
#include "base/functional/callback.h"
#include "base/logging.h"
#include "base/memory/ref_counted_memory.h"
#include "components/update_client/update_client.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/site_instance.h"
#include "content/public/browser/storage_partition_config.h"
#include "extensions/browser/extension_api_frame_id_map.h"
#include "extensions/browser/extension_error.h"
#include "extensions/browser/updater/scoped_extension_updater_keep_alive.h"
#include "extensions/common/constants.h"
#include "extensions/common/extension_id.h"
#include "extensions/common/permissions/permission_set.h"
#include "url/gurl.h"
namespace extensions {
namespace {
ExtensionsBrowserClient* g_extension_browser_client = nullptr;
} // namespace
ExtensionsBrowserClient::ExtensionsBrowserClient() = default;
ExtensionsBrowserClient::~ExtensionsBrowserClient() = default;
ExtensionsBrowserClient* ExtensionsBrowserClient::Get() {
return g_extension_browser_client;
}
void ExtensionsBrowserClient::Set(ExtensionsBrowserClient* client) {
g_extension_browser_client = client;
}
void ExtensionsBrowserClient::RegisterExtensionFunctions(
ExtensionFunctionRegistry* registry) {
for (const auto& provider : providers_)
provider->RegisterExtensionFunctions(registry);
}
void ExtensionsBrowserClient::AddAPIProvider(
std::unique_ptr<ExtensionsBrowserAPIProvider> provider) {
providers_.push_back(std::move(provider));
}
void ExtensionsBrowserClient::StartTearDown() {}
scoped_refptr<update_client::UpdateClient>
ExtensionsBrowserClient::CreateUpdateClient(content::BrowserContext* context) {
return scoped_refptr<update_client::UpdateClient>(nullptr);
}
std::unique_ptr<ScopedExtensionUpdaterKeepAlive>
ExtensionsBrowserClient::CreateUpdaterKeepAlive(
content::BrowserContext* context) {
return nullptr;
}
void ExtensionsBrowserClient::ReportError(
content::BrowserContext* context,
std::unique_ptr<ExtensionError> error) {
LOG(ERROR) << error->GetDebugString();
}
bool ExtensionsBrowserClient::IsActivityLoggingEnabled(
content::BrowserContext* context) {
return false;
}
void ExtensionsBrowserClient::GetTabAndWindowIdForWebContents(
content::WebContents* web_contents,
int* tab_id,
int* window_id) {
*tab_id = -1;
*window_id = -1;
}
bool ExtensionsBrowserClient::IsExtensionEnabled(
const ExtensionId& extension_id,
content::BrowserContext* context) const {
return false;
}
bool ExtensionsBrowserClient::IsWebUIAllowedToMakeNetworkRequests(
const url::Origin& origin) {
return false;
}
network::mojom::NetworkContext*
ExtensionsBrowserClient::GetSystemNetworkContext() {
return nullptr;
}
UserScriptListener* ExtensionsBrowserClient::GetUserScriptListener() {
return nullptr;
}
void ExtensionsBrowserClient::SignalContentScriptsLoaded(
content::BrowserContext* context) {}
bool ExtensionsBrowserClient::ShouldSchemeBypassNavigationChecks(
const std::string& scheme) const {
return false;
}
base::FilePath ExtensionsBrowserClient::GetSaveFilePath(
content::BrowserContext* context) {
return base::FilePath();
}
void ExtensionsBrowserClient::SetLastSaveFilePath(
content::BrowserContext* context,
const base::FilePath& path) {}
bool ExtensionsBrowserClient::HasIsolatedStorage(
const ExtensionId& extension_id,
content::BrowserContext* context) {
return false;
}
bool ExtensionsBrowserClient::IsScreenshotRestricted(
content::WebContents* web_contents) const {
return false;
}
bool ExtensionsBrowserClient::IsValidTabId(
content::BrowserContext* browser_context,
int tab_id,
bool include_incognito,
content::WebContents** web_contents) const {
return false;
}
ScriptExecutor* ExtensionsBrowserClient::GetScriptExecutorForTab(
content::WebContents& web_contents) {
return nullptr;
}
void ExtensionsBrowserClient::NotifyExtensionApiTabExecuteScript(
content::BrowserContext* context,
const ExtensionId& extension_id,
const std::string& code) const {}
bool ExtensionsBrowserClient::IsExtensionTelemetryServiceEnabled(
content::BrowserContext* context) const {
return false;
}
void ExtensionsBrowserClient::NotifyExtensionApiDeclarativeNetRequest(
content::BrowserContext* context,
const ExtensionId& extension_id,
const std::vector<api::declarative_net_request::Rule>& rules) const {}
void ExtensionsBrowserClient::
NotifyExtensionDeclarativeNetRequestRedirectAction(
content::BrowserContext* context,
const ExtensionId& extension_id,
const GURL& request_url,
const GURL& redirect_url) const {}
bool ExtensionsBrowserClient::IsUsbDeviceAllowedByPolicy(
content::BrowserContext* context,
const ExtensionId& extension_id,
int vendor_id,
int product_id) const {
return false;
}
void ExtensionsBrowserClient::GetFavicon(
content::BrowserContext* browser_context,
const Extension* extension,
const GURL& url,
base::CancelableTaskTracker* tracker,
base::OnceCallback<void(scoped_refptr<base::RefCountedMemory> bitmap_data)>
callback) const {}
std::vector<content::BrowserContext*>
ExtensionsBrowserClient::GetRelatedContextsForExtension(
content::BrowserContext* browser_context,
const Extension& extension) const {
return {browser_context};
}
void ExtensionsBrowserClient::AddAdditionalAllowedHosts(
const PermissionSet& desired_permissions,
PermissionSet* granted_permissions) const {}
void ExtensionsBrowserClient::AddAPIActionToActivityLog(
content::BrowserContext* browser_context,
const ExtensionId& extension_id,
const std::string& call_name,
base::Value::List args,
const std::string& extra) {}
void ExtensionsBrowserClient::AddEventToActivityLog(
content::BrowserContext* context,
const ExtensionId& extension_id,
const std::string& call_name,
base::Value::List args,
const std::string& extra) {}
void ExtensionsBrowserClient::AddDOMActionToActivityLog(
content::BrowserContext* browser_context,
const ExtensionId& extension_id,
const std::string& call_name,
base::Value::List args,
const GURL& url,
const std::u16string& url_title,
int call_type) {}
void ExtensionsBrowserClient::GetWebViewStoragePartitionConfig(
content::BrowserContext* browser_context,
content::SiteInstance* owner_site_instance,
const std::string& partition_name,
bool in_memory,
base::OnceCallback<void(std::optional<content::StoragePartitionConfig>)>
callback) {
const GURL& owner_site_url = owner_site_instance->GetSiteURL();
auto partition_config = content::StoragePartitionConfig::Create(
browser_context, owner_site_url.host(), partition_name, in_memory);
if (owner_site_url.SchemeIs(extensions::kExtensionScheme)) {
const auto& owner_config = owner_site_instance->GetStoragePartitionConfig();
#if DCHECK_IS_ON()
if (browser_context->IsOffTheRecord()) {
DCHECK(owner_config.in_memory());
}
#endif
if (!owner_config.is_default()) {
partition_config.set_fallback_to_partition_domain_for_blob_urls(
owner_config.in_memory()
? content::StoragePartitionConfig::FallbackMode::
kFallbackPartitionInMemory
: content::StoragePartitionConfig::FallbackMode::
kFallbackPartitionOnDisk);
DCHECK_EQ(owner_config,
partition_config.GetFallbackForBlobUrls().value());
}
}
std::move(callback).Run(partition_config);
}
void ExtensionsBrowserClient::CreatePasswordReuseDetectionManager(
content::WebContents* web_contents) const {}
media_device_salt::MediaDeviceSaltService*
ExtensionsBrowserClient::GetMediaDeviceSaltService(
content::BrowserContext* context) {
return nullptr;
}
bool ExtensionsBrowserClient::HasControlledFrameCapability(
content::BrowserContext* context,
const GURL& url) {
return false;
}
} // namespace extensions