| 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
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..8819a320a2df3c14ea7beecce15c3d9ec2fbedd7
|
| --- /dev/null
|
| +++ b/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry_unittest.cc
|
| @@ -0,0 +1,143 @@
|
| +// 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_rules_registry.h"
|
| +
|
| +#include <vector>
|
| +
|
| +#include "base/memory/linked_ptr.h"
|
| +#include "base/message_loop.h"
|
| +#include "base/values.h"
|
| +#include "content/test/test_browser_thread.h"
|
| +#include "net/url_request/url_request_test_util.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace {
|
| +const char kExtensionId[] = "ext1";
|
| +const char kRuleId1[] = "rule1";
|
| +const char kRuleId2[] = "rule2";
|
| +
|
| +const char kCancelRequestType[] = "experimental.webRequest.CancelRequest";
|
| +const char kRequestMatcher[] = "experimental.webRequest.RequestMatcher";
|
| +const char kInstanceType[] = "instanceType";
|
| +}
|
| +
|
| +namespace extensions {
|
| +
|
| +class WebRequestRulesRegistryTest : public testing::Test {
|
| + public:
|
| + public:
|
| + WebRequestRulesRegistryTest()
|
| + : message_loop(MessageLoop::TYPE_IO),
|
| + ui(content::BrowserThread::UI, &message_loop),
|
| + io(content::BrowserThread::IO, &message_loop) {}
|
| +
|
| + virtual ~WebRequestRulesRegistryTest() {}
|
| +
|
| + virtual void TearDown() OVERRIDE {
|
| + // Make sure that deletion traits of all registries are executed.
|
| + message_loop.RunAllPending();
|
| + }
|
| +
|
| + // Returns a rule that roughly matches http://*.example.com and
|
| + // https://www.example.com and cancels it
|
| + linked_ptr<RulesRegistry::Rule> CreateRule1() {
|
| + DictionaryValue http_condition_dict;
|
| + http_condition_dict.SetString("scheme", "http");
|
| + http_condition_dict.SetString("host_suffix", "example.com");
|
| + http_condition_dict.SetString(kInstanceType, kRequestMatcher);
|
| +
|
| + DictionaryValue https_condition_dict;
|
| + https_condition_dict.SetString("scheme", "https");
|
| + https_condition_dict.SetString("host_suffix", "example.com");
|
| + https_condition_dict.SetString("host_prefix", "www");
|
| + https_condition_dict.SetString(kInstanceType, kRequestMatcher);
|
| +
|
| + linked_ptr<json_schema_compiler::any::Any> condition1 = make_linked_ptr(
|
| + new json_schema_compiler::any::Any);
|
| + condition1->Init(http_condition_dict);
|
| +
|
| + linked_ptr<json_schema_compiler::any::Any> condition2 = make_linked_ptr(
|
| + new json_schema_compiler::any::Any);
|
| + condition2->Init(https_condition_dict);
|
| +
|
| + DictionaryValue action_dict;
|
| + action_dict.SetString(kInstanceType, kCancelRequestType);
|
| +
|
| + linked_ptr<json_schema_compiler::any::Any> action1 = make_linked_ptr(
|
| + new json_schema_compiler::any::Any);
|
| + action1->Init(action_dict);
|
| +
|
| + linked_ptr<RulesRegistry::Rule> rule =
|
| + make_linked_ptr(new RulesRegistry::Rule);
|
| + rule->id.reset(new std::string(kRuleId1));
|
| + rule->priority.reset(new int(100));
|
| + rule->actions.push_back(action1);
|
| + rule->conditions.push_back(condition1);
|
| + rule->conditions.push_back(condition2);
|
| + return rule;
|
| + }
|
| +
|
| + // Returns a rule that matches anything and cancels it.
|
| + linked_ptr<RulesRegistry::Rule> CreateRule2() {
|
| + DictionaryValue condition_dict;
|
| + condition_dict.SetString(kInstanceType, kRequestMatcher);
|
| +
|
| + linked_ptr<json_schema_compiler::any::Any> condition = make_linked_ptr(
|
| + new json_schema_compiler::any::Any);
|
| + condition->Init(condition_dict);
|
| +
|
| + DictionaryValue action_dict;
|
| + action_dict.SetString(kInstanceType, kCancelRequestType);
|
| +
|
| + linked_ptr<json_schema_compiler::any::Any> action = make_linked_ptr(
|
| + new json_schema_compiler::any::Any);
|
| + action->Init(action_dict);
|
| +
|
| + linked_ptr<RulesRegistry::Rule> rule =
|
| + make_linked_ptr(new RulesRegistry::Rule);
|
| + rule->id.reset(new std::string(kRuleId2));
|
| + rule->priority.reset(new int(100));
|
| + rule->actions.push_back(action);
|
| + rule->conditions.push_back(condition);
|
| + return rule;
|
| + }
|
| +
|
| + protected:
|
| + MessageLoop message_loop;
|
| + content::TestBrowserThread ui;
|
| + content::TestBrowserThread io;
|
| +};
|
| +
|
| +TEST_F(WebRequestRulesRegistryTest, AddRulesImpl) {
|
| + scoped_refptr<WebRequestRulesRegistry> registry(new WebRequestRulesRegistry);
|
| + std::string error;
|
| +
|
| + std::vector<linked_ptr<RulesRegistry::Rule> > rules;
|
| + rules.push_back(CreateRule1());
|
| + rules.push_back(CreateRule2());
|
| +
|
| + error = registry->AddRules(kExtensionId, rules);
|
| + EXPECT_TRUE(error.empty());
|
| +
|
| + std::set<WebRequestRule::GlobalRuleId> matches;
|
| +
|
| + GURL http_url("http://www.example.com");
|
| + TestURLRequest http_request(http_url, NULL);
|
| + matches = registry->GetMatches(&http_request);
|
| + EXPECT_EQ(2u, matches.size());
|
| + EXPECT_TRUE(matches.find(std::make_pair(kExtensionId, kRuleId1)) !=
|
| + matches.end());
|
| + EXPECT_TRUE(matches.find(std::make_pair(kExtensionId, kRuleId2)) !=
|
| + matches.end());
|
| +
|
| + GURL foobar_url("http://www.foobar.com");
|
| + TestURLRequest foobar_request(foobar_url, NULL);
|
| + matches = registry->GetMatches(&foobar_request);
|
| + EXPECT_EQ(1u, matches.size());
|
| + EXPECT_TRUE(matches.find(std::make_pair(kExtensionId, kRuleId2)) !=
|
| + matches.end());
|
| +}
|
| +
|
| +} // namespace extensions
|
|
|