Index: chrome/browser/extensions/extension_updater.cc |
diff --git a/chrome/browser/extensions/extension_updater.cc b/chrome/browser/extensions/extension_updater.cc |
index 9c428e34838bf20409910ab3283813ceaede0de3..95177c66107be1daff05a4f5985ae4316c68766f 100644 |
--- a/chrome/browser/extensions/extension_updater.cc |
+++ b/chrome/browser/extensions/extension_updater.cc |
@@ -169,7 +169,12 @@ void ManifestFetchesBuilder::AddExtension(const Extension& extension) { |
void ManifestFetchesBuilder::AddPendingExtension( |
const std::string& id, |
const PendingExtensionInfo& info) { |
- AddExtensionData(Extension::INTERNAL, id, info.version, |
+ // Use a zero version to ensure that a pending extension will always |
+ // be updated, and thus installed (assuming all extensions have |
+ // non-zero versions). |
+ scoped_ptr<Version> version( |
+ Version::GetVersionFromString("0.0.0.0")); |
+ AddExtensionData(Extension::INTERNAL, id, *version, |
false, info.is_theme, info.update_url); |
} |
@@ -716,12 +721,6 @@ bool ExtensionUpdater::GetExistingVersion(const std::string& id, |
WideToASCII(prefs_->GetString(kExtensionBlacklistUpdateVersion)); |
return true; |
} |
- PendingExtensionMap::const_iterator it = |
- service_->pending_extensions().find(id); |
- if (it != service_->pending_extensions().end()) { |
- *version = it->second.version.GetString(); |
- return true; |
- } |
Extension* extension = service_->GetExtensionById(id, false); |
if (!extension) { |
return false; |
@@ -745,20 +744,24 @@ std::vector<int> ExtensionUpdater::DetermineUpdates( |
if (!fetch_data.Includes(update->extension_id)) |
continue; |
- std::string version; |
- if (!GetExistingVersion(update->extension_id, &version)) |
- continue; |
+ if (service_->pending_extensions().find(update->extension_id) == |
+ service_->pending_extensions().end()) { |
+ // If we're not installing pending extension, and the update |
+ // version is the same or older than what's already installed, |
+ // we don't want it. |
+ std::string version; |
+ if (!GetExistingVersion(update->extension_id, &version)) |
+ continue; |
- // If the update version is the same or older than what's already installed, |
- // we don't want it. |
- scoped_ptr<Version> existing_version( |
- Version::GetVersionFromString(version)); |
- scoped_ptr<Version> update_version( |
- Version::GetVersionFromString(update->version)); |
+ scoped_ptr<Version> existing_version( |
+ Version::GetVersionFromString(version)); |
+ scoped_ptr<Version> update_version( |
+ Version::GetVersionFromString(update->version)); |
- if (!update_version.get() || |
- update_version->CompareTo(*(existing_version.get())) <= 0) { |
- continue; |
+ if (!update_version.get() || |
+ update_version->CompareTo(*(existing_version.get())) <= 0) { |
+ continue; |
+ } |
} |
// If the update specifies a browser minimum version, do we qualify? |