| OLD | NEW |
| (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_content/content_rules_regist
ry.h" | |
| 6 | |
| 7 #include <string> | |
| 8 | |
| 9 #include "base/test/values_test_util.h" | |
| 10 #include "chrome/browser/extensions/extension_tab_util.h" | |
| 11 #include "chrome/browser/extensions/test_extension_environment.h" | |
| 12 #include "chrome/test/base/testing_profile.h" | |
| 13 #include "content/public/browser/navigation_details.h" | |
| 14 #include "content/public/browser/web_contents.h" | |
| 15 #include "content/public/common/frame_navigate_params.h" | |
| 16 #include "testing/gmock/include/gmock/gmock.h" | |
| 17 #include "testing/gtest/include/gtest/gtest.h" | |
| 18 | |
| 19 namespace extensions { | |
| 20 | |
| 21 using base::test::ParseJson; | |
| 22 using testing::HasSubstr; | |
| 23 using content::WebContents; | |
| 24 | |
| 25 // Must be outside the anonymous namespace to be a friend of | |
| 26 // ContentRulesRegistry. | |
| 27 class DeclarativeContentRulesRegistryTest : public testing::Test { | |
| 28 protected: | |
| 29 static const std::map<int, std::set<ContentRule*> >& active_rules( | |
| 30 const ContentRulesRegistry& registry) { | |
| 31 return registry.active_rules_; | |
| 32 } | |
| 33 }; | |
| 34 | |
| 35 namespace { | |
| 36 | |
| 37 TEST_F(DeclarativeContentRulesRegistryTest, ActiveRulesDoesntGrow) { | |
| 38 TestExtensionEnvironment env; | |
| 39 | |
| 40 scoped_refptr<ContentRulesRegistry> registry( | |
| 41 new ContentRulesRegistry(env.profile(), NULL)); | |
| 42 | |
| 43 EXPECT_EQ(0u, active_rules(*registry.get()).size()); | |
| 44 | |
| 45 content::LoadCommittedDetails load_details; | |
| 46 content::FrameNavigateParams navigate_params; | |
| 47 scoped_ptr<WebContents> tab = env.MakeTab(); | |
| 48 registry->DidNavigateMainFrame(tab.get(), load_details, navigate_params); | |
| 49 EXPECT_EQ(0u, active_rules(*registry.get()).size()); | |
| 50 | |
| 51 // Add a rule. | |
| 52 linked_ptr<RulesRegistry::Rule> rule(new RulesRegistry::Rule); | |
| 53 RulesRegistry::Rule::Populate( | |
| 54 *ParseJson( | |
| 55 "{\n" | |
| 56 " \"id\": \"rule1\",\n" | |
| 57 " \"priority\": 100,\n" | |
| 58 " \"conditions\": [\n" | |
| 59 " {\n" | |
| 60 " \"instanceType\": \"declarativeContent.PageStateMatcher\",\n" | |
| 61 " \"css\": [\"input\"]\n" | |
| 62 " }],\n" | |
| 63 " \"actions\": [\n" | |
| 64 " { \"instanceType\": \"declarativeContent.ShowPageAction\" }\n" | |
| 65 " ]\n" | |
| 66 "}"), | |
| 67 rule.get()); | |
| 68 std::vector<linked_ptr<RulesRegistry::Rule> > rules; | |
| 69 rules.push_back(rule); | |
| 70 | |
| 71 const Extension* extension = env.MakeExtension(*ParseJson( | |
| 72 "{\"page_action\": {}}")); | |
| 73 registry->AddRulesImpl(extension->id(), rules); | |
| 74 | |
| 75 registry->DidNavigateMainFrame(tab.get(), load_details, navigate_params); | |
| 76 EXPECT_EQ(0u, active_rules(*registry.get()).size()); | |
| 77 | |
| 78 std::vector<std::string> css_selectors; | |
| 79 css_selectors.push_back("input"); | |
| 80 registry->Apply(tab.get(), css_selectors); | |
| 81 EXPECT_EQ(1u, active_rules(*registry.get()).size()); | |
| 82 | |
| 83 // Closing the tab should erase its entry from active_rules_. | |
| 84 tab.reset(); | |
| 85 EXPECT_EQ(0u, active_rules(*registry.get()).size()); | |
| 86 | |
| 87 tab = env.MakeTab(); | |
| 88 registry->Apply(tab.get(), css_selectors); | |
| 89 EXPECT_EQ(1u, active_rules(*registry.get()).size()); | |
| 90 // Navigating the tab should erase its entry from active_rules_ if | |
| 91 // it no longer matches. | |
| 92 registry->DidNavigateMainFrame(tab.get(), load_details, navigate_params); | |
| 93 EXPECT_EQ(0u, active_rules(*registry.get()).size()); | |
| 94 } | |
| 95 | |
| 96 } // namespace | |
| 97 } // namespace extensions | |
| OLD | NEW |