summaryrefslogtreecommitdiffstats
path: root/chromium/extensions/browser/updater/update_data_provider.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/extensions/browser/updater/update_data_provider.cc')
-rw-r--r--chromium/extensions/browser/updater/update_data_provider.cc91
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