| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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/logging.h" | 10 #include "base/logging.h" |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 extension.id(), | 162 extension.id(), |
| 163 *extension.version(), | 163 *extension.version(), |
| 164 extension.converted_from_user_script(), | 164 extension.converted_from_user_script(), |
| 165 extension.is_theme(), | 165 extension.is_theme(), |
| 166 extension.update_url()); | 166 extension.update_url()); |
| 167 } | 167 } |
| 168 | 168 |
| 169 void ManifestFetchesBuilder::AddPendingExtension( | 169 void ManifestFetchesBuilder::AddPendingExtension( |
| 170 const std::string& id, | 170 const std::string& id, |
| 171 const PendingExtensionInfo& info) { | 171 const PendingExtensionInfo& info) { |
| 172 AddExtensionData(Extension::INTERNAL, id, info.version, | 172 // Use a zero version to ensure that a pending extension will always |
| 173 // be updated, and thus installed (assuming all extensions have |
| 174 // non-zero versions). |
| 175 scoped_ptr<Version> version( |
| 176 Version::GetVersionFromString("0.0.0.0")); |
| 177 AddExtensionData(Extension::INTERNAL, id, *version, |
| 173 false, info.is_theme, info.update_url); | 178 false, info.is_theme, info.update_url); |
| 174 } | 179 } |
| 175 | 180 |
| 176 void ManifestFetchesBuilder::ReportStats() const { | 181 void ManifestFetchesBuilder::ReportStats() const { |
| 177 UMA_HISTOGRAM_COUNTS_100("Extensions.UpdateCheckExtensions", | 182 UMA_HISTOGRAM_COUNTS_100("Extensions.UpdateCheckExtensions", |
| 178 url_stats_.google_url_count + | 183 url_stats_.google_url_count + |
| 179 url_stats_.other_url_count - | 184 url_stats_.other_url_count - |
| 180 url_stats_.theme_count); | 185 url_stats_.theme_count); |
| 181 UMA_HISTOGRAM_COUNTS_100("Extensions.UpdateCheckTheme", | 186 UMA_HISTOGRAM_COUNTS_100("Extensions.UpdateCheckTheme", |
| 182 url_stats_.theme_count); | 187 url_stats_.theme_count); |
| (...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 709 fetches.clear(); | 714 fetches.clear(); |
| 710 } | 715 } |
| 711 | 716 |
| 712 bool ExtensionUpdater::GetExistingVersion(const std::string& id, | 717 bool ExtensionUpdater::GetExistingVersion(const std::string& id, |
| 713 std::string* version) { | 718 std::string* version) { |
| 714 if (id == kBlacklistAppID) { | 719 if (id == kBlacklistAppID) { |
| 715 *version = | 720 *version = |
| 716 WideToASCII(prefs_->GetString(kExtensionBlacklistUpdateVersion)); | 721 WideToASCII(prefs_->GetString(kExtensionBlacklistUpdateVersion)); |
| 717 return true; | 722 return true; |
| 718 } | 723 } |
| 719 PendingExtensionMap::const_iterator it = | |
| 720 service_->pending_extensions().find(id); | |
| 721 if (it != service_->pending_extensions().end()) { | |
| 722 *version = it->second.version.GetString(); | |
| 723 return true; | |
| 724 } | |
| 725 Extension* extension = service_->GetExtensionById(id, false); | 724 Extension* extension = service_->GetExtensionById(id, false); |
| 726 if (!extension) { | 725 if (!extension) { |
| 727 return false; | 726 return false; |
| 728 } | 727 } |
| 729 *version = extension->version()->GetString(); | 728 *version = extension->version()->GetString(); |
| 730 return true; | 729 return true; |
| 731 } | 730 } |
| 732 | 731 |
| 733 std::vector<int> ExtensionUpdater::DetermineUpdates( | 732 std::vector<int> ExtensionUpdater::DetermineUpdates( |
| 734 const ManifestFetchData& fetch_data, | 733 const ManifestFetchData& fetch_data, |
| 735 const UpdateManifest::Results& possible_updates) { | 734 const UpdateManifest::Results& possible_updates) { |
| 736 std::vector<int> result; | 735 std::vector<int> result; |
| 737 | 736 |
| 738 // This will only get set if one of possible_updates specifies | 737 // This will only get set if one of possible_updates specifies |
| 739 // browser_min_version. | 738 // browser_min_version. |
| 740 scoped_ptr<Version> browser_version; | 739 scoped_ptr<Version> browser_version; |
| 741 | 740 |
| 742 for (size_t i = 0; i < possible_updates.list.size(); i++) { | 741 for (size_t i = 0; i < possible_updates.list.size(); i++) { |
| 743 const UpdateManifest::Result* update = &possible_updates.list[i]; | 742 const UpdateManifest::Result* update = &possible_updates.list[i]; |
| 744 | 743 |
| 745 if (!fetch_data.Includes(update->extension_id)) | 744 if (!fetch_data.Includes(update->extension_id)) |
| 746 continue; | 745 continue; |
| 747 | 746 |
| 748 std::string version; | 747 if (service_->pending_extensions().find(update->extension_id) == |
| 749 if (!GetExistingVersion(update->extension_id, &version)) | 748 service_->pending_extensions().end()) { |
| 750 continue; | 749 // If we're not installing pending extension, and the update |
| 750 // version is the same or older than what's already installed, |
| 751 // we don't want it. |
| 752 std::string version; |
| 753 if (!GetExistingVersion(update->extension_id, &version)) |
| 754 continue; |
| 751 | 755 |
| 752 // If the update version is the same or older than what's already installed, | 756 scoped_ptr<Version> existing_version( |
| 753 // we don't want it. | 757 Version::GetVersionFromString(version)); |
| 754 scoped_ptr<Version> existing_version( | 758 scoped_ptr<Version> update_version( |
| 755 Version::GetVersionFromString(version)); | 759 Version::GetVersionFromString(update->version)); |
| 756 scoped_ptr<Version> update_version( | |
| 757 Version::GetVersionFromString(update->version)); | |
| 758 | 760 |
| 759 if (!update_version.get() || | 761 if (!update_version.get() || |
| 760 update_version->CompareTo(*(existing_version.get())) <= 0) { | 762 update_version->CompareTo(*(existing_version.get())) <= 0) { |
| 761 continue; | 763 continue; |
| 764 } |
| 762 } | 765 } |
| 763 | 766 |
| 764 // If the update specifies a browser minimum version, do we qualify? | 767 // If the update specifies a browser minimum version, do we qualify? |
| 765 if (update->browser_min_version.length() > 0) { | 768 if (update->browser_min_version.length() > 0) { |
| 766 // First determine the browser version if we haven't already. | 769 // First determine the browser version if we haven't already. |
| 767 if (!browser_version.get()) { | 770 if (!browser_version.get()) { |
| 768 scoped_ptr<FileVersionInfo> version_info( | 771 scoped_ptr<FileVersionInfo> version_info( |
| 769 chrome_app::GetChromeVersionInfo()); | 772 chrome_app::GetChromeVersionInfo()); |
| 770 if (version_info.get()) { | 773 if (version_info.get()) { |
| 771 browser_version.reset(Version::GetVersionFromString( | 774 browser_version.reset(Version::GetVersionFromString( |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 839 extension_fetcher_.reset( | 842 extension_fetcher_.reset( |
| 840 URLFetcher::Create(kExtensionFetcherId, url, URLFetcher::GET, this)); | 843 URLFetcher::Create(kExtensionFetcherId, url, URLFetcher::GET, this)); |
| 841 extension_fetcher_->set_request_context( | 844 extension_fetcher_->set_request_context( |
| 842 Profile::GetDefaultRequestContext()); | 845 Profile::GetDefaultRequestContext()); |
| 843 extension_fetcher_->set_load_flags(net::LOAD_DO_NOT_SEND_COOKIES | | 846 extension_fetcher_->set_load_flags(net::LOAD_DO_NOT_SEND_COOKIES | |
| 844 net::LOAD_DO_NOT_SAVE_COOKIES); | 847 net::LOAD_DO_NOT_SAVE_COOKIES); |
| 845 extension_fetcher_->Start(); | 848 extension_fetcher_->Start(); |
| 846 current_extension_fetch_ = ExtensionFetch(id, url, hash, version); | 849 current_extension_fetch_ = ExtensionFetch(id, url, hash, version); |
| 847 } | 850 } |
| 848 } | 851 } |
| OLD | NEW |