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

Side by Side Diff: extensions/browser/api/declarative/rules_registry_unittest.cc

Issue 1158693006: Create a mechanism define declarative rules via the extension manifest. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add test Created 5 years, 6 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "extensions/browser/api/declarative/rules_registry.h" 5 #include "extensions/browser/api/declarative/rules_registry.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/test/values_test_util.h"
11 #include "base/values.h"
10 #include "content/public/test/test_browser_thread.h" 12 #include "content/public/test/test_browser_thread.h"
11 #include "extensions/browser/api/declarative/rules_registry_service.h" 13 #include "extensions/browser/api/declarative/rules_registry_service.h"
12 #include "extensions/browser/api/declarative/test_rules_registry.h" 14 #include "extensions/browser/api/declarative/test_rules_registry.h"
15 #include "extensions/browser/extension_registry.h"
16 #include "extensions/browser/extensions_test.h"
17 #include "extensions/common/extension.h"
18 #include "extensions/common/extension_builder.h"
13 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
14 20
15 namespace { 21 namespace {
16 const char kExtensionId[] = "foobar"; 22 const char kExtensionId[] = "foobar";
17 const char kRuleId[] = "foo"; 23 const char kRuleId[] = "foo";
18 const int key = extensions::RulesRegistryService::kDefaultRulesRegistryID; 24 const int key = extensions::RulesRegistryService::kDefaultRulesRegistryID;
19 } // namespace 25 } // namespace
20 26
21 namespace extensions { 27 namespace extensions {
22 28
23 TEST(RulesRegistryTest, FillOptionalIdentifiers) { 29 using base::test::ParseJson;
30
31 class RulesRegistryTest : public ExtensionsTest {
32 public:
33 RulesRegistryTest() {}
not at google - send to devlin 2015/06/02 22:44:50 Empty constructor isn't necessary, but this needs
danduong 2015/06/03 00:18:06 Done.
34 };
35
36 TEST_F(RulesRegistryTest, FillOptionalIdentifiers) {
24 base::MessageLoopForUI message_loop; 37 base::MessageLoopForUI message_loop;
25 content::TestBrowserThread thread(content::BrowserThread::UI, &message_loop); 38 content::TestBrowserThread thread(content::BrowserThread::UI, &message_loop);
26 39
27 std::string error; 40 std::string error;
28 scoped_refptr<RulesRegistry> registry = 41 scoped_refptr<RulesRegistry> registry =
29 new TestRulesRegistry(content::BrowserThread::UI, "" /*event_name*/, key); 42 new TestRulesRegistry(content::BrowserThread::UI, "" /*event_name*/, key);
30 43
31 // Add rules and check that their identifiers are filled and unique. 44 // Add rules and check that their identifiers are filled and unique.
32 45
33 std::vector<linked_ptr<RulesRegistry::Rule> > add_rules; 46 std::vector<linked_ptr<RulesRegistry::Rule> > add_rules;
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 135
123 registry->OnExtensionUninstalled(kExtensionId); 136 registry->OnExtensionUninstalled(kExtensionId);
124 EXPECT_EQ(0u /*extensions*/ + 0u /*rules*/, 137 EXPECT_EQ(0u /*extensions*/ + 0u /*rules*/,
125 registry->GetNumberOfUsedRuleIdentifiersForTesting()); 138 registry->GetNumberOfUsedRuleIdentifiersForTesting());
126 139
127 // Make sure that deletion traits of registry are executed. 140 // Make sure that deletion traits of registry are executed.
128 registry = NULL; 141 registry = NULL;
129 message_loop.RunUntilIdle(); 142 message_loop.RunUntilIdle();
130 } 143 }
131 144
132 TEST(RulesRegistryTest, FillOptionalPriority) { 145 TEST_F(RulesRegistryTest, FillOptionalPriority) {
133 base::MessageLoopForUI message_loop; 146 base::MessageLoopForUI message_loop;
134 content::TestBrowserThread thread(content::BrowserThread::UI, &message_loop); 147 content::TestBrowserThread thread(content::BrowserThread::UI, &message_loop);
135 148
136 std::string error; 149 std::string error;
137 scoped_refptr<RulesRegistry> registry = 150 scoped_refptr<RulesRegistry> registry =
138 new TestRulesRegistry(content::BrowserThread::UI, "" /*event_name*/, key); 151 new TestRulesRegistry(content::BrowserThread::UI, "" /*event_name*/, key);
139 152
140 // Add rules and check that their priorities are filled if they are empty. 153 // Add rules and check that their priorities are filled if they are empty.
141 154
142 std::vector<linked_ptr<RulesRegistry::Rule> > add_rules; 155 std::vector<linked_ptr<RulesRegistry::Rule> > add_rules;
(...skipping 15 matching lines...) Expand all
158 EXPECT_GT(RulesRegistry::DEFAULT_PRIORITY, 2); 171 EXPECT_GT(RulesRegistry::DEFAULT_PRIORITY, 2);
159 EXPECT_EQ(2, std::min(*get_rules[0]->priority, *get_rules[1]->priority)); 172 EXPECT_EQ(2, std::min(*get_rules[0]->priority, *get_rules[1]->priority));
160 EXPECT_EQ(RulesRegistry::DEFAULT_PRIORITY, 173 EXPECT_EQ(RulesRegistry::DEFAULT_PRIORITY,
161 std::max(*get_rules[0]->priority, *get_rules[1]->priority)); 174 std::max(*get_rules[0]->priority, *get_rules[1]->priority));
162 175
163 // Make sure that deletion traits of registry are executed. 176 // Make sure that deletion traits of registry are executed.
164 registry = NULL; 177 registry = NULL;
165 message_loop.RunUntilIdle(); 178 message_loop.RunUntilIdle();
166 } 179 }
167 180
181 TEST_F(RulesRegistryTest, ExtensionWithRulesInManifest) {
Mike Wittman 2015/06/02 23:11:59 Can you add tests for handling and reporting of er
182 base::MessageLoopForUI message_loop;
183 content::TestBrowserThread thread(content::BrowserThread::UI, &message_loop);
184
185 // Create extension
186 scoped_ptr<base::DictionaryValue> manifest(
187 (base::DictionaryValue*)ParseJson(
not at google - send to devlin 2015/06/02 22:44:50 Use C++ style static_cast<>, not C style cast. Ho
danduong 2015/06/03 00:18:06 Done.
188 "{"
189 " \"name\" : \"Test\","
190 " \"version\" : \"1\","
191 " \"declarativeContent\" : {"
192 " \"onPageChanged\": ["
193 " {"
194 " \"actions\": ["
195 " {"
196 " \"instanceType\": \"declarativeContent.ShowPageAction\""
not at google - send to devlin 2015/06/02 22:44:50 This is a bit of an awkward API. Better to try to
danduong 2015/06/03 00:18:06 Where should we specify onPageChanged? How should
not at google - send to devlin 2015/06/03 16:21:44 Oh right, I suppose the event declaration syntax s
danduong 2015/06/03 16:45:53 I don't think that's valid JSON. Do you mean: "co
197 " }"
198 " ],"
199 " \"conditions\" : ["
200 " {"
201 " \"css\": [\"video\"],"
202 " \"instanceType\" : "
203 " \"declarativeContent.PageStateMatcher\""
204 " }"
205 " ]"
206 " }"
207 " ]"
208 " }"
209 "}").release());
210 scoped_refptr<Extension> extension = ExtensionBuilder()
211 .SetManifest(manifest.Pass())
212 .SetID(kExtensionId)
213 .Build();
214 ExtensionRegistry::Get(browser_context())->AddEnabled(extension);
215
216 scoped_refptr<RulesRegistry> registry = new TestRulesRegistry(
Mike Wittman 2015/06/02 23:11:59 I'm not sure why this stored in a scoped_refptr in
not at google - send to devlin 2015/06/02 23:14:40 TestRulesRegistry --> RulesRegistry --> RefCounted
Mike Wittman 2015/06/02 23:16:00 Ah, should have known.
217 browser_context(), "declarativeContent.onPageChanged",
218 content::BrowserThread::UI, NULL, key);
not at google - send to devlin 2015/06/02 22:44:50 nullptr not NULL - though I think that if you remo
danduong 2015/06/03 00:18:06 Done.
219 // Simulate what RulesRegistryService would do on extension load.
220 registry->OnExtensionLoaded(kExtensionId);
221
222 std::vector<linked_ptr<RulesRegistry::Rule>> get_rules;
223 registry->GetAllRules(kExtensionId, &get_rules);
224
225 ASSERT_EQ(1u, get_rules.size());
not at google - send to devlin 2015/06/02 22:44:50 Could you assert that this rule matches the one co
danduong 2015/06/03 00:18:06 Done.
226 }
227
168 } // namespace extensions 228 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698