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

Side by Side Diff: chrome/browser/extensions/extension_updater.cc

Issue 7605001: Extensions installed by policy overrun previously installed extensions. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: More tests. Created 9 years, 4 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/extensions/extension_updater.h" 5 #include "chrome/browser/extensions/extension_updater.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <set> 8 #include <set>
9 9
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
(...skipping 982 matching lines...) Expand 10 before | Expand all | Expand 10 after
993 DCHECK(will_check_soon_); 993 DCHECK(will_check_soon_);
994 CheckNow(); 994 CheckNow();
995 will_check_soon_ = false; 995 will_check_soon_ = false;
996 } 996 }
997 997
998 void ExtensionUpdater::CheckNow() { 998 void ExtensionUpdater::CheckNow() {
999 DCHECK(alive_); 999 DCHECK(alive_);
1000 NotifyStarted(); 1000 NotifyStarted();
1001 ManifestFetchesBuilder fetches_builder(service_, extension_prefs_); 1001 ManifestFetchesBuilder fetches_builder(service_, extension_prefs_);
1002 1002
1003 const ExtensionList* extensions = service_->extensions();
1004 for (ExtensionList::const_iterator iter = extensions->begin();
1005 iter != extensions->end(); ++iter) {
1006 fetches_builder.AddExtension(**iter);
1007 }
1008
1009 const PendingExtensionManager* pending_extension_manager = 1003 const PendingExtensionManager* pending_extension_manager =
1010 service_->pending_extension_manager(); 1004 service_->pending_extension_manager();
1005 std::set<std::string> pending_ids;
1011 1006
1012 PendingExtensionManager::const_iterator iter; 1007 PendingExtensionManager::const_iterator iter;
1013 for (iter = pending_extension_manager->begin(); 1008 for (iter = pending_extension_manager->begin();
1014 iter != pending_extension_manager->end(); iter++) { 1009 iter != pending_extension_manager->end(); iter++) {
1015 // TODO(skerner): Move the determination of what gets fetched into 1010 // TODO(skerner): Move the determination of what gets fetched into
1016 // class PendingExtensionManager. 1011 // class PendingExtensionManager.
1017 Extension::Location location = iter->second.install_source(); 1012 Extension::Location location = iter->second.install_source();
1018 if (location != Extension::EXTERNAL_PREF && 1013 if (location != Extension::EXTERNAL_PREF &&
1019 location != Extension::EXTERNAL_REGISTRY) 1014 location != Extension::EXTERNAL_REGISTRY) {
1020 fetches_builder.AddPendingExtension(iter->first, iter->second); 1015 fetches_builder.AddPendingExtension(iter->first, iter->second);
1016 pending_ids.insert(iter->first);
1017 }
1018 }
1019
1020 const ExtensionList* extensions = service_->extensions();
1021 for (ExtensionList::const_iterator iter = extensions->begin();
1022 iter != extensions->end(); ++iter) {
1023 // An extension might be overwritten by policy, and have its update url
1024 // changed. Make sure existing extensions aren't fetched again, if a
1025 // pending fetch for an extension with the same id already exists.
1026 if (!ContainsKey(pending_ids, (*iter)->id())) {
1027 fetches_builder.AddExtension(**iter);
1028 }
1021 } 1029 }
1022 1030
1023 fetches_builder.ReportStats(); 1031 fetches_builder.ReportStats();
1024 1032
1025 std::vector<ManifestFetchData*> fetches(fetches_builder.GetFetches()); 1033 std::vector<ManifestFetchData*> fetches(fetches_builder.GetFetches());
1026 1034
1027 // Start a fetch of the blacklist if needed. 1035 // Start a fetch of the blacklist if needed.
1028 if (blacklist_checks_enabled_) { 1036 if (blacklist_checks_enabled_) {
1029 // Note: it is very important that we use the https version of the update 1037 // Note: it is very important that we use the https version of the update
1030 // url here to avoid DNS hijacking of the blacklist, which is not validated 1038 // url here to avoid DNS hijacking of the blacklist, which is not validated
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
1234 std::set<std::string>::const_iterator i; 1242 std::set<std::string>::const_iterator i;
1235 for (i = ids.begin(); i != ids.end(); ++i) 1243 for (i = ids.begin(); i != ids.end(); ++i)
1236 in_progress_ids_.insert(*i); 1244 in_progress_ids_.insert(*i);
1237 } 1245 }
1238 1246
1239 void ExtensionUpdater::RemoveFromInProgress(const std::set<std::string>& ids) { 1247 void ExtensionUpdater::RemoveFromInProgress(const std::set<std::string>& ids) {
1240 std::set<std::string>::const_iterator i; 1248 std::set<std::string>::const_iterator i;
1241 for (i = ids.begin(); i != ids.end(); ++i) 1249 for (i = ids.begin(); i != ids.end(); ++i)
1242 in_progress_ids_.erase(*i); 1250 in_progress_ids_.erase(*i);
1243 } 1251 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698