| 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 "chrome/browser/extensions/api/web_request/web_request_api_helpers.h" | 5 #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/string_util.h" | 8 #include "base/string_util.h" |
| 9 #include "base/stringprintf.h" | 9 #include "base/stringprintf.h" |
| 10 #include "base/values.h" | 10 #include "base/values.h" |
| (...skipping 519 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 530 net_log->AddEvent( | 530 net_log->AddEvent( |
| 531 net::NetLog::TYPE_CHROME_EXTENSION_PROVIDE_AUTH_CREDENTIALS, | 531 net::NetLog::TYPE_CHROME_EXTENSION_PROVIDE_AUTH_CREDENTIALS, |
| 532 CreateNetLogExtensionIdCallback(delta->get())); | 532 CreateNetLogExtensionIdCallback(delta->get())); |
| 533 *auth_credentials = *(*delta)->auth_credentials; | 533 *auth_credentials = *(*delta)->auth_credentials; |
| 534 credentials_set = true; | 534 credentials_set = true; |
| 535 } | 535 } |
| 536 } | 536 } |
| 537 return credentials_set; | 537 return credentials_set; |
| 538 } | 538 } |
| 539 | 539 |
| 540 namespace { | |
| 541 | |
| 542 // Returns true if the URL is sensitive and requests to this URL must not be | |
| 543 // modified/canceled by extensions, e.g. because it is targeted to the webstore | |
| 544 // to check for updates, extension blacklisting, etc. | |
| 545 bool IsSensitiveURL(const GURL& url) { | |
| 546 // TODO(battre) Merge this, CanExtensionAccessURL of web_request_api.cc and | |
| 547 // Extension::CanExecuteScriptOnPage into one function. | |
| 548 bool is_webstore_gallery_url = | |
| 549 StartsWithASCII(url.spec(), extension_urls::kGalleryBrowsePrefix, true); | |
| 550 bool sensitive_chrome_url = false; | |
| 551 if (EndsWith(url.host(), "google.com", true)) { | |
| 552 sensitive_chrome_url |= (url.host() == "www.google.com") && | |
| 553 StartsWithASCII(url.path(), "/chrome", true); | |
| 554 sensitive_chrome_url |= (url.host() == "chrome.google.com"); | |
| 555 if (StartsWithASCII(url.host(), "client", true)) { | |
| 556 for (int i = 0; i < 10; ++i) { | |
| 557 sensitive_chrome_url |= | |
| 558 (StringPrintf("client%d.google.com", i) == url.host()); | |
| 559 } | |
| 560 } | |
| 561 } | |
| 562 GURL::Replacements replacements; | |
| 563 replacements.ClearQuery(); | |
| 564 replacements.ClearRef(); | |
| 565 GURL url_without_query = url.ReplaceComponents(replacements); | |
| 566 return is_webstore_gallery_url || sensitive_chrome_url || | |
| 567 extension_urls::IsWebstoreUpdateUrl(url_without_query) || | |
| 568 extension_urls::IsBlacklistUpdateUrl(url); | |
| 569 } | |
| 570 | |
| 571 // Returns true if the scheme is one we want to allow extensions to have access | |
| 572 // to. Extensions still need specific permissions for a given URL, which is | |
| 573 // covered by CanExtensionAccessURL. | |
| 574 bool HasWebRequestScheme(const GURL& url) { | |
| 575 return (url.SchemeIs(chrome::kAboutScheme) || | |
| 576 url.SchemeIs(chrome::kFileScheme) || | |
| 577 url.SchemeIs(chrome::kFileSystemScheme) || | |
| 578 url.SchemeIs(chrome::kFtpScheme) || | |
| 579 url.SchemeIs(chrome::kHttpScheme) || | |
| 580 url.SchemeIs(chrome::kHttpsScheme) || | |
| 581 url.SchemeIs(chrome::kExtensionScheme)); | |
| 582 } | |
| 583 | |
| 584 } // namespace | |
| 585 | |
| 586 bool HideRequest(const net::URLRequest* request) { | |
| 587 const GURL& url = request->url(); | |
| 588 const GURL& first_party_url = request->first_party_for_cookies(); | |
| 589 bool hide = false; | |
| 590 if (first_party_url.is_valid()) { | |
| 591 hide = IsSensitiveURL(first_party_url) || | |
| 592 !HasWebRequestScheme(first_party_url); | |
| 593 } | |
| 594 if (!hide) | |
| 595 hide = IsSensitiveURL(url) || !HasWebRequestScheme(url); | |
| 596 return hide; | |
| 597 } | |
| 598 | 540 |
| 599 #define ARRAYEND(array) (array + arraysize(array)) | 541 #define ARRAYEND(array) (array + arraysize(array)) |
| 600 | 542 |
| 601 bool IsRelevantResourceType(ResourceType::Type type) { | 543 bool IsRelevantResourceType(ResourceType::Type type) { |
| 602 ResourceType::Type* iter = | 544 ResourceType::Type* iter = |
| 603 std::find(kResourceTypeValues, ARRAYEND(kResourceTypeValues), type); | 545 std::find(kResourceTypeValues, ARRAYEND(kResourceTypeValues), type); |
| 604 return iter != ARRAYEND(kResourceTypeValues); | 546 return iter != ARRAYEND(kResourceTypeValues); |
| 605 } | 547 } |
| 606 | 548 |
| 607 const char* ResourceTypeToString(ResourceType::Type type) { | 549 const char* ResourceTypeToString(ResourceType::Type type) { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 625 | 567 |
| 626 bool CanExtensionAccessURL(const extensions::Extension* extension, | 568 bool CanExtensionAccessURL(const extensions::Extension* extension, |
| 627 const GURL& url) { | 569 const GURL& url) { |
| 628 // about: URLs are not covered in host permissions, but are allowed anyway. | 570 // about: URLs are not covered in host permissions, but are allowed anyway. |
| 629 return (url.SchemeIs(chrome::kAboutScheme) || | 571 return (url.SchemeIs(chrome::kAboutScheme) || |
| 630 extension->HasHostPermission(url) || | 572 extension->HasHostPermission(url) || |
| 631 url.GetOrigin() == extension->url()); | 573 url.GetOrigin() == extension->url()); |
| 632 } | 574 } |
| 633 | 575 |
| 634 } // namespace extension_web_request_api_helpers | 576 } // namespace extension_web_request_api_helpers |
| OLD | NEW |