| OLD | NEW |
| (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 |
| OLD | NEW |