| 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
|
| deleted file mode 100644
|
| index 0587f0e807faaeae0782b1128830663cc4098be2..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/extensions/api/declarative_webrequest/webrequest_condition_unittest.cc
|
| +++ /dev/null
|
| @@ -1,397 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/browser/extensions/api/declarative_webrequest/webrequest_condition.h"
|
| -
|
| -#include <set>
|
| -
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "base/test/values_test_util.h"
|
| -#include "base/values.h"
|
| -#include "components/url_matcher/url_matcher_constants.h"
|
| -#include "content/public/browser/resource_request_info.h"
|
| -#include "extensions/browser/api/declarative_webrequest/webrequest_constants.h"
|
| -#include "net/base/request_priority.h"
|
| -#include "net/url_request/url_request.h"
|
| -#include "net/url_request/url_request_test_util.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -using content::ResourceType;
|
| -using url_matcher::URLMatcher;
|
| -using url_matcher::URLMatcherConditionSet;
|
| -
|
| -namespace extensions {
|
| -
|
| -TEST(WebRequestConditionTest, CreateCondition) {
|
| - // Necessary for TestURLRequest.
|
| - base::MessageLoopForIO message_loop;
|
| - URLMatcher matcher;
|
| -
|
| - std::string error;
|
| - scoped_ptr<WebRequestCondition> result;
|
| -
|
| - // Test wrong condition name passed.
|
| - error.clear();
|
| - result = WebRequestCondition::Create(
|
| - NULL,
|
| - matcher.condition_factory(),
|
| - *base::test::ParseJson(
|
| - "{ \"invalid\": \"foobar\", \n"
|
| - " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n"
|
| - "}"),
|
| - &error);
|
| - EXPECT_FALSE(error.empty());
|
| - EXPECT_FALSE(result.get());
|
| -
|
| - // Test wrong datatype in host_suffix.
|
| - error.clear();
|
| - result = WebRequestCondition::Create(
|
| - NULL,
|
| - matcher.condition_factory(),
|
| - *base::test::ParseJson(
|
| - "{ \n"
|
| - " \"url\": [], \n"
|
| - " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n"
|
| - "}"),
|
| - &error);
|
| - EXPECT_FALSE(error.empty());
|
| - EXPECT_FALSE(result.get());
|
| -
|
| - // Test success (can we support multiple criteria?)
|
| - error.clear();
|
| - result = WebRequestCondition::Create(
|
| - NULL,
|
| - matcher.condition_factory(),
|
| - *base::test::ParseJson(
|
| - "{ \n"
|
| - " \"resourceType\": [\"main_frame\"], \n"
|
| - " \"url\": { \"hostSuffix\": \"example.com\" }, \n"
|
| - " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n"
|
| - "}"),
|
| - &error);
|
| - EXPECT_EQ("", error);
|
| - ASSERT_TRUE(result.get());
|
| -
|
| - URLMatcherConditionSet::Vector url_matcher_condition_set;
|
| - result->GetURLMatcherConditionSets(&url_matcher_condition_set);
|
| - matcher.AddConditionSets(url_matcher_condition_set);
|
| -
|
| - net::TestURLRequestContext context;
|
| - const GURL http_url("http://www.example.com");
|
| - scoped_ptr<net::URLRequest> match_request(context.CreateRequest(
|
| - http_url, net::DEFAULT_PRIORITY, NULL, NULL));
|
| - WebRequestData data(match_request.get(), ON_BEFORE_REQUEST);
|
| - WebRequestDataWithMatchIds request_data(&data);
|
| - request_data.url_match_ids = matcher.MatchURL(http_url);
|
| - EXPECT_EQ(1u, request_data.url_match_ids.size());
|
| - content::ResourceRequestInfo::AllocateForTesting(
|
| - match_request.get(),
|
| - content::RESOURCE_TYPE_MAIN_FRAME,
|
| - NULL,
|
| - -1,
|
| - -1,
|
| - -1,
|
| - false);
|
| - EXPECT_TRUE(result->IsFulfilled(request_data));
|
| -
|
| - const GURL https_url("https://www.example.com");
|
| - scoped_ptr<net::URLRequest> wrong_resource_type(context.CreateRequest(
|
| - https_url, net::DEFAULT_PRIORITY, NULL, NULL));
|
| - data.request = wrong_resource_type.get();
|
| - request_data.url_match_ids = matcher.MatchURL(http_url);
|
| - // Make sure IsFulfilled does not fail because of URL matching.
|
| - EXPECT_EQ(1u, request_data.url_match_ids.size());
|
| - content::ResourceRequestInfo::AllocateForTesting(
|
| - wrong_resource_type.get(),
|
| - content::RESOURCE_TYPE_SUB_FRAME,
|
| - NULL,
|
| - -1,
|
| - -1,
|
| - -1,
|
| - false);
|
| - EXPECT_FALSE(result->IsFulfilled(request_data));
|
| -}
|
| -
|
| -TEST(WebRequestConditionTest, CreateConditionFirstPartyForCookies) {
|
| - // Necessary for TestURLRequest.
|
| - base::MessageLoopForIO message_loop;
|
| - URLMatcher matcher;
|
| -
|
| - std::string error;
|
| - scoped_ptr<WebRequestCondition> result;
|
| -
|
| - result = WebRequestCondition::Create(
|
| - NULL,
|
| - matcher.condition_factory(),
|
| - *base::test::ParseJson(
|
| - "{ \n"
|
| - " \"firstPartyForCookiesUrl\": { \"hostPrefix\": \"fpfc\"}, \n"
|
| - " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n"
|
| - "}"),
|
| - &error);
|
| - EXPECT_EQ("", error);
|
| - ASSERT_TRUE(result.get());
|
| -
|
| - URLMatcherConditionSet::Vector url_matcher_condition_set;
|
| - result->GetURLMatcherConditionSets(&url_matcher_condition_set);
|
| - matcher.AddConditionSets(url_matcher_condition_set);
|
| -
|
| - net::TestURLRequestContext context;
|
| - const GURL http_url("http://www.example.com");
|
| - const GURL first_party_url("http://fpfc.example.com");
|
| - scoped_ptr<net::URLRequest> match_request(context.CreateRequest(
|
| - http_url, net::DEFAULT_PRIORITY, NULL, NULL));
|
| - WebRequestData data(match_request.get(), ON_BEFORE_REQUEST);
|
| - WebRequestDataWithMatchIds request_data(&data);
|
| - request_data.url_match_ids = matcher.MatchURL(http_url);
|
| - EXPECT_EQ(0u, request_data.url_match_ids.size());
|
| - request_data.first_party_url_match_ids = matcher.MatchURL(first_party_url);
|
| - EXPECT_EQ(1u, request_data.first_party_url_match_ids.size());
|
| - content::ResourceRequestInfo::AllocateForTesting(
|
| - match_request.get(),
|
| - content::RESOURCE_TYPE_MAIN_FRAME,
|
| - NULL,
|
| - -1,
|
| - -1,
|
| - -1,
|
| - false);
|
| - EXPECT_TRUE(result->IsFulfilled(request_data));
|
| -}
|
| -
|
| -// Conditions without UrlFilter attributes need to be independent of URL
|
| -// matching results. We test here that:
|
| -// 1. A non-empty condition without UrlFilter attributes is fulfilled iff its
|
| -// attributes are fulfilled.
|
| -// 2. An empty condition (in particular, without UrlFilter attributes) is
|
| -// always fulfilled.
|
| -TEST(WebRequestConditionTest, NoUrlAttributes) {
|
| - // Necessary for TestURLRequest.
|
| - base::MessageLoopForIO message_loop;
|
| - URLMatcher matcher;
|
| - std::string error;
|
| -
|
| - // The empty condition.
|
| - error.clear();
|
| - scoped_ptr<WebRequestCondition> condition_empty = WebRequestCondition::Create(
|
| - NULL,
|
| - matcher.condition_factory(),
|
| - *base::test::ParseJson(
|
| - "{ \n"
|
| - " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n"
|
| - "}"),
|
| - &error);
|
| - EXPECT_EQ("", error);
|
| - ASSERT_TRUE(condition_empty.get());
|
| -
|
| - // A condition without a UrlFilter attribute, which is always true.
|
| - error.clear();
|
| - scoped_ptr<WebRequestCondition> condition_no_url_true =
|
| - WebRequestCondition::Create(
|
| - NULL,
|
| - matcher.condition_factory(),
|
| - *base::test::ParseJson(
|
| - "{ \n"
|
| - " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", "
|
| - "\n"
|
| - // There is no "1st party for cookies" URL in the requests below,
|
| - // therefore all requests are considered first party for cookies.
|
| - " \"thirdPartyForCookies\": false, \n"
|
| - "}"),
|
| - &error);
|
| - EXPECT_EQ("", error);
|
| - ASSERT_TRUE(condition_no_url_true.get());
|
| -
|
| - // A condition without a UrlFilter attribute, which is always false.
|
| - error.clear();
|
| - scoped_ptr<WebRequestCondition> condition_no_url_false =
|
| - WebRequestCondition::Create(
|
| - NULL,
|
| - matcher.condition_factory(),
|
| - *base::test::ParseJson(
|
| - "{ \n"
|
| - " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", "
|
| - "\n"
|
| - " \"thirdPartyForCookies\": true, \n"
|
| - "}"),
|
| - &error);
|
| - EXPECT_EQ("", error);
|
| - ASSERT_TRUE(condition_no_url_false.get());
|
| -
|
| - net::TestURLRequestContext context;
|
| - scoped_ptr<net::URLRequest> https_request(context.CreateRequest(
|
| - GURL("https://www.example.com"), net::DEFAULT_PRIORITY, NULL, NULL));
|
| -
|
| - // 1. A non-empty condition without UrlFilter attributes is fulfilled iff its
|
| - // attributes are fulfilled.
|
| - WebRequestData data(https_request.get(), ON_BEFORE_REQUEST);
|
| - EXPECT_FALSE(
|
| - condition_no_url_false->IsFulfilled(WebRequestDataWithMatchIds(&data)));
|
| -
|
| - data = WebRequestData(https_request.get(), ON_BEFORE_REQUEST);
|
| - EXPECT_TRUE(
|
| - condition_no_url_true->IsFulfilled(WebRequestDataWithMatchIds(&data)));
|
| -
|
| - // 2. An empty condition (in particular, without UrlFilter attributes) is
|
| - // always fulfilled.
|
| - data = WebRequestData(https_request.get(), ON_BEFORE_REQUEST);
|
| - EXPECT_TRUE(condition_empty->IsFulfilled(WebRequestDataWithMatchIds(&data)));
|
| -}
|
| -
|
| -TEST(WebRequestConditionTest, CreateConditionSet) {
|
| - // Necessary for TestURLRequest.
|
| - base::MessageLoopForIO message_loop;
|
| - URLMatcher matcher;
|
| -
|
| - WebRequestConditionSet::AnyVector conditions;
|
| - conditions.push_back(linked_ptr<base::Value>(base::test::ParseJson(
|
| - "{ \n"
|
| - " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n"
|
| - " \"url\": { \n"
|
| - " \"hostSuffix\": \"example.com\", \n"
|
| - " \"schemes\": [\"http\"], \n"
|
| - " }, \n"
|
| - "}").release()));
|
| - conditions.push_back(linked_ptr<base::Value>(base::test::ParseJson(
|
| - "{ \n"
|
| - " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n"
|
| - " \"url\": { \n"
|
| - " \"hostSuffix\": \"example.com\", \n"
|
| - " \"hostPrefix\": \"www\", \n"
|
| - " \"schemes\": [\"https\"], \n"
|
| - " }, \n"
|
| - "}").release()));
|
| -
|
| - // Test insertion
|
| - std::string error;
|
| - scoped_ptr<WebRequestConditionSet> result = WebRequestConditionSet::Create(
|
| - NULL, matcher.condition_factory(), 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);
|
| - matcher.AddConditionSets(url_matcher_condition_set);
|
| -
|
| - // Test that the result is correct and matches http://www.example.com and
|
| - // https://www.example.com
|
| - GURL http_url("http://www.example.com");
|
| - net::TestURLRequestContext context;
|
| - scoped_ptr<net::URLRequest> http_request(context.CreateRequest(
|
| - http_url, net::DEFAULT_PRIORITY, NULL, NULL));
|
| - WebRequestData data(http_request.get(), ON_BEFORE_REQUEST);
|
| - WebRequestDataWithMatchIds request_data(&data);
|
| - request_data.url_match_ids = matcher.MatchURL(http_url);
|
| - EXPECT_EQ(1u, request_data.url_match_ids.size());
|
| - EXPECT_TRUE(result->IsFulfilled(*(request_data.url_match_ids.begin()),
|
| - request_data));
|
| -
|
| - GURL https_url("https://www.example.com");
|
| - request_data.url_match_ids = matcher.MatchURL(https_url);
|
| - EXPECT_EQ(1u, request_data.url_match_ids.size());
|
| - scoped_ptr<net::URLRequest> https_request(context.CreateRequest(
|
| - https_url, net::DEFAULT_PRIORITY, NULL, NULL));
|
| - data.request = https_request.get();
|
| - EXPECT_TRUE(result->IsFulfilled(*(request_data.url_match_ids.begin()),
|
| - request_data));
|
| -
|
| - // Check that both, hostPrefix and hostSuffix are evaluated.
|
| - GURL https_foo_url("https://foo.example.com");
|
| - request_data.url_match_ids = matcher.MatchURL(https_foo_url);
|
| - EXPECT_EQ(0u, request_data.url_match_ids.size());
|
| - scoped_ptr<net::URLRequest> https_foo_request(context.CreateRequest(
|
| - https_foo_url, net::DEFAULT_PRIORITY, NULL, NULL));
|
| - data.request = https_foo_request.get();
|
| - EXPECT_FALSE(result->IsFulfilled(-1, request_data));
|
| -}
|
| -
|
| -TEST(WebRequestConditionTest, TestPortFilter) {
|
| - // Necessary for TestURLRequest.
|
| - base::MessageLoopForIO message_loop;
|
| - URLMatcher matcher;
|
| -
|
| - WebRequestConditionSet::AnyVector conditions;
|
| - conditions.push_back(linked_ptr<base::Value>(base::test::ParseJson(
|
| - "{ \n"
|
| - " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n"
|
| - " \"url\": { \n"
|
| - " \"ports\": [80, [1000, 1010]], \n" // Allow 80;1000-1010.
|
| - " \"hostSuffix\": \"example.com\", \n"
|
| - " }, \n"
|
| - "}").release()));
|
| -
|
| - // Test insertion
|
| - std::string error;
|
| - scoped_ptr<WebRequestConditionSet> result = WebRequestConditionSet::Create(
|
| - NULL, matcher.condition_factory(), 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);
|
| - matcher.AddConditionSets(url_matcher_condition_set);
|
| -
|
| - std::set<URLMatcherConditionSet::ID> url_match_ids;
|
| -
|
| - // Test various URLs.
|
| - GURL http_url("http://www.example.com");
|
| - net::TestURLRequestContext context;
|
| - scoped_ptr<net::URLRequest> http_request(context.CreateRequest(
|
| - http_url, net::DEFAULT_PRIORITY, NULL, NULL));
|
| - url_match_ids = matcher.MatchURL(http_url);
|
| - ASSERT_EQ(1u, url_match_ids.size());
|
| -
|
| - GURL http_url_80("http://www.example.com:80");
|
| - scoped_ptr<net::URLRequest> http_request_80(context.CreateRequest(
|
| - http_url_80, net::DEFAULT_PRIORITY, NULL, NULL));
|
| - url_match_ids = matcher.MatchURL(http_url_80);
|
| - ASSERT_EQ(1u, url_match_ids.size());
|
| -
|
| - GURL http_url_1000("http://www.example.com:1000");
|
| - scoped_ptr<net::URLRequest> http_request_1000(context.CreateRequest(
|
| - http_url_1000, net::DEFAULT_PRIORITY, NULL, NULL));
|
| - url_match_ids = matcher.MatchURL(http_url_1000);
|
| - ASSERT_EQ(1u, url_match_ids.size());
|
| -
|
| - GURL http_url_2000("http://www.example.com:2000");
|
| - scoped_ptr<net::URLRequest> http_request_2000(context.CreateRequest(
|
| - http_url_2000, net::DEFAULT_PRIORITY, NULL, NULL));
|
| - url_match_ids = matcher.MatchURL(http_url_2000);
|
| - ASSERT_EQ(0u, url_match_ids.size());
|
| -}
|
| -
|
| -// Create a condition with two attributes: one on the request header and one on
|
| -// the response header. The Create() method should fail and complain that it is
|
| -// impossible that both conditions are fulfilled at the same time.
|
| -TEST(WebRequestConditionTest, ConditionsWithConflictingStages) {
|
| - // Necessary for TestURLRequest.
|
| - base::MessageLoopForIO message_loop;
|
| - URLMatcher matcher;
|
| -
|
| - std::string error;
|
| - scoped_ptr<WebRequestCondition> result;
|
| -
|
| - // Test error on incompatible application stages for involved attributes.
|
| - error.clear();
|
| - result = WebRequestCondition::Create(
|
| - NULL,
|
| - matcher.condition_factory(),
|
| - *base::test::ParseJson(
|
| - "{ \n"
|
| - " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n"
|
| - // Pass a JS array with one empty object to each of the header
|
| - // filters.
|
| - " \"requestHeaders\": [{}], \n"
|
| - " \"responseHeaders\": [{}], \n"
|
| - "}"),
|
| - &error);
|
| - EXPECT_FALSE(error.empty());
|
| - EXPECT_FALSE(result.get());
|
| -}
|
| -
|
| -} // namespace extensions
|
|
|