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 <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
272 | 272 |
273 void ExtensionDownloader::StartBlacklistUpdate( | 273 void ExtensionDownloader::StartBlacklistUpdate( |
274 const std::string& version, | 274 const std::string& version, |
275 const ManifestFetchData::PingData& ping_data, | 275 const ManifestFetchData::PingData& ping_data, |
276 int request_id) { | 276 int request_id) { |
277 // Note: it is very important that we use the https version of the update | 277 // Note: it is very important that we use the https version of the update |
278 // url here to avoid DNS hijacking of the blacklist, which is not validated | 278 // url here to avoid DNS hijacking of the blacklist, which is not validated |
279 // by a public key signature like .crx files are. | 279 // by a public key signature like .crx files are. |
280 scoped_ptr<ManifestFetchData> blacklist_fetch(CreateManifestFetchData( | 280 scoped_ptr<ManifestFetchData> blacklist_fetch(CreateManifestFetchData( |
281 extension_urls::GetWebstoreUpdateUrl(), request_id)); | 281 extension_urls::GetWebstoreUpdateUrl(), request_id)); |
282 DCHECK(blacklist_fetch->base_url().SchemeIsSecure()); | 282 DCHECK(blacklist_fetch->base_url().SchemeIsCryptographic()); |
283 blacklist_fetch->AddExtension(kBlacklistAppID, | 283 blacklist_fetch->AddExtension(kBlacklistAppID, |
284 version, | 284 version, |
285 &ping_data, | 285 &ping_data, |
286 std::string(), | 286 std::string(), |
287 kDefaultInstallSource, | 287 kDefaultInstallSource, |
288 false); | 288 false); |
289 StartUpdateCheck(blacklist_fetch.Pass()); | 289 StartUpdateCheck(blacklist_fetch.Pass()); |
290 } | 290 } |
291 | 291 |
292 void ExtensionDownloader::SetWebstoreIdentityProvider( | 292 void ExtensionDownloader::SetWebstoreIdentityProvider( |
(...skipping 13 matching lines...) Expand all Loading... |
306 GURL update_url(extension_update_url); | 306 GURL update_url(extension_update_url); |
307 // Skip extensions with non-empty invalid update URLs. | 307 // Skip extensions with non-empty invalid update URLs. |
308 if (!update_url.is_empty() && !update_url.is_valid()) { | 308 if (!update_url.is_empty() && !update_url.is_valid()) { |
309 LOG(WARNING) << "Extension " << id << " has invalid update url " | 309 LOG(WARNING) << "Extension " << id << " has invalid update url " |
310 << update_url; | 310 << update_url; |
311 return false; | 311 return false; |
312 } | 312 } |
313 | 313 |
314 // Make sure we use SSL for store-hosted extensions. | 314 // Make sure we use SSL for store-hosted extensions. |
315 if (extension_urls::IsWebstoreUpdateUrl(update_url) && | 315 if (extension_urls::IsWebstoreUpdateUrl(update_url) && |
316 !update_url.SchemeIsSecure()) | 316 !update_url.SchemeIsCryptographic()) |
317 update_url = extension_urls::GetWebstoreUpdateUrl(); | 317 update_url = extension_urls::GetWebstoreUpdateUrl(); |
318 | 318 |
319 // Skip extensions with empty IDs. | 319 // Skip extensions with empty IDs. |
320 if (id.empty()) { | 320 if (id.empty()) { |
321 LOG(WARNING) << "Found extension with empty ID"; | 321 LOG(WARNING) << "Found extension with empty ID"; |
322 return false; | 322 return false; |
323 } | 323 } |
324 | 324 |
325 if (update_url.DomainIs(kGoogleDotCom)) { | 325 if (update_url.DomainIs(kGoogleDotCom)) { |
326 url_stats_.google_url_count++; | 326 url_stats_.google_url_count++; |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
582 GURL crx_url = update->crx_url; | 582 GURL crx_url = update->crx_url; |
583 if (id != kBlacklistAppID) { | 583 if (id != kBlacklistAppID) { |
584 NotifyUpdateFound(update->extension_id, update->version); | 584 NotifyUpdateFound(update->extension_id, update->version); |
585 } else { | 585 } else { |
586 // The URL of the blacklist file is returned by the server and we need to | 586 // The URL of the blacklist file is returned by the server and we need to |
587 // be sure that we continue to be able to reliably detect whether a URL | 587 // be sure that we continue to be able to reliably detect whether a URL |
588 // references a blacklist file. | 588 // references a blacklist file. |
589 DCHECK(extension_urls::IsBlacklistUpdateUrl(crx_url)) << crx_url; | 589 DCHECK(extension_urls::IsBlacklistUpdateUrl(crx_url)) << crx_url; |
590 | 590 |
591 // Force https (crbug.com/129587). | 591 // Force https (crbug.com/129587). |
592 if (!crx_url.SchemeIsSecure()) { | 592 if (!crx_url.SchemeIsCryptographic()) { |
593 url::Replacements<char> replacements; | 593 url::Replacements<char> replacements; |
594 std::string scheme("https"); | 594 std::string scheme("https"); |
595 replacements.SetScheme(scheme.c_str(), | 595 replacements.SetScheme(scheme.c_str(), |
596 url::Component(0, scheme.size())); | 596 url::Component(0, scheme.size())); |
597 crx_url = crx_url.ReplaceComponents(replacements); | 597 crx_url = crx_url.ReplaceComponents(replacements); |
598 } | 598 } |
599 } | 599 } |
600 scoped_ptr<ExtensionFetch> fetch( | 600 scoped_ptr<ExtensionFetch> fetch( |
601 new ExtensionFetch(update->extension_id, crx_url, update->package_hash, | 601 new ExtensionFetch(update->extension_id, crx_url, update->package_hash, |
602 update->version, fetch_data->request_ids())); | 602 update->version, fetch_data->request_ids())); |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
759 } | 759 } |
760 | 760 |
761 void ExtensionDownloader::CreateExtensionFetcher() { | 761 void ExtensionDownloader::CreateExtensionFetcher() { |
762 const ExtensionFetch* fetch = extensions_queue_.active_request(); | 762 const ExtensionFetch* fetch = extensions_queue_.active_request(); |
763 extension_fetcher_ = net::URLFetcher::Create(kExtensionFetcherId, fetch->url, | 763 extension_fetcher_ = net::URLFetcher::Create(kExtensionFetcherId, fetch->url, |
764 net::URLFetcher::GET, this); | 764 net::URLFetcher::GET, this); |
765 extension_fetcher_->SetRequestContext(request_context_.get()); | 765 extension_fetcher_->SetRequestContext(request_context_.get()); |
766 extension_fetcher_->SetAutomaticallyRetryOnNetworkChanges(3); | 766 extension_fetcher_->SetAutomaticallyRetryOnNetworkChanges(3); |
767 | 767 |
768 int load_flags = net::LOAD_DISABLE_CACHE; | 768 int load_flags = net::LOAD_DISABLE_CACHE; |
769 bool is_secure = fetch->url.SchemeIsSecure(); | 769 bool is_secure = fetch->url.SchemeIsCryptographic(); |
770 if (fetch->credentials != ExtensionFetch::CREDENTIALS_COOKIES || !is_secure) { | 770 if (fetch->credentials != ExtensionFetch::CREDENTIALS_COOKIES || !is_secure) { |
771 load_flags |= net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES; | 771 load_flags |= net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES; |
772 } | 772 } |
773 extension_fetcher_->SetLoadFlags(load_flags); | 773 extension_fetcher_->SetLoadFlags(load_flags); |
774 | 774 |
775 // Download CRX files to a temp file. The blacklist is small and will be | 775 // Download CRX files to a temp file. The blacklist is small and will be |
776 // processed in memory, so it is fetched into a string. | 776 // processed in memory, so it is fetched into a string. |
777 if (fetch->id != kBlacklistAppID) { | 777 if (fetch->id != kBlacklistAppID) { |
778 extension_fetcher_->SaveResponseToTemporaryFile( | 778 extension_fetcher_->SaveResponseToTemporaryFile( |
779 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE)); | 779 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE)); |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
968 const GURL& update_url, | 968 const GURL& update_url, |
969 int request_id) { | 969 int request_id) { |
970 ManifestFetchData::PingMode ping_mode = ManifestFetchData::NO_PING; | 970 ManifestFetchData::PingMode ping_mode = ManifestFetchData::NO_PING; |
971 if (update_url.DomainIs(ping_enabled_domain_.c_str())) | 971 if (update_url.DomainIs(ping_enabled_domain_.c_str())) |
972 ping_mode = ManifestFetchData::PING_WITH_ENABLED_STATE; | 972 ping_mode = ManifestFetchData::PING_WITH_ENABLED_STATE; |
973 return new ManifestFetchData( | 973 return new ManifestFetchData( |
974 update_url, request_id, brand_code_, manifest_query_params_, ping_mode); | 974 update_url, request_id, brand_code_, manifest_query_params_, ping_mode); |
975 } | 975 } |
976 | 976 |
977 } // namespace extensions | 977 } // namespace extensions |
OLD | NEW |