| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 bool TestNameValue(const std::string& name, const std::string& value) const; | 313 bool TestNameValue(const std::string& name, const std::string& value) const; |
| 314 | 314 |
| 315 private: | 315 private: |
| 316 // Represents a single string-matching test. | 316 // Represents a single string-matching test. |
| 317 class StringMatchTest { | 317 class StringMatchTest { |
| 318 public: | 318 public: |
| 319 enum MatchType { kPrefix, kSuffix, kEquals, kContains }; | 319 enum MatchType { kPrefix, kSuffix, kEquals, kContains }; |
| 320 | 320 |
| 321 // |data| is the pattern to be matched in the position given by |type|. | 321 // |data| is the pattern to be matched in the position given by |type|. |
| 322 // Note that |data| must point to a StringValue object. | 322 // Note that |data| must point to a StringValue object. |
| 323 static std::unique_ptr<StringMatchTest> Create(const base::Value* data, | 323 static std::unique_ptr<StringMatchTest> Create(const base::Value& data, |
| 324 MatchType type, | 324 MatchType type, |
| 325 bool case_sensitive); | 325 bool case_sensitive); |
| 326 ~StringMatchTest(); | 326 ~StringMatchTest(); |
| 327 | 327 |
| 328 // Does |str| pass |this| StringMatchTest? | 328 // Does |str| pass |this| StringMatchTest? |
| 329 bool Matches(const std::string& str) const; | 329 bool Matches(const std::string& str) const; |
| 330 | 330 |
| 331 private: | 331 private: |
| 332 StringMatchTest(const std::string& data, | 332 StringMatchTest(const std::string& data, |
| 333 MatchType type, | 333 MatchType type, |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 410 } | 410 } |
| 411 | 411 |
| 412 HeaderMatcher::HeaderMatcher( | 412 HeaderMatcher::HeaderMatcher( |
| 413 std::vector<std::unique_ptr<const HeaderMatchTest>> tests) | 413 std::vector<std::unique_ptr<const HeaderMatchTest>> tests) |
| 414 : tests_(std::move(tests)) {} | 414 : tests_(std::move(tests)) {} |
| 415 | 415 |
| 416 // HeaderMatcher::StringMatchTest implementation. | 416 // HeaderMatcher::StringMatchTest implementation. |
| 417 | 417 |
| 418 // static | 418 // static |
| 419 std::unique_ptr<HeaderMatcher::StringMatchTest> | 419 std::unique_ptr<HeaderMatcher::StringMatchTest> |
| 420 HeaderMatcher::StringMatchTest::Create(const base::Value* data, | 420 HeaderMatcher::StringMatchTest::Create(const base::Value& data, |
| 421 MatchType type, | 421 MatchType type, |
| 422 bool case_sensitive) { | 422 bool case_sensitive) { |
| 423 std::string str; | 423 std::string str; |
| 424 CHECK(data->GetAsString(&str)); | 424 CHECK(data.GetAsString(&str)); |
| 425 return std::unique_ptr<StringMatchTest>( | 425 return base::WrapUnique(new StringMatchTest(str, type, case_sensitive)); |
| 426 new StringMatchTest(str, type, case_sensitive)); | |
| 427 } | 426 } |
| 428 | 427 |
| 429 HeaderMatcher::StringMatchTest::~StringMatchTest() {} | 428 HeaderMatcher::StringMatchTest::~StringMatchTest() {} |
| 430 | 429 |
| 431 bool HeaderMatcher::StringMatchTest::Matches( | 430 bool HeaderMatcher::StringMatchTest::Matches( |
| 432 const std::string& str) const { | 431 const std::string& str) const { |
| 433 switch (type_) { | 432 switch (type_) { |
| 434 case kPrefix: | 433 case kPrefix: |
| 435 return base::StartsWith(str, data_, case_sensitive_); | 434 return base::StartsWith(str, data_, case_sensitive_); |
| 436 case kSuffix: | 435 case kSuffix: |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 504 return std::unique_ptr<const HeaderMatchTest>(); | 503 return std::unique_ptr<const HeaderMatchTest>(); |
| 505 } | 504 } |
| 506 const base::Value* content = &it.value(); | 505 const base::Value* content = &it.value(); |
| 507 | 506 |
| 508 std::vector<std::unique_ptr<const StringMatchTest>>* tests = | 507 std::vector<std::unique_ptr<const StringMatchTest>>* tests = |
| 509 is_name ? &name_match : &value_match; | 508 is_name ? &name_match : &value_match; |
| 510 switch (content->GetType()) { | 509 switch (content->GetType()) { |
| 511 case base::Value::TYPE_LIST: { | 510 case base::Value::TYPE_LIST: { |
| 512 const base::ListValue* list = NULL; | 511 const base::ListValue* list = NULL; |
| 513 CHECK(content->GetAsList(&list)); | 512 CHECK(content->GetAsList(&list)); |
| 514 for (base::ListValue::const_iterator it = list->begin(); | 513 for (const auto& it : *list) { |
| 515 it != list->end(); ++it) { | 514 tests->push_back(StringMatchTest::Create(*it, match_type, !is_name)); |
| 516 tests->push_back(base::WrapUnique( | |
| 517 StringMatchTest::Create(*it, match_type, !is_name).release())); | |
| 518 } | 515 } |
| 519 break; | 516 break; |
| 520 } | 517 } |
| 521 case base::Value::TYPE_STRING: { | 518 case base::Value::TYPE_STRING: { |
| 522 tests->push_back(base::WrapUnique( | 519 tests->push_back( |
| 523 StringMatchTest::Create(content, match_type, !is_name).release())); | 520 StringMatchTest::Create(*content, match_type, !is_name)); |
| 524 break; | 521 break; |
| 525 } | 522 } |
| 526 default: { | 523 default: { |
| 527 NOTREACHED(); // JSON schema type checking should prevent this. | 524 NOTREACHED(); // JSON schema type checking should prevent this. |
| 528 return std::unique_ptr<const HeaderMatchTest>(); | 525 return std::unique_ptr<const HeaderMatchTest>(); |
| 529 } | 526 } |
| 530 } | 527 } |
| 531 } | 528 } |
| 532 | 529 |
| 533 return std::unique_ptr<const HeaderMatchTest>( | 530 return std::unique_ptr<const HeaderMatchTest>( |
| (...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 878 bool WebRequestConditionAttributeStages::Equals( | 875 bool WebRequestConditionAttributeStages::Equals( |
| 879 const WebRequestConditionAttribute* other) const { | 876 const WebRequestConditionAttribute* other) const { |
| 880 if (!WebRequestConditionAttribute::Equals(other)) | 877 if (!WebRequestConditionAttribute::Equals(other)) |
| 881 return false; | 878 return false; |
| 882 const WebRequestConditionAttributeStages* casted_other = | 879 const WebRequestConditionAttributeStages* casted_other = |
| 883 static_cast<const WebRequestConditionAttributeStages*>(other); | 880 static_cast<const WebRequestConditionAttributeStages*>(other); |
| 884 return allowed_stages_ == casted_other->allowed_stages_; | 881 return allowed_stages_ == casted_other->allowed_stages_; |
| 885 } | 882 } |
| 886 | 883 |
| 887 } // namespace extensions | 884 } // namespace extensions |
| OLD | NEW |