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

Side by Side Diff: chrome/browser/extensions/api/declarative_webrequest/webrequest_rule_unittest.cc

Issue 11547033: Implement declarativeContent API. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rule.h "
6
7 #include "base/json/json_reader.h"
8 #include "base/memory/linked_ptr.h"
9 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_action .h"
10 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_condit ion.h"
11 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_condit ion_attribute.h"
12 #include "chrome/common/extensions/matcher/url_matcher.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 namespace extensions {
16
17 namespace {
18 const char kExtId[] = "ext1";
19 } // namespace
20
21 TEST(WebRequestRuleTest, Create) {
22 const char kRule[] =
23 "{ \n"
24 " \"id\": \"rule1\", \n"
25 " \"conditions\": [ \n"
26 " { \n"
27 " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n"
28 " \"url\": {\"hostSuffix\": \"foo.com\"}, \n"
29 " \"contentType\": [\"image/jpeg\"] \n"
30 " } \n"
31 " ], \n"
32 " \"actions\": [ \n"
33 " { \n"
34 " \"instanceType\": \"declarativeWebRequest.CancelRequest\" \n"
35 " } \n"
36 " ], \n"
37 " \"priority\": 200 \n"
38 "} ";
39
40 scoped_ptr<Value> value(base::JSONReader::Read(kRule));
41 ASSERT_TRUE(value.get());
42
43 linked_ptr<RulesRegistry::Rule> rule(new RulesRegistry::Rule);
44 ASSERT_TRUE(RulesRegistry::Rule::Populate(*value, rule.get()));
45
46 URLMatcher matcher;
47 std::string error;
48 scoped_ptr<WebRequestRule> web_request_rule(
49 WebRequestRule::Create(matcher.condition_factory(), kExtId, base::Time(),
50 rule, &error));
51 ASSERT_TRUE(web_request_rule.get());
52 EXPECT_TRUE(error.empty());
53
54 EXPECT_EQ(kExtId, web_request_rule->id().first);
55 EXPECT_EQ("rule1", web_request_rule->id().second);
56
57 EXPECT_EQ(200, web_request_rule->priority());
58
59 const WebRequestConditionSet& condition_set = web_request_rule->conditions();
60 const WebRequestConditionSet::Conditions conditions =
61 condition_set.conditions();
62 ASSERT_EQ(1u, conditions.size());
63 linked_ptr<WebRequestCondition> condition = conditions[0];
64 const WebRequestConditionAttributes& condition_attributes =
65 condition->condition_attributes();
66 ASSERT_EQ(1u, condition_attributes.size());
67 EXPECT_EQ(WebRequestConditionAttribute::CONDITION_CONTENT_TYPE,
68 condition_attributes[0]->GetType());
69
70 const WebRequestActionSet& action_set = web_request_rule->actions();
71 const WebRequestActionSet::Actions& actions = action_set.actions();
72 ASSERT_EQ(1u, actions.size());
73 EXPECT_EQ(WebRequestAction::ACTION_CANCEL_REQUEST, actions[0]->GetType());
74 }
75
76 TEST(WebRequestRuleTest, CheckConsistency) {
77 // The contentType condition can only be evaluated during ON_HEADERS_RECEIVED
78 // but the redirect action can only be executed during ON_BEFORE_REQUEST.
79 // Therefore, this is an inconsistent rule that needs to be flagged.
80 const char kRule[] =
81 "{ \n"
82 " \"id\": \"rule1\", \n"
83 " \"conditions\": [ \n"
84 " { \n"
85 " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n"
86 " \"url\": {\"hostSuffix\": \"foo.com\"}, \n"
87 " \"contentType\": [\"image/jpeg\"] \n"
88 " } \n"
89 " ], \n"
90 " \"actions\": [ \n"
91 " { \n"
92 " \"instanceType\": \"declarativeWebRequest.RedirectRequest\",\n"
93 " \"redirectUrl\": \"http://bar.com\" \n"
94 " } \n"
95 " ], \n"
96 " \"priority\": 200 \n"
97 "} ";
98
99 scoped_ptr<Value> value(base::JSONReader::Read(kRule));
100 ASSERT_TRUE(value.get());
101
102 linked_ptr<RulesRegistry::Rule> rule(new RulesRegistry::Rule);
103 ASSERT_TRUE(RulesRegistry::Rule::Populate(*value, rule.get()));
104
105 URLMatcher matcher;
106 std::string error;
107 scoped_ptr<WebRequestRule> web_request_rule(
108 WebRequestRule::Create(matcher.condition_factory(), kExtId, base::Time(),
109 rule, &error));
110 EXPECT_FALSE(web_request_rule.get());
111 EXPECT_FALSE(error.empty());
112 }
113
114 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698