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

Side by Side Diff: chrome/browser/extensions/api/declarative/rules_registry_with_cache_unittest.cc

Issue 764643002: Remove WebViewKey in rules registry. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Nits. Created 6 years 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 (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 "extensions/browser/api/declarative/rules_registry.h" 5 #include "extensions/browser/api/declarative/rules_registry.h"
6 6
7 // Here we test the TestRulesRegistry which is the simplest possible 7 // Here we test the TestRulesRegistry which is the simplest possible
8 // implementation of RulesRegistryWithCache as a proxy for 8 // implementation of RulesRegistryWithCache as a proxy for
9 // RulesRegistryWithCache. 9 // RulesRegistryWithCache.
10 10
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/run_loop.h" 12 #include "base/run_loop.h"
13 #include "chrome/browser/extensions/extension_service.h" 13 #include "chrome/browser/extensions/extension_service.h"
14 #include "chrome/browser/extensions/test_extension_environment.h" 14 #include "chrome/browser/extensions/test_extension_environment.h"
15 #include "chrome/browser/extensions/test_extension_system.h" 15 #include "chrome/browser/extensions/test_extension_system.h"
16 #include "chrome/common/extensions/extension_test_util.h" 16 #include "chrome/common/extensions/extension_test_util.h"
17 #include "chrome/common/extensions/features/feature_channel.h" 17 #include "chrome/common/extensions/features/feature_channel.h"
18 #include "chrome/test/base/testing_profile.h" 18 #include "chrome/test/base/testing_profile.h"
19 #include "content/public/test/test_browser_thread_bundle.h" 19 #include "content/public/test/test_browser_thread_bundle.h"
20 #include "extensions/browser/api/declarative/rules_cache_delegate.h" 20 #include "extensions/browser/api/declarative/rules_cache_delegate.h"
21 #include "extensions/browser/api/declarative/rules_registry_service.h"
21 #include "extensions/browser/api/declarative/test_rules_registry.h" 22 #include "extensions/browser/api/declarative/test_rules_registry.h"
22 #include "extensions/browser/extension_prefs.h" 23 #include "extensions/browser/extension_prefs.h"
23 #include "extensions/browser/extension_registry.h" 24 #include "extensions/browser/extension_registry.h"
24 #include "extensions/browser/value_store/testing_value_store.h" 25 #include "extensions/browser/value_store/testing_value_store.h"
25 #include "extensions/common/extension.h" 26 #include "extensions/common/extension.h"
26 #include "extensions/common/manifest_constants.h" 27 #include "extensions/common/manifest_constants.h"
27 #include "extensions/common/permissions/permissions_data.h" 28 #include "extensions/common/permissions/permissions_data.h"
28 #include "testing/gtest/include/gtest/gtest.h" 29 #include "testing/gtest/include/gtest/gtest.h"
29 30
30 using extension_test_util::LoadManifestUnchecked; 31 using extension_test_util::LoadManifestUnchecked;
31 32
32 namespace { 33 namespace {
33 const char kRuleId[] = "rule"; 34 const char kRuleId[] = "rule";
34 const char kRule2Id[] = "rule2"; 35 const char kRule2Id[] = "rule2";
35 } 36 }
36 37
37 namespace extensions { 38 namespace extensions {
39 const int kRulesRegistryID = RulesRegistryService::kDefaultRulesRegistryID;
38 40
39 class RulesRegistryWithCacheTest : public testing::Test { 41 class RulesRegistryWithCacheTest : public testing::Test {
40 public: 42 public:
41 RulesRegistryWithCacheTest() 43 RulesRegistryWithCacheTest()
42 : cache_delegate_(/*log_storage_init_delay=*/false), 44 : cache_delegate_(/*log_storage_init_delay=*/false),
43 registry_(new TestRulesRegistry(profile(), 45 registry_(new TestRulesRegistry(profile(),
44 /*event_name=*/"", 46 /*event_name=*/"",
45 content::BrowserThread::UI, 47 content::BrowserThread::UI,
46 &cache_delegate_, 48 &cache_delegate_,
47 RulesRegistry::WebViewKey(0, 0))) {} 49 kRulesRegistryID)) {}
48 50
49 void SetUp() override { 51 void SetUp() override {
50 env_.GetExtensionPrefs(); // Force creation before adding extensions. 52 env_.GetExtensionPrefs(); // Force creation before adding extensions.
51 // Note that env_.MakeExtension below also forces the creation of 53 // Note that env_.MakeExtension below also forces the creation of
52 // ExtensionService. 54 // ExtensionService.
53 55
54 base::DictionaryValue manifest_extra; 56 base::DictionaryValue manifest_extra;
55 std::string key; 57 std::string key;
56 CHECK(Extension::ProducePEM("test extension 1", &key)); 58 CHECK(Extension::ProducePEM("test extension 1", &key));
57 manifest_extra.SetString(manifest_keys::kPublicKey, key); 59 manifest_extra.SetString(manifest_keys::kPublicKey, key);
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 TEST_F(RulesRegistryWithCacheTest, DeclarativeRulesStored) { 228 TEST_F(RulesRegistryWithCacheTest, DeclarativeRulesStored) {
227 ExtensionPrefs* extension_prefs = env_.GetExtensionPrefs(); 229 ExtensionPrefs* extension_prefs = env_.GetExtensionPrefs();
228 // The value store is first created during GetExtensionService. 230 // The value store is first created during GetExtensionService.
229 TestingValueStore* store = env_.GetExtensionSystem()->value_store(); 231 TestingValueStore* store = env_.GetExtensionSystem()->value_store();
230 232
231 const std::string event_name("testEvent"); 233 const std::string event_name("testEvent");
232 const std::string rules_stored_key( 234 const std::string rules_stored_key(
233 RulesCacheDelegate::GetRulesStoredKey( 235 RulesCacheDelegate::GetRulesStoredKey(
234 event_name, profile()->IsOffTheRecord())); 236 event_name, profile()->IsOffTheRecord()));
235 scoped_ptr<RulesCacheDelegate> cache_delegate(new RulesCacheDelegate(false)); 237 scoped_ptr<RulesCacheDelegate> cache_delegate(new RulesCacheDelegate(false));
236 scoped_refptr<RulesRegistry> registry(new TestRulesRegistry( 238 scoped_refptr<RulesRegistry> registry(
237 profile(), event_name, content::BrowserThread::UI, 239 new TestRulesRegistry(profile(), event_name, content::BrowserThread::UI,
238 cache_delegate.get(), 240 cache_delegate.get(), kRulesRegistryID));
239 RulesRegistry::WebViewKey(0, 0)));
240 241
241 // 1. Test the handling of preferences. 242 // 1. Test the handling of preferences.
242 // Default value is always true. 243 // Default value is always true.
243 EXPECT_TRUE(cache_delegate->GetDeclarativeRulesStored(extension1_->id())); 244 EXPECT_TRUE(cache_delegate->GetDeclarativeRulesStored(extension1_->id()));
244 245
245 extension_prefs->UpdateExtensionPref( 246 extension_prefs->UpdateExtensionPref(
246 extension1_->id(), rules_stored_key, new base::FundamentalValue(false)); 247 extension1_->id(), rules_stored_key, new base::FundamentalValue(false));
247 EXPECT_FALSE(cache_delegate->GetDeclarativeRulesStored(extension1_->id())); 248 EXPECT_FALSE(cache_delegate->GetDeclarativeRulesStored(extension1_->id()));
248 249
249 extension_prefs->UpdateExtensionPref( 250 extension_prefs->UpdateExtensionPref(
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 297
297 const std::string event_name1("testEvent1"); 298 const std::string event_name1("testEvent1");
298 const std::string event_name2("testEvent2"); 299 const std::string event_name2("testEvent2");
299 const std::string rules_stored_key1( 300 const std::string rules_stored_key1(
300 RulesCacheDelegate::GetRulesStoredKey( 301 RulesCacheDelegate::GetRulesStoredKey(
301 event_name1, profile()->IsOffTheRecord())); 302 event_name1, profile()->IsOffTheRecord()));
302 const std::string rules_stored_key2( 303 const std::string rules_stored_key2(
303 RulesCacheDelegate::GetRulesStoredKey( 304 RulesCacheDelegate::GetRulesStoredKey(
304 event_name2, profile()->IsOffTheRecord())); 305 event_name2, profile()->IsOffTheRecord()));
305 scoped_ptr<RulesCacheDelegate> cache_delegate1(new RulesCacheDelegate(false)); 306 scoped_ptr<RulesCacheDelegate> cache_delegate1(new RulesCacheDelegate(false));
306 scoped_refptr<RulesRegistry> registry1(new TestRulesRegistry( 307 scoped_refptr<RulesRegistry> registry1(
307 profile(), event_name1, content::BrowserThread::UI, 308 new TestRulesRegistry(profile(), event_name1, content::BrowserThread::UI,
308 cache_delegate1.get(), 309 cache_delegate1.get(), kRulesRegistryID));
309 RulesRegistry::WebViewKey(0, 0)));
310 310
311 scoped_ptr<RulesCacheDelegate> cache_delegate2(new RulesCacheDelegate(false)); 311 scoped_ptr<RulesCacheDelegate> cache_delegate2(new RulesCacheDelegate(false));
312 scoped_refptr<RulesRegistry> registry2(new TestRulesRegistry( 312 scoped_refptr<RulesRegistry> registry2(
313 profile(), event_name2, content::BrowserThread::UI, 313 new TestRulesRegistry(profile(), event_name2, content::BrowserThread::UI,
314 cache_delegate2.get(), 314 cache_delegate2.get(), kRulesRegistryID));
315 RulesRegistry::WebViewKey(0, 0)));
316 315
317 // Checkt the correct default values. 316 // Checkt the correct default values.
318 EXPECT_TRUE(cache_delegate1->GetDeclarativeRulesStored(extension1_->id())); 317 EXPECT_TRUE(cache_delegate1->GetDeclarativeRulesStored(extension1_->id()));
319 EXPECT_TRUE(cache_delegate2->GetDeclarativeRulesStored(extension1_->id())); 318 EXPECT_TRUE(cache_delegate2->GetDeclarativeRulesStored(extension1_->id()));
320 319
321 // Update the flag for the first registry. 320 // Update the flag for the first registry.
322 extension_prefs->UpdateExtensionPref( 321 extension_prefs->UpdateExtensionPref(
323 extension1_->id(), rules_stored_key1, new base::FundamentalValue(false)); 322 extension1_->id(), rules_stored_key1, new base::FundamentalValue(false));
324 EXPECT_FALSE(cache_delegate1->GetDeclarativeRulesStored(extension1_->id())); 323 EXPECT_FALSE(cache_delegate1->GetDeclarativeRulesStored(extension1_->id()));
325 EXPECT_TRUE(cache_delegate2->GetDeclarativeRulesStored(extension1_->id())); 324 EXPECT_TRUE(cache_delegate2->GetDeclarativeRulesStored(extension1_->id()));
(...skipping 22 matching lines...) Expand all
348 extension_service->AddExtension(extension.get()); 347 extension_service->AddExtension(extension.get());
349 EXPECT_TRUE(extensions::ExtensionRegistry::Get(env_.profile()) 348 EXPECT_TRUE(extensions::ExtensionRegistry::Get(env_.profile())
350 ->enabled_extensions() 349 ->enabled_extensions()
351 .Contains(extension->id())); 350 .Contains(extension->id()));
352 EXPECT_TRUE(extension->permissions_data()->HasAPIPermission( 351 EXPECT_TRUE(extension->permissions_data()->HasAPIPermission(
353 APIPermission::kDeclarativeWebRequest)); 352 APIPermission::kDeclarativeWebRequest));
354 env_.GetExtensionSystem()->SetReady(); 353 env_.GetExtensionSystem()->SetReady();
355 354
356 // 2. First run, adding a rule for the extension. 355 // 2. First run, adding a rule for the extension.
357 scoped_ptr<RulesCacheDelegate> cache_delegate(new RulesCacheDelegate(false)); 356 scoped_ptr<RulesCacheDelegate> cache_delegate(new RulesCacheDelegate(false));
358 scoped_refptr<TestRulesRegistry> registry(new TestRulesRegistry( 357 scoped_refptr<TestRulesRegistry> registry(
359 profile(), 358 new TestRulesRegistry(profile(), "testEvent", content::BrowserThread::UI,
360 "testEvent", 359 cache_delegate.get(), kRulesRegistryID));
361 content::BrowserThread::UI,
362 cache_delegate.get(),
363 RulesRegistry::WebViewKey(0, 0)));
364 360
365 AddRule(extension1_->id(), kRuleId, registry.get()); 361 AddRule(extension1_->id(), kRuleId, registry.get());
366 base::RunLoop().RunUntilIdle(); // Posted tasks store the added rule. 362 base::RunLoop().RunUntilIdle(); // Posted tasks store the added rule.
367 EXPECT_EQ(1, GetNumberOfRules(extension1_->id(), registry.get())); 363 EXPECT_EQ(1, GetNumberOfRules(extension1_->id(), registry.get()));
368 364
369 // 3. Restart the TestRulesRegistry and see the rule still there. 365 // 3. Restart the TestRulesRegistry and see the rule still there.
370 cache_delegate.reset(new RulesCacheDelegate(false)); 366 cache_delegate.reset(new RulesCacheDelegate(false));
371 registry = new TestRulesRegistry( 367 registry =
372 profile(), 368 new TestRulesRegistry(profile(), "testEvent", content::BrowserThread::UI,
373 "testEvent", 369 cache_delegate.get(), kRulesRegistryID);
374 content::BrowserThread::UI,
375 cache_delegate.get(),
376 RulesRegistry::WebViewKey(0, 0));
377 370
378 base::RunLoop().RunUntilIdle(); // Posted tasks retrieve the stored rule. 371 base::RunLoop().RunUntilIdle(); // Posted tasks retrieve the stored rule.
379 EXPECT_EQ(1, GetNumberOfRules(extension1_->id(), registry.get())); 372 EXPECT_EQ(1, GetNumberOfRules(extension1_->id(), registry.get()));
380 } 373 }
381 374
382 TEST_F(RulesRegistryWithCacheTest, ConcurrentStoringOfRules) { 375 TEST_F(RulesRegistryWithCacheTest, ConcurrentStoringOfRules) {
383 // When an extension updates its rules, the new set of rules is stored to disk 376 // When an extension updates its rules, the new set of rules is stored to disk
384 // with some delay. While it is acceptable for a quick series of updates for a 377 // with some delay. While it is acceptable for a quick series of updates for a
385 // single extension to only write the last one, we should never forget to 378 // single extension to only write the last one, we should never forget to
386 // write a rules update for extension A, just because it is immediately 379 // write a rules update for extension A, just because it is immediately
387 // followed by a rules update for extension B. 380 // followed by a rules update for extension B.
388 extensions::TestExtensionSystem* system = env_.GetExtensionSystem(); 381 extensions::TestExtensionSystem* system = env_.GetExtensionSystem();
389 TestingValueStore* store = system->value_store(); 382 TestingValueStore* store = system->value_store();
390 383
391 int write_count = store->write_count(); 384 int write_count = store->write_count();
392 EXPECT_EQ("", AddRule(extension1_->id(), kRuleId)); 385 EXPECT_EQ("", AddRule(extension1_->id(), kRuleId));
393 EXPECT_EQ("", AddRule(extension2_->id(), kRule2Id)); 386 EXPECT_EQ("", AddRule(extension2_->id(), kRule2Id));
394 env_.GetExtensionSystem()->SetReady(); 387 env_.GetExtensionSystem()->SetReady();
395 base::RunLoop().RunUntilIdle(); 388 base::RunLoop().RunUntilIdle();
396 EXPECT_EQ(write_count + 2, store->write_count()); 389 EXPECT_EQ(write_count + 2, store->write_count());
397 } 390 }
398 391
399 } // namespace extensions 392 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698