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