Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(728)

Unified Diff: chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry_unittest.cc

Issue 10406013: Support extension precedences in declarative WebRequest API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed Matt's comments Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 6fc2a2eb2a3262c6063ea73e3d90f70b3d348322..724b5f8148b0d28a0d9d940654fe83ec7cc245b3 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
@@ -11,6 +11,7 @@
#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/web_request/web_request_api_helpers.h"
#include "content/test/test_browser_thread.h"
#include "net/url_request/url_request_test_util.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -20,13 +21,32 @@ const char kExtensionId[] = "ext1";
const char kExtensionId2[] = "ext2";
const char kRuleId1[] = "rule1";
const char kRuleId2[] = "rule2";
+const char kRuleId3[] = "rule3";
} // namespace
namespace extensions {
+namespace helpers = extension_web_request_api_helpers;
namespace keys = declarative_webrequest_constants;
namespace keys2 = url_matcher_constants;
+class TestWebRequestRulesRegistry : public WebRequestRulesRegistry {
+ public:
+ TestWebRequestRulesRegistry() : WebRequestRulesRegistry(NULL) {}
+ virtual ~TestWebRequestRulesRegistry() {}
+
+ protected:
+ virtual base::Time GetExtensionInstallationTime(
+ const std::string& extension_id) const {
+ if (extension_id == kExtensionId)
+ return base::Time() + base::TimeDelta::FromDays(1);
+ else if (extension_id == kExtensionId2)
+ return base::Time() + base::TimeDelta::FromDays(2);
+ else
+ return base::Time();
+ }
+};
+
class WebRequestRulesRegistryTest : public testing::Test {
public:
public:
@@ -116,6 +136,32 @@ class WebRequestRulesRegistryTest : public testing::Test {
return rule;
}
+ linked_ptr<RulesRegistry::Rule> CreateRedirectRule(
+ const std::string& destination) {
+ DictionaryValue condition_dict;
+ condition_dict.SetString(keys::kInstanceTypeKey, keys::kRequestMatcherType);
+
+ 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(keys::kInstanceTypeKey, keys::kRedirectRequestType);
+ action_dict.SetString(keys::kRedirectUrlKey, destination);
+
+ 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(kRuleId3));
+ 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;
@@ -123,7 +169,8 @@ class WebRequestRulesRegistryTest : public testing::Test {
};
TEST_F(WebRequestRulesRegistryTest, AddRulesImpl) {
- scoped_refptr<WebRequestRulesRegistry> registry(new WebRequestRulesRegistry);
+ scoped_refptr<WebRequestRulesRegistry> registry(
+ new TestWebRequestRulesRegistry());
std::string error;
std::vector<linked_ptr<RulesRegistry::Rule> > rules;
@@ -153,7 +200,8 @@ TEST_F(WebRequestRulesRegistryTest, AddRulesImpl) {
}
TEST_F(WebRequestRulesRegistryTest, RemoveRulesImpl) {
- scoped_refptr<WebRequestRulesRegistry> registry(new WebRequestRulesRegistry);
+ scoped_refptr<WebRequestRulesRegistry> registry(
+ new TestWebRequestRulesRegistry());
std::string error;
// Setup RulesRegistry to contain two rules.
@@ -194,7 +242,8 @@ TEST_F(WebRequestRulesRegistryTest, RemoveRulesImpl) {
}
TEST_F(WebRequestRulesRegistryTest, RemoveAllRulesImpl) {
- scoped_refptr<WebRequestRulesRegistry> registry(new WebRequestRulesRegistry);
+ scoped_refptr<WebRequestRulesRegistry> registry(
+ new TestWebRequestRulesRegistry());
std::string error;
// Setup RulesRegistry to contain two rules, one for each extension.
@@ -238,4 +287,44 @@ TEST_F(WebRequestRulesRegistryTest, RemoveAllRulesImpl) {
EXPECT_TRUE(registry->IsEmpty());
}
+TEST_F(WebRequestRulesRegistryTest, Precedences) {
+ scoped_refptr<WebRequestRulesRegistry> registry(
+ new TestWebRequestRulesRegistry());
+ std::string error;
+
+ std::vector<linked_ptr<RulesRegistry::Rule> > rules_to_add_1(1);
+ rules_to_add_1[0] = CreateRedirectRule("http://www.foo.com");
+ error = registry->AddRules(kExtensionId, rules_to_add_1);
+ EXPECT_EQ("", error);
+
+ std::vector<linked_ptr<RulesRegistry::Rule> > rules_to_add_2(1);
+ rules_to_add_2[0] = CreateRedirectRule("http://www.bar.com");
+ error = registry->AddRules(kExtensionId2, rules_to_add_2);
+ EXPECT_EQ("", error);
+
+ GURL url("http://www.google.com");
+ TestURLRequest request(url, NULL);
+ std::list<LinkedPtrEventResponseDelta> deltas =
+ registry->CreateDeltas(&request, ON_BEFORE_REQUEST);
+
+ // The second extension is installed later and will win for this reason
+ // in conflict resolution.
+ ASSERT_EQ(2u, deltas.size());
+ deltas.sort(&helpers::InDecreasingExtensionInstallationTimeOrder);
+
+ std::list<LinkedPtrEventResponseDelta>::iterator i = deltas.begin();
+ LinkedPtrEventResponseDelta winner = *i++;
+ LinkedPtrEventResponseDelta loser = *i;
+
+ EXPECT_EQ(kExtensionId2, winner->extension_id);
+ EXPECT_EQ(base::Time() + base::TimeDelta::FromDays(2),
+ winner->extension_install_time);
+ EXPECT_EQ(GURL("http://www.bar.com"), winner->new_url);
+
+ EXPECT_EQ(kExtensionId, loser->extension_id);
+ EXPECT_EQ(base::Time() + base::TimeDelta::FromDays(1),
+ loser->extension_install_time);
+ EXPECT_EQ(GURL("http://www.foo.com"), loser->new_url);
+}
+
} // namespace extensions
« no previous file with comments | « chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698