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,8 +50,7 @@ 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_,
FROM_HERE, base::BindOnce(extension_installer_callback_, extension_id_,
public_key, unpack_path, install_immediately_,
std::move(update_client_callback)));
return;
......
......@@ -26,8 +26,8 @@ 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,
using ExtensionInstallerCallback = base::RepeatingCallback<void(
const std::string& extension_id,
const std::string& public_key,
const base::FilePath& unpacked_dir,
bool install_immediately,
......
......@@ -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,7 +152,7 @@ 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,
base::BindRepeating([](const std::string& extension_id,
const std::string& public_key,
const base::FilePath& unpacked_dir,
bool install_immediately,
......@@ -184,7 +184,7 @@ 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,
base::BindRepeating([](const std::string& extension_id,
const std::string& public_key,
const base::FilePath& unpacked_dir,
bool install_immediately,
......
......@@ -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