| 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/lazy_instance.h" | 9 #include "base/lazy_instance.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 (ListValue::const_iterator it = tests->begin(); | 378 for (ListValue::const_iterator it = tests->begin(); |
| 379 it != tests->end(); ++it) { | 379 it != tests->end(); ++it) { |
| 380 const DictionaryValue* tests = NULL; | 380 const DictionaryValue* tests = NULL; |
| 381 if (!(*it)->GetAsDictionary(&tests)) | 381 if (!(*it)->GetAsDictionary(&tests)) |
| 382 return scoped_ptr<const HeaderMatcher>(NULL); | 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() == NULL) |
| 387 return scoped_ptr<const HeaderMatcher>(NULL); | 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) { |
| 397 if (tests_[i]->Matches(name, value)) | 397 if (tests_[i]->Matches(name, value)) |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 482 } else if (it.key() == keys::kValuePrefixKey) { | 482 } else if (it.key() == keys::kValuePrefixKey) { |
| 483 match_type = StringMatchTest::kPrefix; | 483 match_type = StringMatchTest::kPrefix; |
| 484 } else if (it.key() == keys::kValueSuffixKey) { | 484 } else if (it.key() == keys::kValueSuffixKey) { |
| 485 match_type = StringMatchTest::kSuffix; | 485 match_type = StringMatchTest::kSuffix; |
| 486 } else if (it.key() == keys::kValueContainsKey) { | 486 } else if (it.key() == keys::kValueContainsKey) { |
| 487 match_type = StringMatchTest::kContains; | 487 match_type = StringMatchTest::kContains; |
| 488 } else if (it.key() == keys::kValueEqualsKey) { | 488 } else if (it.key() == keys::kValueEqualsKey) { |
| 489 match_type = StringMatchTest::kEquals; | 489 match_type = StringMatchTest::kEquals; |
| 490 } else { | 490 } else { |
| 491 NOTREACHED(); // JSON schema type checking should prevent this. | 491 NOTREACHED(); // JSON schema type checking should prevent this. |
| 492 return scoped_ptr<const HeaderMatchTest>(NULL); | 492 return scoped_ptr<const HeaderMatchTest>(); |
| 493 } | 493 } |
| 494 const Value* content = &it.value(); | 494 const Value* content = &it.value(); |
| 495 | 495 |
| 496 ScopedVector<const StringMatchTest>* tests = | 496 ScopedVector<const StringMatchTest>* tests = |
| 497 is_name ? &name_match : &value_match; | 497 is_name ? &name_match : &value_match; |
| 498 switch (content->GetType()) { | 498 switch (content->GetType()) { |
| 499 case Value::TYPE_LIST: { | 499 case Value::TYPE_LIST: { |
| 500 const ListValue* list = NULL; | 500 const ListValue* list = NULL; |
| 501 CHECK(content->GetAsList(&list)); | 501 CHECK(content->GetAsList(&list)); |
| 502 for (ListValue::const_iterator it = list->begin(); | 502 for (ListValue::const_iterator it = list->begin(); |
| 503 it != list->end(); ++it) { | 503 it != list->end(); ++it) { |
| 504 tests->push_back( | 504 tests->push_back( |
| 505 StringMatchTest::Create(*it, match_type, !is_name).release()); | 505 StringMatchTest::Create(*it, match_type, !is_name).release()); |
| 506 } | 506 } |
| 507 break; | 507 break; |
| 508 } | 508 } |
| 509 case Value::TYPE_STRING: { | 509 case Value::TYPE_STRING: { |
| 510 tests->push_back( | 510 tests->push_back( |
| 511 StringMatchTest::Create(content, match_type, !is_name).release()); | 511 StringMatchTest::Create(content, match_type, !is_name).release()); |
| 512 break; | 512 break; |
| 513 } | 513 } |
| 514 default: { | 514 default: { |
| 515 NOTREACHED(); // JSON schema type checking should prevent this. | 515 NOTREACHED(); // JSON schema type checking should prevent this. |
| 516 return scoped_ptr<const HeaderMatchTest>(NULL); | 516 return scoped_ptr<const HeaderMatchTest>(); |
| 517 } | 517 } |
| 518 } | 518 } |
| 519 } | 519 } |
| 520 | 520 |
| 521 return scoped_ptr<const HeaderMatchTest>( | 521 return scoped_ptr<const HeaderMatchTest>( |
| 522 new HeaderMatchTest(&name_match, &value_match)); | 522 new HeaderMatchTest(&name_match, &value_match)); |
| 523 } | 523 } |
| 524 | 524 |
| 525 bool HeaderMatcher::HeaderMatchTest::Matches(const std::string& name, | 525 bool HeaderMatcher::HeaderMatchTest::Matches(const std::string& name, |
| 526 const std::string& value) const { | 526 const std::string& value) const { |
| (...skipping 26 matching lines...) Expand all Loading... |
| 553 | 553 |
| 554 namespace { | 554 namespace { |
| 555 | 555 |
| 556 scoped_ptr<const HeaderMatcher> PrepareHeaderMatcher( | 556 scoped_ptr<const HeaderMatcher> PrepareHeaderMatcher( |
| 557 const std::string& name, | 557 const std::string& name, |
| 558 const base::Value* value, | 558 const base::Value* value, |
| 559 std::string* error) { | 559 std::string* error) { |
| 560 const ListValue* value_as_list = NULL; | 560 const ListValue* value_as_list = NULL; |
| 561 if (!value->GetAsList(&value_as_list)) { | 561 if (!value->GetAsList(&value_as_list)) { |
| 562 *error = ErrorUtils::FormatErrorMessage(kInvalidValue, name); | 562 *error = ErrorUtils::FormatErrorMessage(kInvalidValue, name); |
| 563 return scoped_ptr<const HeaderMatcher>(NULL); | 563 return scoped_ptr<const HeaderMatcher>(); |
| 564 } | 564 } |
| 565 | 565 |
| 566 scoped_ptr<const HeaderMatcher> header_matcher( | 566 scoped_ptr<const HeaderMatcher> header_matcher( |
| 567 HeaderMatcher::Create(value_as_list)); | 567 HeaderMatcher::Create(value_as_list)); |
| 568 if (header_matcher.get() == NULL) | 568 if (header_matcher.get() == NULL) |
| 569 *error = ErrorUtils::FormatErrorMessage(kInvalidValue, name); | 569 *error = ErrorUtils::FormatErrorMessage(kInvalidValue, name); |
| 570 return header_matcher.Pass(); | 570 return header_matcher.Pass(); |
| 571 } | 571 } |
| 572 | 572 |
| 573 } // namespace | 573 } // namespace |
| (...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 867 bool WebRequestConditionAttributeStages::Equals( | 867 bool WebRequestConditionAttributeStages::Equals( |
| 868 const WebRequestConditionAttribute* other) const { | 868 const WebRequestConditionAttribute* other) const { |
| 869 if (!WebRequestConditionAttribute::Equals(other)) | 869 if (!WebRequestConditionAttribute::Equals(other)) |
| 870 return false; | 870 return false; |
| 871 const WebRequestConditionAttributeStages* casted_other = | 871 const WebRequestConditionAttributeStages* casted_other = |
| 872 static_cast<const WebRequestConditionAttributeStages*>(other); | 872 static_cast<const WebRequestConditionAttributeStages*>(other); |
| 873 return allowed_stages_ == casted_other->allowed_stages_; | 873 return allowed_stages_ == casted_other->allowed_stages_; |
| 874 } | 874 } |
| 875 | 875 |
| 876 } // namespace extensions | 876 } // namespace extensions |
| OLD | NEW |