Enable Enterprise enrollment on desktop builds.
[chromium-blink-merge.git] / chrome / browser / extensions / api / declarative / rules_registry_service_unittest.cc
blob3fd755f0ab19b422ffe6142c9e65cdc216bbd436
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.
5 #include "chrome/browser/extensions/api/declarative/rules_registry_service.h"
7 #include "base/bind.h"
8 #include "base/message_loop/message_loop.h"
9 #include "chrome/browser/extensions/api/declarative/test_rules_registry.h"
10 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_constants.h"
11 #include "chrome/test/base/testing_profile.h"
12 #include "content/public/test/test_browser_thread.h"
13 #include "testing/gtest/include/gtest/gtest.h"
15 namespace {
16 const char kExtensionId[] = "foo";
18 void InsertRule(scoped_refptr<extensions::RulesRegistry> registry,
19 const std::string& id) {
20 std::vector<linked_ptr<extensions::RulesRegistry::Rule> > add_rules;
21 add_rules.push_back(make_linked_ptr(new extensions::RulesRegistry::Rule));
22 add_rules[0]->id.reset(new std::string(id));
23 std::string error = registry->AddRules(kExtensionId, add_rules);
24 EXPECT_TRUE(error.empty());
27 void VerifyNumberOfRules(scoped_refptr<extensions::RulesRegistry> registry,
28 size_t expected_number_of_rules) {
29 std::vector<linked_ptr<extensions::RulesRegistry::Rule> > get_rules;
30 registry->GetAllRules(kExtensionId, &get_rules);
31 EXPECT_EQ(expected_number_of_rules, get_rules.size());
34 } // namespace
36 namespace extensions {
38 class RulesRegistryServiceTest : public testing::Test {
39 public:
40 RulesRegistryServiceTest()
41 : ui_(content::BrowserThread::UI, &message_loop_),
42 io_(content::BrowserThread::IO, &message_loop_) {}
44 virtual ~RulesRegistryServiceTest() {}
46 virtual void TearDown() OVERRIDE {
47 // Make sure that deletion traits of all registries are executed.
48 message_loop_.RunUntilIdle();
51 protected:
52 base::MessageLoop message_loop_;
53 content::TestBrowserThread ui_;
54 content::TestBrowserThread io_;
57 TEST_F(RulesRegistryServiceTest, TestConstructionAndMultiThreading) {
58 const RulesRegistry::WebViewKey key(0, 0);
59 TestRulesRegistry* ui_registry =
60 new TestRulesRegistry(content::BrowserThread::UI, "ui", key);
62 TestRulesRegistry* io_registry =
63 new TestRulesRegistry(content::BrowserThread::IO, "io", key);
65 // Test registration.
67 RulesRegistryService registry_service(NULL);
68 registry_service.RegisterRulesRegistry(make_scoped_refptr(ui_registry));
69 registry_service.RegisterRulesRegistry(make_scoped_refptr(io_registry));
71 EXPECT_TRUE(registry_service.GetRulesRegistry(key, "ui").get());
72 EXPECT_TRUE(registry_service.GetRulesRegistry(key, "io").get());
73 EXPECT_FALSE(registry_service.GetRulesRegistry(key, "foo").get());
75 content::BrowserThread::PostTask(
76 content::BrowserThread::UI, FROM_HERE,
77 base::Bind(&InsertRule, registry_service.GetRulesRegistry(key, "ui"),
78 "ui_task"));
80 content::BrowserThread::PostTask(
81 content::BrowserThread::IO, FROM_HERE,
82 base::Bind(&InsertRule, registry_service.GetRulesRegistry(key, "io"),
83 "io_task"));
85 content::BrowserThread::PostTask(
86 content::BrowserThread::UI, FROM_HERE,
87 base::Bind(&VerifyNumberOfRules,
88 registry_service.GetRulesRegistry(key, "ui"), 1));
90 content::BrowserThread::PostTask(
91 content::BrowserThread::IO, FROM_HERE,
92 base::Bind(&VerifyNumberOfRules,
93 registry_service.GetRulesRegistry(key, "io"), 1));
95 message_loop_.RunUntilIdle();
97 // Test extension uninstalling.
99 registry_service.SimulateExtensionUninstalled(kExtensionId);
101 content::BrowserThread::PostTask(
102 content::BrowserThread::UI, FROM_HERE,
103 base::Bind(&VerifyNumberOfRules,
104 registry_service.GetRulesRegistry(key, "ui"), 0));
106 content::BrowserThread::PostTask(
107 content::BrowserThread::IO, FROM_HERE,
108 base::Bind(&VerifyNumberOfRules,
109 registry_service.GetRulesRegistry(key, "io"), 0));
111 message_loop_.RunUntilIdle();
114 // This test verifies that removing rules registries by process ID works as
115 // intended. This test ensures that removing registries associated with one
116 // Webview embedder process does not remove registries associated with the
117 // other.
118 TEST_F(RulesRegistryServiceTest, TestWebViewKey) {
119 const int kEmbedderProcessID1 = 1;
120 const int kEmbedderProcessID2 = 2;
121 const int kWebViewInstanceID = 1;
123 const RulesRegistry::WebViewKey key1(kEmbedderProcessID1, kWebViewInstanceID);
124 const RulesRegistry::WebViewKey key2(kEmbedderProcessID2, kWebViewInstanceID);
126 TestRulesRegistry* ui_registry_key1 =
127 new TestRulesRegistry(content::BrowserThread::UI, "ui", key1);
128 TestRulesRegistry* ui_registry_key2 =
129 new TestRulesRegistry(content::BrowserThread::UI, "ui", key2);
131 RulesRegistryService registry_service(NULL);
132 registry_service.RegisterRulesRegistry(make_scoped_refptr(ui_registry_key1));
133 registry_service.RegisterRulesRegistry(make_scoped_refptr(ui_registry_key2));
135 content::BrowserThread::PostTask(
136 content::BrowserThread::UI, FROM_HERE,
137 base::Bind(&InsertRule, registry_service.GetRulesRegistry(key1, "ui"),
138 "ui_task"));
139 content::BrowserThread::PostTask(
140 content::BrowserThread::UI, FROM_HERE,
141 base::Bind(&InsertRule, registry_service.GetRulesRegistry(key2, "ui"),
142 "ui_task"));
143 message_loop_.RunUntilIdle();
145 registry_service.RemoveWebViewRulesRegistries(kEmbedderProcessID1);
146 EXPECT_FALSE(registry_service.GetRulesRegistry(key1, "ui").get());
147 EXPECT_TRUE(registry_service.GetRulesRegistry(key2, "ui").get());
150 TEST_F(RulesRegistryServiceTest, TestWebViewWebRequestRegistryHasNoCache) {
151 const int kEmbedderProcessID = 1;
152 const int kWebViewInstanceID = 1;
153 const RulesRegistry::WebViewKey key(kEmbedderProcessID, kWebViewInstanceID);
154 TestingProfile profile;
155 RulesRegistryService registry_service(&profile);
156 RulesRegistry* registry =
157 registry_service.GetRulesRegistry(
158 key,
159 declarative_webrequest_constants::kOnRequest).get();
160 EXPECT_TRUE(registry);
161 EXPECT_FALSE(registry->rules_cache_delegate_for_testing());
164 } // namespace extensions