Commit b704ad07 authored by Joshua Pawlicki's avatar Joshua Pawlicki Committed by Commit Bot

Extension updater: Use a repeating install callback.

This callback can be called more than once, for example once for a
differential update and then (if that fails) again for a full update.

Bug: 1071475
Change-Id: I6d5ebce996aa13ece5b5d1d088eb1a9fff31d2c0
Fixed: 1071475
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2159534
Commit-Queue: Joshua Pawlicki <waffles@chromium.org>
Commit-Queue: Sorin Jianu <sorin@chromium.org>
Reviewed-by: default avatarSorin Jianu <sorin@chromium.org>
Auto-Submit: Joshua Pawlicki <waffles@chromium.org>
Cr-Commit-Position: refs/heads/master@{#761115}
parent a60e45a5
...@@ -33,7 +33,7 @@ ExtensionInstaller::ExtensionInstaller( ...@@ -33,7 +33,7 @@ ExtensionInstaller::ExtensionInstaller(
: extension_id_(extension_id), : extension_id_(extension_id),
extension_root_(extension_root), extension_root_(extension_root),
install_immediately_(install_immediately), install_immediately_(install_immediately),
extension_installer_callback_(std::move(extension_installer_callback)) {} extension_installer_callback_(extension_installer_callback) {}
void ExtensionInstaller::OnUpdateError(int error) { void ExtensionInstaller::OnUpdateError(int error) {
VLOG(1) << "OnUpdateError (" << extension_id_ << ") " << error; VLOG(1) << "OnUpdateError (" << extension_id_ << ") " << error;
...@@ -50,8 +50,7 @@ void ExtensionInstaller::Install( ...@@ -50,8 +50,7 @@ void ExtensionInstaller::Install(
DCHECK(!extension_installer_callback_.is_null()); DCHECK(!extension_installer_callback_.is_null());
if (base::PathExists(unpack_path)) { if (base::PathExists(unpack_path)) {
ui_thread->PostTask( ui_thread->PostTask(
FROM_HERE, FROM_HERE, base::BindOnce(extension_installer_callback_, extension_id_,
base::BindOnce(std::move(extension_installer_callback_), extension_id_,
public_key, unpack_path, install_immediately_, public_key, unpack_path, install_immediately_,
std::move(update_client_callback))); std::move(update_client_callback)));
return; return;
......
...@@ -26,8 +26,8 @@ class ExtensionInstaller : public update_client::CrxInstaller { ...@@ -26,8 +26,8 @@ class ExtensionInstaller : public update_client::CrxInstaller {
using UpdateClientCallback = update_client::CrxInstaller::Callback; using UpdateClientCallback = update_client::CrxInstaller::Callback;
// A callback to implement the install of a new version of the extension. // A callback to implement the install of a new version of the extension.
// Takes ownership of the directory at |unpacked_dir|. // Takes ownership of the directory at |unpacked_dir|.
using ExtensionInstallerCallback = using ExtensionInstallerCallback = base::RepeatingCallback<void(
base::OnceCallback<void(const std::string& extension_id, const std::string& extension_id,
const std::string& public_key, const std::string& public_key,
const base::FilePath& unpacked_dir, const base::FilePath& unpacked_dir,
bool install_immediately, bool install_immediately,
......
...@@ -120,7 +120,7 @@ TEST_F(ExtensionInstallerTest, Install_InvalidUnpackedDir) { ...@@ -120,7 +120,7 @@ TEST_F(ExtensionInstallerTest, Install_InvalidUnpackedDir) {
scoped_refptr<ExtensionInstaller> installer = scoped_refptr<ExtensionInstaller> installer =
base::MakeRefCounted<ExtensionInstaller>( base::MakeRefCounted<ExtensionInstaller>(
kExtensionId, root_dir.GetPath(), true /*install_immediately*/, kExtensionId, root_dir.GetPath(), true /*install_immediately*/,
base::BindOnce( base::BindRepeating(
[](const std::string& extension_id, const std::string& public_key, [](const std::string& extension_id, const std::string& public_key,
const base::FilePath& unpacked_dir, bool install_immediately, const base::FilePath& unpacked_dir, bool install_immediately,
UpdateClientCallback update_client_callback) { UpdateClientCallback update_client_callback) {
...@@ -152,7 +152,7 @@ TEST_F(ExtensionInstallerTest, Install_BasicInstallOperation_Error) { ...@@ -152,7 +152,7 @@ TEST_F(ExtensionInstallerTest, Install_BasicInstallOperation_Error) {
scoped_refptr<ExtensionInstaller> installer = scoped_refptr<ExtensionInstaller> installer =
base::MakeRefCounted<ExtensionInstaller>( base::MakeRefCounted<ExtensionInstaller>(
kExtensionId, root_dir.GetPath(), false /*install_immediately*/, kExtensionId, root_dir.GetPath(), false /*install_immediately*/,
base::BindOnce([](const std::string& extension_id, base::BindRepeating([](const std::string& extension_id,
const std::string& public_key, const std::string& public_key,
const base::FilePath& unpacked_dir, const base::FilePath& unpacked_dir,
bool install_immediately, bool install_immediately,
...@@ -184,7 +184,7 @@ TEST_F(ExtensionInstallerTest, Install_BasicInstallOperation_Success) { ...@@ -184,7 +184,7 @@ TEST_F(ExtensionInstallerTest, Install_BasicInstallOperation_Success) {
scoped_refptr<ExtensionInstaller> installer = scoped_refptr<ExtensionInstaller> installer =
base::MakeRefCounted<ExtensionInstaller>( base::MakeRefCounted<ExtensionInstaller>(
kExtensionId, root_dir.GetPath(), true /*install_immediately*/, kExtensionId, root_dir.GetPath(), true /*install_immediately*/,
base::BindOnce([](const std::string& extension_id, base::BindRepeating([](const std::string& extension_id,
const std::string& public_key, const std::string& public_key,
const base::FilePath& unpacked_dir, const base::FilePath& unpacked_dir,
bool install_immediately, bool install_immediately,
......
...@@ -115,7 +115,7 @@ UpdateDataProvider::GetData(bool install_immediately, ...@@ -115,7 +115,7 @@ UpdateDataProvider::GetData(bool install_immediately,
: GetPolicyVerifierFormat(); : GetPolicyVerifierFormat();
crx_component->installer = base::MakeRefCounted<ExtensionInstaller>( crx_component->installer = base::MakeRefCounted<ExtensionInstaller>(
id, extension->path(), install_immediately, id, extension->path(), install_immediately,
base::BindOnce(&UpdateDataProvider::RunInstallCallback, this)); base::BindRepeating(&UpdateDataProvider::RunInstallCallback, this));
if (!ExtensionsBrowserClient::Get()->IsExtensionEnabled(id, if (!ExtensionsBrowserClient::Get()->IsExtensionEnabled(id,
browser_context_)) { browser_context_)) {
int disabled_reasons = extension_prefs->GetDisableReasons(id); int disabled_reasons = extension_prefs->GetDisableReasons(id);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment