#include "extensions/shell/browser/shell_extensions_browser_client.h"
#include <memory>
#include <utility>
#include "base/functional/bind.h"
#include "base/memory/ptr_util.h"
#include "build/build_config.h"
#include "build/chromeos_buildflags.h"
#include "components/version_info/version_info.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/common/user_agent.h"
#include "extensions/browser/api/core_extensions_browser_api_provider.h"
#include "extensions/browser/api/extensions_api_client.h"
#include "extensions/browser/event_router.h"
#include "extensions/browser/extensions_browser_interface_binders.h"
#include "extensions/browser/null_app_sorting.h"
#include "extensions/browser/updater/null_extension_cache.h"
#include "extensions/browser/url_request_util.h"
#include "extensions/common/extension_id.h"
#include "extensions/common/features/feature_channel.h"
#include "extensions/shell/browser/api/runtime/shell_runtime_api_delegate.h"
#include "extensions/shell/browser/delegates/shell_kiosk_delegate.h"
#include "extensions/shell/browser/shell_extension_host_delegate.h"
#include "extensions/shell/browser/shell_extension_system_factory.h"
#include "extensions/shell/browser/shell_extension_web_contents_observer.h"
#include "extensions/shell/browser/shell_extensions_api_client.h"
#include "extensions/shell/browser/shell_navigation_ui_data.h"
#include "services/network/public/mojom/url_loader.mojom.h"
#if BUILDFLAG(IS_CHROMEOS_ASH)
#include "chromeos/ash/components/login/login_state/login_state.h"
#endif
BrowserContext;
BrowserThread;
namespace extensions {
ShellExtensionsBrowserClient::ShellExtensionsBrowserClient()
: … { … }
ShellExtensionsBrowserClient::~ShellExtensionsBrowserClient() { … }
bool ShellExtensionsBrowserClient::IsShuttingDown() { … }
bool ShellExtensionsBrowserClient::AreExtensionsDisabled(
const base::CommandLine& command_line,
BrowserContext* context) { … }
bool ShellExtensionsBrowserClient::IsValidContext(void* context) { … }
bool ShellExtensionsBrowserClient::IsSameContext(BrowserContext* first,
BrowserContext* second) { … }
bool ShellExtensionsBrowserClient::HasOffTheRecordContext(
BrowserContext* context) { … }
BrowserContext* ShellExtensionsBrowserClient::GetOffTheRecordContext(
BrowserContext* context) { … }
BrowserContext* ShellExtensionsBrowserClient::GetOriginalContext(
BrowserContext* context) { … }
content::BrowserContext*
ShellExtensionsBrowserClient::GetContextRedirectedToOriginal(
content::BrowserContext* context,
bool force_guest_profile) { … }
content::BrowserContext* ShellExtensionsBrowserClient::GetContextOwnInstance(
content::BrowserContext* context,
bool force_guest_profile) { … }
content::BrowserContext*
ShellExtensionsBrowserClient::GetContextForOriginalOnly(
content::BrowserContext* context,
bool force_guest_profile) { … }
bool ShellExtensionsBrowserClient::AreExtensionsDisabledForContext(
content::BrowserContext* context) { … }
#if BUILDFLAG(IS_CHROMEOS_ASH)
std::string ShellExtensionsBrowserClient::GetUserIdHashFromContext(
content::BrowserContext* context) {
if (!ash::LoginState::IsInitialized())
return "";
return ash::LoginState::Get()->primary_user_hash();
}
#endif
#if BUILDFLAG(IS_CHROMEOS_LACROS)
bool ShellExtensionsBrowserClient::IsFromMainProfile(
content::BrowserContext* context) {
return true;
}
#endif
bool ShellExtensionsBrowserClient::IsGuestSession(
BrowserContext* context) const { … }
bool ShellExtensionsBrowserClient::IsExtensionIncognitoEnabled(
const ExtensionId& extension_id,
content::BrowserContext* context) const { … }
bool ShellExtensionsBrowserClient::CanExtensionCrossIncognito(
const Extension* extension,
content::BrowserContext* context) const { … }
base::FilePath ShellExtensionsBrowserClient::GetBundleResourcePath(
const network::ResourceRequest& request,
const base::FilePath& extension_resources_path,
int* resource_id) const { … }
void ShellExtensionsBrowserClient::LoadResourceFromResourceBundle(
const network::ResourceRequest& request,
mojo::PendingReceiver<network::mojom::URLLoader> loader,
const base::FilePath& resource_relative_path,
int resource_id,
scoped_refptr<net::HttpResponseHeaders> headers,
mojo::PendingRemote<network::mojom::URLLoaderClient> client) { … }
bool ShellExtensionsBrowserClient::AllowCrossRendererResourceLoad(
const network::ResourceRequest& request,
network::mojom::RequestDestination destination,
ui::PageTransition page_transition,
int child_id,
bool is_incognito,
const Extension* extension,
const ExtensionSet& extensions,
const ProcessMap& process_map,
const GURL& upstream_url) { … }
PrefService* ShellExtensionsBrowserClient::GetPrefServiceForContext(
BrowserContext* context) { … }
void ShellExtensionsBrowserClient::GetEarlyExtensionPrefsObservers(
content::BrowserContext* context,
std::vector<EarlyExtensionPrefsObserver*>* observers) const { … }
ProcessManagerDelegate*
ShellExtensionsBrowserClient::GetProcessManagerDelegate() const { … }
mojo::PendingRemote<network::mojom::URLLoaderFactory>
ShellExtensionsBrowserClient::GetControlledFrameEmbedderURLLoader(
const url::Origin& app_origin,
int frame_tree_node_id,
content::BrowserContext* browser_context) { … }
std::unique_ptr<ExtensionHostDelegate>
ShellExtensionsBrowserClient::CreateExtensionHostDelegate() { … }
bool ShellExtensionsBrowserClient::DidVersionUpdate(BrowserContext* context) { … }
void ShellExtensionsBrowserClient::PermitExternalProtocolHandler() { … }
bool ShellExtensionsBrowserClient::IsInDemoMode() { … }
bool ShellExtensionsBrowserClient::IsScreensaverInDemoMode(
const std::string& app_id) { … }
bool ShellExtensionsBrowserClient::IsRunningInForcedAppMode() { … }
bool ShellExtensionsBrowserClient::IsAppModeForcedForApp(
const ExtensionId& extension_id) { … }
bool ShellExtensionsBrowserClient::IsLoggedInAsPublicAccount() { … }
ExtensionSystemProvider*
ShellExtensionsBrowserClient::GetExtensionSystemFactory() { … }
void ShellExtensionsBrowserClient::RegisterBrowserInterfaceBindersForFrame(
mojo::BinderMapWithContext<content::RenderFrameHost*>* binder_map,
content::RenderFrameHost* render_frame_host,
const Extension* extension) const { … }
std::unique_ptr<RuntimeAPIDelegate>
ShellExtensionsBrowserClient::CreateRuntimeAPIDelegate(
content::BrowserContext* context) const { … }
const ComponentExtensionResourceManager*
ShellExtensionsBrowserClient::GetComponentExtensionResourceManager() { … }
void ShellExtensionsBrowserClient::BroadcastEventToRenderers(
events::HistogramValue histogram_value,
const std::string& event_name,
base::Value::List args,
bool dispatch_to_off_the_record_profiles) { … }
ExtensionCache* ShellExtensionsBrowserClient::GetExtensionCache() { … }
bool ShellExtensionsBrowserClient::IsBackgroundUpdateAllowed() { … }
bool ShellExtensionsBrowserClient::IsMinBrowserVersionSupported(
const std::string& min_version) { … }
void ShellExtensionsBrowserClient::SetAPIClientForTest(
ExtensionsAPIClient* api_client) { … }
ExtensionWebContentsObserver*
ShellExtensionsBrowserClient::GetExtensionWebContentsObserver(
content::WebContents* web_contents) { … }
KioskDelegate* ShellExtensionsBrowserClient::GetKioskDelegate() { … }
bool ShellExtensionsBrowserClient::IsLockScreenContext(
content::BrowserContext* context) { … }
std::string ShellExtensionsBrowserClient::GetApplicationLocale() { … }
std::string ShellExtensionsBrowserClient::GetUserAgent() const { … }
void ShellExtensionsBrowserClient::InitWithBrowserContext(
content::BrowserContext* context,
PrefService* pref_service) { … }
}