| Index: chrome/browser/protector/protected_prefs_watcher_unittest.cc
 | 
| diff --git a/chrome/browser/protector/protected_prefs_watcher_unittest.cc b/chrome/browser/protector/protected_prefs_watcher_unittest.cc
 | 
| deleted file mode 100644
 | 
| index ba7807c6336f65e6c9bc7aa96377155a872a559d..0000000000000000000000000000000000000000
 | 
| --- a/chrome/browser/protector/protected_prefs_watcher_unittest.cc
 | 
| +++ /dev/null
 | 
| @@ -1,291 +0,0 @@
 | 
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
 | 
| -// Use of this source code is governed by a BSD-style license that can be
 | 
| -// found in the LICENSE file.
 | 
| -
 | 
| -#include "base/message_loop.h"
 | 
| -#include "base/values.h"
 | 
| -#include "chrome/browser/extensions/extension_pref_value_map.h"
 | 
| -#include "chrome/browser/extensions/extension_pref_value_map_factory.h"
 | 
| -#include "chrome/browser/extensions/extension_prefs.h"
 | 
| -#include "chrome/browser/extensions/extension_service.h"
 | 
| -#include "chrome/browser/prefs/pref_service.h"
 | 
| -#include "chrome/browser/prefs/scoped_user_pref_update.h"
 | 
| -#include "chrome/browser/protector/protected_prefs_watcher.h"
 | 
| -#include "chrome/browser/protector/protector_service_factory.h"
 | 
| -#include "chrome/browser/protector/protector_service.h"
 | 
| -#include "chrome/common/extensions/extension_constants.h"
 | 
| -#include "chrome/common/pref_names.h"
 | 
| -#include "chrome/test/base/testing_profile.h"
 | 
| -#include "content/public/test/test_browser_thread.h"
 | 
| -#include "testing/gtest/include/gtest/gtest.h"
 | 
| -
 | 
| -namespace protector {
 | 
| -
 | 
| -namespace {
 | 
| -
 | 
| -const char kBackupSignature[] = "backup._signature";
 | 
| -const char kNewHomePage[] = "http://example.com";
 | 
| -
 | 
| -}
 | 
| -
 | 
| -class ProtectedPrefsWatcherTest : public testing::Test {
 | 
| - public:
 | 
| -  virtual void SetUp() OVERRIDE {
 | 
| -    prefs_watcher_ =
 | 
| -        ProtectorServiceFactory::GetForProfile(&profile_)->GetPrefsWatcher();
 | 
| -    prefs_ = profile_.GetPrefs();
 | 
| -  }
 | 
| -
 | 
| -  bool IsSignatureValid() {
 | 
| -    return prefs_watcher_->IsSignatureValid();
 | 
| -  }
 | 
| -
 | 
| -  bool HasBackup() {
 | 
| -    return prefs_watcher_->HasBackup();
 | 
| -  }
 | 
| -
 | 
| -  void RevalidateBackup() {
 | 
| -    prefs_watcher_->ValidateBackup();
 | 
| -  }
 | 
| -
 | 
| -  void ForceUpdateSignature(ProtectedPrefsWatcher* prefs_watcher) {
 | 
| -    prefs_watcher->UpdateBackupSignature();
 | 
| -  }
 | 
| -
 | 
| - protected:
 | 
| -  ProtectedPrefsWatcher* prefs_watcher_;
 | 
| -  TestingProfile profile_;
 | 
| -  PrefService* prefs_;
 | 
| -};
 | 
| -
 | 
| -TEST_F(ProtectedPrefsWatcherTest, ValidOnCleanProfile) {
 | 
| -  EXPECT_TRUE(HasBackup());
 | 
| -  EXPECT_TRUE(prefs_watcher_->is_backup_valid());
 | 
| -}
 | 
| -
 | 
| -TEST_F(ProtectedPrefsWatcherTest, ValidAfterPrefChange) {
 | 
| -  // Signature is still valid after a protected pref has been changed.
 | 
| -  base::StringValue new_homepage(kNewHomePage);
 | 
| -  EXPECT_NE(prefs_->GetString(prefs::kHomePage), kNewHomePage);
 | 
| -  EXPECT_FALSE(new_homepage.Equals(
 | 
| -      prefs_watcher_->GetBackupForPref(prefs::kHomePage)));
 | 
| -
 | 
| -  prefs_->SetString(prefs::kHomePage, kNewHomePage);
 | 
| -
 | 
| -  EXPECT_TRUE(HasBackup());
 | 
| -  EXPECT_TRUE(prefs_watcher_->is_backup_valid());
 | 
| -  EXPECT_EQ(prefs_->GetString(prefs::kHomePage), kNewHomePage);
 | 
| -  // Backup is updated accordingly.
 | 
| -  EXPECT_TRUE(new_homepage.Equals(
 | 
| -      prefs_watcher_->GetBackupForPref(prefs::kHomePage)));
 | 
| -}
 | 
| -
 | 
| -TEST_F(ProtectedPrefsWatcherTest, InvalidSignature) {
 | 
| -  // Make backup invalid by changing one of its members directly.
 | 
| -  prefs_->SetString("backup.homepage", kNewHomePage);
 | 
| -  RevalidateBackup();
 | 
| -  EXPECT_TRUE(HasBackup());
 | 
| -  EXPECT_FALSE(prefs_watcher_->is_backup_valid());
 | 
| -  // No backup values available.
 | 
| -  EXPECT_FALSE(prefs_watcher_->GetBackupForPref(prefs::kHomePage));
 | 
| -
 | 
| -  // Now change the corresponding protected prefernce: backup should be signed
 | 
| -  // again but still invalid.
 | 
| -  prefs_->SetString(prefs::kHomePage, kNewHomePage);
 | 
| -  EXPECT_TRUE(IsSignatureValid());
 | 
| -  EXPECT_FALSE(prefs_watcher_->is_backup_valid());
 | 
| -  EXPECT_FALSE(prefs_watcher_->GetBackupForPref(prefs::kHomePage));
 | 
| -}
 | 
| -
 | 
| -TEST_F(ProtectedPrefsWatcherTest, ExtensionPrefChange) {
 | 
| -  // Changes to extensions data (but not to extension IDs) do not update
 | 
| -  // the backup and its signature.
 | 
| -  MessageLoopForUI message_loop;
 | 
| -  content::TestBrowserThread ui_thread(content::BrowserThread::UI,
 | 
| -                                       &message_loop);
 | 
| -
 | 
| -  FilePath extensions_install_dir =
 | 
| -      profile_.GetPath().AppendASCII(ExtensionService::kInstallDirectoryName);
 | 
| -  scoped_ptr<extensions::ExtensionPrefs> extension_prefs =
 | 
| -      extensions::ExtensionPrefs::Create(
 | 
| -          profile_.GetPrefs(),
 | 
| -          extensions_install_dir,
 | 
| -          ExtensionPrefValueMapFactory::GetForProfile(&profile_),
 | 
| -          false);  // extensions_disabled
 | 
| -  std::string sample_id = extension_misc::kWebStoreAppId;
 | 
| -  // Flip a pref value of an extension (this will actually add it to the list).
 | 
| -  extension_prefs->SetAppNotificationDisabled(
 | 
| -      sample_id, !extension_prefs->IsAppNotificationDisabled(sample_id));
 | 
| -
 | 
| -  // Backup is still valid.
 | 
| -  EXPECT_TRUE(prefs_watcher_->is_backup_valid());
 | 
| -
 | 
| -  // Make signature invalid by changing it directly.
 | 
| -  prefs_->SetString(kBackupSignature, "INVALID");
 | 
| -  EXPECT_FALSE(IsSignatureValid());
 | 
| -
 | 
| -  // Flip another pref value of that extension.
 | 
| -  extension_prefs->SetExtensionRunning(
 | 
| -      sample_id, !extension_prefs->IsExtensionRunning(sample_id));
 | 
| -
 | 
| -  // No changes to the backup and signature.
 | 
| -  EXPECT_FALSE(IsSignatureValid());
 | 
| -
 | 
| -  // Blacklisting the extension does update the backup and signature.
 | 
| -  extension_prefs->SetExtensionBlacklisted(sample_id, true);
 | 
| -
 | 
| -  EXPECT_TRUE(IsSignatureValid());
 | 
| -}
 | 
| -
 | 
| -// Verify that version bigger than 1 is included in the signature.
 | 
| -TEST_F(ProtectedPrefsWatcherTest, VersionIsSigned) {
 | 
| -  // Reset version to 1.
 | 
| -  prefs_->ClearPref("backup._version");
 | 
| -  // This should make the backup invalid.
 | 
| -  EXPECT_FALSE(IsSignatureValid());
 | 
| -
 | 
| -  // "Migrate" the backup back to the latest version.
 | 
| -  RevalidateBackup();
 | 
| -
 | 
| -  EXPECT_FALSE(prefs_watcher_->is_backup_valid());
 | 
| -  EXPECT_EQ(ProtectedPrefsWatcher::kCurrentVersionNumber,
 | 
| -            prefs_->GetInteger("backup._version"));
 | 
| -}
 | 
| -
 | 
| -// Verify that backup for "pinned_tabs" is added during version 2 migration.
 | 
| -TEST_F(ProtectedPrefsWatcherTest, MigrationToVersion2) {
 | 
| -  // Add a pinned tab.
 | 
| -  {
 | 
| -    ListPrefUpdate pinned_tabs_update(prefs_, prefs::kPinnedTabs);
 | 
| -    base::ListValue* pinned_tabs = pinned_tabs_update.Get();
 | 
| -    pinned_tabs->Clear();
 | 
| -    base::DictionaryValue* tab = new base::DictionaryValue;
 | 
| -    tab->SetString("url", "http://example.com/");
 | 
| -    pinned_tabs->Append(tab);
 | 
| -  }
 | 
| -  EXPECT_TRUE(prefs_watcher_->is_backup_valid());
 | 
| -
 | 
| -  scoped_ptr<base::Value> pinned_tabs_copy(
 | 
| -      prefs_->GetList(prefs::kPinnedTabs)->DeepCopy());
 | 
| -
 | 
| -  // Reset version to 1, remove "pinned_tabs" and overwrite the signature.
 | 
| -  // Store the old signature (without "pinned_tabs").
 | 
| -  prefs_->ClearPref("backup._version");
 | 
| -  prefs_->ClearPref("backup.pinned_tabs");
 | 
| -  ForceUpdateSignature(prefs_watcher_);
 | 
| -  EXPECT_TRUE(IsSignatureValid());
 | 
| -
 | 
| -  // This will migrate backup to the latest version.
 | 
| -  RevalidateBackup();
 | 
| -
 | 
| -  // Now the backup should be valid and "pinned_tabs" is added back.
 | 
| -  EXPECT_TRUE(prefs_watcher_->is_backup_valid());
 | 
| -  EXPECT_TRUE(pinned_tabs_copy->Equals(prefs_->GetList("backup.pinned_tabs")));
 | 
| -  EXPECT_TRUE(pinned_tabs_copy->Equals(prefs_->GetList(prefs::kPinnedTabs)));
 | 
| -  EXPECT_FALSE(prefs_watcher_->DidPrefChange(prefs::kPinnedTabs));
 | 
| -  EXPECT_EQ(ProtectedPrefsWatcher::kCurrentVersionNumber,
 | 
| -            prefs_->GetInteger("backup._version"));
 | 
| -}
 | 
| -
 | 
| -// Verify that SessionStartupPref migration doesn't trigger Protector
 | 
| -// (version 3 migration).
 | 
| -TEST_F(ProtectedPrefsWatcherTest, MigrationToVersion3) {
 | 
| -  EXPECT_TRUE(prefs_watcher_->is_backup_valid());
 | 
| -
 | 
| -  // Bring startup prefs to an old (pre-migration) version.
 | 
| -  prefs_->SetBoolean(prefs::kHomePageIsNewTabPage, false);
 | 
| -  prefs_->SetString(prefs::kHomePage, kNewHomePage);
 | 
| -  prefs_->ClearPref(prefs::kRestoreOnStartupMigrated);
 | 
| -
 | 
| -  // Reset version to 2 and overwrite the signature.
 | 
| -  prefs_->SetInteger("backup._version", 2);
 | 
| -  ForceUpdateSignature(prefs_watcher_);
 | 
| -  EXPECT_TRUE(IsSignatureValid());
 | 
| -
 | 
| -  // Take down the old instance and create a new ProtectedPrefsWatcher from
 | 
| -  // current prefs.
 | 
| -  ProtectorServiceFactory::GetForProfile(&profile_)->
 | 
| -      StopWatchingPrefsForTesting();
 | 
| -  scoped_ptr<ProtectedPrefsWatcher> prefs_watcher2(
 | 
| -      new ProtectedPrefsWatcher(&profile_));
 | 
| -  EXPECT_TRUE(prefs_watcher2->is_backup_valid());
 | 
| -
 | 
| -  // Startup settings shouldn't be reported as changed.
 | 
| -  EXPECT_FALSE(prefs_watcher2->DidPrefChange(prefs::kRestoreOnStartup));
 | 
| -  EXPECT_FALSE(prefs_watcher2->DidPrefChange(prefs::kURLsToRestoreOnStartup));
 | 
| -  EXPECT_EQ(ProtectedPrefsWatcher::kCurrentVersionNumber,
 | 
| -            prefs_->GetInteger("backup._version"));
 | 
| -}
 | 
| -
 | 
| -// Verify that migration to version 4 removes backups with default values.
 | 
| -TEST_F(ProtectedPrefsWatcherTest, MigrationToVersion4) {
 | 
| -  EXPECT_TRUE(prefs_watcher_->is_backup_valid());
 | 
| -
 | 
| -  prefs_->SetString(prefs::kHomePage, kNewHomePage);
 | 
| -  EXPECT_TRUE(prefs_->HasPrefPath("backup.homepage"));
 | 
| -
 | 
| -  // Reset version to 3 and overwrite the signature.
 | 
| -  prefs_->SetInteger("backup._version", 3);
 | 
| -  ForceUpdateSignature(prefs_watcher_);
 | 
| -  EXPECT_TRUE(IsSignatureValid());
 | 
| -
 | 
| -  ProtectorServiceFactory::GetForProfile(&profile_)->
 | 
| -      StopWatchingPrefsForTesting();
 | 
| -
 | 
| -  // Restore |kHomePage| to default value.
 | 
| -  prefs_->ClearPref(prefs::kHomePage);
 | 
| -
 | 
| -  scoped_ptr<ProtectedPrefsWatcher> prefs_watcher2(
 | 
| -      new ProtectedPrefsWatcher(&profile_));
 | 
| -  EXPECT_TRUE(prefs_watcher2->is_backup_valid());
 | 
| -
 | 
| -  // Backup for |kHomePage| should now be restored to the default value, too.
 | 
| -  EXPECT_FALSE(prefs_->HasPrefPath("backup.homepage"));
 | 
| -  EXPECT_FALSE(prefs_watcher2->DidPrefChange(prefs::kHomePage));
 | 
| -  EXPECT_EQ(ProtectedPrefsWatcher::kCurrentVersionNumber,
 | 
| -            prefs_->GetInteger("backup._version"));
 | 
| -}
 | 
| -
 | 
| -// Verify handling of default values of protected prefs.
 | 
| -TEST_F(ProtectedPrefsWatcherTest, DefaultValues) {
 | 
| -  EXPECT_TRUE(prefs_watcher_->is_backup_valid());
 | 
| -
 | 
| -  EXPECT_FALSE(prefs_->HasPrefPath(prefs::kHomePage));
 | 
| -  EXPECT_FALSE(prefs_watcher_->DidPrefChange(prefs::kHomePage));
 | 
| -  prefs_->SetString(prefs::kHomePage, kNewHomePage);
 | 
| -  EXPECT_FALSE(prefs_watcher_->DidPrefChange(prefs::kHomePage));
 | 
| -
 | 
| -  ProtectorServiceFactory::GetForProfile(&profile_)->
 | 
| -      StopWatchingPrefsForTesting();
 | 
| -
 | 
| -  // Restore |kHomePage| to default value.
 | 
| -  prefs_->ClearPref(prefs::kHomePage);
 | 
| -
 | 
| -  scoped_ptr<ProtectedPrefsWatcher> prefs_watcher2(
 | 
| -      new ProtectedPrefsWatcher(&profile_));
 | 
| -  EXPECT_TRUE(prefs_watcher2->is_backup_valid());
 | 
| -  EXPECT_TRUE(prefs_watcher2->DidPrefChange(prefs::kHomePage));
 | 
| -
 | 
| -  prefs_->ClearPref("backup.homepage");
 | 
| -  ForceUpdateSignature(prefs_watcher2.get());
 | 
| -
 | 
| -  EXPECT_TRUE(prefs_watcher2->is_backup_valid());
 | 
| -  EXPECT_FALSE(prefs_watcher2->DidPrefChange(prefs::kHomePage));
 | 
| -}
 | 
| -
 | 
| -TEST_F(ProtectedPrefsWatcherTest, CheckPrefNames) {
 | 
| -  // If any of these preference names change, add corresponding migration code
 | 
| -  // to ProtectedPrefsWatcher.
 | 
| -  // DO NOT simply fix these literals!
 | 
| -  EXPECT_EQ("homepage", std::string(prefs::kHomePage));
 | 
| -  EXPECT_EQ("homepage_is_newtabpage",
 | 
| -            std::string(prefs::kHomePageIsNewTabPage));
 | 
| -  EXPECT_EQ("browser.show_home_button", std::string(prefs::kShowHomeButton));
 | 
| -  EXPECT_EQ("session.restore_on_startup",
 | 
| -            std::string(prefs::kRestoreOnStartup));
 | 
| -  EXPECT_EQ("session.urls_to_restore_on_startup",
 | 
| -            std::string(prefs::kURLsToRestoreOnStartup));
 | 
| -  EXPECT_EQ("pinned_tabs", std::string(prefs::kPinnedTabs));
 | 
| -}
 | 
| -
 | 
| -}  // namespace protector
 | 
| 
 |