Index: chrome/browser/extensions/api/declarative_webrequest/webrequest_condition_unittest.cc |
diff --git a/chrome/browser/extensions/api/declarative_webrequest/webrequest_condition_unittest.cc b/chrome/browser/extensions/api/declarative_webrequest/webrequest_condition_unittest.cc |
index 2fa6268a3a7b03e66386f9145ef24e6bf5c63da3..351bc44682fb42b141adc71eea47130cb11c40d4 100644 |
--- a/chrome/browser/extensions/api/declarative_webrequest/webrequest_condition_unittest.cc |
+++ b/chrome/browser/extensions/api/declarative_webrequest/webrequest_condition_unittest.cc |
@@ -5,6 +5,7 @@ |
#include "chrome/browser/extensions/api/declarative_webrequest/webrequest_condition.h" |
#include <set> |
+#include <vector> |
#include "base/message_loop.h" |
#include "base/test/values_test_util.h" |
@@ -24,15 +25,19 @@ TEST(WebRequestConditionTest, CreateCondition) { |
// Necessary for TestURLRequest. |
MessageLoop message_loop(MessageLoop::TYPE_IO); |
URLMatcher matcher; |
+ URLMatcher first_party_matcher; |
std::string error; |
scoped_ptr<WebRequestCondition> result; |
+ std::vector<URLMatcherConditionFactory*> factories; |
+ factories.push_back(matcher.condition_factory()); |
+ factories.push_back(first_party_matcher.condition_factory()); |
// Test wrong condition name passed. |
error.clear(); |
result = WebRequestCondition::Create( |
- matcher.condition_factory(), |
+ factories, |
*base::test::ParseJson( |
"{ \"invalid\": \"foobar\", \n" |
" \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n" |
@@ -44,7 +49,7 @@ TEST(WebRequestConditionTest, CreateCondition) { |
// Test wrong datatype in host_suffix. |
error.clear(); |
result = WebRequestCondition::Create( |
- matcher.condition_factory(), |
+ factories, |
*base::test::ParseJson( |
"{ \n" |
" \"url\": [], \n" |
@@ -57,11 +62,12 @@ TEST(WebRequestConditionTest, CreateCondition) { |
// Test success (can we support multiple criteria?) |
error.clear(); |
result = WebRequestCondition::Create( |
- matcher.condition_factory(), |
+ factories, |
*base::test::ParseJson( |
"{ \n" |
" \"resourceType\": [\"main_frame\"], \n" |
" \"url\": { \"hostSuffix\": \"example.com\" }, \n" |
+ " \"firstPartyForCookiesUrl\": { \"hostPrefix\": \"fpfc\"}, \n" |
" \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n" |
"}"), |
&error); |
@@ -69,15 +75,25 @@ TEST(WebRequestConditionTest, CreateCondition) { |
ASSERT_TRUE(result.get()); |
URLMatcherConditionSet::Vector url_matcher_condition_set; |
- result->GetURLMatcherConditionSets(&url_matcher_condition_set); |
+ ASSERT_EQ(1, |
+ result->GetURLMatcherConditionSets(&url_matcher_condition_set, 0)); |
matcher.AddConditionSets(url_matcher_condition_set); |
- std::set<URLMatcherConditionSet::ID> url_match_ids; |
+ url_matcher_condition_set.clear(); |
+ ASSERT_EQ(-1, |
+ result->GetURLMatcherConditionSets(&url_matcher_condition_set, 1)); |
+ first_party_matcher.AddConditionSets(url_matcher_condition_set); |
net::TestURLRequestContext context; |
GURL http_url("http://www.example.com"); |
+ GURL first_party_url("http://fpfc.example.com"); |
net::TestURLRequest match_request(http_url, NULL, &context); |
- url_match_ids = matcher.MatchURL(http_url); |
- EXPECT_EQ(1u, url_match_ids.size()); |
+ std::set<URLMatcherConditionSet::ID> url_match_ids = |
+ matcher.MatchURL(http_url); |
+ std::set<URLMatcherConditionSet::ID> first_party_url_match_ids = |
+ first_party_matcher.MatchURL(first_party_url); |
+ url_match_ids.insert(first_party_url_match_ids.begin(), |
+ first_party_url_match_ids.end()); |
+ EXPECT_EQ(2u, url_match_ids.size()); |
content::ResourceRequestInfo::AllocateForTesting(&match_request, |
ResourceType::MAIN_FRAME, NULL, -1, -1); |
EXPECT_TRUE(result->IsFulfilled( |
@@ -87,8 +103,10 @@ TEST(WebRequestConditionTest, CreateCondition) { |
GURL https_url("https://www.example.com"); |
net::TestURLRequest wrong_resource_type(https_url, NULL, &context); |
url_match_ids = matcher.MatchURL(https_url); |
+ url_match_ids.insert(first_party_url_match_ids.begin(), |
+ first_party_url_match_ids.end()); |
// Make sure IsFulfilled does not fail because of URL matching. |
- EXPECT_EQ(1u, url_match_ids.size()); |
+ EXPECT_EQ(2u, url_match_ids.size()); |
content::ResourceRequestInfo::AllocateForTesting(&wrong_resource_type, |
ResourceType::SUB_FRAME, NULL, -1, -1); |
EXPECT_FALSE(result->IsFulfilled( |
@@ -108,10 +126,16 @@ TEST(WebRequestConditionTest, NoUrlAttributes) { |
URLMatcher matcher; |
std::string error; |
+ std::vector<URLMatcherConditionFactory*> factories; |
+ factories.push_back(matcher.condition_factory()); |
+ // The second factory is usually from a different matcher, but in this test |
+ // we don't care, since we never use it. |
+ factories.push_back(matcher.condition_factory()); |
+ |
// The empty condition. |
error.clear(); |
scoped_ptr<WebRequestCondition> condition_empty = WebRequestCondition::Create( |
- matcher.condition_factory(), |
+ factories, |
*base::test::ParseJson( |
"{ \n" |
" \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n" |
@@ -124,7 +148,7 @@ TEST(WebRequestConditionTest, NoUrlAttributes) { |
error.clear(); |
scoped_ptr<WebRequestCondition> condition_no_url_true = |
WebRequestCondition::Create( |
- matcher.condition_factory(), |
+ factories, |
*base::test::ParseJson( |
"{ \n" |
" \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n" |
@@ -140,7 +164,7 @@ TEST(WebRequestConditionTest, NoUrlAttributes) { |
error.clear(); |
scoped_ptr<WebRequestCondition> condition_no_url_false = |
WebRequestCondition::Create( |
- matcher.condition_factory(), |
+ factories, |
*base::test::ParseJson( |
"{ \n" |
" \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n" |
@@ -177,6 +201,12 @@ TEST(WebRequestConditionTest, CreateConditionSet) { |
MessageLoop message_loop(MessageLoop::TYPE_IO); |
URLMatcher matcher; |
+ std::vector<URLMatcherConditionFactory*> factories; |
+ factories.push_back(matcher.condition_factory()); |
+ // The second factory is usually from a different matcher, but in this test |
+ // we don't care, since we never use it. |
+ factories.push_back(matcher.condition_factory()); |
+ |
WebRequestConditionSet::AnyVector conditions; |
conditions.push_back(linked_ptr<base::Value>(base::test::ParseJson( |
"{ \n" |
@@ -199,15 +229,14 @@ TEST(WebRequestConditionTest, CreateConditionSet) { |
// Test insertion |
std::string error; |
scoped_ptr<WebRequestConditionSet> result = |
- WebRequestConditionSet::Create(matcher.condition_factory(), |
- conditions, &error); |
+ WebRequestConditionSet::Create(factories, conditions, &error); |
EXPECT_EQ("", error); |
ASSERT_TRUE(result.get()); |
EXPECT_EQ(2u, result->conditions().size()); |
// Tell the URLMatcher about our shiny new patterns. |
URLMatcherConditionSet::Vector url_matcher_condition_set; |
- result->GetURLMatcherConditionSets(&url_matcher_condition_set); |
+ result->GetURLMatcherConditionSets(&url_matcher_condition_set, 0); |
matcher.AddConditionSets(url_matcher_condition_set); |
std::set<URLMatcherConditionSet::ID> url_match_ids; |
@@ -249,6 +278,12 @@ TEST(WebRequestConditionTest, TestPortFilter) { |
MessageLoop message_loop(MessageLoop::TYPE_IO); |
URLMatcher matcher; |
+ std::vector<URLMatcherConditionFactory*> factories; |
+ factories.push_back(matcher.condition_factory()); |
+ // The second factory is usually from a different matcher, but in this test |
+ // we don't care, since we never use it. |
+ factories.push_back(matcher.condition_factory()); |
+ |
WebRequestConditionSet::AnyVector conditions; |
conditions.push_back(linked_ptr<base::Value>(base::test::ParseJson( |
"{ \n" |
@@ -262,15 +297,14 @@ TEST(WebRequestConditionTest, TestPortFilter) { |
// Test insertion |
std::string error; |
scoped_ptr<WebRequestConditionSet> result = |
- WebRequestConditionSet::Create(matcher.condition_factory(), |
- conditions, &error); |
+ WebRequestConditionSet::Create(factories, conditions, &error); |
EXPECT_EQ("", error); |
ASSERT_TRUE(result.get()); |
EXPECT_EQ(1u, result->conditions().size()); |
// Tell the URLMatcher about our shiny new patterns. |
URLMatcherConditionSet::Vector url_matcher_condition_set; |
- result->GetURLMatcherConditionSets(&url_matcher_condition_set); |
+ result->GetURLMatcherConditionSets(&url_matcher_condition_set, 0); |
matcher.AddConditionSets(url_matcher_condition_set); |
std::set<URLMatcherConditionSet::ID> url_match_ids; |
@@ -309,14 +343,16 @@ TEST(WebRequestConditionTest, ConditionsWithConflictingStages) { |
std::string error; |
scoped_ptr<WebRequestCondition> result; |
- DictionaryValue condition_value; |
- condition_value.SetString(keys::kInstanceTypeKey, keys::kRequestMatcherType); |
- |
+ std::vector<URLMatcherConditionFactory*> factories; |
+ factories.push_back(matcher.condition_factory()); |
+ // The second factory is usually from a different matcher, but in this test |
+ // we don't care, since we never use it. |
+ factories.push_back(matcher.condition_factory()); |
// Test error on incompatible application stages for involved attributes. |
error.clear(); |
result = WebRequestCondition::Create( |
- matcher.condition_factory(), |
+ factories, |
*base::test::ParseJson( |
"{ \n" |
" \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n" |