summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortzik@chromium.org <tzik@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-13 06:07:04 +0000
committertzik@chromium.org <tzik@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-13 06:07:04 +0000
commite86b609fb7cae0b0b4bdf77e47db015ba8cffd58 (patch)
tree159e27119d03f8a4fec04001ebe3e51597379cde
parent8b10f2225bcce231a75e96755f8812f026271c08 (diff)
downloadchromium_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
-rw-r--r--chrome/browser/sync_file_system/mock_remote_file_sync_service.cc22
-rw-r--r--chrome/browser/sync_file_system/mock_remote_file_sync_service.h6
-rw-r--r--chrome/browser/sync_file_system/sync_file_system_service.cc19
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());
}
}