1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// found in the LICENSE file. 4f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/command_line.h" 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h" 7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/message_loop/message_loop.h" 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/prefs/pref_service.h" 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/run_loop.h" 1003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/test/test_timeouts.h" 1103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_remover.h" 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/sync/profile_sync_service.h" 14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/sync/test/integration/bookmarks_helper.h" 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/sync/test/integration/preferences_helper.h" 16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/sync/test/integration/sync_integration_test_util.h" 17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/sync/test/integration/sync_test.h" 18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/common/pref_names.h" 20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/bookmarks/browser/bookmark_model.h" 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "sync/internal_api/public/util/sync_db_util.h" 22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "sync/test/fake_server/fake_server_verifier.h" 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "sync/util/time.h" 24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)using bookmarks_helper::AddFolder; 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)using bookmarks_helper::AddURL; 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)using bookmarks_helper::GetOtherNode; 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)using bookmarks_helper::ModelMatchesVerifier; 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)using bookmarks_helper::Move; 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)using bookmarks_helper::Remove; 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)using sync_integration_test_util::AwaitCommitActivityCompletion; 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace { 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst char kUrl1[] = "http://www.google.com"; 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst char kUrl2[] = "http://map.google.com"; 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst char kUrl3[] = "http://plus.google.com"; 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // anonymous namespace 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class SingleClientBackupRollbackTest : public SyncTest { 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public: 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SingleClientBackupRollbackTest() : SyncTest(SINGLE_CLIENT) {} 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual ~SingleClientBackupRollbackTest() {} 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void DisableBackup() { 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CommandLine::ForCurrentProcess()->AppendSwitch( 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch switches::kSyncDisableBackup); 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void DisableRollback() { 50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) CommandLine::ForCurrentProcess()->AppendSwitch( 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) switches::kSyncDisableRollback); 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Time GetBackupDbLastModified() { 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop run_loop; 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Time backup_time; 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch syncer::CheckSyncDbLastModifiedTime( 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GetProfile(0)->GetPath().Append(FILE_PATH_LITERAL("Sync Data Backup")), 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::MessageLoopProxy::current(), 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&SingleClientBackupRollbackTest::CheckDbCallback, 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Unretained(this), &backup_time)); 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::MessageLoopProxy::current()->PostTask( 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FROM_HERE, run_loop.QuitClosure()); 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch run_loop.Run(); 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return backup_time; 67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) private: 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void CheckDbCallback(base::Time* time_out, base::Time time_in) { 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *time_out = syncer::ProtoTimeToTime(syncer::TimeToProtoTime(time_in)); 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 74f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SingleClientBackupRollbackTest); 75f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 76f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 7703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Waits until the ProfileSyncService's backend is in IDLE mode. 7803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class SyncBackendStoppedChecker : public ProfileSyncServiceBase::Observer { 79f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public: 8003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) explicit SyncBackendStoppedChecker(ProfileSyncService* service) 81f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) : pss_(service), 8203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) timeout_(TestTimeouts::action_max_timeout()), 8303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) done_(false) {} 8403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 8503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) virtual void OnStateChanged() OVERRIDE { 8603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (ProfileSyncService::IDLE == pss_->backend_mode()) { 8703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) done_ = true; 8803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) run_loop_.Quit(); 8903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 9003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 91f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 92f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool Wait() { 9303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) pss_->AddObserver(this); 9403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (ProfileSyncService::IDLE == pss_->backend_mode()) 9503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return true; 96f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::MessageLoop::current()->PostDelayedTask( 97f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FROM_HERE, 9803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) run_loop_.QuitClosure(), 9903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) timeout_); 10003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) run_loop_.Run(); 10103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) pss_->RemoveObserver(this); 10203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return done_; 103f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 104f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 105f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) private: 10603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 10703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ProfileSyncService* const pss_; 10803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const base::TimeDelta timeout_; 10903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::RunLoop run_loop_; 11003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) bool done_; 11103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}; 11203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 11303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Waits until a rollback finishes. 11403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class SyncRollbackChecker : public ProfileSyncServiceBase::Observer, 11503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) public BrowsingDataRemover::Observer { 11603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) public: 11703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) explicit SyncRollbackChecker(ProfileSyncService* service) 11803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) : pss_(service), 11903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) timeout_(TestTimeouts::action_max_timeout()), 12003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) rollback_started_(false), 12103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) clear_done_(false) {} 12203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 12303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // ProfileSyncServiceBase::Observer implementation. 12403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) virtual void OnStateChanged() OVERRIDE { 12503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (ProfileSyncService::ROLLBACK == pss_->backend_mode()) { 12603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) rollback_started_ = true; 12703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (clear_done_) 12803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) run_loop_.Quit(); 129f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 130f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 131f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 13203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // BrowsingDataRemoverObserver::Observer implementation. 13303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) virtual void OnBrowsingDataRemoverDone() OVERRIDE { 13403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) clear_done_ = true; 13503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (rollback_started_) { 13603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) run_loop_.Quit(); 13703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 13803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 13903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 14003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) bool Wait() { 14103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) pss_->AddObserver(this); 14203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) pss_->SetBrowsingDataRemoverObserverForTesting(this); 14303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::MessageLoop::current()->PostDelayedTask( 14403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) FROM_HERE, 14503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) run_loop_.QuitClosure(), 14603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) timeout_); 14703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) run_loop_.Run(); 14803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) pss_->RemoveObserver(this); 14903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return rollback_started_ && clear_done_; 15003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 15103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 15203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ProfileSyncService* const pss_; 15303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const base::TimeDelta timeout_; 15403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::RunLoop run_loop_; 15503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) bool rollback_started_; 15603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) bool clear_done_; 157f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 158f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1596d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#if defined(ENABLE_PRE_SYNC_BACKUP) 1606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define MAYBE_TestBackup TestBackup 161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define MAYBE_TestBackup DISABLED_TestBackup 163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 164116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIN_PROC_BROWSER_TEST_F(SingleClientBackupRollbackTest, 1656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) MAYBE_TestBackup) { 166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; 167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Setup sync, wait for its completion, and make sure changes were synced. 1696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService(0))); 1716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(ModelMatchesVerifier(0)); 172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Verify backup DB is created and backup time is set on device info. 1746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::Time backup_time = GetBackupDbLastModified(); 1756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_FALSE(backup_time.is_null()); 1766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_EQ(backup_time, GetSyncService(0)->GetDeviceBackupTimeForTesting()); 177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_PRE_SYNC_BACKUP) 1806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define MAYBE_TestBackupDisabled TestBackupDisabled 181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define MAYBE_TestBackupDisabled DISABLED_TestBackupDisabled 183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 184116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIN_PROC_BROWSER_TEST_F(SingleClientBackupRollbackTest, 1856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) MAYBE_TestBackupDisabled) { 1866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DisableBackup(); 187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Setup sync, wait for its completion, and make sure changes were synced. 189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService(0))); 191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(ModelMatchesVerifier(0)); 192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Verify backup DB is not created and backup time is not set on device info. 1946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_FALSE(base::PathExists( 1956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetProfile(0)->GetPath().Append(FILE_PATH_LITERAL("Sync Data Backup")))); 1966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(GetSyncService(0)->GetDeviceBackupTimeForTesting().is_null()); 197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_PRE_SYNC_BACKUP) 2006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define MAYBE_TestRollback TestRollback 201f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#else 2026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define MAYBE_TestRollback DISABLED_TestRollback 203f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif 204f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(SingleClientBackupRollbackTest, 2056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) MAYBE_TestRollback) { 206f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; 207f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 208f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Starting state: 209f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // other_node 210f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // -> top 211f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // -> tier1_a 212f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // -> http://mail.google.com "tier1_a_url0" 213f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // -> tier1_b 214f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // -> http://www.nhl.com "tier1_b_url0" 215f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const BookmarkNode* top = AddFolder(0, GetOtherNode(0), 0, "top"); 216f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const BookmarkNode* tier1_a = AddFolder(0, top, 0, "tier1_a"); 217f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const BookmarkNode* tier1_b = AddFolder(0, top, 1, "tier1_b"); 218f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(AddURL(0, tier1_a, 0, "tier1_a_url0", 219f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GURL("http://mail.google.com"))); 220f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(AddURL(0, tier1_b, 0, "tier1_b_url0", 221f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GURL("http://www.nhl.com"))); 222f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 223f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Setup sync, wait for its completion, and make sure changes were synced. 224f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService(0))); 226f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(ModelMatchesVerifier(0)); 227f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 228f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Made bookmark changes while sync is on. 229f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Move(0, tier1_a->GetChild(0), tier1_b, 1); 230f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Remove(0, tier1_b, 0); 231f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(AddFolder(0, tier1_b, 1, "tier2_c")); 232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService(0))); 233f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(ModelMatchesVerifier(0)); 234f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 235f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Let server to return rollback command on next sync request. 236f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetFakeServer()->TriggerError(sync_pb::SyncEnums::USER_ROLLBACK); 237f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 238f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Make another change to trigger downloading of rollback command. 239f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Remove(0, tier1_b, 0); 240f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 2416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Wait for rollback to finish and sync backend is completely shut down. 24203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) SyncRollbackChecker rollback_checker(GetSyncService(0)); 24303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ASSERT_TRUE(rollback_checker.Wait()); 24403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) SyncBackendStoppedChecker shutdown_checker(GetSyncService(0)); 24503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ASSERT_TRUE(shutdown_checker.Wait()); 246f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 247f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Verify bookmarks are restored. 248f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_EQ(1, tier1_a->child_count()); 249f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const BookmarkNode* url1 = tier1_a->GetChild(0); 250f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_EQ(GURL("http://mail.google.com"), url1->url()); 251f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 252f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_EQ(1, tier1_b->child_count()); 253f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const BookmarkNode* url2 = tier1_b->GetChild(0); 254f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_EQ(GURL("http://www.nhl.com"), url2->url()); 255f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 256116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 257116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_PRE_SYNC_BACKUP) 2586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define MAYBE_TestRollbackDisabled TestRollbackDisabled 259116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 2606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define MAYBE_TestRollbackDisabled DISABLED_TestRollbackDisabled 261116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 262116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIN_PROC_BROWSER_TEST_F(SingleClientBackupRollbackTest, 2636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) MAYBE_TestRollbackDisabled) { 2646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DisableRollback(); 2656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 266116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; 267116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Starting state: 2696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // other_node 2706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // -> http://mail.google.com "url0" 2716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // -> http://www.nhl.com "url1" 2726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(AddURL(0, GetOtherNode(0), 0, "url0", 2736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GURL("http://mail.google.com"))); 2746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(AddURL(0, GetOtherNode(0), 1, "url1", 2756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GURL("http://www.nhl.com"))); 276116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Setup sync, wait for its completion, and make sure changes were synced. 2786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 2796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService(0))); 2806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(ModelMatchesVerifier(0)); 2816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 2826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Made bookmark changes while sync is on. 2836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Remove(0, GetOtherNode(0), 1); 2846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(AddURL(0, GetOtherNode(0), 1, "url2", 2856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GURL("http://www.yahoo.com"))); 2866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService((0)))); 2876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(ModelMatchesVerifier(0)); 288116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Let server to return rollback command on next sync request. 2906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetFakeServer()->TriggerError(sync_pb::SyncEnums::USER_ROLLBACK); 291116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Make another change to trigger downloading of rollback command. 2936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Remove(0, GetOtherNode(0), 0); 2946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 29503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Wait for sync backend is completely shut down. 29603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) SyncBackendStoppedChecker shutdown_checker(GetSyncService(0)); 29703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ASSERT_TRUE(shutdown_checker.Wait()); 298116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // With rollback disabled, bookmarks in backup DB should not be restored. 3006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Only bookmark added during sync is present. 3016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_EQ(1, GetOtherNode(0)->child_count()); 3026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_EQ(GURL("http://www.yahoo.com"), 3036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetOtherNode(0)->GetChild(0)->url()); 3046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 3056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 3066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(ENABLE_PRE_SYNC_BACKUP) 3076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define MAYBE_TestSyncDisabled TestSyncDisabled 3086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#else 3096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define MAYBE_TestSyncDisabled DISABLED_TestSyncDisabled 3106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif 3116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(SingleClientBackupRollbackTest, 3126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) MAYBE_TestSyncDisabled) { 3136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; 3146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 3156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Starting state: 3166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // other_node 3176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // -> http://mail.google.com "url0" 3186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // -> http://www.nhl.com "url1" 3196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(AddURL(0, GetOtherNode(0), 0, "url0", 3206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GURL("http://mail.google.com"))); 3216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(AddURL(0, GetOtherNode(0), 1, "url1", 3226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GURL("http://www.nhl.com"))); 3236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 3246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Setup sync, wait for its completion, and make sure changes were synced. 325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 3266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService(0))); 3276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(ModelMatchesVerifier(0)); 3286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 3296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Made bookmark changes while sync is on. 3306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Remove(0, GetOtherNode(0), 1); 3316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(AddURL(0, GetOtherNode(0), 1, "url2", 3326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GURL("http://www.yahoo.com"))); 333116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService((0)))); 334116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(ModelMatchesVerifier(0)); 335116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 3366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Let server to return birthday error on next sync request. 3376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetFakeServer()->TriggerError(sync_pb::SyncEnums::NOT_MY_BIRTHDAY); 338116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 339116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Make another change to trigger downloading of rollback command. 3406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Remove(0, GetOtherNode(0), 0); 341116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 34203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Wait sync backend is completely shut down. 34303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) SyncBackendStoppedChecker shutdown_checker(GetSyncService(0)); 34403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ASSERT_TRUE(shutdown_checker.Wait()); 345116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 3466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Shouldn't restore bookmarks with sign-out only. 3476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_EQ(1, GetOtherNode(0)->child_count()); 3486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_EQ(GURL("http://www.yahoo.com"), 3496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetOtherNode(0)->GetChild(0)->url()); 350116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 351116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 352116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_PRE_SYNC_BACKUP) 353116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define MAYBE_RollbackNoBackup RollbackNoBackup 354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 355116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define MAYBE_RollbackNoBackup DISABLED_RollbackNoBackup 356116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 357116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIN_PROC_BROWSER_TEST_F(SingleClientBackupRollbackTest, 358116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch MAYBE_RollbackNoBackup) { 359116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; 360116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 361116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Starting state: 362116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // other_node 363116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // -> http://mail.google.com "url0" 364116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // -> http://www.nhl.com "url1" 365116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(AddURL(0, GetOtherNode(0), 0, "url0", 366116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GURL("http://mail.google.com"))); 367116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 3686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Setup sync, wait for its completion, and make sure changes were synced. 3696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 370116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService((0)))); 371116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(ModelMatchesVerifier(0)); 372116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 3736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(AddURL(0, GetOtherNode(0), 1, "url1", 3746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GURL("http://www.nhl.com"))); 3756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 3766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Delete backup DB. 3776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::DeleteFile( 3786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetProfile(0)->GetPath().Append(FILE_PATH_LITERAL("Sync Data Backup")), 3796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true); 3806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 381116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Let server to return rollback command on next sync request. 382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GetFakeServer()->TriggerError(sync_pb::SyncEnums::USER_ROLLBACK); 383116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 384116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Make another change to trigger downloading of rollback command. 385116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Remove(0, GetOtherNode(0), 0); 386116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 38703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Wait for rollback to finish and sync backend is completely shut down. 38803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) SyncRollbackChecker rollback_checker(GetSyncService(0)); 38903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ASSERT_TRUE(rollback_checker.Wait()); 39003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) SyncBackendStoppedChecker checker(GetSyncService(0)); 391116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(checker.Wait()); 392116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 3936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Without backup DB, bookmarks remain at the state when sync stops. 394116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_EQ(1, GetOtherNode(0)->child_count()); 395116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_EQ(GURL("http://www.nhl.com"), 396116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GetOtherNode(0)->GetChild(0)->url()); 397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 398116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 399116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_PRE_SYNC_BACKUP) 400116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define MAYBE_DontChangeBookmarkOrdering DontChangeBookmarkOrdering 401116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 402116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define MAYBE_DontChangeBookmarkOrdering DISABLED_DontChangeBookmarkOrdering 403116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 404116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIN_PROC_BROWSER_TEST_F(SingleClientBackupRollbackTest, 405116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch MAYBE_DontChangeBookmarkOrdering) { 406116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; 407116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 408116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const BookmarkNode* sub_folder = AddFolder(0, GetOtherNode(0), 0, "test"); 409116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(AddURL(0, sub_folder, 0, "", GURL(kUrl1))); 410116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(AddURL(0, sub_folder, 1, "", GURL(kUrl2))); 411116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(AddURL(0, sub_folder, 2, "", GURL(kUrl3))); 412116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 4136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Setup sync, wait for its completion, and make sure changes were synced. 4146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 4156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService(0))); 4166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(ModelMatchesVerifier(0)); 4176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 4186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Made bookmark changes while sync is on. 4196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Remove(0, sub_folder, 0); 4206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Remove(0, sub_folder, 0); 4216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService(0))); 4226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(ModelMatchesVerifier(0)); 4236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 4246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Let server to return rollback command on next sync request. 4256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetFakeServer()->TriggerError(sync_pb::SyncEnums::USER_ROLLBACK); 4266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 4276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Make another change to trigger downloading of rollback command. 4286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Remove(0, sub_folder, 0); 429116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 4306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Wait for rollback to finish and sync backend is completely shut down. 43103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) SyncRollbackChecker rollback_checker(GetSyncService(0)); 43203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ASSERT_TRUE(rollback_checker.Wait()); 43303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) SyncBackendStoppedChecker shutdown_checker(GetSyncService(0)); 43403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ASSERT_TRUE(shutdown_checker.Wait()); 435116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 436116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Verify bookmarks are unchanged. 437116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_EQ(3, sub_folder->child_count()); 438116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_EQ(GURL(kUrl1), sub_folder->GetChild(0)->url()); 439116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_EQ(GURL(kUrl2), sub_folder->GetChild(1)->url()); 440116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_EQ(GURL(kUrl3), sub_folder->GetChild(2)->url()); 441116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 442