preference_api_prefs_unittest.cc revision e5d81f57cb97b3b6b7fccc9c5610d21eb81db09d
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" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/extensions/./extension_prefs_unittest.h" 12e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "chrome/browser/extensions/api/content_settings/content_settings_service.h" 137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/extensions/api/preference/preference_api.h" 147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "components/user_prefs/pref_registry_syncable.h" 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_prefs.h" 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h" 187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)using base::Value; 217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace extensions { 237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace { 257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)const char kPref1[] = "path1.subpath"; 277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)const char kPref2[] = "path2"; 287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)const char kPref3[] = "path3"; 297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)const char kPref4[] = "path4"; 307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Default values in case an extension pref value is not overridden. 327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)const char kDefaultPref1[] = "default pref 1"; 337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)const char kDefaultPref2[] = "default pref 2"; 347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)const char kDefaultPref3[] = "default pref 3"; 357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)const char kDefaultPref4[] = "default pref 4"; 367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} // namespace 387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// An implementation of the PreferenceAPI which returns the ExtensionPrefs and 407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// ExtensionPrefValueMap from the TestExtensionPrefs, rather than from a 417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// profile (which we don't create in unittests). 427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class TestPreferenceAPI : public PreferenceAPIBase { 437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public: 44e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch explicit TestPreferenceAPI(TestExtensionPrefs* test_extension_prefs, 45e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ContentSettingsService* content_settings) 46e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch : test_extension_prefs_(test_extension_prefs), 47e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch content_settings_(content_settings) {} 48e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ~TestPreferenceAPI() {} 49e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) private: 517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // PreferenceAPIBase implementation. 527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual ExtensionPrefs* extension_prefs() OVERRIDE { 537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return test_extension_prefs_->prefs(); 547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual ExtensionPrefValueMap* extension_pref_value_map() OVERRIDE { 567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return test_extension_prefs_->extension_pref_value_map(); 577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 58e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch virtual scoped_refptr<ContentSettingsStore> content_settings_store() 59e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch OVERRIDE { 60e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch return content_settings_->content_settings_store(); 61e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } 627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TestExtensionPrefs* test_extension_prefs_; 64e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ContentSettingsService* content_settings_; 657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestPreferenceAPI); 677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class ExtensionControlledPrefsTest : public PrefsPrepopulatedTestBase { 707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public: 717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ExtensionControlledPrefsTest(); 727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual ~ExtensionControlledPrefsTest(); 737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void RegisterPreferences(user_prefs::PrefRegistrySyncable* registry) 757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OVERRIDE; 767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void InstallExtensionControlledPref(Extension* extension, 777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& key, 787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::Value* value); 797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void InstallExtensionControlledPrefIncognito(Extension* extension, 807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& key, 817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::Value* value); 827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void InstallExtensionControlledPrefIncognitoSessionOnly( 837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Extension* extension, 847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& key, 857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::Value* value); 867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void InstallExtension(Extension* extension); 877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void UninstallExtension(const std::string& extension_id); 887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 89e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch scoped_refptr<ContentSettingsStore> content_settings_store() { 90e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch return content_settings_->content_settings_store(); 91e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } 92e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) protected: 947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void EnsureExtensionInstalled(Extension* extension); 957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void EnsureExtensionUninstalled(const std::string& extension_id); 967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 97e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch TestingProfile profile_; 98e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ContentSettingsService* content_settings_; 997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TestPreferenceAPI test_preference_api_; 1007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 1017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)ExtensionControlledPrefsTest::ExtensionControlledPrefsTest() 1037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : PrefsPrepopulatedTestBase(), 104e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch content_settings_(ContentSettingsService::Get(&profile_)), 105e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch test_preference_api_(&prefs_, content_settings_) { 106e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch prefs_.prefs()->AddObserver(content_settings_); 1077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)ExtensionControlledPrefsTest::~ExtensionControlledPrefsTest() { 1107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void ExtensionControlledPrefsTest::RegisterPreferences( 1137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) user_prefs::PrefRegistrySyncable* registry) { 1147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) registry->RegisterStringPref( 1157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kPref1, kDefaultPref1, user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 1167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) registry->RegisterStringPref( 1177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kPref2, kDefaultPref2, user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 1187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) registry->RegisterStringPref( 1197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kPref3, kDefaultPref3, user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 1207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) registry->RegisterStringPref( 1217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kPref4, kDefaultPref4, user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 1227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void ExtensionControlledPrefsTest::InstallExtensionControlledPref( 1257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Extension* extension, 1267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& key, 1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Value* value) { 1287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EnsureExtensionInstalled(extension); 1297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) test_preference_api_.SetExtensionControlledPref( 1307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension->id(), key, kExtensionPrefsScopeRegular, value); 1317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void ExtensionControlledPrefsTest::InstallExtensionControlledPrefIncognito( 1347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Extension* extension, 1357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& key, 1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Value* value) { 1377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EnsureExtensionInstalled(extension); 1387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) test_preference_api_.SetExtensionControlledPref( 1397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension->id(), key, kExtensionPrefsScopeIncognitoPersistent, value); 1407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void ExtensionControlledPrefsTest:: 1437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)InstallExtensionControlledPrefIncognitoSessionOnly(Extension* extension, 1447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& key, 1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Value* value) { 1467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EnsureExtensionInstalled(extension); 1477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) test_preference_api_.SetExtensionControlledPref( 1487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension->id(), key, kExtensionPrefsScopeIncognitoSessionOnly, value); 1497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void ExtensionControlledPrefsTest::InstallExtension(Extension* extension) { 1527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EnsureExtensionInstalled(extension); 1537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void ExtensionControlledPrefsTest::UninstallExtension( 1567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& extension_id) { 1577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EnsureExtensionUninstalled(extension_id); 1587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void ExtensionControlledPrefsTest::EnsureExtensionInstalled( 1617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Extension* extension) { 1627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Install extension the first time a preference is set for it. 1637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Extension* extensions[] = { extension1(), 1647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension2(), 1657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension3(), 1667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension4() }; 1677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) for (size_t i = 0; i < kNumInstalledExtensions; ++i) { 1687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (extension == extensions[i] && !installed_[i]) { 169a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) prefs()->OnExtensionInstalled(extension, 170a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) Extension::ENABLED, 171f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false, 172effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch syncer::StringOrdinal(), 173effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::string()); 174a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) prefs()->SetIsIncognitoEnabled(extension->id(), true); 1757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) installed_[i] = true; 1767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) break; 1777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 1787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 1797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void ExtensionControlledPrefsTest::EnsureExtensionUninstalled( 1827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& extension_id) { 1837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Extension* extensions[] = { extension1(), 1847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension2(), 1857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension3(), 1867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension4() }; 1877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) for (size_t i = 0; i < kNumInstalledExtensions; ++i) { 1887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (extensions[i]->id() == extension_id) { 1897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) installed_[i] = false; 1907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) break; 1917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 1927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 1937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) prefs()->OnExtensionUninstalled(extension_id, Manifest::INTERNAL, false); 1947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class ControlledPrefsInstallOneExtension 1977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : public ExtensionControlledPrefsTest { 1987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Initialize() OVERRIDE { 1997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPref(extension1(), 2007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kPref1, 2013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) new base::StringValue("val1")); 2027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 2037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Verify() OVERRIDE { 2047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string actual = prefs()->pref_service()->GetString(kPref1); 2057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("val1", actual); 2067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 2077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 2087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(ControlledPrefsInstallOneExtension, 2097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ControlledPrefsInstallOneExtension) { } 2107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Check that we do not forget persistent incognito values after a reload. 2127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class ControlledPrefsInstallIncognitoPersistent 2137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : public ExtensionControlledPrefsTest { 2147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public: 2157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Initialize() OVERRIDE { 2167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPref( 2173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) extension1(), kPref1, new base::StringValue("val1")); 2187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPrefIncognito( 2193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) extension1(), kPref1, new base::StringValue("val2")); 2207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_ptr<PrefService> incog_prefs(prefs_.CreateIncognitoPrefService()); 2217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string actual = incog_prefs->GetString(kPref1); 2227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("val2", actual); 2237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 2247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Verify() OVERRIDE { 2267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Main pref service shall see only non-incognito settings. 2277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string actual = prefs()->pref_service()->GetString(kPref1); 2287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("val1", actual); 2297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Incognito pref service shall see incognito values. 2307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_ptr<PrefService> incog_prefs(prefs_.CreateIncognitoPrefService()); 2317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) actual = incog_prefs->GetString(kPref1); 2327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("val2", actual); 2337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 2347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 2357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(ControlledPrefsInstallIncognitoPersistent, 2367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ControlledPrefsInstallIncognitoPersistent) { } 2377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Check that we forget 'session only' incognito values after a reload. 2397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class ControlledPrefsInstallIncognitoSessionOnly 2407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : public ExtensionControlledPrefsTest { 2417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public: 2427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ControlledPrefsInstallIncognitoSessionOnly() : iteration_(0) {} 2437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Initialize() OVERRIDE { 2457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPref( 2463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) extension1(), kPref1, new base::StringValue("val1")); 2477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPrefIncognitoSessionOnly( 2483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) extension1(), kPref1, new base::StringValue("val2")); 2497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_ptr<PrefService> incog_prefs(prefs_.CreateIncognitoPrefService()); 2507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string actual = incog_prefs->GetString(kPref1); 2517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("val2", actual); 2527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 2537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Verify() OVERRIDE { 2547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Main pref service shall see only non-incognito settings. 2557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string actual = prefs()->pref_service()->GetString(kPref1); 2567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("val1", actual); 2577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Incognito pref service shall see session-only incognito values only 2587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // during first run. Once the pref service was reloaded, all values shall be 2597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // discarded. 2607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_ptr<PrefService> incog_prefs(prefs_.CreateIncognitoPrefService()); 2617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) actual = incog_prefs->GetString(kPref1); 2627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (iteration_ == 0) { 2637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("val2", actual); 2647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } else { 2657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("val1", actual); 2667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 2677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ++iteration_; 2687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 2697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int iteration_; 2707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 2717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(ControlledPrefsInstallIncognitoSessionOnly, 2727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ControlledPrefsInstallIncognitoSessionOnly) { } 2737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class ControlledPrefsUninstallExtension : public ExtensionControlledPrefsTest { 2757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Initialize() OVERRIDE { 2767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPref( 2773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) extension1(), kPref1, new base::StringValue("val1")); 2787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPref( 2793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) extension1(), kPref2, new base::StringValue("val2")); 280e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch scoped_refptr<ContentSettingsStore> store = content_settings_store(); 2817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ContentSettingsPattern pattern = 2827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ContentSettingsPattern::FromString("http://[*.]example.com"); 2837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) store->SetExtensionContentSetting(extension1()->id(), 2847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) pattern, pattern, 2857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CONTENT_SETTINGS_TYPE_IMAGES, 2867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string(), 2877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CONTENT_SETTING_BLOCK, 2887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kExtensionPrefsScopeRegular); 2897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UninstallExtension(extension1()->id()); 2917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 2927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Verify() OVERRIDE { 2937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(prefs()->HasPrefForExtension(extension1()->id())); 2947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string actual; 2967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) actual = prefs()->pref_service()->GetString(kPref1); 2977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(kDefaultPref1, actual); 2987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) actual = prefs()->pref_service()->GetString(kPref2); 2997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(kDefaultPref2, actual); 3007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 3017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 3027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(ControlledPrefsUninstallExtension, 3037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ControlledPrefsUninstallExtension) { } 3047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Tests triggering of notifications to registered observers. 3067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class ControlledPrefsNotifyWhenNeeded : public ExtensionControlledPrefsTest { 3077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Initialize() OVERRIDE { 3087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) using testing::_; 3097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) using testing::Mock; 3107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) using testing::StrEq; 3117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MockPrefChangeCallback observer(prefs()->pref_service()); 3137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PrefChangeRegistrar registrar; 3147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) registrar.Init(prefs()->pref_service()); 3157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) registrar.Add(kPref1, observer.GetCallback()); 3167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MockPrefChangeCallback incognito_observer(prefs()->pref_service()); 3187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_ptr<PrefService> incog_prefs(prefs_.CreateIncognitoPrefService()); 3197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PrefChangeRegistrar incognito_registrar; 3207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) incognito_registrar.Init(incog_prefs.get()); 3217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) incognito_registrar.Add(kPref1, incognito_observer.GetCallback()); 3227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Write value and check notification. 3247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(observer, OnPreferenceChanged(_)); 3257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(incognito_observer, OnPreferenceChanged(_)); 3267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPref(extension1(), kPref1, 3273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) new base::StringValue("https://www.chromium.org")); 3287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Mock::VerifyAndClearExpectations(&observer); 3297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Mock::VerifyAndClearExpectations(&incognito_observer); 3307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Write same value. 3327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(observer, OnPreferenceChanged(_)).Times(0); 3337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(incognito_observer, OnPreferenceChanged(_)).Times(0); 3347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPref(extension1(), kPref1, 3353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) new base::StringValue("https://www.chromium.org")); 3367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Mock::VerifyAndClearExpectations(&observer); 3377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Mock::VerifyAndClearExpectations(&incognito_observer); 3387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Change value. 3407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(observer, OnPreferenceChanged(_)); 3417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(incognito_observer, OnPreferenceChanged(_)); 3427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPref(extension1(), kPref1, 3433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) new base::StringValue("chrome://newtab")); 3447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Mock::VerifyAndClearExpectations(&observer); 3457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Mock::VerifyAndClearExpectations(&incognito_observer); 3467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Change only incognito persistent value. 3477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(observer, OnPreferenceChanged(_)).Times(0); 3487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(incognito_observer, OnPreferenceChanged(_)); 3497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPrefIncognito(extension1(), kPref1, 3503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) new base::StringValue("chrome://newtab2")); 3517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Mock::VerifyAndClearExpectations(&observer); 3527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Mock::VerifyAndClearExpectations(&incognito_observer); 3537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Change only incognito session-only value. 3557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(observer, OnPreferenceChanged(_)).Times(0); 3567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(incognito_observer, OnPreferenceChanged(_)); 3577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPrefIncognito(extension1(), kPref1, 3583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) new base::StringValue("chrome://newtab3")); 3597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Mock::VerifyAndClearExpectations(&observer); 3607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Mock::VerifyAndClearExpectations(&incognito_observer); 3617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Uninstall. 3637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(observer, OnPreferenceChanged(_)); 3647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(incognito_observer, OnPreferenceChanged(_)); 3657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UninstallExtension(extension1()->id()); 3667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Mock::VerifyAndClearExpectations(&observer); 3677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Mock::VerifyAndClearExpectations(&incognito_observer); 3687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) registrar.Remove(kPref1); 3707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) incognito_registrar.Remove(kPref1); 3717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 3727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Verify() OVERRIDE { 3737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string actual = prefs()->pref_service()->GetString(kPref1); 3747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(kDefaultPref1, actual); 3757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 3767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 3777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(ControlledPrefsNotifyWhenNeeded, 3787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ControlledPrefsNotifyWhenNeeded) { } 3797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Tests disabling an extension. 3817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class ControlledPrefsDisableExtension : public ExtensionControlledPrefsTest { 3827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Initialize() OVERRIDE { 3837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPref( 3843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) extension1(), kPref1, new base::StringValue("val1")); 3857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string actual = prefs()->pref_service()->GetString(kPref1); 3867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("val1", actual); 3877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) prefs()->SetExtensionState(extension1()->id(), Extension::DISABLED); 3887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 3897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Verify() OVERRIDE { 3907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string actual = prefs()->pref_service()->GetString(kPref1); 3917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(kDefaultPref1, actual); 3927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 3937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 3947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(ControlledPrefsDisableExtension, ControlledPrefsDisableExtension) { } 3957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Tests disabling and reenabling an extension. 3977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class ControlledPrefsReenableExtension : public ExtensionControlledPrefsTest { 3987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Initialize() OVERRIDE { 3997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPref( 4003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) extension1(), kPref1, new base::StringValue("val1")); 4017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) prefs()->SetExtensionState(extension1()->id(), Extension::DISABLED); 4027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) prefs()->SetExtensionState(extension1()->id(), Extension::ENABLED); 4037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 4047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Verify() OVERRIDE { 4057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string actual = prefs()->pref_service()->GetString(kPref1); 4067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("val1", actual); 4077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 4087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 4097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(ControlledPrefsDisableExtension, ControlledPrefsReenableExtension) { } 4107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Mock class to test whether objects are deleted correctly. 4125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class MockStringValue : public base::StringValue { 4137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public: 4147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) explicit MockStringValue(const std::string& in_value) 4155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : base::StringValue(in_value) { 4167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 4177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual ~MockStringValue() { 4187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Die(); 4197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 4207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MOCK_METHOD0(Die, void()); 4217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 4227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class ControlledPrefsSetExtensionControlledPref 4247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : public ExtensionControlledPrefsTest { 4257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public: 4267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Initialize() OVERRIDE { 4277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MockStringValue* v1 = new MockStringValue("https://www.chromium.org"); 4287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MockStringValue* v2 = new MockStringValue("https://www.chromium.org"); 4297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MockStringValue* v1i = new MockStringValue("https://www.chromium.org"); 4307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MockStringValue* v2i = new MockStringValue("https://www.chromium.org"); 4317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Ownership is taken, value shall not be deleted. 4327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(*v1, Die()).Times(0); 4337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(*v1i, Die()).Times(0); 4347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPref(extension1(), kPref1, v1); 4357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPrefIncognito(extension1(), kPref1, v1i); 4367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) testing::Mock::VerifyAndClearExpectations(v1); 4377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) testing::Mock::VerifyAndClearExpectations(v1i); 4387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Make sure there is no memory leak and both values are deleted. 4397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(*v1, Die()).Times(1); 4407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(*v1i, Die()).Times(1); 4417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(*v2, Die()).Times(1); 4427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(*v2i, Die()).Times(1); 4437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPref(extension1(), kPref1, v2); 4447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPrefIncognito(extension1(), kPref1, v2i); 4457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) prefs_.RecreateExtensionPrefs(); 4467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) testing::Mock::VerifyAndClearExpectations(v1); 4477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) testing::Mock::VerifyAndClearExpectations(v1i); 4487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) testing::Mock::VerifyAndClearExpectations(v2); 4497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) testing::Mock::VerifyAndClearExpectations(v2i); 4507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 4517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Verify() OVERRIDE { 4537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 4547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 4557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(ControlledPrefsSetExtensionControlledPref, 4567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ControlledPrefsSetExtensionControlledPref) { } 4577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Tests that the switches::kDisableExtensions command-line flag prevents 4597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// extension controlled preferences from being enacted. 4607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class ControlledPrefsDisableExtensions : public ExtensionControlledPrefsTest { 4617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public: 4627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ControlledPrefsDisableExtensions() 4637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : iteration_(0) {} 4647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual ~ControlledPrefsDisableExtensions() {} 4657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Initialize() OVERRIDE { 4667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) InstallExtensionControlledPref( 4673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) extension1(), kPref1, new base::StringValue("val1")); 4687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // This becomes only active in the second verification phase. 4697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) prefs_.set_extensions_disabled(true); 4707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 4717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Verify() OVERRIDE { 4727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string actual = prefs()->pref_service()->GetString(kPref1); 4737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (iteration_ == 0) { 4747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("val1", actual); 4757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ++iteration_; 4767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } else { 4777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(kDefaultPref1, actual); 4787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 4797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 4807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) private: 4827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int iteration_; 4837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 4847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(ControlledPrefsDisableExtensions, ControlledPrefsDisableExtensions) { } 4857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} // namespace extensions 487