Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4619)

Unified Diff: components/component_updater/component_updater_service.cc

Issue 879993005: Add support for uninstalling components and use it in SupervisedUserWhitelistInstaller. (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: rebase Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/component_updater/component_updater_service.cc
diff --git a/components/component_updater/component_updater_service.cc b/components/component_updater/component_updater_service.cc
index 89195c482f203701105671039219ff05c33fe8ee..bcd324a4ca87468775359fe1555efc38585de23a 100644
--- a/components/component_updater/component_updater_service.cc
+++ b/components/component_updater/component_updater_service.cc
@@ -100,6 +100,7 @@ class CrxUpdateService : public ComponentUpdateService, public OnDemandUpdater {
Status Start() override;
Status Stop() override;
Status RegisterComponent(const CrxComponent& component) override;
+ Status UnregisterComponent(const std::string& crx_id) override;
std::vector<std::string> GetComponentIDs() const override;
OnDemandUpdater& GetOnDemandUpdater() override;
void MaybeThrottle(const std::string& crx_id,
@@ -461,6 +462,27 @@ ComponentUpdateService::Status CrxUpdateService::RegisterComponent(
return kOk;
}
+ComponentUpdateService::Status CrxUpdateService::UnregisterComponent(
+ const std::string& crx_id) {
+ UpdateItems::iterator it = std::find_if(
+ work_items_.begin(), work_items_.end(), CrxUpdateItem::FindById(crx_id));
+ if (it == work_items_.end())
+ return kError;
+
+ CrxUpdateItem* item = *it;
+ CrxUpdateItem::Status status = item->status;
+ if (status == CrxUpdateItem::kDownloading ||
+ status == CrxUpdateItem::kDownloadingDiff ||
+ status == CrxUpdateItem::kUpdating ||
+ status == CrxUpdateItem::kUpdatingDiff) {
+ ChangeItemState(item, CrxUpdateItem::kNoUpdate);
+ ping_manager_->OnUpdateComplete(item);
+ }
+
+ work_items_.erase(it);
Sorin Jianu 2015/02/05 22:55:35 We wonder if we could do this in a different way.
Bernhard Bauer 2015/02/05 23:57:35 Okay, that makes sense. I'll try to work on that t
+ return kOk;
+}
+
std::vector<std::string> CrxUpdateService::GetComponentIDs() const {
DCHECK(thread_checker_.CalledOnValidThread());
std::vector<std::string> component_ids;
@@ -781,6 +803,23 @@ void CrxUpdateService::DownloadComplete(
DCHECK(thread_checker_.CalledOnValidThread());
CrxUpdateItem* crx = FindUpdateItemById(crx_context->id);
+
+ // If the item has been removed in the mean time, clean up and return.
Sorin Jianu 2015/02/05 22:55:35 The code to clean up an item can be hooked up in t
Bernhard Bauer 2015/02/06 16:05:05 Done.
+ if (!crx) {
+ crx_downloader_.reset();
+ base::FilePath crx_path = download_result.response;
+ if (!crx_path.empty()) {
+ blocking_task_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(base::IgnoreResult(
+ &update_client::DeleteFileAndEmptyParentDirectory),
+ crx_path));
+ }
+ // Move on to the next update, if there is one available.
+ ScheduleNextRun(kStepDelayMedium);
+ return;
+ }
+
DCHECK(crx->status == CrxUpdateItem::kDownloadingDiff ||
crx->status == CrxUpdateItem::kDownloading);
@@ -895,6 +934,13 @@ void CrxUpdateService::DoneInstalling(const std::string& component_id,
const bool is_success = error == ComponentUnpacker::kNone;
CrxUpdateItem* item = FindUpdateItemById(component_id);
+
+ // If the item has been removed in the mean time, return.
Sorin Jianu 2015/02/05 22:55:35 Same. The suggest is to centralize the unregistrat
Bernhard Bauer 2015/02/06 16:05:05 Done.
+ if (!item) {
+ ScheduleNextRun(kStepDelayMedium);
+ return;
+ }
+
if (item->status == CrxUpdateItem::kUpdatingDiff && !is_success) {
item->diff_error_category = error_category;
item->diff_error_code = error;

Powered by Google App Engine
This is Rietveld 408576698