15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file. 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/bind.h" 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/callback.h" 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/memory/weak_ptr.h" 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/run_loop.h" 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/chrome_notification_types.h" 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/sync/glue/local_device_info_provider_mock.h" 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/sync/glue/synced_window_delegate.h" 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/sync/profile_sync_components_factory_mock.h" 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/sync/sessions/session_data_type_controller.h" 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/sync/sessions/synced_window_delegates_getter.h" 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/test/base/testing_profile.h" 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/public/browser/notification_service.h" 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/public/test/test_browser_thread_bundle.h" 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace browser_sync { 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace { 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class MockSyncedWindowDelegate : public SyncedWindowDelegate { 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public: 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) explicit MockSyncedWindowDelegate(Profile* profile) 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : is_restore_in_progress_(false), 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) profile_(profile) {} 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual ~MockSyncedWindowDelegate() {} 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual bool HasWindow() const OVERRIDE { return false; } 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual SessionID::id_type GetSessionId() const OVERRIDE { return 0; } 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual int GetTabCount() const OVERRIDE { return 0; } 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual int GetActiveIndex() const OVERRIDE { return 0; } 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual bool IsApp() const OVERRIDE { return false; } 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual bool IsTypeTabbed() const OVERRIDE { return false; } 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual bool IsTypePopup() const OVERRIDE { return false; } 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual bool IsTabPinned(const SyncedTabDelegate* tab) const OVERRIDE { 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return false; 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual SyncedTabDelegate* GetTabAt(int index) const OVERRIDE { return NULL; } 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual SessionID::id_type GetTabIdAt(int index) const OVERRIDE { return 0; } 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual bool IsSessionRestoreInProgress() const OVERRIDE { 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return is_restore_in_progress_; 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void SetSessionRestoreInProgress(bool is_restore_in_progress) { 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) is_restore_in_progress_ = is_restore_in_progress; 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!is_restore_in_progress_) { 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::NotificationService::current()->Notify( 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) chrome::NOTIFICATION_SESSION_RESTORE_COMPLETE, 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::Source<Profile>(profile_), 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::NotificationService::NoDetails()); 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private: 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool is_restore_in_progress_; 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Profile* profile_; 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}; 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class MockSyncedWindowDelegatesGetter : public SyncedWindowDelegatesGetter { 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public: 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual const std::set<SyncedWindowDelegate*> 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GetSyncedWindowDelegates() OVERRIDE { 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return delegates_; 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void Add(SyncedWindowDelegate* delegate) { 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) delegates_.insert(delegate); 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private: 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::set<SyncedWindowDelegate*> delegates_; 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}; 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class SessionDataTypeControllerTest 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : public testing::Test { 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public: 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SessionDataTypeControllerTest() 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : load_finished_(false), 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) thread_bundle_(content::TestBrowserThreadBundle::DEFAULT), 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) weak_ptr_factory_(this), 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) last_type_(syncer::UNSPECIFIED) {} 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual ~SessionDataTypeControllerTest() {} 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void SetUp() OVERRIDE { 905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) synced_window_delegate_.reset(new MockSyncedWindowDelegate(&profile_)); 915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) synced_window_getter_.reset(new MockSyncedWindowDelegatesGetter()); 925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) synced_window_getter_->Add(synced_window_delegate_.get()); 935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) local_device_.reset(new LocalDeviceInfoProviderMock( 955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "cache_guid", 965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "Wayne Gretzky's Hacking Box", 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "Chromium 10k", 985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "Chrome 10k", 995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) sync_pb::SyncEnums_DeviceType_TYPE_LINUX, 1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "device_id")); 1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) controller_ = new SessionDataTypeController( 1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &profile_sync_factory_, 1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &profile_, 1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) synced_window_getter_.get(), 1066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) local_device_.get()); 1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) load_finished_ = false; 1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) last_type_ = syncer::UNSPECIFIED; 1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) last_error_ = syncer::SyncError(); 1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void TearDown() OVERRIDE { 1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) controller_ = NULL; 1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) local_device_.reset(); 1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) synced_window_getter_.reset(); 1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) synced_window_delegate_.reset(); 1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void Start() { 1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) controller_->LoadModels( 1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::Bind(&SessionDataTypeControllerTest::OnLoadFinished, 1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) weak_ptr_factory_.GetWeakPtr())); 1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void OnLoadFinished(syncer::ModelType type, syncer::SyncError error) { 1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) load_finished_ = true; 1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) last_type_ = type; 1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) last_error_ = error; 1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) testing::AssertionResult LoadResult() { 1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!load_finished_) { 1345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return testing::AssertionFailure() << 1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "OnLoadFinished wasn't called"; 1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (last_error_.IsSet()) { 1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return testing::AssertionFailure() << 1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "OnLoadFinished was called with a SyncError: " << 1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) last_error_.ToString(); 1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (last_type_ != syncer::SESSIONS) { 1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return testing::AssertionFailure() << 1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "OnLoadFinished was called with a wrong sync type: " << 1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) last_type_; 1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return testing::AssertionSuccess(); 1515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) protected: 1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_refptr<SessionDataTypeController> controller_; 1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<MockSyncedWindowDelegatesGetter> synced_window_getter_; 1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<LocalDeviceInfoProviderMock> local_device_; 1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<MockSyncedWindowDelegate> synced_window_delegate_; 1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool load_finished_; 1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private: 1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::TestBrowserThreadBundle thread_bundle_; 1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ProfileSyncComponentsFactoryMock profile_sync_factory_; 1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TestingProfile profile_; 1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::WeakPtrFactory<SessionDataTypeControllerTest> weak_ptr_factory_; 1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) syncer::ModelType last_type_; 1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) syncer::SyncError last_error_; 1675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}; 1685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(SessionDataTypeControllerTest, StartModels) { 1705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Start(); 1715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(sync_driver::DataTypeController::MODEL_LOADED, 1725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) controller_->state()); 1735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(LoadResult()); 1745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(SessionDataTypeControllerTest, StartModelsDelayedByLocalDevice) { 1775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) local_device_->SetInitialized(false); 1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Start(); 1795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(load_finished_); 1805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(sync_driver::DataTypeController::MODEL_STARTING, 1815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) controller_->state()); 1825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) local_device_->SetInitialized(true); 1845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(sync_driver::DataTypeController::MODEL_LOADED, 1855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) controller_->state()); 1865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(LoadResult()); 1875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(SessionDataTypeControllerTest, StartModelsDelayedByRestoreInProgress) { 1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) synced_window_delegate_->SetSessionRestoreInProgress(true); 1915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Start(); 1925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(load_finished_); 1935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(sync_driver::DataTypeController::MODEL_STARTING, 1945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) controller_->state()); 1955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) synced_window_delegate_->SetSessionRestoreInProgress(false); 1975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(sync_driver::DataTypeController::MODEL_LOADED, 1985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) controller_->state()); 1995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(LoadResult()); 2005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 2015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(SessionDataTypeControllerTest, 2035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) StartModelsDelayedByLocalDeviceThenRestoreInProgress) { 2045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) local_device_->SetInitialized(false); 2055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) synced_window_delegate_->SetSessionRestoreInProgress(true); 2065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Start(); 2075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(load_finished_); 2085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(sync_driver::DataTypeController::MODEL_STARTING, 2095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) controller_->state()); 2105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) local_device_->SetInitialized(true); 2125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(load_finished_); 2135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(sync_driver::DataTypeController::MODEL_STARTING, 2145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) controller_->state()); 2155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) synced_window_delegate_->SetSessionRestoreInProgress(false); 2175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(sync_driver::DataTypeController::MODEL_LOADED, 2185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) controller_->state()); 2195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(LoadResult()); 2205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 2215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(SessionDataTypeControllerTest, 2235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) StartModelsDelayedByRestoreInProgressThenLocalDevice) { 2245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) local_device_->SetInitialized(false); 2255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) synced_window_delegate_->SetSessionRestoreInProgress(true); 2265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Start(); 2275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(load_finished_); 2285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(sync_driver::DataTypeController::MODEL_STARTING, 2295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) controller_->state()); 2305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) synced_window_delegate_->SetSessionRestoreInProgress(false); 2325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(load_finished_); 2335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(sync_driver::DataTypeController::MODEL_STARTING, 2345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) controller_->state()); 2355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) local_device_->SetInitialized(true); 2375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(sync_driver::DataTypeController::MODEL_LOADED, 2385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) controller_->state()); 2395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(LoadResult()); 2405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 2415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace 2435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace browser_sync 245