From 065402665c9057f4ca0cf7bbfca035bbbf7b97a9 Mon Sep 17 00:00:00 2001 From: "kinuko@chromium.org" Date: Fri, 8 Feb 2013 12:43:28 +0000 Subject: SyncFS: Migrate to new event system and support LOCAL_TO_REMOTE (as well as REMOTE_TO_LOCAL) sync events Remaining: - this doesn't support pending event yet (it needs to be fired from local-side unlike other events) BUG=174825 TEST=browser_tests:SyncFileSystemAPITest.OnFileStatusChanged, unit_tests:DriveFileSyncServiceTest.RemoteChange_* TBR=thestig Review URL: https://codereview.chromium.org/12212082 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@181489 0039d316-1c4b-4281-b951-d872f2087c98 --- .../sync_file_system/sync_file_system_apitest.cc | 31 +++-- .../sync_file_system/drive_file_sync_service.cc | 132 ++++++++++++++------- .../sync_file_system/drive_file_sync_service.h | 9 +- .../drive_file_sync_service_unittest.cc | 60 ++++++++-- .../sync_file_system/file_status_observer.h | 41 +++++++ .../mock_remote_file_sync_service.cc | 37 +++--- .../mock_remote_file_sync_service.h | 23 ++-- .../sync_file_system/remote_file_sync_service.h | 9 +- .../sync_file_system/sync_file_system_service.cc | 35 +++--- .../sync_file_system/sync_file_system_service.h | 12 +- .../sync_file_system_service_unittest.cc | 13 +- chrome/chrome_browser.gypi | 1 + webkit/fileapi/syncable/sync_action.h | 26 ++++ webkit/fileapi/syncable/sync_callbacks.h | 5 - webkit/fileapi/syncable/sync_operation_result.h | 11 +- webkit/fileapi/webkit_fileapi.gypi | 1 + 16 files changed, 320 insertions(+), 126 deletions(-) create mode 100644 chrome/browser/sync_file_system/file_status_observer.h create mode 100644 webkit/fileapi/syncable/sync_action.h diff --git a/chrome/browser/extensions/api/sync_file_system/sync_file_system_apitest.cc b/chrome/browser/extensions/api/sync_file_system/sync_file_system_apitest.cc index 6137138..a3de5a4 100644 --- a/chrome/browser/extensions/api/sync_file_system/sync_file_system_apitest.cc +++ b/chrome/browser/extensions/api/sync_file_system/sync_file_system_apitest.cc @@ -2,11 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "base/bind.h" #include "base/file_util.h" #include "base/path_service.h" #include "base/run_loop.h" #include "chrome/browser/extensions/event_names.h" #include "chrome/browser/extensions/extension_apitest.h" +#include "chrome/browser/sync_file_system/file_status_observer.h" #include "chrome/browser/sync_file_system/local_change_processor.h" #include "chrome/browser/sync_file_system/mock_remote_file_sync_service.h" #include "chrome/browser/sync_file_system/sync_file_system_service.h" @@ -75,10 +77,12 @@ ACTION_P2(UpdateRemoteChangeQueue, origin, mock_remote_service) { mock_remote_service->NotifyRemoteChangeQueueUpdated(1); } -ACTION_P3(ReturnWithFakeFileAddedStatus, +ACTION_P5(ReturnWithFakeFileAddedStatus, origin, mock_remote_service, - sync_operation) { + sync_direction, + sync_file_status, + sync_action_taken) { fileapi::FileSystemURL mock_url = fileapi::CreateSyncableFileSystemURL( *origin, "drive", @@ -87,8 +91,9 @@ ACTION_P3(ReturnWithFakeFileAddedStatus, base::MessageLoopProxy::current()->PostTask( FROM_HERE, base::Bind(arg1, fileapi::SYNC_STATUS_OK, - mock_url, - sync_operation)); + mock_url)); + mock_remote_service->NotifyFileStatusChanged( + mock_url, sync_direction, sync_file_status, sync_action_taken); } } // namespace @@ -119,9 +124,12 @@ IN_PROC_BROWSER_TEST_F(SyncFileSystemApiTest, OnFileStatusChanged) { EXPECT_CALL(*mock_remote_service(), RegisterOriginForTrackingChanges(_, _)) .WillOnce(UpdateRemoteChangeQueue(&origin, mock_remote_service())); EXPECT_CALL(*mock_remote_service(), ProcessRemoteChange(_, _)) - .WillOnce(ReturnWithFakeFileAddedStatus(&origin, - mock_remote_service(), - fileapi::SYNC_OPERATION_ADDED)); + .WillOnce(ReturnWithFakeFileAddedStatus( + &origin, + mock_remote_service(), + sync_file_system::SYNC_DIRECTION_REMOTE_TO_LOCAL, + fileapi::SYNC_FILE_STATUS_SYNCED, + fileapi::SYNC_ACTION_ADDED)); ASSERT_TRUE(RunPlatformAppTest("sync_file_system/on_file_status_changed")) << message_; } @@ -132,9 +140,12 @@ IN_PROC_BROWSER_TEST_F(SyncFileSystemApiTest, OnFileStatusChangedDeleted) { EXPECT_CALL(*mock_remote_service(), RegisterOriginForTrackingChanges(_, _)) .WillOnce(UpdateRemoteChangeQueue(&origin, mock_remote_service())); EXPECT_CALL(*mock_remote_service(), ProcessRemoteChange(_, _)) - .WillOnce(ReturnWithFakeFileAddedStatus(&origin, - mock_remote_service(), - fileapi::SYNC_OPERATION_DELETED)); + .WillOnce(ReturnWithFakeFileAddedStatus( + &origin, + mock_remote_service(), + sync_file_system::SYNC_DIRECTION_REMOTE_TO_LOCAL, + fileapi::SYNC_FILE_STATUS_SYNCED, + fileapi::SYNC_ACTION_DELETED)); ASSERT_TRUE(RunPlatformAppTest( "sync_file_system/on_file_status_changed_deleted")) << message_; diff --git a/chrome/browser/sync_file_system/drive_file_sync_service.cc b/chrome/browser/sync_file_system/drive_file_sync_service.cc index 116e5e4..171853a 100644 --- a/chrome/browser/sync_file_system/drive_file_sync_service.cc +++ b/chrome/browser/sync_file_system/drive_file_sync_service.cc @@ -24,6 +24,7 @@ #include "chrome/browser/sync_file_system/drive_file_sync_client.h" #include "chrome/browser/sync_file_system/drive_file_sync_util.h" #include "chrome/browser/sync_file_system/drive_metadata_store.h" +#include "chrome/browser/sync_file_system/file_status_observer.h" #include "chrome/browser/sync_file_system/remote_change_processor.h" #include "chrome/browser/sync_file_system/sync_file_system.pb.h" #include "chrome/common/extensions/extension.h" @@ -33,7 +34,6 @@ #include "webkit/fileapi/file_system_url.h" #include "webkit/fileapi/syncable/sync_file_metadata.h" #include "webkit/fileapi/syncable/sync_file_type.h" -#include "webkit/fileapi/syncable/sync_operation_result.h" #include "webkit/fileapi/syncable/syncable_file_system_util.h" namespace sync_file_system { @@ -193,25 +193,25 @@ struct DriveFileSyncService::ProcessRemoteChangeParam { scoped_ptr token; RemoteChangeProcessor* processor; RemoteChange remote_change; - fileapi::SyncOperationCallback callback; + fileapi::SyncFileCallback callback; DriveMetadata drive_metadata; bool metadata_updated; FilePath temporary_file_path; std::string md5_checksum; - fileapi::SyncOperationResult operation_result; + fileapi::SyncAction sync_action; bool clear_local_changes; ProcessRemoteChangeParam(scoped_ptr token, RemoteChangeProcessor* processor, const RemoteChange& remote_change, - const fileapi::SyncOperationCallback& callback) + const fileapi::SyncFileCallback& callback) : token(token.Pass()), processor(processor), remote_change(remote_change), callback(callback), metadata_updated(false), - operation_result(fileapi::SYNC_OPERATION_NONE), + sync_action(fileapi::SYNC_ACTION_NONE), clear_local_changes(true) { } }; @@ -343,12 +343,13 @@ scoped_ptr DriveFileSyncService::CreateForTesting( profile, base_dir, sync_client.Pass(), metadata_store.Pass())); } -void DriveFileSyncService::AddObserver(Observer* observer) { - observers_.AddObserver(observer); +void DriveFileSyncService::AddServiceObserver(Observer* observer) { + service_observers_.AddObserver(observer); } -void DriveFileSyncService::RemoveObserver(Observer* observer) { - observers_.RemoveObserver(observer); +void DriveFileSyncService::AddFileStatusObserver( + FileStatusObserver* observer) { + file_status_observers_.AddObserver(observer); } void DriveFileSyncService::RegisterOriginForTrackingChanges( @@ -422,7 +423,7 @@ void DriveFileSyncService::UnregisterOriginForTrackingChanges( void DriveFileSyncService::ProcessRemoteChange( RemoteChangeProcessor* processor, - const fileapi::SyncOperationCallback& callback) { + const fileapi::SyncFileCallback& callback) { scoped_ptr token( GetToken(FROM_HERE, TASK_TYPE_DRIVE, "Process remote change")); if (!token) { @@ -435,8 +436,7 @@ void DriveFileSyncService::ProcessRemoteChange( if (GetCurrentState() == REMOTE_SERVICE_DISABLED) { token->ResetTask(FROM_HERE); NotifyTaskDone(last_operation_status_, token.Pass()); - callback.Run(last_operation_status_, fileapi::FileSystemURL(), - fileapi::SYNC_OPERATION_NONE); + callback.Run(last_operation_status_, fileapi::FileSystemURL()); return; } @@ -444,8 +444,7 @@ void DriveFileSyncService::ProcessRemoteChange( token->ResetTask(FROM_HERE); NotifyTaskDone(fileapi::SYNC_STATUS_OK, token.Pass()); callback.Run(fileapi::SYNC_STATUS_NO_CHANGE_TO_SYNC, - fileapi::FileSystemURL(), - fileapi::SYNC_OPERATION_NONE); + fileapi::FileSystemURL()); return; } @@ -522,7 +521,7 @@ void DriveFileSyncService::SetSyncEnabled(bool enabled) { const char* status_message = enabled ? "Sync is enabled" : "Sync is disabled"; FOR_EACH_OBSERVER( - Observer, observers_, + Observer, service_observers_, OnRemoteServiceStateUpdated(GetCurrentState(), status_message)); if (GetCurrentState() == REMOTE_SERVICE_OK) { @@ -632,6 +631,12 @@ void DriveFileSyncService::ApplyLocalChange( base::Bind(&DriveFileSyncService::DidApplyLocalChange, AsWeakPtr(), base::Passed(&token), url, google_apis::HTTP_CONFLICT, callback)); + FOR_EACH_OBSERVER( + FileStatusObserver, file_status_observers_, + OnFileStatusChanged(url, + SYNC_DIRECTION_NONE, + fileapi::SYNC_FILE_STATUS_CONFLICTING, + fileapi::SYNC_ACTION_NONE)); return; } case LOCAL_SYNC_OPERATION_RESOLVE_TO_REMOTE: { @@ -647,6 +652,8 @@ void DriveFileSyncService::ApplyLocalChange( base::Bind(&DriveFileSyncService::DidResolveConflictToRemoteChange, AsWeakPtr(), base::Passed(&token), url, metadata.resource_id(), callback)); + // The synced notification will be dispatched when the remote file is + // downloaded. return; } case LOCAL_SYNC_OPERATION_FAIL: { @@ -666,7 +673,7 @@ void DriveFileSyncService::OnAuthenticated() { if (GetCurrentState() != REMOTE_SERVICE_OK) return; FOR_EACH_OBSERVER( - Observer, observers_, + Observer, service_observers_, OnRemoteServiceStateUpdated(GetCurrentState(), "Authenticated")); UpdatePollingDelay(kMinimumPollingDelaySeconds); SchedulePolling(); @@ -680,7 +687,7 @@ void DriveFileSyncService::OnNetworkConnected() { if (GetCurrentState() != REMOTE_SERVICE_OK) return; FOR_EACH_OBSERVER( - Observer, observers_, + Observer, service_observers_, OnRemoteServiceStateUpdated(GetCurrentState(), "Network connected")); UpdatePollingDelay(kMinimumPollingDelaySeconds); SchedulePolling(); @@ -754,7 +761,7 @@ void DriveFileSyncService::NotifyTaskDone(fileapi::SyncStatusCode status, // Notify remote sync service state if the state has been changed. if (!token_->description().empty() || old_state != GetCurrentState()) { FOR_EACH_OBSERVER( - Observer, observers_, + Observer, service_observers_, OnRemoteServiceStateUpdated(GetCurrentState(), token_->done_description())); } @@ -788,7 +795,7 @@ void DriveFileSyncService::NotifyTaskDone(fileapi::SyncStatusCode status, } // Notify observer of the update of |pending_changes_|. - FOR_EACH_OBSERVER(Observer, observers_, + FOR_EACH_OBSERVER(Observer, service_observers_, OnRemoteChangeQueueUpdated(pending_changes_.size())); } @@ -1204,6 +1211,12 @@ void DriveFileSyncService::DidUploadNewFileForLocalSync( url, metadata, base::Bind(&DriveFileSyncService::DidApplyLocalChange, AsWeakPtr(), base::Passed(&token), url, error, callback)); + FOR_EACH_OBSERVER( + FileStatusObserver, file_status_observers_, + OnFileStatusChanged(url, + SYNC_DIRECTION_LOCAL_TO_REMOTE, + fileapi::SYNC_FILE_STATUS_SYNCED, + fileapi::SYNC_ACTION_ADDED)); return; } FinalizeLocalSync(token.Pass(), callback, @@ -1228,6 +1241,12 @@ void DriveFileSyncService::DidUploadExistingFileForLocalSync( url, metadata, base::Bind(&DriveFileSyncService::DidApplyLocalChange, AsWeakPtr(), base::Passed(&token), url, error, callback)); + FOR_EACH_OBSERVER( + FileStatusObserver, file_status_observers_, + OnFileStatusChanged(url, + SYNC_DIRECTION_LOCAL_TO_REMOTE, + fileapi::SYNC_FILE_STATUS_SYNCED, + fileapi::SYNC_ACTION_UPDATED)); return; } case google_apis::HTTP_CONFLICT: { @@ -1242,6 +1261,12 @@ void DriveFileSyncService::DidUploadExistingFileForLocalSync( url, metadata, base::Bind(&DriveFileSyncService::DidApplyLocalChange, AsWeakPtr(), base::Passed(&token), url, error, callback)); + FOR_EACH_OBSERVER( + FileStatusObserver, file_status_observers_, + OnFileStatusChanged(url, + SYNC_DIRECTION_NONE, + fileapi::SYNC_FILE_STATUS_CONFLICTING, + fileapi::SYNC_ACTION_NONE)); return; } case google_apis::HTTP_NOT_MODIFIED: { @@ -1270,6 +1295,12 @@ void DriveFileSyncService::DidDeleteFileForLocalSync( url, base::Bind(&DriveFileSyncService::DidApplyLocalChange, AsWeakPtr(), base::Passed(&token), url, error, callback)); + FOR_EACH_OBSERVER( + FileStatusObserver, file_status_observers_, + OnFileStatusChanged(url, + SYNC_DIRECTION_LOCAL_TO_REMOTE, + fileapi::SYNC_FILE_STATUS_SYNCED, + fileapi::SYNC_ACTION_DELETED)); return; } case google_apis::HTTP_PRECONDITION: @@ -1286,6 +1317,12 @@ void DriveFileSyncService::DidDeleteFileForLocalSync( url, metadata, base::Bind(&DriveFileSyncService::DidApplyLocalChange, AsWeakPtr(), base::Passed(&token), url, error, callback)); + FOR_EACH_OBSERVER( + FileStatusObserver, file_status_observers_, + OnFileStatusChanged(url, + SYNC_DIRECTION_NONE, + fileapi::SYNC_FILE_STATUS_CONFLICTING, + fileapi::SYNC_ACTION_NONE)); return; } default: { @@ -1343,20 +1380,20 @@ void DriveFileSyncService::DidPrepareForProcessRemoteChange( metadata_store_->UpdateEntry( url, drive_metadata, base::Bind(&EmptyStatusCallback)); - param->operation_result = fileapi::SYNC_OPERATION_ADDED; + param->sync_action = fileapi::SYNC_ACTION_ADDED; DownloadForRemoteSync(param.Pass()); return; } DCHECK(remote_file_change.IsDelete()); - param->operation_result = fileapi::SYNC_OPERATION_NONE; + param->sync_action = fileapi::SYNC_ACTION_NONE; DeleteMetadataForRemoteSync(param.Pass()); return; } DCHECK(!missing_local_file); if (remote_file_change.IsAddOrUpdate()) { - param->operation_result = fileapi::SYNC_OPERATION_NONE; + param->sync_action = fileapi::SYNC_ACTION_NONE; param->drive_metadata.set_conflicted(true); param->drive_metadata.set_to_be_fetched(false); @@ -1374,7 +1411,7 @@ void DriveFileSyncService::DidPrepareForProcessRemoteChange( << " remote_change: " << remote_file_change.DebugString() << " ==> operation: ResolveConflictToLocalChange"; - param->operation_result = fileapi::SYNC_OPERATION_NONE; + param->sync_action = fileapi::SYNC_ACTION_NONE; param->clear_local_changes = false; RemoteChangeProcessor* processor = param->processor; @@ -1391,20 +1428,19 @@ void DriveFileSyncService::DidPrepareForProcessRemoteChange( if (remote_file_change.IsAddOrUpdate()) { if (local_changes.empty()) { if (missing_local_file) { - param->operation_result = fileapi::SYNC_OPERATION_ADDED; + param->sync_action = fileapi::SYNC_ACTION_ADDED; DownloadForRemoteSync(param.Pass()); return; } DCHECK(!missing_local_file); - param->operation_result = fileapi::SYNC_OPERATION_UPDATED; + param->sync_action = fileapi::SYNC_ACTION_UPDATED; DownloadForRemoteSync(param.Pass()); return; } DCHECK(!local_changes.empty()); if (local_changes.list().back().IsAddOrUpdate()) { - param->operation_result = fileapi::SYNC_OPERATION_CONFLICTED; param->drive_metadata.set_conflicted(true); param->drive_metadata.set_to_be_fetched(false); @@ -1412,11 +1448,17 @@ void DriveFileSyncService::DidPrepareForProcessRemoteChange( url, drive_metadata, base::Bind(&DriveFileSyncService::CompleteRemoteSync, AsWeakPtr(), base::Passed(¶m))); + FOR_EACH_OBSERVER( + FileStatusObserver, file_status_observers_, + OnFileStatusChanged(url, + SYNC_DIRECTION_NONE, + fileapi::SYNC_FILE_STATUS_CONFLICTING, + fileapi::SYNC_ACTION_NONE)); return; } DCHECK(local_changes.list().back().IsDelete()); - param->operation_result = fileapi::SYNC_OPERATION_ADDED; + param->sync_action = fileapi::SYNC_ACTION_ADDED; DownloadForRemoteSync(param.Pass()); return; } @@ -1424,7 +1466,7 @@ void DriveFileSyncService::DidPrepareForProcessRemoteChange( DCHECK(remote_file_change.IsDelete()); if (local_changes.empty()) { if (missing_local_file) { - param->operation_result = fileapi::SYNC_OPERATION_NONE; + param->sync_action = fileapi::SYNC_ACTION_NONE; if (missing_db_entry) CompleteRemoteSync(param.Pass(), fileapi::SYNC_STATUS_OK); else @@ -1432,7 +1474,7 @@ void DriveFileSyncService::DidPrepareForProcessRemoteChange( return; } DCHECK(!missing_local_file); - param->operation_result = fileapi::SYNC_OPERATION_DELETED; + param->sync_action = fileapi::SYNC_ACTION_DELETED; const fileapi::FileChange& file_change = remote_file_change; param->processor->ApplyRemoteChange( @@ -1444,13 +1486,13 @@ void DriveFileSyncService::DidPrepareForProcessRemoteChange( DCHECK(!local_changes.empty()); if (local_changes.list().back().IsAddOrUpdate()) { - param->operation_result = fileapi::SYNC_OPERATION_NONE; + param->sync_action = fileapi::SYNC_ACTION_NONE; CompleteRemoteSync(param.Pass(), fileapi::SYNC_STATUS_OK); return; } DCHECK(local_changes.list().back().IsDelete()); - param->operation_result = fileapi::SYNC_OPERATION_NONE; + param->sync_action = fileapi::SYNC_ACTION_NONE; if (missing_db_entry) CompleteRemoteSync(param.Pass(), fileapi::SYNC_STATUS_OK); else @@ -1514,7 +1556,7 @@ void DriveFileSyncService::DidDownloadFileForRemoteSync( google_apis::GDataErrorCode error, const std::string& md5_checksum) { if (error == google_apis::HTTP_NOT_MODIFIED) { - param->operation_result = fileapi::SYNC_OPERATION_NONE; + param->sync_action = fileapi::SYNC_ACTION_NONE; CompleteRemoteSync(param.Pass(), fileapi::SYNC_STATUS_OK); return; } @@ -1632,14 +1674,24 @@ void DriveFileSyncService::FinalizeRemoteSync( if (!param->temporary_file_path.empty()) DeleteTemporaryFile(param->temporary_file_path); NotifyTaskDone(status, param->token.Pass()); - if (status == fileapi::SYNC_STATUS_OK || - status == fileapi::SYNC_STATUS_HAS_CONFLICT) { - param->callback.Run(status, param->remote_change.url, - param->operation_result); - } else { - param->callback.Run(status, param->remote_change.url, - fileapi::SYNC_OPERATION_NONE); - } + if (status == fileapi::SYNC_STATUS_HAS_CONFLICT || + param->drive_metadata.conflicted()) { + FOR_EACH_OBSERVER( + FileStatusObserver, file_status_observers_, + OnFileStatusChanged(param->remote_change.url, + SYNC_DIRECTION_NONE, + fileapi::SYNC_FILE_STATUS_CONFLICTING, + fileapi::SYNC_ACTION_NONE)); + } else if (status == fileapi::SYNC_STATUS_OK && + param->sync_action != fileapi::SYNC_ACTION_NONE) { + FOR_EACH_OBSERVER( + FileStatusObserver, file_status_observers_, + OnFileStatusChanged(param->remote_change.url, + SYNC_DIRECTION_REMOTE_TO_LOCAL, + fileapi::SYNC_FILE_STATUS_SYNCED, + param->sync_action)); + } + param->callback.Run(status, param->remote_change.url); } bool DriveFileSyncService::AppendRemoteChange( diff --git a/chrome/browser/sync_file_system/drive_file_sync_service.h b/chrome/browser/sync_file_system/drive_file_sync_service.h index 4443392..de30199 100644 --- a/chrome/browser/sync_file_system/drive_file_sync_service.h +++ b/chrome/browser/sync_file_system/drive_file_sync_service.h @@ -60,8 +60,8 @@ class DriveFileSyncService scoped_ptr metadata_store); // RemoteFileSyncService overrides. - virtual void AddObserver(Observer* observer) OVERRIDE; - virtual void RemoveObserver(Observer* observer) OVERRIDE; + virtual void AddServiceObserver(Observer* observer) OVERRIDE; + virtual void AddFileStatusObserver(FileStatusObserver* observer) OVERRIDE; virtual void RegisterOriginForTrackingChanges( const GURL& origin, const fileapi::SyncStatusCallback& callback) OVERRIDE; @@ -70,7 +70,7 @@ class DriveFileSyncService const fileapi::SyncStatusCallback& callback) OVERRIDE; virtual void ProcessRemoteChange( RemoteChangeProcessor* processor, - const fileapi::SyncOperationCallback& callback) OVERRIDE; + const fileapi::SyncFileCallback& callback) OVERRIDE; virtual LocalChangeProcessor* GetLocalChangeProcessor() OVERRIDE; virtual bool IsConflicting(const fileapi::FileSystemURL& url) OVERRIDE; virtual void GetRemoteFileMetadata( @@ -398,7 +398,8 @@ class DriveFileSyncService // sync. Polling will be disabled while this is true. bool is_fetching_changes_; - ObserverList observers_; + ObserverList service_observers_; + ObserverList file_status_observers_; // Use WeakPtrFactory instead of SupportsWeakPtr to revoke the weak pointer // in |token_|. diff --git a/chrome/browser/sync_file_system/drive_file_sync_service_unittest.cc b/chrome/browser/sync_file_system/drive_file_sync_service_unittest.cc index 6dbf5b9..58f0d95 100644 --- a/chrome/browser/sync_file_system/drive_file_sync_service_unittest.cc +++ b/chrome/browser/sync_file_system/drive_file_sync_service_unittest.cc @@ -18,6 +18,7 @@ #include "chrome/browser/google_apis/test_util.h" #include "chrome/browser/sync_file_system/drive_file_sync_client.h" #include "chrome/browser/sync_file_system/drive_metadata_store.h" +#include "chrome/browser/sync_file_system/file_status_observer.h" #include "chrome/browser/sync_file_system/mock_remote_change_processor.h" #include "chrome/browser/sync_file_system/sync_file_system.pb.h" #include "chrome/common/extensions/extension.h" @@ -190,6 +191,18 @@ class MockRemoteServiceObserver : public RemoteFileSyncService::Observer { const std::string& description)); }; +class MockFileStatusObserver: public FileStatusObserver { + public: + MockFileStatusObserver() {} + virtual ~MockFileStatusObserver() {} + + MOCK_METHOD4(OnFileStatusChanged, + void(const fileapi::FileSystemURL& url, + SyncDirection direction, + fileapi::SyncFileStatus sync_status, + fileapi::SyncAction action_taken)); +}; + class DriveFileSyncServiceTest : public testing::Test { public: DriveFileSyncServiceTest() @@ -238,7 +251,8 @@ class DriveFileSyncServiceTest : public testing::Test { sync_service_ = DriveFileSyncService::CreateForTesting(profile_.get(), base_dir_.path(), sync_client_.Pass(), metadata_store_.Pass()).Pass(); sync_service_->SetSyncEnabled(enabled); - sync_service_->AddObserver(&mock_remote_observer_); + sync_service_->AddServiceObserver(&mock_remote_observer_); + sync_service_->AddFileStatusObserver(&mock_file_status_observer_); message_loop_.RunUntilIdle(); } @@ -345,6 +359,10 @@ class DriveFileSyncServiceTest : public testing::Test { return &mock_remote_observer_; } + StrictMock* mock_file_status_observer() { + return &mock_file_status_observer_; + } + StrictMock* mock_remote_processor() { return &mock_remote_processor_; } @@ -368,32 +386,38 @@ class DriveFileSyncServiceTest : public testing::Test { void ProcessRemoteChange(fileapi::SyncStatusCode expected_status, const fileapi::FileSystemURL& expected_url, - fileapi::SyncOperationResult expected_result) { + SyncDirection expected_sync_direction, + fileapi::SyncFileStatus expected_sync_file_status, + fileapi::SyncAction expected_sync_action) { fileapi::SyncStatusCode actual_status = fileapi::SYNC_STATUS_UNKNOWN; fileapi::FileSystemURL actual_url; - fileapi::SyncOperationResult actual_result = fileapi::SYNC_OPERATION_NONE; + + if (expected_sync_file_status != fileapi::SYNC_FILE_STATUS_UNKNOWN) { + EXPECT_CALL(*mock_file_status_observer(), + OnFileStatusChanged(expected_url, + expected_sync_direction, + expected_sync_file_status, + expected_sync_action)) + .Times(1); + } sync_service_->ProcessRemoteChange( mock_remote_processor(), base::Bind(&DriveFileSyncServiceTest::DidProcessRemoteChange, base::Unretained(this), - &actual_status, &actual_url, &actual_result)); + &actual_status, &actual_url)); message_loop_.RunUntilIdle(); EXPECT_EQ(expected_status, actual_status); EXPECT_EQ(expected_url, actual_url); - EXPECT_EQ(expected_result, actual_result); } void DidProcessRemoteChange(fileapi::SyncStatusCode* status_out, fileapi::FileSystemURL* url_out, - fileapi::SyncOperationResult* result_out, fileapi::SyncStatusCode status, - const fileapi::FileSystemURL& url, - fileapi::SyncOperationResult result) { + const fileapi::FileSystemURL& url) { *status_out = status; *url_out = url; - *result_out = result; } void AppendIncrementalRemoteChangeByEntry( @@ -504,7 +528,9 @@ class DriveFileSyncServiceTest : public testing::Test { // Owned by |sync_client_|. StrictMock* mock_drive_service_; + StrictMock mock_remote_observer_; + StrictMock mock_file_status_observer_; StrictMock mock_remote_processor_; scoped_ptr sync_client_; @@ -814,7 +840,9 @@ TEST_F(DriveFileSyncServiceTest, RemoteChange_NoChange) { ProcessRemoteChange(fileapi::SYNC_STATUS_NO_CHANGE_TO_SYNC, fileapi::FileSystemURL(), - fileapi::SYNC_OPERATION_NONE); + SYNC_DIRECTION_NONE, + fileapi::SYNC_FILE_STATUS_UNKNOWN, + fileapi::SYNC_ACTION_NONE); EXPECT_TRUE(metadata_store()->batch_sync_origins().empty()); EXPECT_TRUE(metadata_store()->incremental_sync_origins().empty()); EXPECT_TRUE(pending_changes().empty()); @@ -852,7 +880,9 @@ TEST_F(DriveFileSyncServiceTest, RemoteChange_Busy) { ProcessRemoteChange(fileapi::SYNC_STATUS_FILE_BUSY, CreateURL(kOrigin, kFileName), - fileapi::SYNC_OPERATION_NONE); + SYNC_DIRECTION_NONE, + fileapi::SYNC_FILE_STATUS_UNKNOWN, + fileapi::SYNC_ACTION_NONE); } TEST_F(DriveFileSyncServiceTest, RemoteChange_NewFile) { @@ -894,7 +924,9 @@ TEST_F(DriveFileSyncServiceTest, RemoteChange_NewFile) { ProcessRemoteChange(fileapi::SYNC_STATUS_OK, CreateURL(kOrigin, kFileName), - fileapi::SYNC_OPERATION_ADDED); + SYNC_DIRECTION_REMOTE_TO_LOCAL, + fileapi::SYNC_FILE_STATUS_SYNCED, + fileapi::SYNC_ACTION_ADDED); } TEST_F(DriveFileSyncServiceTest, RemoteChange_UpdateFile) { @@ -935,7 +967,9 @@ TEST_F(DriveFileSyncServiceTest, RemoteChange_UpdateFile) { AppendIncrementalRemoteChangeByEntry(kOrigin, *entry, 12345); ProcessRemoteChange(fileapi::SYNC_STATUS_OK, CreateURL(kOrigin, kFileName), - fileapi::SYNC_OPERATION_UPDATED); + SYNC_DIRECTION_REMOTE_TO_LOCAL, + fileapi::SYNC_FILE_STATUS_SYNCED, + fileapi::SYNC_ACTION_UPDATED); } TEST_F(DriveFileSyncServiceTest, RegisterOriginWithSyncDisabled) { diff --git a/chrome/browser/sync_file_system/file_status_observer.h b/chrome/browser/sync_file_system/file_status_observer.h new file mode 100644 index 0000000..78ebe5c --- /dev/null +++ b/chrome/browser/sync_file_system/file_status_observer.h @@ -0,0 +1,41 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_FILE_STATUS_OBSERVER_H_ +#define CHROME_BROWSER_SYNC_FILE_SYSTEM_FILE_STATUS_OBSERVER_H_ + +#include "base/basictypes.h" +#include "webkit/fileapi/syncable/sync_action.h" +#include "webkit/fileapi/syncable/sync_file_status.h" + +namespace fileapi { +class FileSystemURL; +} + +namespace sync_file_system { + +// TODO(kinuko): Cleanup these enums once we finished the migration. +enum SyncDirection { + SYNC_DIRECTION_NONE, + SYNC_DIRECTION_LOCAL_TO_REMOTE, + SYNC_DIRECTION_REMOTE_TO_LOCAL, +}; + +class FileStatusObserver { + public: + FileStatusObserver() {} + virtual ~FileStatusObserver() {} + + virtual void OnFileStatusChanged(const fileapi::FileSystemURL& url, + SyncDirection direction, + fileapi::SyncFileStatus sync_status, + fileapi::SyncAction action_taken) = 0; + + private: + DISALLOW_COPY_AND_ASSIGN(FileStatusObserver); +}; + +} // namespace sync_file_system + +#endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_FILE_STATUS_OBSERVER_H_ 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 5de8bd8..b96e7c8 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 @@ -11,7 +11,6 @@ #include "base/message_loop_proxy.h" #include "googleurl/src/gurl.h" #include "webkit/fileapi/file_system_url.h" -#include "webkit/fileapi/syncable/sync_operation_result.h" using ::testing::_; using ::testing::Invoke; @@ -23,10 +22,10 @@ const char MockRemoteFileSyncService::kServiceName[] = "mock_sync_service"; MockRemoteFileSyncService::MockRemoteFileSyncService() { typedef MockRemoteFileSyncService self; - ON_CALL(*this, AddObserver(_)) - .WillByDefault(Invoke(this, &self::AddObserverStub)); - ON_CALL(*this, RemoveObserver(_)) - .WillByDefault(Invoke(this, &self::RemoveObserverStub)); + ON_CALL(*this, AddServiceObserver(_)) + .WillByDefault(Invoke(this, &self::AddServiceObserverStub)); + ON_CALL(*this, AddFileStatusObserver(_)) + .WillByDefault(Invoke(this, &self::AddFileStatusObserverStub)); ON_CALL(*this, RegisterOriginForTrackingChanges(_, _)) .WillByDefault(Invoke(this, &self::RegisterOriginForTrackingChangesStub)); ON_CALL(*this, UnregisterOriginForTrackingChanges(_, _)) @@ -51,23 +50,34 @@ MockRemoteFileSyncService::~MockRemoteFileSyncService() { void MockRemoteFileSyncService::NotifyRemoteChangeQueueUpdated( int64 pending_changes) { - FOR_EACH_OBSERVER(Observer, observers_, + FOR_EACH_OBSERVER(Observer, service_observers_, OnRemoteChangeQueueUpdated(pending_changes)); } void MockRemoteFileSyncService::NotifyRemoteServiceStateUpdated( RemoteServiceState state, const std::string& description) { - FOR_EACH_OBSERVER(Observer, observers_, + FOR_EACH_OBSERVER(Observer, service_observers_, OnRemoteServiceStateUpdated(state, description)); } -void MockRemoteFileSyncService::AddObserverStub(Observer* observer) { - observers_.AddObserver(observer); +void MockRemoteFileSyncService::NotifyFileStatusChanged( + const fileapi::FileSystemURL& url, + SyncDirection direction, + fileapi::SyncFileStatus sync_status, + fileapi::SyncAction action_taken) { + FOR_EACH_OBSERVER(FileStatusObserver, file_status_observers_, + OnFileStatusChanged(url, direction, + sync_status, action_taken)); +} + +void MockRemoteFileSyncService::AddServiceObserverStub(Observer* observer) { + service_observers_.AddObserver(observer); } -void MockRemoteFileSyncService::RemoveObserverStub(Observer* observer) { - observers_.RemoveObserver(observer); +void MockRemoteFileSyncService::AddFileStatusObserverStub( + FileStatusObserver* observer) { + file_status_observers_.AddObserver(observer); } void MockRemoteFileSyncService::RegisterOriginForTrackingChangesStub( @@ -88,12 +98,11 @@ void MockRemoteFileSyncService::UnregisterOriginForTrackingChangesStub( void MockRemoteFileSyncService::ProcessRemoteChangeStub( RemoteChangeProcessor* processor, - const fileapi::SyncOperationCallback& callback) { + const fileapi::SyncFileCallback& callback) { base::MessageLoopProxy::current()->PostTask( FROM_HERE, base::Bind(callback, fileapi::SYNC_STATUS_NO_CHANGE_TO_SYNC, - fileapi::FileSystemURL(), - fileapi::SYNC_OPERATION_NONE)); + fileapi::FileSystemURL())); } void MockRemoteFileSyncService::GetRemoteFileMetadataStub( 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 379737f..c07e765 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 @@ -9,6 +9,7 @@ #include "base/memory/scoped_ptr.h" #include "base/observer_list.h" +#include "chrome/browser/sync_file_system/file_status_observer.h" #include "chrome/browser/sync_file_system/mock_local_change_processor.h" #include "chrome/browser/sync_file_system/remote_change_processor.h" #include "chrome/browser/sync_file_system/remote_file_sync_service.h" @@ -27,8 +28,10 @@ class MockRemoteFileSyncService : public RemoteFileSyncService { virtual ~MockRemoteFileSyncService(); // RemoteFileSyncService overrides. - MOCK_METHOD1(AddObserver, void(RemoteFileSyncService::Observer* observer)); - MOCK_METHOD1(RemoveObserver, void(RemoteFileSyncService::Observer* observer)); + MOCK_METHOD1(AddServiceObserver, + void(RemoteFileSyncService::Observer* observer)); + MOCK_METHOD1(AddFileStatusObserver, + void(FileStatusObserver* observer)); MOCK_METHOD2(RegisterOriginForTrackingChanges, void(const GURL& origin, const fileapi::SyncStatusCallback& callback)); @@ -37,7 +40,7 @@ class MockRemoteFileSyncService : public RemoteFileSyncService { const fileapi::SyncStatusCallback& callback)); MOCK_METHOD2(ProcessRemoteChange, void(RemoteChangeProcessor* processor, - const fileapi::SyncOperationCallback& callback)); + const fileapi::SyncFileCallback& callback)); MOCK_METHOD0(GetLocalChangeProcessor, LocalChangeProcessor*()); MOCK_METHOD1(IsConflicting, bool(const fileapi::FileSystemURL& url)); MOCK_METHOD2(GetRemoteFileMetadata, @@ -55,6 +58,11 @@ class MockRemoteFileSyncService : public RemoteFileSyncService { void NotifyRemoteServiceStateUpdated( RemoteServiceState state, const std::string& description); + void NotifyFileStatusChanged( + const fileapi::FileSystemURL& url, + SyncDirection direction, + fileapi::SyncFileStatus sync_status, + fileapi::SyncAction action_taken); // Sets conflict file information. The information is returned by // the default action for GetRemoteConflictFileInfo. @@ -74,8 +82,8 @@ class MockRemoteFileSyncService : public RemoteFileSyncService { typedef std::map FileMetadataMap; - void AddObserverStub(Observer* observer); - void RemoveObserverStub(Observer* observer); + void AddServiceObserverStub(Observer* observer); + void AddFileStatusObserverStub(FileStatusObserver* observer); void RegisterOriginForTrackingChangesStub( const GURL& origin, const fileapi::SyncStatusCallback& callback); @@ -84,7 +92,7 @@ class MockRemoteFileSyncService : public RemoteFileSyncService { const fileapi::SyncStatusCallback& callback); void ProcessRemoteChangeStub( RemoteChangeProcessor* processor, - const fileapi::SyncOperationCallback& callback); + const fileapi::SyncFileCallback& callback); void GetRemoteFileMetadataStub( const fileapi::FileSystemURL& url, const fileapi::SyncFileMetadataCallback& callback); @@ -95,7 +103,8 @@ class MockRemoteFileSyncService : public RemoteFileSyncService { // For default implementation. MockLocalChangeProcessor mock_local_change_processor_; - ObserverList observers_; + ObserverList service_observers_; + ObserverList file_status_observers_; DISALLOW_COPY_AND_ASSIGN(MockRemoteFileSyncService); }; diff --git a/chrome/browser/sync_file_system/remote_file_sync_service.h b/chrome/browser/sync_file_system/remote_file_sync_service.h index 06bda93..85faff5 100644 --- a/chrome/browser/sync_file_system/remote_file_sync_service.h +++ b/chrome/browser/sync_file_system/remote_file_sync_service.h @@ -15,8 +15,9 @@ class GURL; namespace sync_file_system { -class RemoteChangeProcessor; +class FileStatusObserver; class LocalChangeProcessor; +class RemoteChangeProcessor; enum RemoteServiceState { // Remote service is up and running, or has not seen any errors yet. @@ -77,8 +78,8 @@ class RemoteFileSyncService { virtual ~RemoteFileSyncService() {} // Adds and removes observers. - virtual void AddObserver(Observer* observer) = 0; - virtual void RemoveObserver(Observer* observer) = 0; + virtual void AddServiceObserver(Observer* observer) = 0; + virtual void AddFileStatusObserver(FileStatusObserver* observer) = 0; // Registers |origin| to track remote side changes for the |origin|. // Upon completion, invokes |callback|. @@ -103,7 +104,7 @@ class RemoteFileSyncService { // the control to the sync engine). virtual void ProcessRemoteChange( RemoteChangeProcessor* processor, - const fileapi::SyncOperationCallback& callback) = 0; + const fileapi::SyncFileCallback& callback) = 0; // Returns a LocalChangeProcessor that applies a local change to the remote // storage backed by this service. 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 7b871bd..50afbee 100644 --- a/chrome/browser/sync_file_system/sync_file_system_service.cc +++ b/chrome/browser/sync_file_system/sync_file_system_service.cc @@ -26,6 +26,7 @@ #include "googleurl/src/gurl.h" #include "webkit/fileapi/file_system_context.h" #include "webkit/fileapi/syncable/sync_file_metadata.h" +#include "webkit/fileapi/syncable/sync_operation_result.h" #include "webkit/fileapi/syncable/sync_status_code.h" using content::BrowserThread; @@ -237,7 +238,9 @@ void SyncFileSystemService::Initialize( remote_file_service_ = remote_file_service.Pass(); local_file_service_->AddChangeObserver(this); - remote_file_service_->AddObserver(this); + + remote_file_service_->AddServiceObserver(this); + remote_file_service_->AddFileStatusObserver(this); ProfileSyncServiceBase* profile_sync_service = ProfileSyncServiceFactory::GetForProfile(profile_); @@ -352,13 +355,11 @@ void SyncFileSystemService::MaybeStartLocalSync() { void SyncFileSystemService::DidProcessRemoteChange( fileapi::SyncStatusCode status, - const FileSystemURL& url, - fileapi::SyncOperationResult result) { + const FileSystemURL& url) { DVLOG(1) << "DidProcessRemoteChange: " << " status=" << status << " (" << SyncStatusCodeToString(status) << ")" - << " url=" << url.DebugString() - << " operation_result=" << result; + << " url=" << url.DebugString(); DCHECK(remote_sync_running_); remote_sync_running_ = false; @@ -381,13 +382,6 @@ void SyncFileSystemService::DidProcessRemoteChange( return; } - if ((status == fileapi::SYNC_STATUS_OK || - status == fileapi::SYNC_STATUS_HAS_CONFLICT) && - result != fileapi::SYNC_OPERATION_NONE) { - // Notify observers of the changes made for a remote sync. - FOR_EACH_OBSERVER(SyncEventObserver, observers_, - OnFileSynced(url, result)); - } base::MessageLoopProxy::current()->PostTask( FROM_HERE, base::Bind(&SyncFileSystemService::MaybeStartSync, AsWeakPtr())); @@ -410,11 +404,6 @@ void SyncFileSystemService::DidProcessLocalChange( DCHECK(url.is_valid()); local_file_service_->ClearSyncFlagForURL(url); - if (status == fileapi::SYNC_STATUS_HAS_CONFLICT) { - FOR_EACH_OBSERVER(SyncEventObserver, observers_, - OnFileSynced(url, fileapi::SYNC_OPERATION_CONFLICTED)); - } - base::MessageLoopProxy::current()->PostTask( FROM_HERE, base::Bind(&SyncFileSystemService::MaybeStartSync, AsWeakPtr())); @@ -512,6 +501,18 @@ void SyncFileSystemService::OnStateChanged() { UpdateSyncEnabledStatus(profile_sync_service); } +void SyncFileSystemService::OnFileStatusChanged( + const FileSystemURL& url, + SyncDirection direction, + fileapi::SyncFileStatus sync_status, + fileapi::SyncAction action_taken) { + // TODO(kinuko,calvinlo): Update this line. + FOR_EACH_OBSERVER( + SyncEventObserver, observers_, + OnFileSynced(url, + static_cast(action_taken))); +} + void SyncFileSystemService::UpdateSyncEnabledStatus( ProfileSyncServiceBase* profile_sync_service) { if (!profile_sync_service->HasSyncSetupCompleted()) diff --git a/chrome/browser/sync_file_system/sync_file_system_service.h b/chrome/browser/sync_file_system/sync_file_system_service.h index 4c6c65d1..2fbf74b 100644 --- a/chrome/browser/sync_file_system/sync_file_system_service.h +++ b/chrome/browser/sync_file_system/sync_file_system_service.h @@ -17,6 +17,7 @@ #include "chrome/browser/api/sync/profile_sync_service_observer.h" #include "chrome/browser/profiles/profile_keyed_service.h" #include "chrome/browser/profiles/profile_keyed_service_factory.h" +#include "chrome/browser/sync_file_system/file_status_observer.h" #include "chrome/browser/sync_file_system/local_file_sync_service.h" #include "chrome/browser/sync_file_system/remote_file_sync_service.h" #include "content/public/browser/notification_observer.h" @@ -39,6 +40,7 @@ class SyncFileSystemService public ProfileSyncServiceObserver, public LocalFileSyncService::Observer, public RemoteFileSyncService::Observer, + public FileStatusObserver, public content::NotificationObserver, public base::SupportsWeakPtr { public: @@ -99,8 +101,7 @@ class SyncFileSystemService // Callbacks for remote/local sync. void DidProcessRemoteChange(fileapi::SyncStatusCode status, - const fileapi::FileSystemURL& url, - fileapi::SyncOperationResult result); + const fileapi::FileSystemURL& url); void DidProcessLocalChange(fileapi::SyncStatusCode status, const fileapi::FileSystemURL& url); @@ -126,6 +127,13 @@ class SyncFileSystemService // ProfileSyncServiceObserver: virtual void OnStateChanged() OVERRIDE; + // SyncFileStatusObserver: + virtual void OnFileStatusChanged( + const fileapi::FileSystemURL& url, + SyncDirection direction, + fileapi::SyncFileStatus sync_status, + fileapi::SyncAction action_taken) OVERRIDE; + // Check the profile's sync preference settings and call // remote_file_service_->SetSyncEnabled() to update the status. // |profile_sync_service| must be non-null. diff --git a/chrome/browser/sync_file_system/sync_file_system_service_unittest.cc b/chrome/browser/sync_file_system/sync_file_system_service_unittest.cc index 6323adf..6cb80ff 100644 --- a/chrome/browser/sync_file_system/sync_file_system_service_unittest.cc +++ b/chrome/browser/sync_file_system/sync_file_system_service_unittest.cc @@ -108,9 +108,9 @@ ACTION_P(MockStatusCallback, status) { FROM_HERE, base::Bind(arg3, status)); } -ACTION_P3(MockSyncOperationCallback, status, url, operation_type) { +ACTION_P2(MockSyncFileCallback, status, url) { base::MessageLoopProxy::current()->PostTask( - FROM_HERE, base::Bind(arg1, status, url, operation_type)); + FROM_HERE, base::Bind(arg1, status, url)); } class SyncFileSystemServiceTest : public testing::Test { @@ -131,7 +131,9 @@ class SyncFileSystemServiceTest : public testing::Test { sync_service_.reset(new SyncFileSystemService(&profile_)); EXPECT_CALL(*mock_remote_service(), - AddObserver(sync_service_.get())).Times(1); + AddServiceObserver(sync_service_.get())).Times(1); + EXPECT_CALL(*mock_remote_service(), + AddFileStatusObserver(sync_service_.get())).Times(1); sync_service_->Initialize( make_scoped_ptr(local_service_), @@ -378,9 +380,8 @@ TEST_F(SyncFileSystemServiceTest, SimpleSyncFlowWithFileBusy) { // Return with SYNC_STATUS_FILE_BUSY once. EXPECT_CALL(*mock_remote_service(), ProcessRemoteChange(_, _)) - .WillOnce(MockSyncOperationCallback(fileapi::SYNC_STATUS_FILE_BUSY, - kFile, - fileapi::SYNC_OPERATION_NONE)); + .WillOnce(MockSyncFileCallback(fileapi::SYNC_STATUS_FILE_BUSY, + kFile)); // ProcessRemoteChange should be called again when the becomes // not busy. diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index a4ee93b..0d7de8b 100644 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi @@ -2051,6 +2051,7 @@ 'browser/sync_file_system/drive_file_sync_util.h', 'browser/sync_file_system/drive_metadata_store.cc', 'browser/sync_file_system/drive_metadata_store.h', + 'browser/sync_file_system/file_status_observer.h', 'browser/sync_file_system/local_change_processor.h', 'browser/sync_file_system/local_file_sync_service.cc', 'browser/sync_file_system/local_file_sync_service.h', diff --git a/webkit/fileapi/syncable/sync_action.h b/webkit/fileapi/syncable/sync_action.h new file mode 100644 index 0000000..5f93b45 --- /dev/null +++ b/webkit/fileapi/syncable/sync_action.h @@ -0,0 +1,26 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef WEBKIT_FILEAPI_SYNCABLE_SYNC_ACTION_H_ +#define WEBKIT_FILEAPI_SYNCABLE_SYNC_ACTION_H_ + +namespace fileapi { + +enum SyncAction { + // Indicates no action has been made. + SYNC_ACTION_NONE, + + // Indicates a new file or directory has been added. + SYNC_ACTION_ADDED, + + // Indicates an existing file or directory has been updated. + SYNC_ACTION_UPDATED, + + // Indicates a file or directory has been deleted. + SYNC_ACTION_DELETED, +}; + +} // namespace fileapi + +#endif // WEBKIT_FILEAPI_SYNCABLE_SYNC_ACTION_H_ diff --git a/webkit/fileapi/syncable/sync_callbacks.h b/webkit/fileapi/syncable/sync_callbacks.h index 443ec61..6d725aa 100644 --- a/webkit/fileapi/syncable/sync_callbacks.h +++ b/webkit/fileapi/syncable/sync_callbacks.h @@ -37,11 +37,6 @@ typedef base::Callback - SyncOperationCallback; - -typedef base::Callback SyncFileStatusCallback; diff --git a/webkit/fileapi/syncable/sync_operation_result.h b/webkit/fileapi/syncable/sync_operation_result.h index d999a47..3c7b208 100644 --- a/webkit/fileapi/syncable/sync_operation_result.h +++ b/webkit/fileapi/syncable/sync_operation_result.h @@ -5,20 +5,23 @@ #ifndef WEBKIT_FILEAPI_SYNCABLE_SYNC_OPERATION_RESULT_H_ #define WEBKIT_FILEAPI_SYNCABLE_SYNC_OPERATION_RESULT_H_ +#include "webkit/fileapi/syncable/sync_action.h" + namespace fileapi { +// TODO(kinuko): Deprecate this. enum SyncOperationResult { // Indicates no operation has been made. - SYNC_OPERATION_NONE, + SYNC_OPERATION_NONE = SYNC_ACTION_NONE, // Indicates a new file or directory has been added. - SYNC_OPERATION_ADDED, + SYNC_OPERATION_ADDED = SYNC_ACTION_ADDED, // Indicates an existing file or directory has been updated. - SYNC_OPERATION_UPDATED, + SYNC_OPERATION_UPDATED = SYNC_ACTION_UPDATED, // Indicates a file or directory has been deleted. - SYNC_OPERATION_DELETED, + SYNC_OPERATION_DELETED = SYNC_ACTION_DELETED, // Indicates a file or directory has conflicting changes. SYNC_OPERATION_CONFLICTED, diff --git a/webkit/fileapi/webkit_fileapi.gypi b/webkit/fileapi/webkit_fileapi.gypi index 471f415..41e5305 100644 --- a/webkit/fileapi/webkit_fileapi.gypi +++ b/webkit/fileapi/webkit_fileapi.gypi @@ -107,6 +107,7 @@ '../fileapi/syncable/sync_file_status.h', '../fileapi/syncable/sync_file_type.h', '../fileapi/syncable/sync_operation_result.h', + '../fileapi/syncable/sync_action.h', '../fileapi/syncable/sync_status_code.cc', '../fileapi/syncable/sync_status_code.h', '../fileapi/syncable/syncable_file_operation_runner.cc', -- cgit v1.1