| 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/api/declarative_webrequest/webrequest_condition_att
ribute.h" | 5 #include "extensions/browser/api/declarative_webrequest/webrequest_condition_att
ribute.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/lazy_instance.h" | 9 #include "base/lazy_instance.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 106 const WebRequestConditionAttribute* other) const { | 106 const WebRequestConditionAttribute* other) const { |
| 107 return GetType() == other->GetType(); | 107 return GetType() == other->GetType(); |
| 108 } | 108 } |
| 109 | 109 |
| 110 // static | 110 // static |
| 111 scoped_refptr<const WebRequestConditionAttribute> | 111 scoped_refptr<const WebRequestConditionAttribute> |
| 112 WebRequestConditionAttribute::Create( | 112 WebRequestConditionAttribute::Create( |
| 113 const std::string& name, | 113 const std::string& name, |
| 114 const base::Value* value, | 114 const base::Value* value, |
| 115 std::string* error) { | 115 std::string* error) { |
| 116 CHECK(value != NULL && error != NULL); | 116 CHECK(value != nullptr && error != nullptr); |
| 117 bool bad_message = false; | 117 bool bad_message = false; |
| 118 return g_web_request_condition_attribute_factory.Get().factory.Instantiate( | 118 return g_web_request_condition_attribute_factory.Get().factory.Instantiate( |
| 119 name, value, error, &bad_message); | 119 name, value, error, &bad_message); |
| 120 } | 120 } |
| 121 | 121 |
| 122 // | 122 // |
| 123 // WebRequestConditionAttributeResourceType | 123 // WebRequestConditionAttributeResourceType |
| 124 // | 124 // |
| 125 | 125 |
| 126 WebRequestConditionAttributeResourceType:: | 126 WebRequestConditionAttributeResourceType:: |
| 127 WebRequestConditionAttributeResourceType( | 127 WebRequestConditionAttributeResourceType( |
| 128 const std::vector<ResourceType>& types) | 128 const std::vector<ResourceType>& types) |
| 129 : types_(types) {} | 129 : types_(types) {} |
| 130 | 130 |
| 131 WebRequestConditionAttributeResourceType:: | 131 WebRequestConditionAttributeResourceType:: |
| 132 ~WebRequestConditionAttributeResourceType() {} | 132 ~WebRequestConditionAttributeResourceType() {} |
| 133 | 133 |
| 134 // static | 134 // static |
| 135 scoped_refptr<const WebRequestConditionAttribute> | 135 scoped_refptr<const WebRequestConditionAttribute> |
| 136 WebRequestConditionAttributeResourceType::Create( | 136 WebRequestConditionAttributeResourceType::Create( |
| 137 const std::string& instance_type, | 137 const std::string& instance_type, |
| 138 const base::Value* value, | 138 const base::Value* value, |
| 139 std::string* error, | 139 std::string* error, |
| 140 bool* bad_message) { | 140 bool* bad_message) { |
| 141 DCHECK(instance_type == keys::kResourceTypeKey); | 141 DCHECK(instance_type == keys::kResourceTypeKey); |
| 142 const base::ListValue* value_as_list = NULL; | 142 const base::ListValue* value_as_list = nullptr; |
| 143 if (!value->GetAsList(&value_as_list)) { | 143 if (!value->GetAsList(&value_as_list)) { |
| 144 *error = ErrorUtils::FormatErrorMessage(kInvalidValue, | 144 *error = ErrorUtils::FormatErrorMessage(kInvalidValue, |
| 145 keys::kResourceTypeKey); | 145 keys::kResourceTypeKey); |
| 146 return scoped_refptr<const WebRequestConditionAttribute>(NULL); | 146 return scoped_refptr<const WebRequestConditionAttribute>(nullptr); |
| 147 } | 147 } |
| 148 | 148 |
| 149 size_t number_types = value_as_list->GetSize(); | 149 size_t number_types = value_as_list->GetSize(); |
| 150 | 150 |
| 151 std::vector<ResourceType> passed_types; | 151 std::vector<ResourceType> passed_types; |
| 152 passed_types.reserve(number_types); | 152 passed_types.reserve(number_types); |
| 153 for (size_t i = 0; i < number_types; ++i) { | 153 for (size_t i = 0; i < number_types; ++i) { |
| 154 std::string resource_type_string; | 154 std::string resource_type_string; |
| 155 ResourceType type = content::RESOURCE_TYPE_LAST_TYPE; | 155 ResourceType type = content::RESOURCE_TYPE_LAST_TYPE; |
| 156 if (!value_as_list->GetString(i, &resource_type_string) || | 156 if (!value_as_list->GetString(i, &resource_type_string) || |
| 157 !utils::ParseResourceType(resource_type_string, &type)) { | 157 !utils::ParseResourceType(resource_type_string, &type)) { |
| 158 *error = ErrorUtils::FormatErrorMessage(kInvalidValue, | 158 *error = ErrorUtils::FormatErrorMessage(kInvalidValue, |
| 159 keys::kResourceTypeKey); | 159 keys::kResourceTypeKey); |
| 160 return scoped_refptr<const WebRequestConditionAttribute>(NULL); | 160 return scoped_refptr<const WebRequestConditionAttribute>(nullptr); |
| 161 } | 161 } |
| 162 passed_types.push_back(type); | 162 passed_types.push_back(type); |
| 163 } | 163 } |
| 164 | 164 |
| 165 return scoped_refptr<const WebRequestConditionAttribute>( | 165 return scoped_refptr<const WebRequestConditionAttribute>( |
| 166 new WebRequestConditionAttributeResourceType(passed_types)); | 166 new WebRequestConditionAttributeResourceType(passed_types)); |
| 167 } | 167 } |
| 168 | 168 |
| 169 int WebRequestConditionAttributeResourceType::GetStages() const { | 169 int WebRequestConditionAttributeResourceType::GetStages() const { |
| 170 return ON_BEFORE_REQUEST | ON_BEFORE_SEND_HEADERS | ON_SEND_HEADERS | | 170 return ON_BEFORE_REQUEST | ON_BEFORE_SEND_HEADERS | ON_SEND_HEADERS | |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 218 | 218 |
| 219 // static | 219 // static |
| 220 scoped_refptr<const WebRequestConditionAttribute> | 220 scoped_refptr<const WebRequestConditionAttribute> |
| 221 WebRequestConditionAttributeContentType::Create( | 221 WebRequestConditionAttributeContentType::Create( |
| 222 const std::string& name, | 222 const std::string& name, |
| 223 const base::Value* value, | 223 const base::Value* value, |
| 224 std::string* error, | 224 std::string* error, |
| 225 bool* bad_message) { | 225 bool* bad_message) { |
| 226 DCHECK(name == keys::kContentTypeKey || name == keys::kExcludeContentTypeKey); | 226 DCHECK(name == keys::kContentTypeKey || name == keys::kExcludeContentTypeKey); |
| 227 | 227 |
| 228 const base::ListValue* value_as_list = NULL; | 228 const base::ListValue* value_as_list = nullptr; |
| 229 if (!value->GetAsList(&value_as_list)) { | 229 if (!value->GetAsList(&value_as_list)) { |
| 230 *error = ErrorUtils::FormatErrorMessage(kInvalidValue, name); | 230 *error = ErrorUtils::FormatErrorMessage(kInvalidValue, name); |
| 231 return scoped_refptr<const WebRequestConditionAttribute>(NULL); | 231 return scoped_refptr<const WebRequestConditionAttribute>(nullptr); |
| 232 } | 232 } |
| 233 std::vector<std::string> content_types; | 233 std::vector<std::string> content_types; |
| 234 for (base::ListValue::const_iterator it = value_as_list->begin(); | 234 for (base::ListValue::const_iterator it = value_as_list->begin(); |
| 235 it != value_as_list->end(); ++it) { | 235 it != value_as_list->end(); ++it) { |
| 236 std::string content_type; | 236 std::string content_type; |
| 237 if (!(*it)->GetAsString(&content_type)) { | 237 if (!(*it)->GetAsString(&content_type)) { |
| 238 *error = ErrorUtils::FormatErrorMessage(kInvalidValue, name); | 238 *error = ErrorUtils::FormatErrorMessage(kInvalidValue, name); |
| 239 return scoped_refptr<const WebRequestConditionAttribute>(NULL); | 239 return scoped_refptr<const WebRequestConditionAttribute>(nullptr); |
| 240 } | 240 } |
| 241 content_types.push_back(content_type); | 241 content_types.push_back(content_type); |
| 242 } | 242 } |
| 243 | 243 |
| 244 return scoped_refptr<const WebRequestConditionAttribute>( | 244 return scoped_refptr<const WebRequestConditionAttribute>( |
| 245 new WebRequestConditionAttributeContentType( | 245 new WebRequestConditionAttributeContentType( |
| 246 content_types, name == keys::kContentTypeKey)); | 246 content_types, name == keys::kContentTypeKey)); |
| 247 } | 247 } |
| 248 | 248 |
| 249 int WebRequestConditionAttributeContentType::GetStages() const { | 249 int WebRequestConditionAttributeContentType::GetStages() const { |
| 250 return ON_HEADERS_RECEIVED; | 250 return ON_HEADERS_RECEIVED; |
| 251 } | 251 } |
| 252 | 252 |
| 253 bool WebRequestConditionAttributeContentType::IsFulfilled( | 253 bool WebRequestConditionAttributeContentType::IsFulfilled( |
| 254 const WebRequestData& request_data) const { | 254 const WebRequestData& request_data) const { |
| 255 if (!(request_data.stage & GetStages())) | 255 if (!(request_data.stage & GetStages())) |
| 256 return false; | 256 return false; |
| 257 std::string content_type; | 257 std::string content_type; |
| 258 request_data.original_response_headers->GetNormalizedHeader( | 258 request_data.original_response_headers->GetNormalizedHeader( |
| 259 net::HttpRequestHeaders::kContentType, &content_type); | 259 net::HttpRequestHeaders::kContentType, &content_type); |
| 260 std::string mime_type; | 260 std::string mime_type; |
| 261 std::string charset; | 261 std::string charset; |
| 262 bool had_charset = false; | 262 bool had_charset = false; |
| 263 net::HttpUtil::ParseContentType( | 263 net::HttpUtil::ParseContentType( |
| 264 content_type, &mime_type, &charset, &had_charset, NULL); | 264 content_type, &mime_type, &charset, &had_charset, nullptr); |
| 265 | 265 |
| 266 if (inclusive_) { | 266 if (inclusive_) { |
| 267 return std::find(content_types_.begin(), content_types_.end(), | 267 return std::find(content_types_.begin(), content_types_.end(), |
| 268 mime_type) != content_types_.end(); | 268 mime_type) != content_types_.end(); |
| 269 } else { | 269 } else { |
| 270 return std::find(content_types_.begin(), content_types_.end(), | 270 return std::find(content_types_.begin(), content_types_.end(), |
| 271 mime_type) == content_types_.end(); | 271 mime_type) == content_types_.end(); |
| 272 } | 272 } |
| 273 } | 273 } |
| 274 | 274 |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 370 // HeaderMatcher implementation. | 370 // HeaderMatcher implementation. |
| 371 | 371 |
| 372 HeaderMatcher::~HeaderMatcher() {} | 372 HeaderMatcher::~HeaderMatcher() {} |
| 373 | 373 |
| 374 // static | 374 // static |
| 375 scoped_ptr<const HeaderMatcher> HeaderMatcher::Create( | 375 scoped_ptr<const HeaderMatcher> HeaderMatcher::Create( |
| 376 const base::ListValue* tests) { | 376 const base::ListValue* tests) { |
| 377 ScopedVector<const HeaderMatchTest> header_tests; | 377 ScopedVector<const HeaderMatchTest> header_tests; |
| 378 for (base::ListValue::const_iterator it = tests->begin(); | 378 for (base::ListValue::const_iterator it = tests->begin(); |
| 379 it != tests->end(); ++it) { | 379 it != tests->end(); ++it) { |
| 380 const base::DictionaryValue* tests = NULL; | 380 const base::DictionaryValue* tests = nullptr; |
| 381 if (!(*it)->GetAsDictionary(&tests)) | 381 if (!(*it)->GetAsDictionary(&tests)) |
| 382 return scoped_ptr<const HeaderMatcher>(); | 382 return scoped_ptr<const HeaderMatcher>(); |
| 383 | 383 |
| 384 scoped_ptr<const HeaderMatchTest> header_test( | 384 scoped_ptr<const HeaderMatchTest> header_test( |
| 385 HeaderMatchTest::Create(tests)); | 385 HeaderMatchTest::Create(tests)); |
| 386 if (header_test.get() == NULL) | 386 if (header_test.get() == nullptr) |
| 387 return scoped_ptr<const HeaderMatcher>(); | 387 return scoped_ptr<const HeaderMatcher>(); |
| 388 header_tests.push_back(header_test.release()); | 388 header_tests.push_back(header_test.release()); |
| 389 } | 389 } |
| 390 | 390 |
| 391 return scoped_ptr<const HeaderMatcher>(new HeaderMatcher(&header_tests)); | 391 return scoped_ptr<const HeaderMatcher>(new HeaderMatcher(&header_tests)); |
| 392 } | 392 } |
| 393 | 393 |
| 394 bool HeaderMatcher::TestNameValue(const std::string& name, | 394 bool HeaderMatcher::TestNameValue(const std::string& name, |
| 395 const std::string& value) const { | 395 const std::string& value) const { |
| 396 for (size_t i = 0; i < tests_.size(); ++i) { | 396 for (size_t i = 0; i < tests_.size(); ++i) { |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 491 } else { | 491 } else { |
| 492 NOTREACHED(); // JSON schema type checking should prevent this. | 492 NOTREACHED(); // JSON schema type checking should prevent this. |
| 493 return scoped_ptr<const HeaderMatchTest>(); | 493 return scoped_ptr<const HeaderMatchTest>(); |
| 494 } | 494 } |
| 495 const base::Value* content = &it.value(); | 495 const base::Value* content = &it.value(); |
| 496 | 496 |
| 497 ScopedVector<const StringMatchTest>* tests = | 497 ScopedVector<const StringMatchTest>* tests = |
| 498 is_name ? &name_match : &value_match; | 498 is_name ? &name_match : &value_match; |
| 499 switch (content->GetType()) { | 499 switch (content->GetType()) { |
| 500 case base::Value::TYPE_LIST: { | 500 case base::Value::TYPE_LIST: { |
| 501 const base::ListValue* list = NULL; | 501 const base::ListValue* list = nullptr; |
| 502 CHECK(content->GetAsList(&list)); | 502 CHECK(content->GetAsList(&list)); |
| 503 for (base::ListValue::const_iterator it = list->begin(); | 503 for (base::ListValue::const_iterator it = list->begin(); |
| 504 it != list->end(); ++it) { | 504 it != list->end(); ++it) { |
| 505 tests->push_back( | 505 tests->push_back( |
| 506 StringMatchTest::Create(*it, match_type, !is_name).release()); | 506 StringMatchTest::Create(*it, match_type, !is_name).release()); |
| 507 } | 507 } |
| 508 break; | 508 break; |
| 509 } | 509 } |
| 510 case base::Value::TYPE_STRING: { | 510 case base::Value::TYPE_STRING: { |
| 511 tests->push_back( | 511 tests->push_back( |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 551 | 551 |
| 552 WebRequestConditionAttributeRequestHeaders:: | 552 WebRequestConditionAttributeRequestHeaders:: |
| 553 ~WebRequestConditionAttributeRequestHeaders() {} | 553 ~WebRequestConditionAttributeRequestHeaders() {} |
| 554 | 554 |
| 555 namespace { | 555 namespace { |
| 556 | 556 |
| 557 scoped_ptr<const HeaderMatcher> PrepareHeaderMatcher( | 557 scoped_ptr<const HeaderMatcher> PrepareHeaderMatcher( |
| 558 const std::string& name, | 558 const std::string& name, |
| 559 const base::Value* value, | 559 const base::Value* value, |
| 560 std::string* error) { | 560 std::string* error) { |
| 561 const base::ListValue* value_as_list = NULL; | 561 const base::ListValue* value_as_list = nullptr; |
| 562 if (!value->GetAsList(&value_as_list)) { | 562 if (!value->GetAsList(&value_as_list)) { |
| 563 *error = ErrorUtils::FormatErrorMessage(kInvalidValue, name); | 563 *error = ErrorUtils::FormatErrorMessage(kInvalidValue, name); |
| 564 return scoped_ptr<const HeaderMatcher>(); | 564 return scoped_ptr<const HeaderMatcher>(); |
| 565 } | 565 } |
| 566 | 566 |
| 567 scoped_ptr<const HeaderMatcher> header_matcher( | 567 scoped_ptr<const HeaderMatcher> header_matcher( |
| 568 HeaderMatcher::Create(value_as_list)); | 568 HeaderMatcher::Create(value_as_list)); |
| 569 if (header_matcher.get() == NULL) | 569 if (header_matcher.get() == nullptr) |
| 570 *error = ErrorUtils::FormatErrorMessage(kInvalidValue, name); | 570 *error = ErrorUtils::FormatErrorMessage(kInvalidValue, name); |
| 571 return header_matcher.Pass(); | 571 return header_matcher.Pass(); |
| 572 } | 572 } |
| 573 | 573 |
| 574 } // namespace | 574 } // namespace |
| 575 | 575 |
| 576 // static | 576 // static |
| 577 scoped_refptr<const WebRequestConditionAttribute> | 577 scoped_refptr<const WebRequestConditionAttribute> |
| 578 WebRequestConditionAttributeRequestHeaders::Create( | 578 WebRequestConditionAttributeRequestHeaders::Create( |
| 579 const std::string& name, | 579 const std::string& name, |
| 580 const base::Value* value, | 580 const base::Value* value, |
| 581 std::string* error, | 581 std::string* error, |
| 582 bool* bad_message) { | 582 bool* bad_message) { |
| 583 DCHECK(name == keys::kRequestHeadersKey || | 583 DCHECK(name == keys::kRequestHeadersKey || |
| 584 name == keys::kExcludeRequestHeadersKey); | 584 name == keys::kExcludeRequestHeadersKey); |
| 585 | 585 |
| 586 scoped_ptr<const HeaderMatcher> header_matcher( | 586 scoped_ptr<const HeaderMatcher> header_matcher( |
| 587 PrepareHeaderMatcher(name, value, error)); | 587 PrepareHeaderMatcher(name, value, error)); |
| 588 if (header_matcher.get() == NULL) | 588 if (header_matcher.get() == nullptr) |
| 589 return scoped_refptr<const WebRequestConditionAttribute>(NULL); | 589 return scoped_refptr<const WebRequestConditionAttribute>(nullptr); |
| 590 | 590 |
| 591 return scoped_refptr<const WebRequestConditionAttribute>( | 591 return scoped_refptr<const WebRequestConditionAttribute>( |
| 592 new WebRequestConditionAttributeRequestHeaders( | 592 new WebRequestConditionAttributeRequestHeaders( |
| 593 header_matcher.Pass(), name == keys::kRequestHeadersKey)); | 593 header_matcher.Pass(), name == keys::kRequestHeadersKey)); |
| 594 } | 594 } |
| 595 | 595 |
| 596 int WebRequestConditionAttributeRequestHeaders::GetStages() const { | 596 int WebRequestConditionAttributeRequestHeaders::GetStages() const { |
| 597 // Currently we only allow matching against headers in the before-send-headers | 597 // Currently we only allow matching against headers in the before-send-headers |
| 598 // stage. The headers are accessible in other stages as well, but before | 598 // stage. The headers are accessible in other stages as well, but before |
| 599 // allowing to match against them in further stages, we should consider | 599 // allowing to match against them in further stages, we should consider |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 652 WebRequestConditionAttributeResponseHeaders::Create( | 652 WebRequestConditionAttributeResponseHeaders::Create( |
| 653 const std::string& name, | 653 const std::string& name, |
| 654 const base::Value* value, | 654 const base::Value* value, |
| 655 std::string* error, | 655 std::string* error, |
| 656 bool* bad_message) { | 656 bool* bad_message) { |
| 657 DCHECK(name == keys::kResponseHeadersKey || | 657 DCHECK(name == keys::kResponseHeadersKey || |
| 658 name == keys::kExcludeResponseHeadersKey); | 658 name == keys::kExcludeResponseHeadersKey); |
| 659 | 659 |
| 660 scoped_ptr<const HeaderMatcher> header_matcher( | 660 scoped_ptr<const HeaderMatcher> header_matcher( |
| 661 PrepareHeaderMatcher(name, value, error)); | 661 PrepareHeaderMatcher(name, value, error)); |
| 662 if (header_matcher.get() == NULL) | 662 if (header_matcher.get() == nullptr) |
| 663 return scoped_refptr<const WebRequestConditionAttribute>(NULL); | 663 return scoped_refptr<const WebRequestConditionAttribute>(nullptr); |
| 664 | 664 |
| 665 return scoped_refptr<const WebRequestConditionAttribute>( | 665 return scoped_refptr<const WebRequestConditionAttribute>( |
| 666 new WebRequestConditionAttributeResponseHeaders( | 666 new WebRequestConditionAttributeResponseHeaders( |
| 667 header_matcher.Pass(), name == keys::kResponseHeadersKey)); | 667 header_matcher.Pass(), name == keys::kResponseHeadersKey)); |
| 668 } | 668 } |
| 669 | 669 |
| 670 int WebRequestConditionAttributeResponseHeaders::GetStages() const { | 670 int WebRequestConditionAttributeResponseHeaders::GetStages() const { |
| 671 return ON_HEADERS_RECEIVED; | 671 return ON_HEADERS_RECEIVED; |
| 672 } | 672 } |
| 673 | 673 |
| 674 bool WebRequestConditionAttributeResponseHeaders::IsFulfilled( | 674 bool WebRequestConditionAttributeResponseHeaders::IsFulfilled( |
| 675 const WebRequestData& request_data) const { | 675 const WebRequestData& request_data) const { |
| 676 if (!(request_data.stage & GetStages())) | 676 if (!(request_data.stage & GetStages())) |
| 677 return false; | 677 return false; |
| 678 | 678 |
| 679 const net::HttpResponseHeaders* headers = | 679 const net::HttpResponseHeaders* headers = |
| 680 request_data.original_response_headers; | 680 request_data.original_response_headers; |
| 681 if (headers == NULL) { | 681 if (headers == nullptr) { |
| 682 // Each header of an empty set satisfies (the negation of) everything; | 682 // Each header of an empty set satisfies (the negation of) everything; |
| 683 // OTOH, there is no header to satisfy even the most permissive test. | 683 // OTOH, there is no header to satisfy even the most permissive test. |
| 684 return !positive_; | 684 return !positive_; |
| 685 } | 685 } |
| 686 | 686 |
| 687 bool passed = false; // Did some header pass TestNameValue? | 687 bool passed = false; // Did some header pass TestNameValue? |
| 688 std::string name; | 688 std::string name; |
| 689 std::string value; | 689 std::string value; |
| 690 void* iter = NULL; | 690 void* iter = nullptr; |
| 691 while (!passed && headers->EnumerateHeaderLines(&iter, &name, &value)) { | 691 while (!passed && headers->EnumerateHeaderLines(&iter, &name, &value)) { |
| 692 passed |= header_matcher_->TestNameValue(name, value); | 692 passed |= header_matcher_->TestNameValue(name, value); |
| 693 } | 693 } |
| 694 | 694 |
| 695 return (positive_ ? passed : !passed); | 695 return (positive_ ? passed : !passed); |
| 696 } | 696 } |
| 697 | 697 |
| 698 WebRequestConditionAttribute::Type | 698 WebRequestConditionAttribute::Type |
| 699 WebRequestConditionAttributeResponseHeaders::GetType() const { | 699 WebRequestConditionAttributeResponseHeaders::GetType() const { |
| 700 return CONDITION_RESPONSE_HEADERS; | 700 return CONDITION_RESPONSE_HEADERS; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 727 const std::string& name, | 727 const std::string& name, |
| 728 const base::Value* value, | 728 const base::Value* value, |
| 729 std::string* error, | 729 std::string* error, |
| 730 bool* bad_message) { | 730 bool* bad_message) { |
| 731 DCHECK(name == keys::kThirdPartyKey); | 731 DCHECK(name == keys::kThirdPartyKey); |
| 732 | 732 |
| 733 bool third_party = false; // Dummy value, gets overwritten. | 733 bool third_party = false; // Dummy value, gets overwritten. |
| 734 if (!value->GetAsBoolean(&third_party)) { | 734 if (!value->GetAsBoolean(&third_party)) { |
| 735 *error = ErrorUtils::FormatErrorMessage(kInvalidValue, | 735 *error = ErrorUtils::FormatErrorMessage(kInvalidValue, |
| 736 keys::kThirdPartyKey); | 736 keys::kThirdPartyKey); |
| 737 return scoped_refptr<const WebRequestConditionAttribute>(NULL); | 737 return scoped_refptr<const WebRequestConditionAttribute>(nullptr); |
| 738 } | 738 } |
| 739 | 739 |
| 740 return scoped_refptr<const WebRequestConditionAttribute>( | 740 return scoped_refptr<const WebRequestConditionAttribute>( |
| 741 new WebRequestConditionAttributeThirdParty(third_party)); | 741 new WebRequestConditionAttributeThirdParty(third_party)); |
| 742 } | 742 } |
| 743 | 743 |
| 744 int WebRequestConditionAttributeThirdParty::GetStages() const { | 744 int WebRequestConditionAttributeThirdParty::GetStages() const { |
| 745 return ON_BEFORE_REQUEST | ON_BEFORE_SEND_HEADERS | ON_SEND_HEADERS | | 745 return ON_BEFORE_REQUEST | ON_BEFORE_SEND_HEADERS | ON_SEND_HEADERS | |
| 746 ON_HEADERS_RECEIVED | ON_AUTH_REQUIRED | ON_BEFORE_REDIRECT | | 746 ON_HEADERS_RECEIVED | ON_AUTH_REQUIRED | ON_BEFORE_REDIRECT | |
| 747 ON_RESPONSE_STARTED | ON_COMPLETED | ON_ERROR; | 747 ON_RESPONSE_STARTED | ON_COMPLETED | ON_ERROR; |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 791 | 791 |
| 792 WebRequestConditionAttributeStages:: | 792 WebRequestConditionAttributeStages:: |
| 793 ~WebRequestConditionAttributeStages() {} | 793 ~WebRequestConditionAttributeStages() {} |
| 794 | 794 |
| 795 namespace { | 795 namespace { |
| 796 | 796 |
| 797 // Reads strings stored in |value|, which is expected to be a ListValue, and | 797 // Reads strings stored in |value|, which is expected to be a ListValue, and |
| 798 // sets corresponding bits (see RequestStage) in |out_stages|. Returns true on | 798 // sets corresponding bits (see RequestStage) in |out_stages|. Returns true on |
| 799 // success, false otherwise. | 799 // success, false otherwise. |
| 800 bool ParseListOfStages(const base::Value& value, int* out_stages) { | 800 bool ParseListOfStages(const base::Value& value, int* out_stages) { |
| 801 const base::ListValue* list = NULL; | 801 const base::ListValue* list = nullptr; |
| 802 if (!value.GetAsList(&list)) | 802 if (!value.GetAsList(&list)) |
| 803 return false; | 803 return false; |
| 804 | 804 |
| 805 int stages = 0; | 805 int stages = 0; |
| 806 std::string stage_name; | 806 std::string stage_name; |
| 807 for (base::ListValue::const_iterator it = list->begin(); | 807 for (base::ListValue::const_iterator it = list->begin(); |
| 808 it != list->end(); ++it) { | 808 it != list->end(); ++it) { |
| 809 if (!((*it)->GetAsString(&stage_name))) | 809 if (!((*it)->GetAsString(&stage_name))) |
| 810 return false; | 810 return false; |
| 811 if (stage_name == keys::kOnBeforeRequestEnum) { | 811 if (stage_name == keys::kOnBeforeRequestEnum) { |
| (...skipping 21 matching lines...) Expand all Loading... |
| 833 WebRequestConditionAttributeStages::Create(const std::string& name, | 833 WebRequestConditionAttributeStages::Create(const std::string& name, |
| 834 const base::Value* value, | 834 const base::Value* value, |
| 835 std::string* error, | 835 std::string* error, |
| 836 bool* bad_message) { | 836 bool* bad_message) { |
| 837 DCHECK(name == keys::kStagesKey); | 837 DCHECK(name == keys::kStagesKey); |
| 838 | 838 |
| 839 int allowed_stages = 0; | 839 int allowed_stages = 0; |
| 840 if (!ParseListOfStages(*value, &allowed_stages)) { | 840 if (!ParseListOfStages(*value, &allowed_stages)) { |
| 841 *error = ErrorUtils::FormatErrorMessage(kInvalidValue, | 841 *error = ErrorUtils::FormatErrorMessage(kInvalidValue, |
| 842 keys::kStagesKey); | 842 keys::kStagesKey); |
| 843 return scoped_refptr<const WebRequestConditionAttribute>(NULL); | 843 return scoped_refptr<const WebRequestConditionAttribute>(nullptr); |
| 844 } | 844 } |
| 845 | 845 |
| 846 return scoped_refptr<const WebRequestConditionAttribute>( | 846 return scoped_refptr<const WebRequestConditionAttribute>( |
| 847 new WebRequestConditionAttributeStages(allowed_stages)); | 847 new WebRequestConditionAttributeStages(allowed_stages)); |
| 848 } | 848 } |
| 849 | 849 |
| 850 int WebRequestConditionAttributeStages::GetStages() const { | 850 int WebRequestConditionAttributeStages::GetStages() const { |
| 851 return allowed_stages_; | 851 return allowed_stages_; |
| 852 } | 852 } |
| 853 | 853 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 869 bool WebRequestConditionAttributeStages::Equals( | 869 bool WebRequestConditionAttributeStages::Equals( |
| 870 const WebRequestConditionAttribute* other) const { | 870 const WebRequestConditionAttribute* other) const { |
| 871 if (!WebRequestConditionAttribute::Equals(other)) | 871 if (!WebRequestConditionAttribute::Equals(other)) |
| 872 return false; | 872 return false; |
| 873 const WebRequestConditionAttributeStages* casted_other = | 873 const WebRequestConditionAttributeStages* casted_other = |
| 874 static_cast<const WebRequestConditionAttributeStages*>(other); | 874 static_cast<const WebRequestConditionAttributeStages*>(other); |
| 875 return allowed_stages_ == casted_other->allowed_stages_; | 875 return allowed_stages_ == casted_other->allowed_stages_; |
| 876 } | 876 } |
| 877 | 877 |
| 878 } // namespace extensions | 878 } // namespace extensions |
| OLD | NEW |