diff options
author | tzik@chromium.org <tzik@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-13 06:07:04 +0000 |
---|---|---|
committer | tzik@chromium.org <tzik@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-13 06:07:04 +0000 |
commit | e86b609fb7cae0b0b4bdf77e47db015ba8cffd58 (patch) | |
tree | 159e27119d03f8a4fec04001ebe3e51597379cde | |
parent | 8b10f2225bcce231a75e96755f8812f026271c08 (diff) | |
download | chromium_src-e86b609fb7cae0b0b4bdf77e47db015ba8cffd58.zip chromium_src-e86b609fb7cae0b0b4bdf77e47db015ba8cffd58.tar.gz chromium_src-e86b609fb7cae0b0b4bdf77e47db015ba8cffd58.tar.bz2 |
Handle errors on the initialization of SyncFileSystemService
BUG=156041
Review URL: https://codereview.chromium.org/11358211
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@167310 0039d316-1c4b-4281-b951-d872f2087c98
3 files changed, 43 insertions, 4 deletions
diff --git a/chrome/browser/sync_file_system/mock_remote_file_sync_service.cc b/chrome/browser/sync_file_system/mock_remote_file_sync_service.cc index 64fdd4e..cf2915d 100644 --- a/chrome/browser/sync_file_system/mock_remote_file_sync_service.cc +++ b/chrome/browser/sync_file_system/mock_remote_file_sync_service.cc @@ -18,6 +18,11 @@ namespace sync_file_system { MockRemoteFileSyncService::MockRemoteFileSyncService() { typedef MockRemoteFileSyncService self; + ON_CALL(*this, RegisterOriginForTrackingChanges(_, _)) + .WillByDefault(Invoke(this, &self::RegisterOriginForTrackingChangesStub)); + ON_CALL(*this, UnregisterOriginForTrackingChanges(_, _)) + .WillByDefault( + Invoke(this, &self::UnregisterOriginForTrackingChangesStub)); ON_CALL(*this, ProcessRemoteChange(_, _)) .WillByDefault(Invoke(this, &self::ProcessRemoteChangeStub)); ON_CALL(*this, GetLocalChangeProcessor()) @@ -30,6 +35,23 @@ MockRemoteFileSyncService::MockRemoteFileSyncService() { MockRemoteFileSyncService::~MockRemoteFileSyncService() { } + +void MockRemoteFileSyncService::RegisterOriginForTrackingChangesStub( + const GURL& origin, + const fileapi::SyncStatusCallback& callback) { + base::MessageLoopProxy::current()->PostTask( + FROM_HERE, + base::Bind(callback, fileapi::SYNC_STATUS_OK)); +} + +void MockRemoteFileSyncService::UnregisterOriginForTrackingChangesStub( + const GURL& origin, + const fileapi::SyncStatusCallback& callback) { + base::MessageLoopProxy::current()->PostTask( + FROM_HERE, + base::Bind(callback, fileapi::SYNC_STATUS_OK)); +} + void MockRemoteFileSyncService::ProcessRemoteChangeStub( RemoteChangeProcessor* processor, const fileapi::SyncFileCallback& callback) { diff --git a/chrome/browser/sync_file_system/mock_remote_file_sync_service.h b/chrome/browser/sync_file_system/mock_remote_file_sync_service.h index 8b107b2..aa9fbc9 100644 --- a/chrome/browser/sync_file_system/mock_remote_file_sync_service.h +++ b/chrome/browser/sync_file_system/mock_remote_file_sync_service.h @@ -68,6 +68,12 @@ class MockRemoteFileSyncService : public RemoteFileSyncService { typedef std::map<fileapi::FileSystemURL, fileapi::SyncFileMetadata, fileapi::FileSystemURL::Comparator> FileMetadataMap; + void RegisterOriginForTrackingChangesStub( + const GURL& origin, + const fileapi::SyncStatusCallback& callback); + void UnregisterOriginForTrackingChangesStub( + const GURL& origin, + const fileapi::SyncStatusCallback& callback); void ProcessRemoteChangeStub( RemoteChangeProcessor* processor, const fileapi::SyncFileCallback& callback); diff --git a/chrome/browser/sync_file_system/sync_file_system_service.cc b/chrome/browser/sync_file_system/sync_file_system_service.cc index 2750e9c..1876141 100644 --- a/chrome/browser/sync_file_system/sync_file_system_service.cc +++ b/chrome/browser/sync_file_system/sync_file_system_service.cc @@ -36,10 +36,15 @@ class SharedCallbackRunner : public base::RefCounted<SharedCallbackRunner>, public base::NonThreadSafe { public: - SharedCallbackRunner(const SyncStatusCallback& join_callback) + explicit SharedCallbackRunner(const SyncStatusCallback& join_callback) : join_callback_(join_callback), num_shared_callbacks_(0) {} + SyncStatusCallback CreateCallback() { + ++num_shared_callbacks_; + return base::Bind(&SharedCallbackRunner::Done, this); + } + template <typename R> base::Callback<void(SyncStatusCode, const R& in)> CreateAssignAndRunCallback(R* out) { @@ -58,6 +63,10 @@ class SharedCallbackRunner if (join_callback_.is_null()) return; *out = in; + Done(status); + } + + void Done(SyncStatusCode status) { if (status != fileapi::SYNC_STATUS_OK) { join_callback_.Run(status); join_callback_.Reset(); @@ -128,13 +137,15 @@ void SyncFileSystemService::InitializeForApp( return; } + scoped_refptr<SharedCallbackRunner> callback_runner( + new SharedCallbackRunner(callback)); local_file_service_->MaybeInitializeFileSystemContext( - app_origin, service_name, file_system_context, callback); + app_origin, service_name, file_system_context, + callback_runner->CreateCallback()); if (remote_file_service_) { - // TODO(tzik): Handle errors in the completion callback. remote_file_service_->RegisterOriginForTrackingChanges( - app_origin, fileapi::SyncStatusCallback()); + app_origin, callback_runner->CreateCallback()); } } |