preference_api_prefs_unittest.cc revision 3551c9c881056c480085172ff9840cab31610854
17d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 27d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 37d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// found in the LICENSE file. 47d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 57d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include <string> 67d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 77d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/memory/ref_counted.h" 87d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 97d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/prefs/mock_pref_change_callback.h" 107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/values.h" 117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/extensions/api/preference/preference_api.h" 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/extensions/extension_prefs.h" 137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/extensions/extension_prefs_unittest.h" 147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/common/extensions/extension.h" 157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "components/user_prefs/pref_registry_syncable.h" 177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)using base::Value; 207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace extensions { 227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace { 247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)const char kPref1[] = "path1.subpath"; 267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)const char kPref2[] = "path2"; 277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)const char kPref3[] = "path3"; 287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)const char kPref4[] = "path4"; 297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Default values in case an extension pref value is not overridden. 317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)const char kDefaultPref1[] = "default pref 1"; 327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)const char kDefaultPref2[] = "default pref 2"; 337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)const char kDefaultPref3[] = "default pref 3"; 347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)const char kDefaultPref4[] = "default pref 4"; 357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} // namespace 377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// An implementation of the PreferenceAPI which returns the ExtensionPrefs and 397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// ExtensionPrefValueMap from the TestExtensionPrefs, rather than from a 407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// profile (which we don't create in unittests). 417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class TestPreferenceAPI : public PreferenceAPIBase { 427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public: 437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) explicit TestPreferenceAPI(TestExtensionPrefs* test_extension_prefs) 447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : test_extension_prefs_(test_extension_prefs) { } 457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ~TestPreferenceAPI() { } 467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) private: 477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // PreferenceAPIBase implementation. 487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual ExtensionPrefs* extension_prefs() OVERRIDE { 497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return test_extension_prefs_->prefs(); 507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual ExtensionPrefValueMap* extension_pref_value_map() OVERRIDE { 527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return test_extension_prefs_->extension_pref_value_map(); 537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TestExtensionPrefs* test_extension_prefs_; 567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestPreferenceAPI); 587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class ExtensionControlledPrefsTest : public PrefsPrepopulatedTestBase { 617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public: 627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ExtensionControlledPrefsTest(); 637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual ~ExtensionControlledPrefsTest(); 647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void RegisterPreferences(user_prefs::PrefRegistrySyncable* registry) 667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OVERRIDE; 677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void InstallExtensionControlledPref(Extension* extension, 687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& key, 697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::Value* value); 707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void InstallExtensionControlledPrefIncognito(Extension* extension, 717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& key, 727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::Value* value); 737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void InstallExtensionControlledPrefIncognitoSessionOnly( 747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Extension* extension, 757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& key, 767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::Value* value); 777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void InstallExtension(Extension* extension); 787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void UninstallExtension(const std::string& extension_id); 797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) protected: 817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void EnsureExtensionInstalled(Extension* extension); 827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void EnsureExtensionUninstalled(const std::string& extension_id); 837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TestPreferenceAPI test_preference_api_; 857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)ExtensionControlledPrefsTest::ExtensionControlledPrefsTest() 887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : PrefsPrepopulatedTestBase(), 897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) test_preference_api_(&prefs_) { 907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)ExtensionControlledPrefsTest::~ExtensionControlledPrefsTest() { 937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void ExtensionControlledPrefsTest::RegisterPreferences( 967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) user_prefs::PrefRegistrySyncable* registry) { 977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) registry->RegisterStringPref( 987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kPref1, kDefaultPref1, user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) registry->RegisterStringPref( 1007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kPref2, kDefaultPref2, user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 1017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) registry->RegisterStringPref( 1027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kPref3, kDefaultPref3, user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 1037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) registry->RegisterStringPref( 1047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kPref4, kDefaultPref4, user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 1057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void ExtensionControlledPrefsTest::InstallExtensionControlledPref( 1087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Extension* extension, 1097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& key, 1107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Value* value) { 1117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EnsureExtensionInstalled(extension); 1127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) test_preference_api_.SetExtensionControlledPref( 1137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension->id(), key, kExtensionPrefsScopeRegular, value); 1147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void ExtensionControlledPrefsTest::InstallExtensionControlledPrefIncognito( 1177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Extension* extension, 1187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& key, 1197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Value* value) { 1207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EnsureExtensionInstalled(extension); 1217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) test_preference_api_.SetExtensionControlledPref( 1227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension->id(), key, kExtensionPrefsScopeIncognitoPersistent, value); 1237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void ExtensionControlledPrefsTest:: 1267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)InstallExtensionControlledPrefIncognitoSessionOnly(Extension* extension, 1277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& key, 1287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Value* value) { 1297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EnsureExtensionInstalled(extension); 1307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) test_preference_api_.SetExtensionControlledPref( 1317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension->id(), key, kExtensionPrefsScopeIncognitoSessionOnly, value); 1327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void ExtensionControlledPrefsTest::InstallExtension(Extension* extension) { 1357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EnsureExtensionInstalled(extension); 1367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void ExtensionControlledPrefsTest::UninstallExtension( 1397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& extension_id) { 1407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EnsureExtensionUninstalled(extension_id); 1417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void ExtensionControlledPrefsTest::EnsureExtensionInstalled( 1447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Extension* extension) { 1457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Install extension the first time a preference is set for it. 1467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Extension* extensions[] = { extension1(), 1477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension2(), 1487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension3(), 1497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension4() }; 1507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) for (size_t i = 0; i < kNumInstalledExtensions; ++i) { 1517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (extension == extensions[i] && !installed_[i]) { 152a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) prefs()->OnExtensionInstalled(extension, 153a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) Extension::ENABLED, 154a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) Blacklist::NOT_BLACKLISTED, 1557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) syncer::StringOrdinal()); 1567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) installed_[i] = true; 1577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) break; 1587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 1597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 1607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void ExtensionControlledPrefsTest::EnsureExtensionUninstalled( 1637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& extension_id) { 1647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Extension* extensions[] = { extension1(), 1657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension2(), 1667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension3(), 1677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension4() }; 1687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) for (size_t i = 0; i < kNumInstalledExtensions; ++i) { 1697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (extensions[i]->id() == extension_id) { 1707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) installed_[i] = false; 1717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) break; 1727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 1737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 1747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) prefs()->OnExtensionUninstalled(extension_id, Manifest::INTERNAL, false); 1757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class ControlledPrefsInstallOneExtension 1787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : public ExtensionControlledPrefsTest { 1797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Initialize() OVERRIDE { 1807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPref(extension1(), 1817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kPref1, 1823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) new base::StringValue("val1")); 1837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 1847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Verify() OVERRIDE { 1857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string actual = prefs()->pref_service()->GetString(kPref1); 1867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("val1", actual); 1877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 1887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 1897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(ControlledPrefsInstallOneExtension, 1907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ControlledPrefsInstallOneExtension) { } 1917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Check that we do not forget persistent incognito values after a reload. 1937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class ControlledPrefsInstallIncognitoPersistent 1947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : public ExtensionControlledPrefsTest { 1957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public: 1967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Initialize() OVERRIDE { 1977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPref( 1983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) extension1(), kPref1, new base::StringValue("val1")); 1997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPrefIncognito( 2003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) extension1(), kPref1, new base::StringValue("val2")); 2017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_ptr<PrefService> incog_prefs(prefs_.CreateIncognitoPrefService()); 2027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string actual = incog_prefs->GetString(kPref1); 2037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("val2", actual); 2047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 2057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Verify() OVERRIDE { 2077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Main pref service shall see only non-incognito settings. 2087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string actual = prefs()->pref_service()->GetString(kPref1); 2097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("val1", actual); 2107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Incognito pref service shall see incognito values. 2117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_ptr<PrefService> incog_prefs(prefs_.CreateIncognitoPrefService()); 2127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) actual = incog_prefs->GetString(kPref1); 2137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("val2", actual); 2147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 2157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 2167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(ControlledPrefsInstallIncognitoPersistent, 2177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ControlledPrefsInstallIncognitoPersistent) { } 2187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Check that we forget 'session only' incognito values after a reload. 2207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class ControlledPrefsInstallIncognitoSessionOnly 2217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : public ExtensionControlledPrefsTest { 2227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public: 2237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ControlledPrefsInstallIncognitoSessionOnly() : iteration_(0) {} 2247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Initialize() OVERRIDE { 2267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPref( 2273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) extension1(), kPref1, new base::StringValue("val1")); 2287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPrefIncognitoSessionOnly( 2293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) extension1(), kPref1, new base::StringValue("val2")); 2307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_ptr<PrefService> incog_prefs(prefs_.CreateIncognitoPrefService()); 2317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string actual = incog_prefs->GetString(kPref1); 2327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("val2", actual); 2337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 2347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Verify() OVERRIDE { 2357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Main pref service shall see only non-incognito settings. 2367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string actual = prefs()->pref_service()->GetString(kPref1); 2377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("val1", actual); 2387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Incognito pref service shall see session-only incognito values only 2397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // during first run. Once the pref service was reloaded, all values shall be 2407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // discarded. 2417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_ptr<PrefService> incog_prefs(prefs_.CreateIncognitoPrefService()); 2427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) actual = incog_prefs->GetString(kPref1); 2437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (iteration_ == 0) { 2447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("val2", actual); 2457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } else { 2467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("val1", actual); 2477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 2487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ++iteration_; 2497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 2507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int iteration_; 2517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 2527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(ControlledPrefsInstallIncognitoSessionOnly, 2537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ControlledPrefsInstallIncognitoSessionOnly) { } 2547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class ControlledPrefsUninstallExtension : public ExtensionControlledPrefsTest { 2567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Initialize() OVERRIDE { 2577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPref( 2583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) extension1(), kPref1, new base::StringValue("val1")); 2597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPref( 2603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) extension1(), kPref2, new base::StringValue("val2")); 2617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ContentSettingsStore* store = prefs()->content_settings_store(); 2627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ContentSettingsPattern pattern = 2637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ContentSettingsPattern::FromString("http://[*.]example.com"); 2647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) store->SetExtensionContentSetting(extension1()->id(), 2657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) pattern, pattern, 2667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CONTENT_SETTINGS_TYPE_IMAGES, 2677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string(), 2687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CONTENT_SETTING_BLOCK, 2697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kExtensionPrefsScopeRegular); 2707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UninstallExtension(extension1()->id()); 2727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 2737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Verify() OVERRIDE { 2747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(prefs()->HasPrefForExtension(extension1()->id())); 2757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string actual; 2777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) actual = prefs()->pref_service()->GetString(kPref1); 2787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(kDefaultPref1, actual); 2797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) actual = prefs()->pref_service()->GetString(kPref2); 2807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(kDefaultPref2, actual); 2817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 2827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 2837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(ControlledPrefsUninstallExtension, 2847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ControlledPrefsUninstallExtension) { } 2857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Tests triggering of notifications to registered observers. 2877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class ControlledPrefsNotifyWhenNeeded : public ExtensionControlledPrefsTest { 2887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Initialize() OVERRIDE { 2897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) using testing::_; 2907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) using testing::Mock; 2917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) using testing::StrEq; 2927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MockPrefChangeCallback observer(prefs()->pref_service()); 2947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PrefChangeRegistrar registrar; 2957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) registrar.Init(prefs()->pref_service()); 2967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) registrar.Add(kPref1, observer.GetCallback()); 2977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MockPrefChangeCallback incognito_observer(prefs()->pref_service()); 2997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_ptr<PrefService> incog_prefs(prefs_.CreateIncognitoPrefService()); 3007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PrefChangeRegistrar incognito_registrar; 3017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) incognito_registrar.Init(incog_prefs.get()); 3027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) incognito_registrar.Add(kPref1, incognito_observer.GetCallback()); 3037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Write value and check notification. 3057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(observer, OnPreferenceChanged(_)); 3067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(incognito_observer, OnPreferenceChanged(_)); 3077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPref(extension1(), kPref1, 3083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) new base::StringValue("https://www.chromium.org")); 3097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Mock::VerifyAndClearExpectations(&observer); 3107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Mock::VerifyAndClearExpectations(&incognito_observer); 3117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Write same value. 3137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(observer, OnPreferenceChanged(_)).Times(0); 3147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(incognito_observer, OnPreferenceChanged(_)).Times(0); 3157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPref(extension1(), kPref1, 3163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) new base::StringValue("https://www.chromium.org")); 3177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Mock::VerifyAndClearExpectations(&observer); 3187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Mock::VerifyAndClearExpectations(&incognito_observer); 3197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Change value. 3217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(observer, OnPreferenceChanged(_)); 3227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(incognito_observer, OnPreferenceChanged(_)); 3237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPref(extension1(), kPref1, 3243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) new base::StringValue("chrome://newtab")); 3257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Mock::VerifyAndClearExpectations(&observer); 3267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Mock::VerifyAndClearExpectations(&incognito_observer); 3277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Change only incognito persistent value. 3287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(observer, OnPreferenceChanged(_)).Times(0); 3297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(incognito_observer, OnPreferenceChanged(_)); 3307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPrefIncognito(extension1(), kPref1, 3313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) new base::StringValue("chrome://newtab2")); 3327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Mock::VerifyAndClearExpectations(&observer); 3337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Mock::VerifyAndClearExpectations(&incognito_observer); 3347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Change only incognito session-only value. 3367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(observer, OnPreferenceChanged(_)).Times(0); 3377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(incognito_observer, OnPreferenceChanged(_)); 3387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPrefIncognito(extension1(), kPref1, 3393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) new base::StringValue("chrome://newtab3")); 3407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Mock::VerifyAndClearExpectations(&observer); 3417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Mock::VerifyAndClearExpectations(&incognito_observer); 3427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Uninstall. 3447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(observer, OnPreferenceChanged(_)); 3457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(incognito_observer, OnPreferenceChanged(_)); 3467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UninstallExtension(extension1()->id()); 3477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Mock::VerifyAndClearExpectations(&observer); 3487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Mock::VerifyAndClearExpectations(&incognito_observer); 3497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) registrar.Remove(kPref1); 3517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) incognito_registrar.Remove(kPref1); 3527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 3537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Verify() OVERRIDE { 3547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string actual = prefs()->pref_service()->GetString(kPref1); 3557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(kDefaultPref1, actual); 3567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 3577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 3587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(ControlledPrefsNotifyWhenNeeded, 3597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ControlledPrefsNotifyWhenNeeded) { } 3607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Tests disabling an extension. 3627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class ControlledPrefsDisableExtension : public ExtensionControlledPrefsTest { 3637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Initialize() OVERRIDE { 3647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPref( 3653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) extension1(), kPref1, new base::StringValue("val1")); 3667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string actual = prefs()->pref_service()->GetString(kPref1); 3677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("val1", actual); 3687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) prefs()->SetExtensionState(extension1()->id(), Extension::DISABLED); 3697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 3707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Verify() OVERRIDE { 3717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string actual = prefs()->pref_service()->GetString(kPref1); 3727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(kDefaultPref1, actual); 3737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 3747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 3757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(ControlledPrefsDisableExtension, ControlledPrefsDisableExtension) { } 3767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Tests disabling and reenabling an extension. 3787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class ControlledPrefsReenableExtension : public ExtensionControlledPrefsTest { 3797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Initialize() OVERRIDE { 3807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPref( 3813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) extension1(), kPref1, new base::StringValue("val1")); 3827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) prefs()->SetExtensionState(extension1()->id(), Extension::DISABLED); 3837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) prefs()->SetExtensionState(extension1()->id(), Extension::ENABLED); 3847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 3857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Verify() OVERRIDE { 3867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string actual = prefs()->pref_service()->GetString(kPref1); 3877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("val1", actual); 3887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 3897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 3907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(ControlledPrefsDisableExtension, ControlledPrefsReenableExtension) { } 3917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Mock class to test whether objects are deleted correctly. 3937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class MockStringValue : public StringValue { 3947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public: 3957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) explicit MockStringValue(const std::string& in_value) 3967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : StringValue(in_value) { 3977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 3987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual ~MockStringValue() { 3997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Die(); 4007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 4017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MOCK_METHOD0(Die, void()); 4027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 4037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class ControlledPrefsSetExtensionControlledPref 4057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : public ExtensionControlledPrefsTest { 4067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public: 4077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Initialize() OVERRIDE { 4087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MockStringValue* v1 = new MockStringValue("https://www.chromium.org"); 4097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MockStringValue* v2 = new MockStringValue("https://www.chromium.org"); 4107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MockStringValue* v1i = new MockStringValue("https://www.chromium.org"); 4117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MockStringValue* v2i = new MockStringValue("https://www.chromium.org"); 4127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Ownership is taken, value shall not be deleted. 4137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(*v1, Die()).Times(0); 4147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(*v1i, Die()).Times(0); 4157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPref(extension1(), kPref1, v1); 4167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPrefIncognito(extension1(), kPref1, v1i); 4177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) testing::Mock::VerifyAndClearExpectations(v1); 4187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) testing::Mock::VerifyAndClearExpectations(v1i); 4197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Make sure there is no memory leak and both values are deleted. 4207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(*v1, Die()).Times(1); 4217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(*v1i, Die()).Times(1); 4227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(*v2, Die()).Times(1); 4237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(*v2i, Die()).Times(1); 4247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPref(extension1(), kPref1, v2); 4257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPrefIncognito(extension1(), kPref1, v2i); 4267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) prefs_.RecreateExtensionPrefs(); 4277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) testing::Mock::VerifyAndClearExpectations(v1); 4287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) testing::Mock::VerifyAndClearExpectations(v1i); 4297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) testing::Mock::VerifyAndClearExpectations(v2); 4307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) testing::Mock::VerifyAndClearExpectations(v2i); 4317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 4327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Verify() OVERRIDE { 4347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 4357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 4367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(ControlledPrefsSetExtensionControlledPref, 4377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ControlledPrefsSetExtensionControlledPref) { } 4387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Tests that the switches::kDisableExtensions command-line flag prevents 4407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// extension controlled preferences from being enacted. 4417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class ControlledPrefsDisableExtensions : public ExtensionControlledPrefsTest { 4427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public: 4437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ControlledPrefsDisableExtensions() 4447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : iteration_(0) {} 4457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual ~ControlledPrefsDisableExtensions() {} 4467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Initialize() OVERRIDE { 4477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPref( 4483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) extension1(), kPref1, new base::StringValue("val1")); 4497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // This becomes only active in the second verification phase. 4507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) prefs_.set_extensions_disabled(true); 4517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 4527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Verify() OVERRIDE { 4537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string actual = prefs()->pref_service()->GetString(kPref1); 4547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (iteration_ == 0) { 4557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("val1", actual); 4567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ++iteration_; 4577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } else { 4587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(kDefaultPref1, actual); 4597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 4607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 4617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) private: 4637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int iteration_; 4647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 4657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(ControlledPrefsDisableExtensions, ControlledPrefsDisableExtensions) { } 4667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} // namespace extensions 468