diff options
Diffstat (limited to 'chromium/extensions/browser/updater/update_data_provider.cc')
-rw-r--r-- | chromium/extensions/browser/updater/update_data_provider.cc | 91 |
1 files changed, 52 insertions, 39 deletions
diff --git a/chromium/extensions/browser/updater/update_data_provider.cc b/chromium/extensions/browser/updater/update_data_provider.cc index 8436f5c79a9..4939beae70c 100644 --- a/chromium/extensions/browser/updater/update_data_provider.cc +++ b/chromium/extensions/browser/updater/update_data_provider.cc @@ -35,34 +35,17 @@ namespace { using UpdateClientCallback = UpdateDataProvider::UpdateClientCallback; -void InstallUpdateCallback(content::BrowserContext* context, - const std::string& extension_id, - const std::string& public_key, - const base::FilePath& unpacked_dir, - bool install_immediately, - UpdateClientCallback update_client_callback) { - // Note that error codes are converted into custom error codes, which are all - // based on a constant (see ToInstallerResult). This means that custom codes - // from different embedders may collide. However, for any given extension ID, - // there should be only one embedder, so this should be OK from Omaha. - ExtensionSystem::Get(context)->InstallUpdate( - extension_id, public_key, unpacked_dir, install_immediately, - base::BindOnce( - [](UpdateClientCallback callback, - const absl::optional<CrxInstallError>& error) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - update_client::CrxInstaller::Result result(0); - if (error.has_value()) { - int detail = - error->type() == - CrxInstallErrorType::SANDBOXED_UNPACKER_FAILURE - ? static_cast<int>(error->sandbox_failure_detail()) - : static_cast<int>(error->detail()); - result = update_client::ToInstallerResult(error->type(), detail); - } - std::move(callback).Run(result); - }, - std::move(update_client_callback))); +void PostErrorTasks(const base::FilePath& unpacked_dir, + UpdateClientCallback update_client_callback) { + base::ThreadPool::PostTask( + FROM_HERE, {base::TaskPriority::BEST_EFFORT, base::MayBlock()}, + base::BindOnce(base::GetDeletePathRecursivelyCallback(), + unpacked_dir)); + content::GetUIThreadTaskRunner({})->PostTask( + FROM_HERE, + base::BindOnce(std::move(update_client_callback), + update_client::CrxInstaller::Result( + update_client::InstallError::GENERIC_ERROR))); } } // namespace @@ -151,22 +134,52 @@ void UpdateDataProvider::RunInstallCallback( << public_key; if (!browser_context_) { - base::ThreadPool::PostTask( - FROM_HERE, {base::TaskPriority::BEST_EFFORT, base::MayBlock()}, - base::BindOnce(base::GetDeletePathRecursivelyCallback(), unpacked_dir)); - content::GetUIThreadTaskRunner({})->PostTask( - FROM_HERE, - base::BindOnce(std::move(update_client_callback), - update_client::CrxInstaller::Result( - update_client::InstallError::GENERIC_ERROR))); + PostErrorTasks(unpacked_dir, std::move(update_client_callback)); return; } content::GetUIThreadTaskRunner({})->PostTask( FROM_HERE, - base::BindOnce(InstallUpdateCallback, browser_context_, extension_id, - public_key, unpacked_dir, install_immediately, - std::move(update_client_callback))); + base::BindOnce(&UpdateDataProvider::InstallUpdateCallback, this, + extension_id, public_key, unpacked_dir, + install_immediately, std::move(update_client_callback))); +} + +void UpdateDataProvider::InstallUpdateCallback( + const std::string& extension_id, + const std::string& public_key, + const base::FilePath& unpacked_dir, + bool install_immediately, + UpdateClientCallback update_client_callback) { + if (!browser_context_) { + PostErrorTasks(unpacked_dir, std::move(update_client_callback)); + return; + } + + // Note that error codes are converted into custom error codes, which are all + // based on a constant (see ToInstallerResult). This means that custom codes + // from different embedders may collide. However, for any given extension ID, + // there should be only one embedder, so this should be OK from Omaha. + ExtensionSystem::Get(browser_context_) + ->InstallUpdate( + extension_id, public_key, unpacked_dir, install_immediately, + base::BindOnce( + [](UpdateClientCallback callback, + const absl::optional<CrxInstallError>& error) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + update_client::CrxInstaller::Result result(0); + if (error.has_value()) { + int detail = + error->type() == + CrxInstallErrorType::SANDBOXED_UNPACKER_FAILURE + ? static_cast<int>(error->sandbox_failure_detail()) + : static_cast<int>(error->detail()); + result = + update_client::ToInstallerResult(error->type(), detail); + } + std::move(callback).Run(result); + }, + std::move(update_client_callback))); } } // namespace extensions |