| 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/declarative_webrequest/webrequest_condit
ion_attribute.h" | 5 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_condit
ion_attribute.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/string_util.h" | 10 #include "base/string_util.h" |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 145 new WebRequestConditionAttributeResourceType(passed_types)); | 145 new WebRequestConditionAttributeResourceType(passed_types)); |
| 146 } | 146 } |
| 147 | 147 |
| 148 int WebRequestConditionAttributeResourceType::GetStages() const { | 148 int WebRequestConditionAttributeResourceType::GetStages() const { |
| 149 return ON_BEFORE_REQUEST | ON_BEFORE_SEND_HEADERS | ON_SEND_HEADERS | | 149 return ON_BEFORE_REQUEST | ON_BEFORE_SEND_HEADERS | ON_SEND_HEADERS | |
| 150 ON_HEADERS_RECEIVED | ON_AUTH_REQUIRED | ON_BEFORE_REDIRECT | | 150 ON_HEADERS_RECEIVED | ON_AUTH_REQUIRED | ON_BEFORE_REDIRECT | |
| 151 ON_RESPONSE_STARTED | ON_COMPLETED | ON_ERROR; | 151 ON_RESPONSE_STARTED | ON_COMPLETED | ON_ERROR; |
| 152 } | 152 } |
| 153 | 153 |
| 154 bool WebRequestConditionAttributeResourceType::IsFulfilled( | 154 bool WebRequestConditionAttributeResourceType::IsFulfilled( |
| 155 const DeclarativeWebRequestData& request_data) const { | 155 const WebRequestData& request_data) const { |
| 156 if (!(request_data.stage & GetStages())) | 156 if (!(request_data.stage & GetStages())) |
| 157 return false; | 157 return false; |
| 158 const content::ResourceRequestInfo* info = | 158 const content::ResourceRequestInfo* info = |
| 159 content::ResourceRequestInfo::ForRequest(request_data.request); | 159 content::ResourceRequestInfo::ForRequest(request_data.request); |
| 160 if (!info) | 160 if (!info) |
| 161 return false; | 161 return false; |
| 162 return std::find(types_.begin(), types_.end(), info->GetResourceType()) != | 162 return std::find(types_.begin(), types_.end(), info->GetResourceType()) != |
| 163 types_.end(); | 163 types_.end(); |
| 164 } | 164 } |
| 165 | 165 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 216 return scoped_ptr<WebRequestConditionAttribute>( | 216 return scoped_ptr<WebRequestConditionAttribute>( |
| 217 new WebRequestConditionAttributeContentType( | 217 new WebRequestConditionAttributeContentType( |
| 218 content_types, name == keys::kContentTypeKey)); | 218 content_types, name == keys::kContentTypeKey)); |
| 219 } | 219 } |
| 220 | 220 |
| 221 int WebRequestConditionAttributeContentType::GetStages() const { | 221 int WebRequestConditionAttributeContentType::GetStages() const { |
| 222 return ON_HEADERS_RECEIVED; | 222 return ON_HEADERS_RECEIVED; |
| 223 } | 223 } |
| 224 | 224 |
| 225 bool WebRequestConditionAttributeContentType::IsFulfilled( | 225 bool WebRequestConditionAttributeContentType::IsFulfilled( |
| 226 const DeclarativeWebRequestData& request_data) const { | 226 const WebRequestData& request_data) const { |
| 227 if (!(request_data.stage & GetStages())) | 227 if (!(request_data.stage & GetStages())) |
| 228 return false; | 228 return false; |
| 229 std::string content_type; | 229 std::string content_type; |
| 230 request_data.original_response_headers->GetNormalizedHeader( | 230 request_data.original_response_headers->GetNormalizedHeader( |
| 231 net::HttpRequestHeaders::kContentType, &content_type); | 231 net::HttpRequestHeaders::kContentType, &content_type); |
| 232 std::string mime_type; | 232 std::string mime_type; |
| 233 std::string charset; | 233 std::string charset; |
| 234 bool had_charset = false; | 234 bool had_charset = false; |
| 235 net::HttpUtil::ParseContentType( | 235 net::HttpUtil::ParseContentType( |
| 236 content_type, &mime_type, &charset, &had_charset, NULL); | 236 content_type, &mime_type, &charset, &had_charset, NULL); |
| (...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 561 | 561 |
| 562 int WebRequestConditionAttributeRequestHeaders::GetStages() const { | 562 int WebRequestConditionAttributeRequestHeaders::GetStages() const { |
| 563 // Currently we only allow matching against headers in the before-send-headers | 563 // Currently we only allow matching against headers in the before-send-headers |
| 564 // stage. The headers are accessible in other stages as well, but before | 564 // stage. The headers are accessible in other stages as well, but before |
| 565 // allowing to match against them in further stages, we should consider | 565 // allowing to match against them in further stages, we should consider |
| 566 // caching the match result. | 566 // caching the match result. |
| 567 return ON_BEFORE_SEND_HEADERS; | 567 return ON_BEFORE_SEND_HEADERS; |
| 568 } | 568 } |
| 569 | 569 |
| 570 bool WebRequestConditionAttributeRequestHeaders::IsFulfilled( | 570 bool WebRequestConditionAttributeRequestHeaders::IsFulfilled( |
| 571 const DeclarativeWebRequestData& request_data) const { | 571 const WebRequestData& request_data) const { |
| 572 if (!(request_data.stage & GetStages())) | 572 if (!(request_data.stage & GetStages())) |
| 573 return false; | 573 return false; |
| 574 | 574 |
| 575 const net::HttpRequestHeaders& headers = | 575 const net::HttpRequestHeaders& headers = |
| 576 request_data.request->extra_request_headers(); | 576 request_data.request->extra_request_headers(); |
| 577 | 577 |
| 578 bool passed = false; // Did some header pass TestNameValue? | 578 bool passed = false; // Did some header pass TestNameValue? |
| 579 net::HttpRequestHeaders::Iterator it(headers); | 579 net::HttpRequestHeaders::Iterator it(headers); |
| 580 while (!passed && it.GetNext()) | 580 while (!passed && it.GetNext()) |
| 581 passed |= header_matcher_->TestNameValue(it.name(), it.value()); | 581 passed |= header_matcher_->TestNameValue(it.name(), it.value()); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 625 return scoped_ptr<WebRequestConditionAttribute>( | 625 return scoped_ptr<WebRequestConditionAttribute>( |
| 626 new WebRequestConditionAttributeResponseHeaders( | 626 new WebRequestConditionAttributeResponseHeaders( |
| 627 header_matcher.Pass(), name == keys::kResponseHeadersKey)); | 627 header_matcher.Pass(), name == keys::kResponseHeadersKey)); |
| 628 } | 628 } |
| 629 | 629 |
| 630 int WebRequestConditionAttributeResponseHeaders::GetStages() const { | 630 int WebRequestConditionAttributeResponseHeaders::GetStages() const { |
| 631 return ON_HEADERS_RECEIVED; | 631 return ON_HEADERS_RECEIVED; |
| 632 } | 632 } |
| 633 | 633 |
| 634 bool WebRequestConditionAttributeResponseHeaders::IsFulfilled( | 634 bool WebRequestConditionAttributeResponseHeaders::IsFulfilled( |
| 635 const DeclarativeWebRequestData& request_data) const { | 635 const WebRequestData& request_data) const { |
| 636 if (!(request_data.stage & GetStages())) | 636 if (!(request_data.stage & GetStages())) |
| 637 return false; | 637 return false; |
| 638 | 638 |
| 639 const net::HttpResponseHeaders* headers = | 639 const net::HttpResponseHeaders* headers = |
| 640 request_data.original_response_headers; | 640 request_data.original_response_headers; |
| 641 if (headers == NULL) { | 641 if (headers == NULL) { |
| 642 // Each header of an empty set satisfies (the negation of) everything; | 642 // Each header of an empty set satisfies (the negation of) everything; |
| 643 // OTOH, there is no header to satisfy even the most permissive test. | 643 // OTOH, there is no header to satisfy even the most permissive test. |
| 644 return !positive_; | 644 return !positive_; |
| 645 } | 645 } |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 696 new WebRequestConditionAttributeThirdParty(third_party)); | 696 new WebRequestConditionAttributeThirdParty(third_party)); |
| 697 } | 697 } |
| 698 | 698 |
| 699 int WebRequestConditionAttributeThirdParty::GetStages() const { | 699 int WebRequestConditionAttributeThirdParty::GetStages() const { |
| 700 return ON_BEFORE_REQUEST | ON_BEFORE_SEND_HEADERS | ON_SEND_HEADERS | | 700 return ON_BEFORE_REQUEST | ON_BEFORE_SEND_HEADERS | ON_SEND_HEADERS | |
| 701 ON_HEADERS_RECEIVED | ON_AUTH_REQUIRED | ON_BEFORE_REDIRECT | | 701 ON_HEADERS_RECEIVED | ON_AUTH_REQUIRED | ON_BEFORE_REDIRECT | |
| 702 ON_RESPONSE_STARTED | ON_COMPLETED | ON_ERROR; | 702 ON_RESPONSE_STARTED | ON_COMPLETED | ON_ERROR; |
| 703 } | 703 } |
| 704 | 704 |
| 705 bool WebRequestConditionAttributeThirdParty::IsFulfilled( | 705 bool WebRequestConditionAttributeThirdParty::IsFulfilled( |
| 706 const DeclarativeWebRequestData& request_data) const { | 706 const WebRequestData& request_data) const { |
| 707 if (!(request_data.stage & GetStages())) | 707 if (!(request_data.stage & GetStages())) |
| 708 return false; | 708 return false; |
| 709 | 709 |
| 710 // Request is "1st party" if it gets cookies under 3rd party-blocking policy. | 710 // Request is "1st party" if it gets cookies under 3rd party-blocking policy. |
| 711 const net::StaticCookiePolicy block_third_party_policy( | 711 const net::StaticCookiePolicy block_third_party_policy( |
| 712 net::StaticCookiePolicy::BLOCK_ALL_THIRD_PARTY_COOKIES); | 712 net::StaticCookiePolicy::BLOCK_ALL_THIRD_PARTY_COOKIES); |
| 713 const int can_get_cookies = block_third_party_policy.CanGetCookies( | 713 const int can_get_cookies = block_third_party_policy.CanGetCookies( |
| 714 request_data.request->url(), | 714 request_data.request->url(), |
| 715 request_data.request->first_party_for_cookies()); | 715 request_data.request->first_party_for_cookies()); |
| 716 const bool is_first_party = (can_get_cookies == net::OK); | 716 const bool is_first_party = (can_get_cookies == net::OK); |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 791 | 791 |
| 792 return scoped_ptr<WebRequestConditionAttribute>( | 792 return scoped_ptr<WebRequestConditionAttribute>( |
| 793 new WebRequestConditionAttributeStages(allowed_stages)); | 793 new WebRequestConditionAttributeStages(allowed_stages)); |
| 794 } | 794 } |
| 795 | 795 |
| 796 int WebRequestConditionAttributeStages::GetStages() const { | 796 int WebRequestConditionAttributeStages::GetStages() const { |
| 797 return allowed_stages_; | 797 return allowed_stages_; |
| 798 } | 798 } |
| 799 | 799 |
| 800 bool WebRequestConditionAttributeStages::IsFulfilled( | 800 bool WebRequestConditionAttributeStages::IsFulfilled( |
| 801 const DeclarativeWebRequestData& request_data) const { | 801 const WebRequestData& request_data) const { |
| 802 // Note: removing '!=' triggers warning C4800 on the VS compiler. | 802 // Note: removing '!=' triggers warning C4800 on the VS compiler. |
| 803 return (request_data.stage & GetStages()) != 0; | 803 return (request_data.stage & GetStages()) != 0; |
| 804 } | 804 } |
| 805 | 805 |
| 806 WebRequestConditionAttribute::Type | 806 WebRequestConditionAttribute::Type |
| 807 WebRequestConditionAttributeStages::GetType() const { | 807 WebRequestConditionAttributeStages::GetType() const { |
| 808 return CONDITION_STAGES; | 808 return CONDITION_STAGES; |
| 809 } | 809 } |
| 810 | 810 |
| 811 } // namespace extensions | 811 } // namespace extensions |
| OLD | NEW |