| Index: chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry_unittest.cc
|
| diff --git a/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry_unittest.cc b/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry_unittest.cc
|
| index 3d6895c559d3856079aab304eb38a3142c7e4d0d..c3767fd99192b00d896318affc6fc006e74e9065 100644
|
| --- a/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry_unittest.cc
|
| +++ b/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry_unittest.cc
|
| @@ -6,15 +6,16 @@
|
|
|
| #include <vector>
|
|
|
| +#include "base/json/json_reader.h"
|
| #include "base/memory/linked_ptr.h"
|
| #include "base/message_loop.h"
|
| #include "base/values.h"
|
| -#include "chrome/common/extensions/matcher/url_matcher_constants.h"
|
| #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_constants.h"
|
| -#include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rule.h"
|
| #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h"
|
| +#include "chrome/common/extensions/matcher/url_matcher_constants.h"
|
| #include "content/public/test/test_browser_thread.h"
|
| #include "net/url_request/url_request_test_util.h"
|
| +#include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| namespace {
|
| @@ -28,6 +29,8 @@ const char kRuleId4[] = "rule4";
|
|
|
| namespace extensions {
|
|
|
| +using testing::HasSubstr;
|
| +
|
| namespace helpers = extension_web_request_api_helpers;
|
| namespace keys = declarative_webrequest_constants;
|
| namespace keys2 = url_matcher_constants;
|
| @@ -230,7 +233,7 @@ TEST_F(WebRequestRulesRegistryTest, AddRulesImpl) {
|
| net::TestURLRequestContext context;
|
| net::TestURLRequest http_request(http_url, NULL, &context);
|
| matches = registry->GetMatches(
|
| - WebRequestRule::RequestData(&http_request, ON_BEFORE_REQUEST));
|
| + DeclarativeWebRequestData(&http_request, ON_BEFORE_REQUEST));
|
| EXPECT_EQ(2u, matches.size());
|
| EXPECT_TRUE(matches.find(std::make_pair(kExtensionId, kRuleId1)) !=
|
| matches.end());
|
| @@ -240,7 +243,7 @@ TEST_F(WebRequestRulesRegistryTest, AddRulesImpl) {
|
| GURL foobar_url("http://www.foobar.com");
|
| net::TestURLRequest foobar_request(foobar_url, NULL, &context);
|
| matches = registry->GetMatches(
|
| - WebRequestRule::RequestData(&foobar_request, ON_BEFORE_REQUEST));
|
| + DeclarativeWebRequestData(&foobar_request, ON_BEFORE_REQUEST));
|
| EXPECT_EQ(1u, matches.size());
|
| EXPECT_TRUE(matches.find(std::make_pair(kExtensionId, kRuleId2)) !=
|
| matches.end());
|
| @@ -364,7 +367,7 @@ TEST_F(WebRequestRulesRegistryTest, Precedences) {
|
| std::list<LinkedPtrEventResponseDelta> deltas =
|
| registry->CreateDeltas(
|
| NULL,
|
| - WebRequestRule::RequestData(&request, ON_BEFORE_REQUEST),
|
| + DeclarativeWebRequestData(&request, ON_BEFORE_REQUEST),
|
| false);
|
|
|
| // The second extension is installed later and will win for this reason
|
| @@ -414,7 +417,7 @@ TEST_F(WebRequestRulesRegistryTest, Priorities) {
|
| std::list<LinkedPtrEventResponseDelta> deltas =
|
| registry->CreateDeltas(
|
| NULL,
|
| - WebRequestRule::RequestData(&request, ON_BEFORE_REQUEST),
|
| + DeclarativeWebRequestData(&request, ON_BEFORE_REQUEST),
|
| false);
|
|
|
| // The redirect by the first extension is ignored due to the ignore rule.
|
| @@ -426,4 +429,44 @@ TEST_F(WebRequestRulesRegistryTest, Priorities) {
|
| effective_rule->extension_install_time);
|
| EXPECT_EQ(GURL("http://www.bar.com"), effective_rule->new_url);
|
| }
|
| +
|
| +TEST_F(WebRequestRulesRegistryTest, CheckConsistency) {
|
| + // The contentType condition can only be evaluated during ON_HEADERS_RECEIVED
|
| + // but the redirect action can only be executed during ON_BEFORE_REQUEST.
|
| + // Therefore, this is an inconsistent rule that needs to be flagged.
|
| + const char kRule[] =
|
| + "{ \n"
|
| + " \"id\": \"rule1\", \n"
|
| + " \"conditions\": [ \n"
|
| + " { \n"
|
| + " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n"
|
| + " \"url\": {\"hostSuffix\": \"foo.com\"}, \n"
|
| + " \"contentType\": [\"image/jpeg\"] \n"
|
| + " } \n"
|
| + " ], \n"
|
| + " \"actions\": [ \n"
|
| + " { \n"
|
| + " \"instanceType\": \"declarativeWebRequest.RedirectRequest\",\n"
|
| + " \"redirectUrl\": \"http://bar.com\" \n"
|
| + " } \n"
|
| + " ], \n"
|
| + " \"priority\": 200 \n"
|
| + "} ";
|
| +
|
| + scoped_ptr<Value> value(base::JSONReader::Read(kRule));
|
| + ASSERT_TRUE(value.get());
|
| +
|
| + std::vector<linked_ptr<RulesRegistry::Rule> > rules;
|
| + rules.push_back(make_linked_ptr(new RulesRegistry::Rule));
|
| + ASSERT_TRUE(RulesRegistry::Rule::Populate(*value, rules.back().get()));
|
| +
|
| + scoped_refptr<WebRequestRulesRegistry> registry(
|
| + new TestWebRequestRulesRegistry());
|
| +
|
| + URLMatcher matcher;
|
| + std::string error = registry->AddRulesImpl(kExtensionId, rules);
|
| + EXPECT_THAT(error, HasSubstr("no time in the request life-cycle"));
|
| + EXPECT_TRUE(registry->IsEmpty());
|
| +}
|
| +
|
| } // namespace extensions
|
|
|