sync_worker_unittest.cc revision 6e8cce623b6e4fe0c9e4af605d675dd9d0338c38
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 */, 1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::ThreadTaskRunnerHandle::Get() /* worker_task_runner */)); 122f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 123f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker_.reset(new SyncWorker( 124f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile_dir_.path(), 125f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) extension_service_->AsWeakPtr(), 126f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) in_memory_env_.get())); 127f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker_->Initialize(sync_engine_context.Pass()); 128f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 129f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker_->SetSyncEnabled(true); 130f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 131f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 132f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 133f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void TearDown() OVERRIDE { 134f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker_.reset(); 135f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) extension_service_.reset(); 136f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 137f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 138f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 139f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) MockExtensionService* extension_service() { return extension_service_.get(); } 140f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncWorker* sync_worker() { return sync_worker_.get(); } 141f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 142f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void UpdateRegisteredApps() { 143f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker_->UpdateRegisteredApps(); 144f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 145f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 146f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncTaskManager* GetSyncTaskManager() { 147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return sync_worker_->task_manager_.get(); 148f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 149f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 150f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void CheckServiceState(SyncStatusCode expected_sync_status, 151f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) RemoteServiceState expected_service_status, 152f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncStatusCode sync_status) { 153f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(expected_sync_status, sync_status); 154f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(expected_service_status, sync_worker_->GetCurrentState()); 155f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 156f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 157f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) MetadataDatabase* metadata_database() { 158f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return sync_worker_->GetMetadataDatabase(); 159f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 160f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 161f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) private: 162f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) content::TestBrowserThreadBundle browser_threads_; 163f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::ScopedTempDir profile_dir_; 164f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<leveldb::Env> in_memory_env_; 165f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 166f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<MockExtensionService> extension_service_; 167f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<SyncWorker> sync_worker_; 168f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 169f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SyncWorkerTest); 170f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 171f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 172f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_F(SyncWorkerTest, EnableOrigin) { 173f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FileTracker tracker; 174f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncStatusCode sync_status = SYNC_STATUS_UNKNOWN; 175f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GURL origin = extensions::Extension::GetBaseURLFromExtensionId(kAppID); 176f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 177f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker()->RegisterOrigin(origin, CreateResultReceiver(&sync_status)); 178f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 179f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(SYNC_STATUS_OK, sync_status); 180f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(metadata_database()->FindAppRootTracker(kAppID, &tracker)); 181f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(TRACKER_KIND_APP_ROOT, tracker.tracker_kind()); 182f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 183f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker()->DisableOrigin(origin, CreateResultReceiver(&sync_status)); 184f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 185f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(SYNC_STATUS_OK, sync_status); 186f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(metadata_database()->FindAppRootTracker(kAppID, &tracker)); 187f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(TRACKER_KIND_DISABLED_APP_ROOT, tracker.tracker_kind()); 188f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 189f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker()->EnableOrigin(origin, CreateResultReceiver(&sync_status)); 190f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 191f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(SYNC_STATUS_OK, sync_status); 192f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(metadata_database()->FindAppRootTracker(kAppID, &tracker)); 193f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(TRACKER_KIND_APP_ROOT, tracker.tracker_kind()); 194f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 195f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker()->UninstallOrigin( 196f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) origin, 197f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) RemoteFileSyncService::UNINSTALL_AND_KEEP_REMOTE, 198f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) CreateResultReceiver(&sync_status)); 199f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 200f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(SYNC_STATUS_OK, sync_status); 201f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_FALSE(metadata_database()->FindAppRootTracker(kAppID, &tracker)); 202f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 203f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 204f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_F(SyncWorkerTest, UpdateRegisteredApps) { 205f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncStatusCode sync_status = SYNC_STATUS_UNKNOWN; 206f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) for (int i = 0; i < 3; i++) { 207f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_refptr<const extensions::Extension> extension = 208f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) extensions::ExtensionBuilder() 209f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) .SetManifest(extensions::DictionaryBuilder() 210f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) .Set("name", "foo") 211f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) .Set("version", "1.0") 212f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) .Set("manifest_version", 2)) 213f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) .SetID(base::StringPrintf("app_%d", i)) 214f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) .Build(); 215f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) extension_service()->AddExtension(extension.get()); 216f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GURL origin = extensions::Extension::GetBaseURLFromExtensionId( 217f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) extension->id()); 218f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_status = SYNC_STATUS_UNKNOWN; 219f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker()->RegisterOrigin(origin, CreateResultReceiver(&sync_status)); 220f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 221f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(SYNC_STATUS_OK, sync_status); 222f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 223f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 224f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FileTracker tracker; 225f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 226f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(metadata_database()->FindAppRootTracker("app_0", &tracker)); 227f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(TRACKER_KIND_APP_ROOT, tracker.tracker_kind()); 228f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 229f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(metadata_database()->FindAppRootTracker("app_1", &tracker)); 230f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(TRACKER_KIND_APP_ROOT, tracker.tracker_kind()); 231f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 232f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(metadata_database()->FindAppRootTracker("app_2", &tracker)); 233f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(TRACKER_KIND_APP_ROOT, tracker.tracker_kind()); 234f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 235f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) extension_service()->DisableExtension("app_1"); 236f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) extension_service()->UninstallExtension("app_2"); 237f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_FALSE(extension_service()->GetInstalledExtension("app_2")); 238f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) UpdateRegisteredApps(); 239f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 240f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 241f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(metadata_database()->FindAppRootTracker("app_0", &tracker)); 242f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(TRACKER_KIND_APP_ROOT, tracker.tracker_kind()); 243f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 244f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(metadata_database()->FindAppRootTracker("app_1", &tracker)); 245f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(TRACKER_KIND_DISABLED_APP_ROOT, tracker.tracker_kind()); 246f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 247f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_FALSE(metadata_database()->FindAppRootTracker("app_2", &tracker)); 248f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 249f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 250f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_F(SyncWorkerTest, GetOriginStatusMap) { 251f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FileTracker tracker; 252f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncStatusCode sync_status = SYNC_STATUS_UNKNOWN; 253f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GURL origin = extensions::Extension::GetBaseURLFromExtensionId(kAppID); 254f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 255f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker()->RegisterOrigin(GURL("chrome-extension://app_0"), 256f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) CreateResultReceiver(&sync_status)); 257f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 258f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(SYNC_STATUS_OK, sync_status); 259f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 260f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker()->RegisterOrigin(GURL("chrome-extension://app_1"), 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) scoped_ptr<RemoteFileSyncService::OriginStatusMap> status_map; 266f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker()->GetOriginStatusMap(CreateResultReceiver(&status_map)); 267f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 268f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_EQ(2u, status_map->size()); 269f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ("Enabled", (*status_map)[GURL("chrome-extension://app_0")]); 270f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ("Enabled", (*status_map)[GURL("chrome-extension://app_1")]); 271f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 272f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker()->DisableOrigin(GURL("chrome-extension://app_1"), 273f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) CreateResultReceiver(&sync_status)); 274f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 275f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(SYNC_STATUS_OK, sync_status); 276f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 277f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_worker()->GetOriginStatusMap(CreateResultReceiver(&status_map)); 278f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 279f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_EQ(2u, status_map->size()); 280f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ("Enabled", (*status_map)[GURL("chrome-extension://app_0")]); 281f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ("Disabled", (*status_map)[GURL("chrome-extension://app_1")]); 282f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 283f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 284f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_F(SyncWorkerTest, UpdateServiceState) { 285f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(REMOTE_SERVICE_OK, sync_worker()->GetCurrentState()); 286f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 287f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetSyncTaskManager()->ScheduleTask( 288f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FROM_HERE, 289f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&EmptyTask, SYNC_STATUS_AUTHENTICATION_FAILED), 290f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncTaskManager::PRIORITY_MED, 291f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&SyncWorkerTest::CheckServiceState, 292f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AsWeakPtr(), 293f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SYNC_STATUS_AUTHENTICATION_FAILED, 294f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) REMOTE_SERVICE_AUTHENTICATION_REQUIRED)); 295f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 296f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetSyncTaskManager()->ScheduleTask( 297f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FROM_HERE, 298f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&EmptyTask, SYNC_STATUS_ACCESS_FORBIDDEN), 299f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncTaskManager::PRIORITY_MED, 300f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&SyncWorkerTest::CheckServiceState, 301f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AsWeakPtr(), 302f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SYNC_STATUS_ACCESS_FORBIDDEN, 3036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) REMOTE_SERVICE_ACCESS_FORBIDDEN)); 304f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 305f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetSyncTaskManager()->ScheduleTask( 306f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FROM_HERE, 307f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&EmptyTask, SYNC_STATUS_SERVICE_TEMPORARILY_UNAVAILABLE), 308f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncTaskManager::PRIORITY_MED, 309f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&SyncWorkerTest::CheckServiceState, 310f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AsWeakPtr(), 311f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SYNC_STATUS_SERVICE_TEMPORARILY_UNAVAILABLE, 312f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) REMOTE_SERVICE_TEMPORARY_UNAVAILABLE)); 313f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 314f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetSyncTaskManager()->ScheduleTask( 315f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FROM_HERE, 316f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&EmptyTask, SYNC_STATUS_NETWORK_ERROR), 317f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncTaskManager::PRIORITY_MED, 318f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&SyncWorkerTest::CheckServiceState, 319f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AsWeakPtr(), 320f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SYNC_STATUS_NETWORK_ERROR, 321f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) REMOTE_SERVICE_TEMPORARY_UNAVAILABLE)); 322f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 323f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetSyncTaskManager()->ScheduleTask( 324f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FROM_HERE, 325f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&EmptyTask, SYNC_STATUS_ABORT), 326f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncTaskManager::PRIORITY_MED, 327f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&SyncWorkerTest::CheckServiceState, 328f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AsWeakPtr(), 329f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SYNC_STATUS_ABORT, 330f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) REMOTE_SERVICE_TEMPORARY_UNAVAILABLE)); 331f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 332f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetSyncTaskManager()->ScheduleTask( 333f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FROM_HERE, 334f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&EmptyTask, SYNC_STATUS_FAILED), 335f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncTaskManager::PRIORITY_MED, 336f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&SyncWorkerTest::CheckServiceState, 337f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AsWeakPtr(), 338f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SYNC_STATUS_FAILED, 339f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) REMOTE_SERVICE_TEMPORARY_UNAVAILABLE)); 340f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 341f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetSyncTaskManager()->ScheduleTask( 342f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FROM_HERE, 343f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&EmptyTask, SYNC_DATABASE_ERROR_CORRUPTION), 344f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncTaskManager::PRIORITY_MED, 345f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&SyncWorkerTest::CheckServiceState, 346f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AsWeakPtr(), 347f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SYNC_DATABASE_ERROR_CORRUPTION, 348f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) REMOTE_SERVICE_DISABLED)); 349f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 350f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetSyncTaskManager()->ScheduleTask( 351f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FROM_HERE, 352f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&EmptyTask, SYNC_DATABASE_ERROR_IO_ERROR), 353f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncTaskManager::PRIORITY_MED, 354f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&SyncWorkerTest::CheckServiceState, 355f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AsWeakPtr(), 356f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SYNC_DATABASE_ERROR_IO_ERROR, 357f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) REMOTE_SERVICE_DISABLED)); 358f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 359f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetSyncTaskManager()->ScheduleTask( 360f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FROM_HERE, 361f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&EmptyTask, SYNC_DATABASE_ERROR_FAILED), 362f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncTaskManager::PRIORITY_MED, 363f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&SyncWorkerTest::CheckServiceState, 364f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AsWeakPtr(), 365f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SYNC_DATABASE_ERROR_FAILED, 366f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) REMOTE_SERVICE_DISABLED)); 367f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 368f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetSyncTaskManager()->ScheduleSyncTask( 369f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FROM_HERE, 370f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<SyncTask>(new MockSyncTask(false)), 371f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncTaskManager::PRIORITY_MED, 372f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&SyncWorkerTest::CheckServiceState, 373f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AsWeakPtr(), 374f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SYNC_STATUS_OK, 375f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) REMOTE_SERVICE_DISABLED)); 376f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 377f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetSyncTaskManager()->ScheduleSyncTask( 378f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FROM_HERE, 379f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<SyncTask>(new MockSyncTask(true)), 380f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SyncTaskManager::PRIORITY_MED, 381f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&SyncWorkerTest::CheckServiceState, 382f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AsWeakPtr(), 383f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SYNC_STATUS_OK, 384f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) REMOTE_SERVICE_OK)); 385f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 386f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 387f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 388f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 389f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} // namespace drive_backend 390f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} // namespace sync_file_system 391