| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "extensions/browser/updater/extension_downloader.h" | 5 #include "extensions/browser/updater/extension_downloader.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 119 | 119 |
| 120 // This parses and updates a URL query such that the value of the |authuser| | 120 // This parses and updates a URL query such that the value of the |authuser| |
| 121 // query parameter is incremented by 1. If parameter was not present in the URL, | 121 // query parameter is incremented by 1. If parameter was not present in the URL, |
| 122 // it will be added with a value of 1. All other query keys and values are | 122 // it will be added with a value of 1. All other query keys and values are |
| 123 // preserved as-is. Returns |false| if the user index exceeds a hard-coded | 123 // preserved as-is. Returns |false| if the user index exceeds a hard-coded |
| 124 // maximum. | 124 // maximum. |
| 125 bool IncrementAuthUserIndex(GURL* url) { | 125 bool IncrementAuthUserIndex(GURL* url) { |
| 126 int user_index = 0; | 126 int user_index = 0; |
| 127 std::string old_query = url->query(); | 127 std::string old_query = url->query(); |
| 128 std::vector<std::string> new_query_parts; | 128 std::vector<std::string> new_query_parts; |
| 129 url::Component query(0, old_query.length()); | 129 url::Component query(0, static_cast<int>(old_query.length())); |
| 130 url::Component key, value; | 130 url::Component key, value; |
| 131 while (url::ExtractQueryKeyValue(old_query.c_str(), &query, &key, &value)) { | 131 while (url::ExtractQueryKeyValue(old_query.c_str(), &query, &key, &value)) { |
| 132 std::string key_string = old_query.substr(key.begin, key.len); | 132 std::string key_string = old_query.substr(key.begin, key.len); |
| 133 std::string value_string = old_query.substr(value.begin, value.len); | 133 std::string value_string = old_query.substr(value.begin, value.len); |
| 134 if (key_string == kAuthUserQueryKey) { | 134 if (key_string == kAuthUserQueryKey) { |
| 135 base::StringToInt(value_string, &user_index); | 135 base::StringToInt(value_string, &user_index); |
| 136 } else { | 136 } else { |
| 137 new_query_parts.push_back(base::StringPrintf( | 137 new_query_parts.push_back(base::StringPrintf( |
| 138 "%s=%s", key_string.c_str(), value_string.c_str())); | 138 "%s=%s", key_string.c_str(), value_string.c_str())); |
| 139 } | 139 } |
| 140 } | 140 } |
| 141 if (user_index >= kMaxAuthUserValue) | 141 if (user_index >= kMaxAuthUserValue) |
| 142 return false; | 142 return false; |
| 143 new_query_parts.push_back( | 143 new_query_parts.push_back( |
| 144 base::StringPrintf("%s=%d", kAuthUserQueryKey, user_index + 1)); | 144 base::StringPrintf("%s=%d", kAuthUserQueryKey, user_index + 1)); |
| 145 std::string new_query_string = base::JoinString(new_query_parts, "&"); | 145 std::string new_query_string = base::JoinString(new_query_parts, "&"); |
| 146 url::Component new_query(0, new_query_string.size()); | 146 url::Component new_query(0, static_cast<int>(new_query_string.size())); |
| 147 url::Replacements<char> replacements; | 147 url::Replacements<char> replacements; |
| 148 replacements.SetQuery(new_query_string.c_str(), new_query); | 148 replacements.SetQuery(new_query_string.c_str(), new_query); |
| 149 *url = url->ReplaceComponents(replacements); | 149 *url = url->ReplaceComponents(replacements); |
| 150 return true; | 150 return true; |
| 151 } | 151 } |
| 152 | 152 |
| 153 } // namespace | 153 } // namespace |
| 154 | 154 |
| 155 UpdateDetails::UpdateDetails(const std::string& id, | 155 UpdateDetails::UpdateDetails(const std::string& id, |
| 156 const base::Version& version) | 156 const base::Version& version) |
| (...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 436 return; | 436 return; |
| 437 } | 437 } |
| 438 } | 438 } |
| 439 | 439 |
| 440 if (manifests_queue_.active_request() && | 440 if (manifests_queue_.active_request() && |
| 441 manifests_queue_.active_request()->full_url() == fetch_data->full_url()) { | 441 manifests_queue_.active_request()->full_url() == fetch_data->full_url()) { |
| 442 manifests_queue_.active_request()->Merge(*fetch_data); | 442 manifests_queue_.active_request()->Merge(*fetch_data); |
| 443 } else { | 443 } else { |
| 444 UMA_HISTOGRAM_COUNTS( | 444 UMA_HISTOGRAM_COUNTS( |
| 445 "Extensions.UpdateCheckUrlLength", | 445 "Extensions.UpdateCheckUrlLength", |
| 446 fetch_data->full_url().possibly_invalid_spec().length()); | 446 static_cast<int>( |
| 447 fetch_data->full_url().possibly_invalid_spec().length())); |
| 447 | 448 |
| 448 manifests_queue_.ScheduleRequest(std::move(fetch_data)); | 449 manifests_queue_.ScheduleRequest(std::move(fetch_data)); |
| 449 } | 450 } |
| 450 } | 451 } |
| 451 | 452 |
| 452 void ExtensionDownloader::CreateManifestFetcher() { | 453 void ExtensionDownloader::CreateManifestFetcher() { |
| 453 if (VLOG_IS_ON(2)) { | 454 if (VLOG_IS_ON(2)) { |
| 454 std::vector<std::string> id_vector( | 455 std::vector<std::string> id_vector( |
| 455 manifests_queue_.active_request()->extension_ids().begin(), | 456 manifests_queue_.active_request()->extension_ids().begin(), |
| 456 manifests_queue_.active_request()->extension_ids().end()); | 457 manifests_queue_.active_request()->extension_ids().end()); |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 571 } else { | 572 } else { |
| 572 // The URL of the blacklist file is returned by the server and we need to | 573 // The URL of the blacklist file is returned by the server and we need to |
| 573 // be sure that we continue to be able to reliably detect whether a URL | 574 // be sure that we continue to be able to reliably detect whether a URL |
| 574 // references a blacklist file. | 575 // references a blacklist file. |
| 575 DCHECK(extension_urls::IsBlacklistUpdateUrl(crx_url)) << crx_url; | 576 DCHECK(extension_urls::IsBlacklistUpdateUrl(crx_url)) << crx_url; |
| 576 | 577 |
| 577 // Force https (crbug.com/129587). | 578 // Force https (crbug.com/129587). |
| 578 if (!crx_url.SchemeIsCryptographic()) { | 579 if (!crx_url.SchemeIsCryptographic()) { |
| 579 url::Replacements<char> replacements; | 580 url::Replacements<char> replacements; |
| 580 std::string scheme("https"); | 581 std::string scheme("https"); |
| 581 replacements.SetScheme(scheme.c_str(), | 582 replacements.SetScheme( |
| 582 url::Component(0, scheme.size())); | 583 scheme.c_str(), url::Component(0, static_cast<int>(scheme.size()))); |
| 583 crx_url = crx_url.ReplaceComponents(replacements); | 584 crx_url = crx_url.ReplaceComponents(replacements); |
| 584 } | 585 } |
| 585 } | 586 } |
| 586 std::unique_ptr<ExtensionFetch> fetch( | 587 std::unique_ptr<ExtensionFetch> fetch( |
| 587 new ExtensionFetch(update->extension_id, crx_url, update->package_hash, | 588 new ExtensionFetch(update->extension_id, crx_url, update->package_hash, |
| 588 update->version, fetch_data->request_ids())); | 589 update->version, fetch_data->request_ids())); |
| 589 FetchUpdatedExtension(std::move(fetch)); | 590 FetchUpdatedExtension(std::move(fetch)); |
| 590 } | 591 } |
| 591 | 592 |
| 592 // If the manifest response included a <daystart> element, we want to save | 593 // If the manifest response included a <daystart> element, we want to save |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 657 !ExtensionsBrowserClient::Get()->IsMinBrowserVersionSupported( | 658 !ExtensionsBrowserClient::Get()->IsMinBrowserVersionSupported( |
| 658 update->browser_min_version)) { | 659 update->browser_min_version)) { |
| 659 // TODO(asargent) - We may want this to show up in the extensions UI | 660 // TODO(asargent) - We may want this to show up in the extensions UI |
| 660 // eventually. (http://crbug.com/12547). | 661 // eventually. (http://crbug.com/12547). |
| 661 DLOG(WARNING) << "Updated version of extension " << id | 662 DLOG(WARNING) << "Updated version of extension " << id |
| 662 << " available, but requires chrome version " | 663 << " available, but requires chrome version " |
| 663 << update->browser_min_version; | 664 << update->browser_min_version; |
| 664 continue; | 665 continue; |
| 665 } | 666 } |
| 666 VLOG(2) << "will try to update " << id; | 667 VLOG(2) << "will try to update " << id; |
| 667 result->push_back(i); | 668 result->push_back(static_cast<int>(i)); |
| 668 } | 669 } |
| 669 } | 670 } |
| 670 | 671 |
| 671 // Begins (or queues up) download of an updated extension. | 672 // Begins (or queues up) download of an updated extension. |
| 672 void ExtensionDownloader::FetchUpdatedExtension( | 673 void ExtensionDownloader::FetchUpdatedExtension( |
| 673 std::unique_ptr<ExtensionFetch> fetch_data) { | 674 std::unique_ptr<ExtensionFetch> fetch_data) { |
| 674 if (!fetch_data->url.is_valid()) { | 675 if (!fetch_data->url.is_valid()) { |
| 675 // TODO(asargent): This can sometimes be invalid. See crbug.com/130881. | 676 // TODO(asargent): This can sometimes be invalid. See crbug.com/130881. |
| 676 DLOG(WARNING) << "Invalid URL: '" << fetch_data->url.possibly_invalid_spec() | 677 DLOG(WARNING) << "Invalid URL: '" << fetch_data->url.possibly_invalid_spec() |
| 677 << "' for extension " << fetch_data->id; | 678 << "' for extension " << fetch_data->id; |
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 952 const GURL& update_url, | 953 const GURL& update_url, |
| 953 int request_id) { | 954 int request_id) { |
| 954 ManifestFetchData::PingMode ping_mode = ManifestFetchData::NO_PING; | 955 ManifestFetchData::PingMode ping_mode = ManifestFetchData::NO_PING; |
| 955 if (update_url.DomainIs(ping_enabled_domain_.c_str())) | 956 if (update_url.DomainIs(ping_enabled_domain_.c_str())) |
| 956 ping_mode = ManifestFetchData::PING_WITH_ENABLED_STATE; | 957 ping_mode = ManifestFetchData::PING_WITH_ENABLED_STATE; |
| 957 return new ManifestFetchData( | 958 return new ManifestFetchData( |
| 958 update_url, request_id, brand_code_, manifest_query_params_, ping_mode); | 959 update_url, request_id, brand_code_, manifest_query_params_, ping_mode); |
| 959 } | 960 } |
| 960 | 961 |
| 961 } // namespace extensions | 962 } // namespace extensions |
| OLD | NEW |