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

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

Issue 14358004: Almost all actions in Declarative Web Request require all_urls host permissions (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Now with error messages Created 7 years, 8 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2013 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_rules_ checker.h"
6
7 #include "base/json/json_reader.h"
8 #include "chrome/common/extensions/extension_test_util.h"
9 #include "testing/gmock/include/gmock/gmock.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 namespace extensions {
13
14 using base::Value;
15 using extension_test_util::LoadManifest;
16 using testing::HasSubstr;
17
18 TEST(WebRequestRulesCheckerTest, StageChecker) {
19 // The contentType condition can only be evaluated during ON_HEADERS_RECEIVED
20 // but the redirect action can only be executed during ON_BEFORE_REQUEST.
21 // Therefore, this is an inconsistent rule that needs to be flagged.
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.RedirectRequest\",\n"
35 " \"redirectUrl\": \"http://bar.com\" \n"
36 " } \n"
37 " ], \n"
38 " \"priority\": 200 \n"
39 "} ";
40
41 scoped_ptr<Value> value(base::JSONReader::Read(kRule));
42 ASSERT_TRUE(value);
43
44 RulesRegistry::Rule rule;
45 ASSERT_TRUE(RulesRegistry::Rule::Populate(*value, &rule));
46
47 std::string error;
48 URLMatcher matcher;
49 scoped_ptr<WebRequestConditionSet> conditions =
50 WebRequestConditionSet::Create(
51 matcher.condition_factory(), rule.conditions, &error);
52 ASSERT_TRUE(error.empty()) << error;
53 ASSERT_TRUE(conditions);
54
55 bool bad_message = false;
56 scoped_ptr<WebRequestActionSet> actions =
57 WebRequestActionSet::Create(rule.actions, &error, &bad_message);
58 ASSERT_TRUE(error.empty()) << error;
59 ASSERT_FALSE(bad_message);
60 ASSERT_TRUE(actions);
61
62 WebRequestRulesChecker checker(NULL);
63 EXPECT_FALSE(checker.StageChecker(conditions.get(), actions.get(), &error));
64 EXPECT_THAT(error, HasSubstr("no time in the request life-cycle"));
65 }
66
67 TEST(WebRequestRulesCheckerTest, HostPermissionsChecker) {
68 const char kAction[] = // This action requires all URLs host permission.
69 "{ \n"
70 " \"instanceType\": \"declarativeWebRequest.RedirectRequest\",\n"
71 " \"redirectUrl\": \"http://bar.com\" \n"
72 "} ";
73 scoped_ptr<Value> action_value(base::JSONReader::Read(kAction));
74 ASSERT_TRUE(action_value);
75
76 WebRequestActionSet::AnyVector actions;
77 actions.push_back(linked_ptr<base::Value>(action_value.release()));
78 ASSERT_TRUE(actions.back().get());
79
80 std::string error;
81 bool bad_message = false;
82 scoped_ptr<WebRequestActionSet> action_set(
83 WebRequestActionSet::Create(actions, &error, &bad_message));
84 ASSERT_TRUE(error.empty()) << error;
85 ASSERT_FALSE(bad_message);
86 ASSERT_TRUE(action_set);
87
88 scoped_refptr<Extension> extension_no_url(
89 LoadManifest("permissions", "web_request_no_host.json"));
90 scoped_refptr<Extension> extension_some_urls(
91 LoadManifest("permissions", "web_request_com_host_permissions.json"));
92 scoped_refptr<Extension> extension_all_urls(
93 LoadManifest("permissions", "web_request_all_host_permissions.json"));
94
95 WebRequestRulesChecker checker_no_url(extension_no_url.get());
96 WebRequestRulesChecker checker_some_urls(extension_some_urls.get());
97 WebRequestRulesChecker checker_all_urls(extension_all_urls.get());
98
99 EXPECT_TRUE(
100 checker_all_urls.HostPermissionsChecker(action_set.get(), &error));
101 EXPECT_TRUE(error.empty()) << error;
102 EXPECT_FALSE(
103 checker_some_urls.HostPermissionsChecker(action_set.get(), &error));
104 EXPECT_THAT(error, HasSubstr("all URLs are needed"));
105 EXPECT_THAT(error, HasSubstr(action_set->actions().back()->GetName()));
106 EXPECT_FALSE(checker_no_url.HostPermissionsChecker(action_set.get(), &error));
107 EXPECT_THAT(error, HasSubstr("all URLs are needed"));
108 EXPECT_THAT(error, HasSubstr(action_set->actions().back()->GetName()));
109 }
110
111 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698