15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/extensions/api/declarative/rules_registry_with_cache.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Here we test the TestRulesRegistry which is the simplest possible 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// implementation of RulesRegistryWithCache as a proxy for 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// RulesRegistryWithCache. 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/command_line.h" 129ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/extensions/api/declarative/test_rules_registry.h" 1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/extensions/extension_prefs.h" 1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/extensions/test_extension_system.h" 1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/value_store/testing_value_store.h" 1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/test/base/testing_profile.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_browser_thread.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if defined(OS_CHROMEOS) 2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/chromeos/login/user_manager.h" 2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h" 2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/chromeos/settings/device_settings_service.h" 2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif 2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// The |extension_id| needs to pass the Extension::IdIsValid test. 2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)const char extension_id[] = "abcdefghijklmnopabcdefghijklmnop"; 3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)const char extension2_id[] = "ponmlkjihgfedcbaponmlkjihgfedcba"; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char rule_id[] = "rule"; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char rule2_id[] = "rule2"; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RulesRegistryWithCacheTest : public testing::Test { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RulesRegistryWithCacheTest() 4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) : ui_thread_(content::BrowserThread::UI, &message_loop_), 4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) file_thread_(content::BrowserThread::FILE, &message_loop_), 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry_(new TestRulesRegistry(content::BrowserThread::UI, 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "" /*event_name*/)) {} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~RulesRegistryWithCacheTest() {} 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() OVERRIDE { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure that deletion traits of all registries are executed. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_ = NULL; 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_loop_.RunUntilIdle(); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string AddRule(const std::string& extension_id, 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string rule_id) { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<linked_ptr<extensions::RulesRegistry::Rule> > add_rules; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) add_rules.push_back(make_linked_ptr(new extensions::RulesRegistry::Rule)); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) add_rules[0]->id.reset(new std::string(rule_id)); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return registry_->AddRules(extension_id, add_rules); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string RemoveRule(const std::string& extension_id, 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string rule_id) { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> remove_rules; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) remove_rules.push_back(rule_id); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return registry_->RemoveRules(extension_id, remove_rules); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int GetNumberOfRules(const std::string& extension_id) { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<linked_ptr<extensions::RulesRegistry::Rule> > get_rules; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error = registry_->GetAllRules(extension_id, &get_rules); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", error); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return get_rules.size(); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop message_loop_; 7790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::TestBrowserThread ui_thread_; 7890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::TestBrowserThread file_thread_; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<TestRulesRegistry> registry_; 8090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if defined OS_CHROMEOS 8190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) chromeos::ScopedTestDeviceSettingsService test_device_settings_service_; 8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) chromeos::ScopedTestCrosSettings test_cros_settings_; 8390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) chromeos::ScopedTestUserManager test_user_manager_; 8490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RulesRegistryWithCacheTest, AddRules) { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that nothing happens if the concrete RulesRegistry refuses to insert 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the rules. 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_->SetResult("Error"); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("Error", AddRule(extension_id, rule_id)); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, GetNumberOfRules(extension_id)); 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry_->SetResult(std::string()); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that rules can be inserted. 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", AddRule(extension_id, rule_id)); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, GetNumberOfRules(extension_id)); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that rules cannot be inserted twice with the same rule_id. 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE("", AddRule(extension_id, rule_id)); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, GetNumberOfRules(extension_id)); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that different extensions may use the same rule_id. 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", AddRule(extension2_id, rule_id)); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, GetNumberOfRules(extension_id)); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, GetNumberOfRules(extension2_id)); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RulesRegistryWithCacheTest, RemoveRules) { 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Prime registry. 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", AddRule(extension_id, rule_id)); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", AddRule(extension2_id, rule_id)); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, GetNumberOfRules(extension_id)); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, GetNumberOfRules(extension2_id)); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that nothing happens if the concrete RuleRegistry refuses to remove 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the rules. 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_->SetResult("Error"); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("Error", RemoveRule(extension_id, rule_id)); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, GetNumberOfRules(extension_id)); 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry_->SetResult(std::string()); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that nothing happens if a rule does not exist. 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", RemoveRule(extension_id, "unknown_rule")); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, GetNumberOfRules(extension_id)); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that rules may be removed and only for the correct extension. 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", RemoveRule(extension_id, rule_id)); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, GetNumberOfRules(extension_id)); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, GetNumberOfRules(extension2_id)); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RulesRegistryWithCacheTest, RemoveAllRules) { 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Prime registry. 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", AddRule(extension_id, rule_id)); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", AddRule(extension_id, rule2_id)); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", AddRule(extension2_id, rule_id)); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, GetNumberOfRules(extension_id)); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, GetNumberOfRules(extension2_id)); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that nothing happens if the concrete RuleRegistry refuses to remove 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the rules. 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_->SetResult("Error"); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("Error", registry_->RemoveAllRules(extension_id)); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, GetNumberOfRules(extension_id)); 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry_->SetResult(std::string()); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that rules may be removed and only for the correct extension. 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", registry_->RemoveAllRules(extension_id)); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, GetNumberOfRules(extension_id)); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, GetNumberOfRules(extension2_id)); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RulesRegistryWithCacheTest, GetRules) { 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Prime registry. 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", AddRule(extension_id, rule_id)); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", AddRule(extension_id, rule2_id)); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", AddRule(extension2_id, rule_id)); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that we get the correct rule and unknown rules are ignored. 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> rules_to_get; 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rules_to_get.push_back(rule_id); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rules_to_get.push_back("unknown_rule"); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<linked_ptr<extensions::RulesRegistry::Rule> > gotten_rules; 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", registry_->GetRules(extension_id, rules_to_get, &gotten_rules)); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, gotten_rules.size()); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(gotten_rules[0]->id.get()); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(rule_id, *(gotten_rules[0]->id)); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RulesRegistryWithCacheTest, GetAllRules) { 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Prime registry. 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", AddRule(extension_id, rule_id)); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", AddRule(extension_id, rule2_id)); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", AddRule(extension2_id, rule_id)); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that we get the correct rules. 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<linked_ptr<extensions::RulesRegistry::Rule> > gotten_rules; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", registry_->GetAllRules(extension_id, &gotten_rules)); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2u, gotten_rules.size()); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(gotten_rules[0]->id.get()); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(gotten_rules[1]->id.get()); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( (rule_id == *(gotten_rules[0]->id) && 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rule2_id == *(gotten_rules[1]->id)) || 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (rule_id == *(gotten_rules[1]->id) && 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rule2_id == *(gotten_rules[0]->id)) ); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RulesRegistryWithCacheTest, OnExtensionUnloaded) { 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Prime registry. 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", AddRule(extension_id, rule_id)); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", AddRule(extension2_id, rule_id)); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the correct rules are removed. 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_->OnExtensionUnloaded(extension_id); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, GetNumberOfRules(extension_id)); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, GetNumberOfRules(extension2_id)); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)TEST_F(RulesRegistryWithCacheTest, DeclarativeRulesStored) { 20190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) TestingProfile profile; 20290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // TestingProfile::Init makes sure that the factory method for a corresponding 20390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // extension system creates a TestExtensionSystem. 20490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) extensions::TestExtensionSystem* system = 20590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static_cast<extensions::TestExtensionSystem*>( 20690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) extensions::ExtensionSystem::Get(&profile)); 20790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ExtensionPrefs* extension_prefs = system->CreateExtensionPrefs( 20890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CommandLine::ForCurrentProcess(), base::FilePath()); 20990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) system->CreateExtensionService( 21090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CommandLine::ForCurrentProcess(), base::FilePath(), false); 21190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // The value store is first created during CreateExtensionService. 21290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) TestingValueStore* store = system->value_store(); 21390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 21490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) scoped_ptr<RulesRegistryWithCache::RuleStorageOnUI> ui_part; 21590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) scoped_refptr<RulesRegistryWithCache> registry(new TestRulesRegistry( 21690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) &profile, "testEvent", content::BrowserThread::UI, &ui_part)); 21790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 21890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // 1. Test the handling of preferences. 21990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Default value is always true. 22090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(ui_part->GetDeclarativeRulesStored(extension_id)); 22190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 22290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) extension_prefs->UpdateExtensionPref( 22390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) extension_id, 22490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) RulesRegistryWithCache::RuleStorageOnUI::kRulesStoredKey, 22590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) new base::FundamentalValue(false)); 22690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(ui_part->GetDeclarativeRulesStored(extension_id)); 22790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 22890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) extension_prefs->UpdateExtensionPref( 22990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) extension_id, 23090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) RulesRegistryWithCache::RuleStorageOnUI::kRulesStoredKey, 23190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) new base::FundamentalValue(true)); 23290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(ui_part->GetDeclarativeRulesStored(extension_id)); 23390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 23490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // 2. Test writing behavior. 23590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) int write_count = store->write_count(); 23690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 237eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::ListValue> value(new base::ListValue); 23890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) value->AppendBoolean(true); 23990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ui_part->WriteToStorage(extension_id, value.PassAs<base::Value>()); 24090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(ui_part->GetDeclarativeRulesStored(extension_id)); 24190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) message_loop_.RunUntilIdle(); 24290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(write_count + 1, store->write_count()); 24390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) write_count = store->write_count(); 24490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 245eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch value.reset(new base::ListValue); 24690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ui_part->WriteToStorage(extension_id, value.PassAs<base::Value>()); 24790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(ui_part->GetDeclarativeRulesStored(extension_id)); 24890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) message_loop_.RunUntilIdle(); 24990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // No rules currently, but previously there were, so we expect a write. 25090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(write_count + 1, store->write_count()); 25190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) write_count = store->write_count(); 25290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 253eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch value.reset(new base::ListValue); 25490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ui_part->WriteToStorage(extension_id, value.PassAs<base::Value>()); 25590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(ui_part->GetDeclarativeRulesStored(extension_id)); 25690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) message_loop_.RunUntilIdle(); 25790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(write_count, store->write_count()); 25890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 25990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // 3. Test reading behavior. 26090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) int read_count = store->read_count(); 26190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 26290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ui_part->SetDeclarativeRulesStored(extension_id, false); 26390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ui_part->ReadFromStorage(extension_id); 26490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) message_loop_.RunUntilIdle(); 26590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(read_count, store->read_count()); 26690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) read_count = store->read_count(); 26790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 26890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ui_part->SetDeclarativeRulesStored(extension_id, true); 26990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ui_part->ReadFromStorage(extension_id); 27090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) message_loop_.RunUntilIdle(); 27190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(read_count + 1, store->read_count()); 27290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 27390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace extensions 275