// 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/prefs/pref_service.h" #include "chrome/browser/sync/test/integration/preferences_helper.h" #include "chrome/browser/sync/test/integration/profile_sync_service_harness.h" #include "chrome/browser/sync/test/integration/sync_integration_test_util.h" #include "chrome/browser/sync/test/integration/sync_test.h" #include "chrome/common/pref_names.h" using preferences_helper::AwaitBooleanPrefMatches; using preferences_helper::AwaitIntegerPrefMatches; using preferences_helper::AwaitListPrefMatches; using preferences_helper::AwaitStringPrefMatches; using preferences_helper::BooleanPrefMatches; using preferences_helper::ChangeBooleanPref; using preferences_helper::ChangeIntegerPref; using preferences_helper::ChangeListPref; using preferences_helper::ChangeStringPref; using preferences_helper::GetPrefs; class TwoClientPreferencesSyncTest : public SyncTest { public: TwoClientPreferencesSyncTest() : SyncTest(TWO_CLIENT) {} virtual ~TwoClientPreferencesSyncTest() {} virtual bool TestUsesSelfNotifications() OVERRIDE { return false; } private: DISALLOW_COPY_AND_ASSIGN(TwoClientPreferencesSyncTest); }; IN_PROC_BROWSER_TEST_F(TwoClientPreferencesSyncTest, BooleanPref) { ASSERT_TRUE(SetupSync()); ASSERT_TRUE(AwaitBooleanPrefMatches(prefs::kHomePageIsNewTabPage)); ChangeBooleanPref(0, prefs::kHomePageIsNewTabPage); ASSERT_TRUE(AwaitBooleanPrefMatches(prefs::kHomePageIsNewTabPage)); } IN_PROC_BROWSER_TEST_F(TwoClientPreferencesSyncTest, Bidirectional) { ASSERT_TRUE(SetupSync()); ASSERT_TRUE(AwaitStringPrefMatches(prefs::kHomePage)); ChangeStringPref(0, prefs::kHomePage, "http://www.google.com/0"); ASSERT_TRUE(AwaitStringPrefMatches(prefs::kHomePage)); EXPECT_EQ("http://www.google.com/0", GetPrefs(0)->GetString(prefs::kHomePage)); ChangeStringPref(1, prefs::kHomePage, "http://www.google.com/1"); ASSERT_TRUE(AwaitStringPrefMatches(prefs::kHomePage)); EXPECT_EQ("http://www.google.com/1", GetPrefs(0)->GetString(prefs::kHomePage)); } IN_PROC_BROWSER_TEST_F(TwoClientPreferencesSyncTest, UnsyncableBooleanPref) { ASSERT_TRUE(SetupSync()); DisableVerifier(); ASSERT_TRUE(AwaitStringPrefMatches(prefs::kHomePage)); ASSERT_TRUE(AwaitBooleanPrefMatches(prefs::kCheckDefaultBrowser)); // This pref is not syncable. ChangeBooleanPref(0, prefs::kCheckDefaultBrowser); // This pref is syncable. ChangeStringPref(0, prefs::kHomePage, "http://news.google.com"); // Wait until the syncable pref is synced, then expect that the non-syncable // one is still out of sync. ASSERT_TRUE(AwaitStringPrefMatches(prefs::kHomePage)); ASSERT_FALSE(BooleanPrefMatches(prefs::kCheckDefaultBrowser)); } IN_PROC_BROWSER_TEST_F(TwoClientPreferencesSyncTest, StringPref) { ASSERT_TRUE(SetupSync()); ASSERT_TRUE(AwaitStringPrefMatches(prefs::kHomePage)); ChangeStringPref(0, prefs::kHomePage, "http://news.google.com"); ASSERT_TRUE(AwaitStringPrefMatches(prefs::kHomePage)); } IN_PROC_BROWSER_TEST_F(TwoClientPreferencesSyncTest, ComplexPrefs) { ASSERT_TRUE(SetupSync()); ASSERT_TRUE(AwaitIntegerPrefMatches(prefs::kRestoreOnStartup)); ASSERT_TRUE(AwaitListPrefMatches(prefs::kURLsToRestoreOnStartup)); ChangeIntegerPref(0, prefs::kRestoreOnStartup, 0); ASSERT_TRUE(AwaitIntegerPrefMatches(prefs::kRestoreOnStartup)); base::ListValue urls; urls.Append(base::Value::CreateStringValue("http://www.google.com/")); urls.Append(base::Value::CreateStringValue("http://www.flickr.com/")); ChangeIntegerPref(0, prefs::kRestoreOnStartup, 4); ChangeListPref(0, prefs::kURLsToRestoreOnStartup, urls); ASSERT_TRUE(AwaitIntegerPrefMatches(prefs::kRestoreOnStartup)); ASSERT_TRUE(AwaitListPrefMatches(prefs::kURLsToRestoreOnStartup)); } IN_PROC_BROWSER_TEST_F(TwoClientPreferencesSyncTest, kAutofillAuxiliaryProfilesEnabled) { ASSERT_TRUE(SetupSync()); DisableVerifier(); ASSERT_TRUE(AwaitStringPrefMatches(prefs::kHomePage)); ASSERT_TRUE(AwaitBooleanPrefMatches( autofill::prefs::kAutofillAuxiliaryProfilesEnabled)); // This pref may be syncable. ChangeBooleanPref(0, autofill::prefs::kAutofillAuxiliaryProfilesEnabled); // This pref is always syncable. ChangeStringPref(0, prefs::kHomePage, "http://news.google.com"); // Wait for the syncable pref to propagate. ASSERT_TRUE(AwaitStringPrefMatches(prefs::kHomePage)); // kAutofillAuxiliaryProfilesEnabled is only synced on Mac and Android. #if defined(OS_MACOSX) || defined(OS_ANDROID) ASSERT_TRUE( BooleanPrefMatches(autofill::prefs::kAutofillAuxiliaryProfilesEnabled)); #else ASSERT_FALSE( BooleanPrefMatches(autofill::prefs::kAutofillAuxiliaryProfilesEnabled)); #endif // defined(OS_MACOSX) || defined(OS_ANDROID) } IN_PROC_BROWSER_TEST_F(TwoClientPreferencesSyncTest, SingleClientEnabledEncryptionBothChanged) { ASSERT_TRUE(SetupSync()); ASSERT_TRUE(AwaitBooleanPrefMatches(prefs::kHomePageIsNewTabPage)); ASSERT_TRUE(AwaitStringPrefMatches(prefs::kHomePage)); ASSERT_TRUE(EnableEncryption(0)); ChangeBooleanPref(0, prefs::kHomePageIsNewTabPage); ChangeStringPref(1, prefs::kHomePage, "http://www.google.com/1"); ASSERT_TRUE(AwaitEncryptionComplete(0)); ASSERT_TRUE(AwaitEncryptionComplete(1)); ASSERT_TRUE(AwaitStringPrefMatches(prefs::kHomePage)); ASSERT_TRUE(BooleanPrefMatches(prefs::kHomePageIsNewTabPage)); } IN_PROC_BROWSER_TEST_F(TwoClientPreferencesSyncTest, BothClientsEnabledEncryptionAndChangedMultipleTimes) { ASSERT_TRUE(SetupSync()); ASSERT_TRUE(AwaitBooleanPrefMatches(prefs::kHomePageIsNewTabPage)); ChangeBooleanPref(0, prefs::kHomePageIsNewTabPage); ASSERT_TRUE(EnableEncryption(0)); ASSERT_TRUE(EnableEncryption(1)); ASSERT_TRUE(AwaitBooleanPrefMatches(prefs::kHomePageIsNewTabPage)); ASSERT_TRUE(AwaitBooleanPrefMatches(prefs::kShowHomeButton)); ChangeBooleanPref(0, prefs::kShowHomeButton); ASSERT_TRUE(AwaitBooleanPrefMatches(prefs::kShowHomeButton)); }