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(
: extension_id_(extension_id),
extension_root_(extension_root),
install_immediately_(install_immediately),
extension_installer_callback_(std::move(extension_installer_callback)) {}
extension_installer_callback_(extension_installer_callback) {}
void ExtensionInstaller::OnUpdateError(int error) {
VLOG(1) << "OnUpdateError (" << extension_id_ << ") " << error;
......@@ -50,10 +50,9 @@ void ExtensionInstaller::Install(
DCHECK(!extension_installer_callback_.is_null());
if (base::PathExists(unpack_path)) {
ui_thread->PostTask(
FROM_HERE,
base::BindOnce(std::move(extension_installer_callback_), extension_id_,
public_key, unpack_path, install_immediately_,
std::move(update_client_callback)));
FROM_HERE, base::BindOnce(extension_installer_callback_, extension_id_,
public_key, unpack_path, install_immediately_,
std::move(update_client_callback)));
return;
}
ui_thread->PostTask(FROM_HERE,
......
......@@ -26,12 +26,12 @@ class ExtensionInstaller : public update_client::CrxInstaller {
using UpdateClientCallback = update_client::CrxInstaller::Callback;
// A callback to implement the install of a new version of the extension.
// Takes ownership of the directory at |unpacked_dir|.
using ExtensionInstallerCallback =
base::OnceCallback<void(const std::string& extension_id,
const std::string& public_key,
const base::FilePath& unpacked_dir,
bool install_immediately,
UpdateClientCallback update_client_callback)>;
using ExtensionInstallerCallback = base::RepeatingCallback<void(
const std::string& extension_id,
const std::string& public_key,
const base::FilePath& unpacked_dir,
bool install_immediately,
UpdateClientCallback update_client_callback)>;
// This method takes the id and root directory for an extension we're doing
// an update check for, as well as a callback to call if we get a new version
......
......@@ -120,7 +120,7 @@ TEST_F(ExtensionInstallerTest, Install_InvalidUnpackedDir) {
scoped_refptr<ExtensionInstaller> installer =
base::MakeRefCounted<ExtensionInstaller>(
kExtensionId, root_dir.GetPath(), true /*install_immediately*/,
base::BindOnce(
base::BindRepeating(
[](const std::string& extension_id, const std::string& public_key,
const base::FilePath& unpacked_dir, bool install_immediately,
UpdateClientCallback update_client_callback) {
......@@ -152,11 +152,11 @@ TEST_F(ExtensionInstallerTest, Install_BasicInstallOperation_Error) {
scoped_refptr<ExtensionInstaller> installer =
base::MakeRefCounted<ExtensionInstaller>(
kExtensionId, root_dir.GetPath(), false /*install_immediately*/,
base::BindOnce([](const std::string& extension_id,
const std::string& public_key,
const base::FilePath& unpacked_dir,
bool install_immediately,
UpdateClientCallback update_client_callback) {
base::BindRepeating([](const std::string& extension_id,
const std::string& public_key,
const base::FilePath& unpacked_dir,
bool install_immediately,
UpdateClientCallback update_client_callback) {
EXPECT_FALSE(install_immediately);
std::move(update_client_callback)
.Run(Result(InstallError::GENERIC_ERROR));
......@@ -184,11 +184,11 @@ TEST_F(ExtensionInstallerTest, Install_BasicInstallOperation_Success) {
scoped_refptr<ExtensionInstaller> installer =
base::MakeRefCounted<ExtensionInstaller>(
kExtensionId, root_dir.GetPath(), true /*install_immediately*/,
base::BindOnce([](const std::string& extension_id,
const std::string& public_key,
const base::FilePath& unpacked_dir,
bool install_immediately,
UpdateClientCallback update_client_callback) {
base::BindRepeating([](const std::string& extension_id,
const std::string& public_key,
const base::FilePath& unpacked_dir,
bool install_immediately,
UpdateClientCallback update_client_callback) {
EXPECT_TRUE(install_immediately);
std::move(update_client_callback).Run(Result(InstallError::NONE));
}));
......
......@@ -115,7 +115,7 @@ UpdateDataProvider::GetData(bool install_immediately,
: GetPolicyVerifierFormat();
crx_component->installer = base::MakeRefCounted<ExtensionInstaller>(
id, extension->path(), install_immediately,
base::BindOnce(&UpdateDataProvider::RunInstallCallback, this));
base::BindRepeating(&UpdateDataProvider::RunInstallCallback, this));
if (!ExtensionsBrowserClient::Get()->IsExtensionEnabled(id,
browser_context_)) {
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