blob: 0323671149fa7f9e8c2c5aa47fe7f98ac2630caa [file] [log] [blame]
// 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 "content/shell/browser/shell_browser_context.h"
#include <memory>
#include <utility>
#include "base/command_line.h"
#include "base/environment.h"
#include "base/files/file_util.h"
#include "base/functional/bind.h"
#include "base/path_service.h"
#include "base/threading/thread.h"
#include "build/build_config.h"
#include "components/keyed_service/content/browser_context_dependency_manager.h"
#include "components/keyed_service/core/simple_dependency_manager.h"
#include "components/keyed_service/core/simple_factory_key.h"
#include "components/keyed_service/core/simple_key_map.h"
#include "components/network_session_configurator/common/network_switches.h"
#include "components/origin_trials/browser/leveldb_persistence_provider.h"
#include "components/origin_trials/browser/origin_trials.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/origin_trials_controller_delegate.h"
#include "content/public/browser/storage_partition.h"
#include "content/public/common/content_switches.h"
#include "content/shell/browser/shell_content_browser_client.h"
#include "content/shell/browser/shell_content_index_provider.h"
#include "content/shell/browser/shell_download_manager_delegate.h"
#include "content/shell/browser/shell_permission_manager.h"
#include "content/shell/common/shell_paths.h"
#include "content/shell/common/shell_switches.h"
#include "content/test/mock_background_sync_controller.h"
#include "content/test/mock_reduce_accept_language_controller_delegate.h"
#include "third_party/blink/public/common/origin_trials/trial_token_validator.h"
namespace content {
ShellBrowserContext::ShellBrowserContext(bool off_the_record,
bool delay_services_creation)
: off_the_record_(off_the_record) {
InitWhileIOAllowed();
#if BUILDFLAG(IS_WIN)
base::SetExtraNoExecuteAllowedPath(SHELL_DIR_USER_DATA);
#endif // BUILDFLAG(IS_WIN)
if (!delay_services_creation) {
BrowserContextDependencyManager::GetInstance()
->CreateBrowserContextServices(this);
}
}
ShellBrowserContext::~ShellBrowserContext() {
NotifyWillBeDestroyed();
// The SimpleDependencyManager should always be passed after the
// BrowserContextDependencyManager. This is because the KeyedService instances
// in the BrowserContextDependencyManager's dependency graph can depend on the
// ones in the SimpleDependencyManager's graph.
DependencyManager::PerformInterlockedTwoPhaseShutdown(
BrowserContextDependencyManager::GetInstance(), this,
SimpleDependencyManager::GetInstance(), key_.get());
SimpleKeyMap::GetInstance()->Dissociate(this);
ShutdownStoragePartitions();
}
void ShellBrowserContext::InitWhileIOAllowed() {
base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess();
if (cmd_line->HasSwitch(switches::kIgnoreCertificateErrors))
ignore_certificate_errors_ = true;
CHECK(base::PathService::Get(SHELL_DIR_USER_DATA, &path_));
FinishInitWhileIOAllowed();
}
void ShellBrowserContext::FinishInitWhileIOAllowed() {
key_ = std::make_unique<SimpleFactoryKey>(path_, off_the_record_);
SimpleKeyMap::GetInstance()->Associate(this, key_.get());
}
std::unique_ptr<ZoomLevelDelegate> ShellBrowserContext::CreateZoomLevelDelegate(
const base::FilePath&) {
return nullptr;
}
base::FilePath ShellBrowserContext::GetPath() {
return path_;
}
bool ShellBrowserContext::IsOffTheRecord() {
return off_the_record_;
}
DownloadManagerDelegate* ShellBrowserContext::GetDownloadManagerDelegate() {
if (!download_manager_delegate_.get()) {
download_manager_delegate_ =
std::make_unique<ShellDownloadManagerDelegate>();
download_manager_delegate_->SetDownloadManager(GetDownloadManager());
}
return download_manager_delegate_.get();
}
BrowserPluginGuestManager* ShellBrowserContext::GetGuestManager() {
return nullptr;
}
storage::SpecialStoragePolicy* ShellBrowserContext::GetSpecialStoragePolicy() {
return nullptr;
}
PlatformNotificationService*
ShellBrowserContext::GetPlatformNotificationService() {
return nullptr;
}
PushMessagingService* ShellBrowserContext::GetPushMessagingService() {
return nullptr;
}
StorageNotificationService*
ShellBrowserContext::GetStorageNotificationService() {
return nullptr;
}
SSLHostStateDelegate* ShellBrowserContext::GetSSLHostStateDelegate() {
return nullptr;
}
PermissionControllerDelegate*
ShellBrowserContext::GetPermissionControllerDelegate() {
if (!permission_manager_.get())
permission_manager_ = std::make_unique<ShellPermissionManager>();
return permission_manager_.get();
}
ClientHintsControllerDelegate*
ShellBrowserContext::GetClientHintsControllerDelegate() {
return client_hints_controller_delegate_;
}
BackgroundFetchDelegate* ShellBrowserContext::GetBackgroundFetchDelegate() {
return nullptr;
}
BackgroundSyncController* ShellBrowserContext::GetBackgroundSyncController() {
if (!background_sync_controller_) {
background_sync_controller_ =
std::make_unique<MockBackgroundSyncController>();
}
return background_sync_controller_.get();
}
BrowsingDataRemoverDelegate*
ShellBrowserContext::GetBrowsingDataRemoverDelegate() {
return nullptr;
}
ContentIndexProvider* ShellBrowserContext::GetContentIndexProvider() {
if (!content_index_provider_)
content_index_provider_ = std::make_unique<ShellContentIndexProvider>();
return content_index_provider_.get();
}
ReduceAcceptLanguageControllerDelegate*
ShellBrowserContext::GetReduceAcceptLanguageControllerDelegate() {
if (!reduce_accept_lang_controller_delegate_) {
reduce_accept_lang_controller_delegate_ =
std::make_unique<MockReduceAcceptLanguageControllerDelegate>(
GetShellLanguage());
}
return reduce_accept_lang_controller_delegate_.get();
}
OriginTrialsControllerDelegate*
ShellBrowserContext::GetOriginTrialsControllerDelegate() {
if (!origin_trials_controller_delegate_) {
origin_trials_controller_delegate_ =
std::make_unique<origin_trials::OriginTrials>(
std::make_unique<origin_trials::LevelDbPersistenceProvider>(
GetPath(),
GetDefaultStoragePartition()->GetProtoDatabaseProvider()),
std::make_unique<blink::TrialTokenValidator>());
}
return origin_trials_controller_delegate_.get();
}
} // namespace content