sync_worker_unittest.cc revision 116680a4aac90f2aa7413d9095a592090648e557
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 "chrome/browser/sync_file_system/drive_backend/sync_worker.h" 6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/files/scoped_temp_dir.h" 8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/run_loop.h" 9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/strings/stringprintf.h" 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/thread_task_runner_handle.h" 11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/drive/drive_uploader.h" 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/drive/fake_drive_service.h" 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/extensions/test_extension_service.h" 14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" 15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" 16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/sync_file_system/drive_backend/sync_engine_context.h" 17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/sync_file_system/drive_backend/sync_task.h" 18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/sync_file_system/drive_backend/sync_task_manager.h" 19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/sync_file_system/sync_file_system_test_util.h" 20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "content/public/test/test_browser_thread_bundle.h" 21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "extensions/common/extension.h" 22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "extensions/common/extension_builder.h" 23f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "extensions/common/extension_set.h" 24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "extensions/common/value_builder.h" 25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "third_party/leveldatabase/src/helpers/memenv/memenv.h" 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "third_party/leveldatabase/src/include/leveldb/env.h" 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace sync_file_system { 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace drive_backend { 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace { 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const char kAppID[] = "app_id"; 35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void EmptyTask(SyncStatusCode status, const SyncStatusCallback& callback) { 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::MessageLoop::current()->PostTask( 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FROM_HERE, base::Bind(callback, status)); 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} // namespace 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class MockSyncTask : public ExclusiveTask { 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public: 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) explicit MockSyncTask(bool used_network) { 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) set_used_network(used_network); 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual ~MockSyncTask() {} 49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void RunExclusive(const SyncStatusCallback& callback) OVERRIDE { 51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) callback.Run(SYNC_STATUS_OK); 52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) private: 55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MockSyncTask); 56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class MockExtensionService : public TestExtensionService { 59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public: 60f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) MockExtensionService() {} 61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual ~MockExtensionService() {} 62f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual const extensions::ExtensionSet* extensions() const OVERRIDE { 64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return &extensions_; 65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void AddExtension(const extensions::Extension* extension) OVERRIDE { 68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) extensions_.Insert(make_scoped_refptr(extension)); 69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual const extensions::Extension* GetInstalledExtension( 72f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const std::string& extension_id) const OVERRIDE { 73f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return extensions_.GetByID(extension_id); 74f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 75f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 76f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual bool IsExtensionEnabled( 77f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const std::string& extension_id) const OVERRIDE { 78f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return extensions_.Contains(extension_id) && 79f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) !disabled_extensions_.Contains(extension_id); 80f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 81f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 82f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void UninstallExtension(const std::string& extension_id) { 83f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) extensions_.Remove(extension_id); 84f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) disabled_extensions_.Remove(extension_id); 85f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 86f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 87f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void DisableExtension(const std::string& extension_id) { 88f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!IsExtensionEnabled(extension_id)) 89f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return; 90f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const extensions::Extension* extension = extensions_.GetByID(extension_id); 91f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) disabled_extensions_.Insert(make_scoped_refptr(extension)); 92f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 93f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 94f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) private: 95f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) extensions::ExtensionSet extensions_; 96f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) extensions::ExtensionSet disabled_extensions_; 97f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 98f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MockExtensionService); 99f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 100f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 101f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class SyncWorkerTest : public testing::Test, 102f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public base::SupportsWeakPtr<SyncWorkerTest> { 103f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public: 104f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncWorkerTest() {} 105f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual ~SyncWorkerTest() {} 106f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 107f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void SetUp() OVERRIDE { 108f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(profile_dir_.CreateUniqueTempDir()); 109f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) in_memory_env_.reset(leveldb::NewMemEnv(leveldb::Env::Default())); 110f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 111f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) extension_service_.reset(new MockExtensionService); 112f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<drive::DriveServiceInterface> 113f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) fake_drive_service(new drive::FakeDriveService); 114f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 115f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<SyncEngineContext> 116f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_engine_context(new SyncEngineContext( 117f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) fake_drive_service.Pass(), 118f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<drive::DriveUploaderInterface>(), 119f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NULL /* task_logger */, 120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::ThreadTaskRunnerHandle::Get() /* ui_task_runner */, 121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::ThreadTaskRunnerHandle::Get() /* worker_task_runner */, 122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::ThreadTaskRunnerHandle::Get() /* file_task_runner */)); 123f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 124f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker_.reset(new SyncWorker( 125f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile_dir_.path(), 126f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) extension_service_->AsWeakPtr(), 127f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) in_memory_env_.get())); 128f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker_->Initialize(sync_engine_context.Pass()); 129f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 130f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker_->SetSyncEnabled(true); 131f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 132f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 133f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 134f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void TearDown() OVERRIDE { 135f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker_.reset(); 136f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) extension_service_.reset(); 137f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 138f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 139f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 140f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) MockExtensionService* extension_service() { return extension_service_.get(); } 141f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncWorker* sync_worker() { return sync_worker_.get(); } 142f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 143f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void UpdateRegisteredApps() { 144f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker_->UpdateRegisteredApps(); 145f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 146f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 147f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncTaskManager* GetSyncTaskManager() { 148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return sync_worker_->task_manager_.get(); 149f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 150f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 151f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void CheckServiceState(SyncStatusCode expected_sync_status, 152f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) RemoteServiceState expected_service_status, 153f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncStatusCode sync_status) { 154f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(expected_sync_status, sync_status); 155f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(expected_service_status, sync_worker_->GetCurrentState()); 156f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 157f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 158f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) MetadataDatabase* metadata_database() { 159f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return sync_worker_->GetMetadataDatabase(); 160f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 161f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 162f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void SetHasRefreshToken(bool has_refresh_token) { 163f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker_->has_refresh_token_ = has_refresh_token; 164f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 165f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 166f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) private: 167f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) content::TestBrowserThreadBundle browser_threads_; 168f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::ScopedTempDir profile_dir_; 169f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<leveldb::Env> in_memory_env_; 170f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 171f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<MockExtensionService> extension_service_; 172f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<SyncWorker> sync_worker_; 173f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 174f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SyncWorkerTest); 175f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 176f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 177f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_F(SyncWorkerTest, EnableOrigin) { 178f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FileTracker tracker; 179f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncStatusCode sync_status = SYNC_STATUS_UNKNOWN; 180f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GURL origin = extensions::Extension::GetBaseURLFromExtensionId(kAppID); 181f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 182f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker()->RegisterOrigin(origin, CreateResultReceiver(&sync_status)); 183f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 184f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(SYNC_STATUS_OK, sync_status); 185f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(metadata_database()->FindAppRootTracker(kAppID, &tracker)); 186f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(TRACKER_KIND_APP_ROOT, tracker.tracker_kind()); 187f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 188f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker()->DisableOrigin(origin, CreateResultReceiver(&sync_status)); 189f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 190f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(SYNC_STATUS_OK, sync_status); 191f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(metadata_database()->FindAppRootTracker(kAppID, &tracker)); 192f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(TRACKER_KIND_DISABLED_APP_ROOT, tracker.tracker_kind()); 193f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 194f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker()->EnableOrigin(origin, CreateResultReceiver(&sync_status)); 195f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 196f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(SYNC_STATUS_OK, sync_status); 197f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(metadata_database()->FindAppRootTracker(kAppID, &tracker)); 198f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(TRACKER_KIND_APP_ROOT, tracker.tracker_kind()); 199f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 200f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker()->UninstallOrigin( 201f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) origin, 202f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) RemoteFileSyncService::UNINSTALL_AND_KEEP_REMOTE, 203f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) CreateResultReceiver(&sync_status)); 204f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 205f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(SYNC_STATUS_OK, sync_status); 206f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_FALSE(metadata_database()->FindAppRootTracker(kAppID, &tracker)); 207f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 208f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 209f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_F(SyncWorkerTest, UpdateRegisteredApps) { 210f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncStatusCode sync_status = SYNC_STATUS_UNKNOWN; 211f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) for (int i = 0; i < 3; i++) { 212f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_refptr<const extensions::Extension> extension = 213f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) extensions::ExtensionBuilder() 214f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) .SetManifest(extensions::DictionaryBuilder() 215f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) .Set("name", "foo") 216f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) .Set("version", "1.0") 217f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) .Set("manifest_version", 2)) 218f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) .SetID(base::StringPrintf("app_%d", i)) 219f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) .Build(); 220f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) extension_service()->AddExtension(extension.get()); 221f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GURL origin = extensions::Extension::GetBaseURLFromExtensionId( 222f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) extension->id()); 223f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_status = SYNC_STATUS_UNKNOWN; 224f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker()->RegisterOrigin(origin, CreateResultReceiver(&sync_status)); 225f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 226f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(SYNC_STATUS_OK, sync_status); 227f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 228f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 229f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FileTracker tracker; 230f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 231f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(metadata_database()->FindAppRootTracker("app_0", &tracker)); 232f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(TRACKER_KIND_APP_ROOT, tracker.tracker_kind()); 233f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 234f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(metadata_database()->FindAppRootTracker("app_1", &tracker)); 235f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(TRACKER_KIND_APP_ROOT, tracker.tracker_kind()); 236f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 237f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(metadata_database()->FindAppRootTracker("app_2", &tracker)); 238f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(TRACKER_KIND_APP_ROOT, tracker.tracker_kind()); 239f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 240f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) extension_service()->DisableExtension("app_1"); 241f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) extension_service()->UninstallExtension("app_2"); 242f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_FALSE(extension_service()->GetInstalledExtension("app_2")); 243f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) UpdateRegisteredApps(); 244f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 245f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 246f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(metadata_database()->FindAppRootTracker("app_0", &tracker)); 247f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(TRACKER_KIND_APP_ROOT, tracker.tracker_kind()); 248f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 249f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(metadata_database()->FindAppRootTracker("app_1", &tracker)); 250f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(TRACKER_KIND_DISABLED_APP_ROOT, tracker.tracker_kind()); 251f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 252f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_FALSE(metadata_database()->FindAppRootTracker("app_2", &tracker)); 253f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 254f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 255f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_F(SyncWorkerTest, GetOriginStatusMap) { 256f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FileTracker tracker; 257f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncStatusCode sync_status = SYNC_STATUS_UNKNOWN; 258f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GURL origin = extensions::Extension::GetBaseURLFromExtensionId(kAppID); 259f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 260f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker()->RegisterOrigin(GURL("chrome-extension://app_0"), 261f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) CreateResultReceiver(&sync_status)); 262f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 263f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(SYNC_STATUS_OK, sync_status); 264f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 265f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker()->RegisterOrigin(GURL("chrome-extension://app_1"), 266f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) CreateResultReceiver(&sync_status)); 267f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 268f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(SYNC_STATUS_OK, sync_status); 269f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 270f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<RemoteFileSyncService::OriginStatusMap> status_map; 271f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker()->GetOriginStatusMap(CreateResultReceiver(&status_map)); 272f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 273f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_EQ(2u, status_map->size()); 274f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ("Enabled", (*status_map)[GURL("chrome-extension://app_0")]); 275f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ("Enabled", (*status_map)[GURL("chrome-extension://app_1")]); 276f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 277f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker()->DisableOrigin(GURL("chrome-extension://app_1"), 278f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) CreateResultReceiver(&sync_status)); 279f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 280f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(SYNC_STATUS_OK, sync_status); 281f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 282f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker()->GetOriginStatusMap(CreateResultReceiver(&status_map)); 283f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 284f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_EQ(2u, status_map->size()); 285f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ("Enabled", (*status_map)[GURL("chrome-extension://app_0")]); 286f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ("Disabled", (*status_map)[GURL("chrome-extension://app_1")]); 287f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 288f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 289f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_F(SyncWorkerTest, UpdateServiceState) { 290f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(REMOTE_SERVICE_OK, sync_worker()->GetCurrentState()); 291f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 292f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Assume an user is in login state. 293f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SetHasRefreshToken(true); 294f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 295f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetSyncTaskManager()->ScheduleTask( 296f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FROM_HERE, 297f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&EmptyTask, SYNC_STATUS_AUTHENTICATION_FAILED), 298f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncTaskManager::PRIORITY_MED, 299f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&SyncWorkerTest::CheckServiceState, 300f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AsWeakPtr(), 301f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SYNC_STATUS_AUTHENTICATION_FAILED, 302f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) REMOTE_SERVICE_AUTHENTICATION_REQUIRED)); 303f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 304f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetSyncTaskManager()->ScheduleTask( 305f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FROM_HERE, 306f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&EmptyTask, SYNC_STATUS_ACCESS_FORBIDDEN), 307f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncTaskManager::PRIORITY_MED, 308f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&SyncWorkerTest::CheckServiceState, 309f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AsWeakPtr(), 310f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SYNC_STATUS_ACCESS_FORBIDDEN, 311f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) REMOTE_SERVICE_AUTHENTICATION_REQUIRED)); 312f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 313f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetSyncTaskManager()->ScheduleTask( 314f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FROM_HERE, 315f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&EmptyTask, SYNC_STATUS_SERVICE_TEMPORARILY_UNAVAILABLE), 316f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncTaskManager::PRIORITY_MED, 317f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&SyncWorkerTest::CheckServiceState, 318f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AsWeakPtr(), 319f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SYNC_STATUS_SERVICE_TEMPORARILY_UNAVAILABLE, 320f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) REMOTE_SERVICE_TEMPORARY_UNAVAILABLE)); 321f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 322f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetSyncTaskManager()->ScheduleTask( 323f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FROM_HERE, 324f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&EmptyTask, SYNC_STATUS_NETWORK_ERROR), 325f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncTaskManager::PRIORITY_MED, 326f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&SyncWorkerTest::CheckServiceState, 327f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AsWeakPtr(), 328f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SYNC_STATUS_NETWORK_ERROR, 329f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) REMOTE_SERVICE_TEMPORARY_UNAVAILABLE)); 330f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 331f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetSyncTaskManager()->ScheduleTask( 332f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FROM_HERE, 333f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&EmptyTask, SYNC_STATUS_ABORT), 334f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncTaskManager::PRIORITY_MED, 335f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&SyncWorkerTest::CheckServiceState, 336f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AsWeakPtr(), 337f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SYNC_STATUS_ABORT, 338f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) REMOTE_SERVICE_TEMPORARY_UNAVAILABLE)); 339f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 340f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetSyncTaskManager()->ScheduleTask( 341f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FROM_HERE, 342f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&EmptyTask, SYNC_STATUS_FAILED), 343f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncTaskManager::PRIORITY_MED, 344f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&SyncWorkerTest::CheckServiceState, 345f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AsWeakPtr(), 346f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SYNC_STATUS_FAILED, 347f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) REMOTE_SERVICE_TEMPORARY_UNAVAILABLE)); 348f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 349f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetSyncTaskManager()->ScheduleTask( 350f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FROM_HERE, 351f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&EmptyTask, SYNC_DATABASE_ERROR_CORRUPTION), 352f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncTaskManager::PRIORITY_MED, 353f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&SyncWorkerTest::CheckServiceState, 354f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AsWeakPtr(), 355f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SYNC_DATABASE_ERROR_CORRUPTION, 356f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) REMOTE_SERVICE_DISABLED)); 357f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 358f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetSyncTaskManager()->ScheduleTask( 359f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FROM_HERE, 360f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&EmptyTask, SYNC_DATABASE_ERROR_IO_ERROR), 361f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncTaskManager::PRIORITY_MED, 362f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&SyncWorkerTest::CheckServiceState, 363f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AsWeakPtr(), 364f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SYNC_DATABASE_ERROR_IO_ERROR, 365f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) REMOTE_SERVICE_DISABLED)); 366f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 367f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetSyncTaskManager()->ScheduleTask( 368f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FROM_HERE, 369f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&EmptyTask, SYNC_DATABASE_ERROR_FAILED), 370f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncTaskManager::PRIORITY_MED, 371f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&SyncWorkerTest::CheckServiceState, 372f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AsWeakPtr(), 373f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SYNC_DATABASE_ERROR_FAILED, 374f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) REMOTE_SERVICE_DISABLED)); 375f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 376f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetSyncTaskManager()->ScheduleSyncTask( 377f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FROM_HERE, 378f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<SyncTask>(new MockSyncTask(false)), 379f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncTaskManager::PRIORITY_MED, 380f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&SyncWorkerTest::CheckServiceState, 381f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AsWeakPtr(), 382f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SYNC_STATUS_OK, 383f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) REMOTE_SERVICE_DISABLED)); 384f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 385f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetSyncTaskManager()->ScheduleSyncTask( 386f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FROM_HERE, 387f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<SyncTask>(new MockSyncTask(true)), 388f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncTaskManager::PRIORITY_MED, 389f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&SyncWorkerTest::CheckServiceState, 390f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AsWeakPtr(), 391f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SYNC_STATUS_OK, 392f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) REMOTE_SERVICE_OK)); 393f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 394f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 395f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 396f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 397f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} // namespace drive_backend 398f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} // namespace sync_file_system 399