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