| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/extensions/api/declarative_content/chrome_content_rules
_registry.h" | 5 #include "chrome/browser/extensions/api/declarative_content/chrome_content_rules
_registry.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/test/values_test_util.h" | 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" | 10 #include "chrome/browser/extensions/test_extension_environment.h" |
| 12 #include "chrome/test/base/testing_profile.h" | 11 #include "chrome/test/base/testing_profile.h" |
| 13 #include "content/public/browser/navigation_details.h" | 12 #include "content/public/browser/navigation_details.h" |
| 14 #include "content/public/browser/web_contents.h" | 13 #include "content/public/browser/web_contents.h" |
| 15 #include "content/public/common/frame_navigate_params.h" | 14 #include "content/public/common/frame_navigate_params.h" |
| 16 #include "testing/gmock/include/gmock/gmock.h" | 15 #include "testing/gmock/include/gmock/gmock.h" |
| 17 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
| 18 | 17 |
| 19 namespace extensions { | 18 namespace extensions { |
| 20 | 19 |
| 21 using base::test::ParseJson; | 20 TEST(DeclarativeChromeContentRulesRegistryTest, ActiveRulesDoesntGrow) { |
| 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 DeclarativeChromeContentRulesRegistryTest : public testing::Test { | |
| 28 protected: | |
| 29 using RulesMap = | |
| 30 std::map<content::WebContents*, std::set<const ContentRule*>>; | |
| 31 static const RulesMap& active_rules( | |
| 32 const ChromeContentRulesRegistry& registry) { | |
| 33 return registry.active_rules_; | |
| 34 } | |
| 35 }; | |
| 36 | |
| 37 namespace { | |
| 38 | |
| 39 TEST_F(DeclarativeChromeContentRulesRegistryTest, ActiveRulesDoesntGrow) { | |
| 40 TestExtensionEnvironment env; | 21 TestExtensionEnvironment env; |
| 41 | 22 |
| 42 scoped_refptr<ChromeContentRulesRegistry> registry( | 23 scoped_refptr<ChromeContentRulesRegistry> registry( |
| 43 new ChromeContentRulesRegistry(env.profile(), NULL)); | 24 new ChromeContentRulesRegistry(env.profile(), NULL)); |
| 44 | 25 |
| 45 EXPECT_EQ(0u, active_rules(*registry.get()).size()); | 26 EXPECT_EQ(0u, registry->GetActiveRulesCountForTesting()); |
| 46 | 27 |
| 47 content::LoadCommittedDetails load_details; | 28 scoped_ptr<content::WebContents> tab = env.MakeTab(); |
| 48 content::FrameNavigateParams navigate_params; | 29 registry->MonitorWebContentsForRuleEvaluation(tab.get()); |
| 49 scoped_ptr<WebContents> tab = env.MakeTab(); | 30 registry->DidNavigateMainFrame(tab.get(), content::LoadCommittedDetails(), |
| 50 registry->DidNavigateMainFrame(tab.get(), load_details, navigate_params); | 31 content::FrameNavigateParams()); |
| 51 EXPECT_EQ(0u, active_rules(*registry.get()).size()); | 32 EXPECT_EQ(0u, registry->GetActiveRulesCountForTesting()); |
| 52 | 33 |
| 53 // Add a rule. | 34 // Add a rule. |
| 54 linked_ptr<RulesRegistry::Rule> rule(new RulesRegistry::Rule); | 35 linked_ptr<RulesRegistry::Rule> rule(new RulesRegistry::Rule); |
| 55 RulesRegistry::Rule::Populate( | 36 RulesRegistry::Rule::Populate( |
| 56 *ParseJson( | 37 *base::test::ParseJson( |
| 57 "{\n" | 38 "{\n" |
| 58 " \"id\": \"rule1\",\n" | 39 " \"id\": \"rule1\",\n" |
| 59 " \"priority\": 100,\n" | 40 " \"priority\": 100,\n" |
| 60 " \"conditions\": [\n" | 41 " \"conditions\": [\n" |
| 61 " {\n" | 42 " {\n" |
| 62 " \"instanceType\": \"declarativeContent.PageStateMatcher\",\n" | 43 " \"instanceType\": \"declarativeContent.PageStateMatcher\",\n" |
| 63 " \"css\": [\"input\"]\n" | 44 " \"css\": [\"input\"]\n" |
| 64 " }],\n" | 45 " }],\n" |
| 65 " \"actions\": [\n" | 46 " \"actions\": [\n" |
| 66 " { \"instanceType\": \"declarativeContent.ShowPageAction\" }\n" | 47 " { \"instanceType\": \"declarativeContent.ShowPageAction\" }\n" |
| 67 " ]\n" | 48 " ]\n" |
| 68 "}"), | 49 "}"), |
| 69 rule.get()); | 50 rule.get()); |
| 70 std::vector<linked_ptr<RulesRegistry::Rule> > rules; | 51 std::vector<linked_ptr<RulesRegistry::Rule> > rules; |
| 71 rules.push_back(rule); | 52 rules.push_back(rule); |
| 72 | 53 |
| 73 const Extension* extension = env.MakeExtension(*ParseJson( | 54 const Extension* extension = env.MakeExtension(*base::test::ParseJson( |
| 74 "{\"page_action\": {}}")); | 55 "{\"page_action\": {}}")); |
| 75 registry->AddRulesImpl(extension->id(), rules); | 56 registry->AddRulesImpl(extension->id(), rules); |
| 76 | 57 |
| 77 registry->DidNavigateMainFrame(tab.get(), load_details, navigate_params); | 58 registry->DidNavigateMainFrame(tab.get(), content::LoadCommittedDetails(), |
| 78 EXPECT_EQ(0u, active_rules(*registry.get()).size()); | 59 content::FrameNavigateParams()); |
| 60 EXPECT_EQ(0u, registry->GetActiveRulesCountForTesting()); |
| 79 | 61 |
| 80 std::vector<std::string> css_selectors; | 62 std::vector<std::string> css_selectors; |
| 81 css_selectors.push_back("input"); | 63 css_selectors.push_back("input"); |
| 82 registry->Apply(tab.get(), css_selectors); | 64 registry->UpdateMatchingCssSelectorsForTesting(tab.get(), css_selectors); |
| 83 EXPECT_EQ(1u, active_rules(*registry.get()).size()); | 65 EXPECT_EQ(1u, registry->GetActiveRulesCountForTesting()); |
| 84 | 66 |
| 85 // Closing the tab should erase its entry from active_rules_. | 67 // Closing the tab should erase its entry from active_rules_. |
| 86 tab.reset(); | 68 tab.reset(); |
| 87 EXPECT_EQ(0u, active_rules(*registry.get()).size()); | 69 EXPECT_EQ(0u, registry->GetActiveRulesCountForTesting()); |
| 88 | 70 |
| 89 tab = env.MakeTab(); | 71 tab = env.MakeTab(); |
| 90 registry->Apply(tab.get(), css_selectors); | 72 registry->MonitorWebContentsForRuleEvaluation(tab.get()); |
| 91 EXPECT_EQ(1u, active_rules(*registry.get()).size()); | 73 registry->UpdateMatchingCssSelectorsForTesting(tab.get(), css_selectors); |
| 74 EXPECT_EQ(1u, registry->GetActiveRulesCountForTesting()); |
| 92 // Navigating the tab should erase its entry from active_rules_ if | 75 // Navigating the tab should erase its entry from active_rules_ if |
| 93 // it no longer matches. | 76 // it no longer matches. |
| 94 registry->DidNavigateMainFrame(tab.get(), load_details, navigate_params); | 77 registry->DidNavigateMainFrame(tab.get(), content::LoadCommittedDetails(), |
| 95 EXPECT_EQ(0u, active_rules(*registry.get()).size()); | 78 content::FrameNavigateParams()); |
| 79 EXPECT_EQ(0u, registry->GetActiveRulesCountForTesting()); |
| 96 } | 80 } |
| 97 | 81 |
| 98 } // namespace | |
| 99 } // namespace extensions | 82 } // namespace extensions |
| OLD | NEW |