| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_LOCAL_LOCAL_FILE_SYNC_CONTEXT_H_ | 5 #ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_LOCAL_LOCAL_FILE_SYNC_CONTEXT_H_ |
| 6 #define CHROME_BROWSER_SYNC_FILE_SYSTEM_LOCAL_LOCAL_FILE_SYNC_CONTEXT_H_ | 6 #define CHROME_BROWSER_SYNC_FILE_SYSTEM_LOCAL_LOCAL_FILE_SYNC_CONTEXT_H_ |
| 7 | 7 |
| 8 #include <deque> | 8 #include <deque> |
| 9 #include <map> | 9 #include <map> |
| 10 #include <set> | 10 #include <set> |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 #include "base/timer/timer.h" | 22 #include "base/timer/timer.h" |
| 23 #include "chrome/browser/sync_file_system/local/local_file_sync_status.h" | 23 #include "chrome/browser/sync_file_system/local/local_file_sync_status.h" |
| 24 #include "chrome/browser/sync_file_system/sync_callbacks.h" | 24 #include "chrome/browser/sync_file_system/sync_callbacks.h" |
| 25 #include "chrome/browser/sync_file_system/sync_status_code.h" | 25 #include "chrome/browser/sync_file_system/sync_status_code.h" |
| 26 #include "url/gurl.h" | 26 #include "url/gurl.h" |
| 27 | 27 |
| 28 namespace base { | 28 namespace base { |
| 29 class SingleThreadTaskRunner; | 29 class SingleThreadTaskRunner; |
| 30 } | 30 } |
| 31 | 31 |
| 32 namespace fileapi { | 32 namespace storage { |
| 33 class FileSystemContext; | 33 class FileSystemContext; |
| 34 class FileSystemURL; | 34 class FileSystemURL; |
| 35 } | 35 } |
| 36 | 36 |
| 37 namespace leveldb { | 37 namespace leveldb { |
| 38 class Env; | 38 class Env; |
| 39 } | 39 } |
| 40 | 40 |
| 41 namespace webkit_blob { | 41 namespace storage { |
| 42 class ScopedFile; | 42 class ScopedFile; |
| 43 } | 43 } |
| 44 | 44 |
| 45 namespace sync_file_system { | 45 namespace sync_file_system { |
| 46 | 46 |
| 47 class FileChange; | 47 class FileChange; |
| 48 class LocalFileChangeTracker; | 48 class LocalFileChangeTracker; |
| 49 struct LocalFileSyncInfo; | 49 struct LocalFileSyncInfo; |
| 50 class LocalOriginChangeObserver; | 50 class LocalOriginChangeObserver; |
| 51 class RootDeleteHelper; | 51 class RootDeleteHelper; |
| 52 class SyncableFileOperationRunner; | 52 class SyncableFileOperationRunner; |
| 53 | 53 |
| 54 // This class works as a bridge between LocalFileSyncService (which is a | 54 // This class works as a bridge between LocalFileSyncService (which is a |
| 55 // per-profile object) and FileSystemContext's (which is a per-storage-partition | 55 // per-profile object) and FileSystemContext's (which is a per-storage-partition |
| 56 // object and may exist multiple in a profile). | 56 // object and may exist multiple in a profile). |
| 57 // An instance of this class is shared by FileSystemContexts and outlives | 57 // An instance of this class is shared by FileSystemContexts and outlives |
| 58 // LocalFileSyncService. | 58 // LocalFileSyncService. |
| 59 class LocalFileSyncContext | 59 class LocalFileSyncContext |
| 60 : public base::RefCountedThreadSafe<LocalFileSyncContext>, | 60 : public base::RefCountedThreadSafe<LocalFileSyncContext>, |
| 61 public LocalFileSyncStatus::Observer { | 61 public LocalFileSyncStatus::Observer { |
| 62 public: | 62 public: |
| 63 enum SyncMode { | 63 enum SyncMode { |
| 64 SYNC_EXCLUSIVE, | 64 SYNC_EXCLUSIVE, |
| 65 SYNC_SNAPSHOT, | 65 SYNC_SNAPSHOT, |
| 66 }; | 66 }; |
| 67 | 67 |
| 68 typedef base::Callback<void( | 68 typedef base::Callback<void(SyncStatusCode status, |
| 69 SyncStatusCode status, | 69 const LocalFileSyncInfo& sync_file_info, |
| 70 const LocalFileSyncInfo& sync_file_info, | 70 storage::ScopedFile snapshot)> |
| 71 webkit_blob::ScopedFile snapshot)> | 71 LocalFileSyncInfoCallback; |
| 72 LocalFileSyncInfoCallback; | |
| 73 | 72 |
| 74 typedef base::Callback<void(SyncStatusCode status, | 73 typedef base::Callback<void(SyncStatusCode status, |
| 75 bool has_pending_changes)> | 74 bool has_pending_changes)> |
| 76 HasPendingLocalChangeCallback; | 75 HasPendingLocalChangeCallback; |
| 77 | 76 |
| 78 LocalFileSyncContext(const base::FilePath& base_path, | 77 LocalFileSyncContext(const base::FilePath& base_path, |
| 79 leveldb::Env* env_override, | 78 leveldb::Env* env_override, |
| 80 base::SingleThreadTaskRunner* ui_task_runner, | 79 base::SingleThreadTaskRunner* ui_task_runner, |
| 81 base::SingleThreadTaskRunner* io_task_runner); | 80 base::SingleThreadTaskRunner* io_task_runner); |
| 82 | 81 |
| 83 // Initializes |file_system_context| for syncable file operations | 82 // Initializes |file_system_context| for syncable file operations |
| 84 // and registers the it into the internal map. | 83 // and registers the it into the internal map. |
| 85 // Calling this multiple times for the same file_system_context is valid. | 84 // Calling this multiple times for the same file_system_context is valid. |
| 86 // This method must be called on UI thread. | 85 // This method must be called on UI thread. |
| 87 void MaybeInitializeFileSystemContext( | 86 void MaybeInitializeFileSystemContext( |
| 88 const GURL& source_url, | 87 const GURL& source_url, |
| 89 fileapi::FileSystemContext* file_system_context, | 88 storage::FileSystemContext* file_system_context, |
| 90 const SyncStatusCallback& callback); | 89 const SyncStatusCallback& callback); |
| 91 | 90 |
| 92 // Called when the corresponding LocalFileSyncService exits. | 91 // Called when the corresponding LocalFileSyncService exits. |
| 93 // This method must be called on UI thread. | 92 // This method must be called on UI thread. |
| 94 void ShutdownOnUIThread(); | 93 void ShutdownOnUIThread(); |
| 95 | 94 |
| 96 // Picks a file for next local sync and returns it after disabling writes | 95 // Picks a file for next local sync and returns it after disabling writes |
| 97 // for the file. | 96 // for the file. |
| 98 // This method must be called on UI thread. | 97 // This method must be called on UI thread. |
| 99 void GetFileForLocalSync(fileapi::FileSystemContext* file_system_context, | 98 void GetFileForLocalSync(storage::FileSystemContext* file_system_context, |
| 100 const LocalFileSyncInfoCallback& callback); | 99 const LocalFileSyncInfoCallback& callback); |
| 101 | 100 |
| 102 // TODO(kinuko): Make this private. | 101 // TODO(kinuko): Make this private. |
| 103 // Clears all pending local changes for |url|. |done_callback| is called | 102 // Clears all pending local changes for |url|. |done_callback| is called |
| 104 // when the changes are cleared. | 103 // when the changes are cleared. |
| 105 // This method must be called on UI thread. | 104 // This method must be called on UI thread. |
| 106 void ClearChangesForURL(fileapi::FileSystemContext* file_system_context, | 105 void ClearChangesForURL(storage::FileSystemContext* file_system_context, |
| 107 const fileapi::FileSystemURL& url, | 106 const storage::FileSystemURL& url, |
| 108 const base::Closure& done_callback); | 107 const base::Closure& done_callback); |
| 109 | 108 |
| 110 // Finalizes SnapshotSync, which must have been started by | 109 // Finalizes SnapshotSync, which must have been started by |
| 111 // PrepareForSync with SYNC_SNAPSHOT. | 110 // PrepareForSync with SYNC_SNAPSHOT. |
| 112 // Updates the on-disk dirty flag for |url| in the tracker DB. | 111 // Updates the on-disk dirty flag for |url| in the tracker DB. |
| 113 // This will clear the dirty flag if |sync_finish_status| is SYNC_STATUS_OK | 112 // This will clear the dirty flag if |sync_finish_status| is SYNC_STATUS_OK |
| 114 // or SYNC_STATUS_HAS_CONFLICT. | 113 // or SYNC_STATUS_HAS_CONFLICT. |
| 115 // |done_callback| is called when the changes are committed. | 114 // |done_callback| is called when the changes are committed. |
| 116 void FinalizeSnapshotSync( | 115 void FinalizeSnapshotSync(storage::FileSystemContext* file_system_context, |
| 117 fileapi::FileSystemContext* file_system_context, | 116 const storage::FileSystemURL& url, |
| 118 const fileapi::FileSystemURL& url, | 117 SyncStatusCode sync_finish_status, |
| 119 SyncStatusCode sync_finish_status, | 118 const base::Closure& done_callback); |
| 120 const base::Closure& done_callback); | |
| 121 | 119 |
| 122 // Finalizes ExclusiveSync, which must have been started by | 120 // Finalizes ExclusiveSync, which must have been started by |
| 123 // PrepareForSync with SYNC_EXCLUSIVE. | 121 // PrepareForSync with SYNC_EXCLUSIVE. |
| 124 void FinalizeExclusiveSync( | 122 void FinalizeExclusiveSync(storage::FileSystemContext* file_system_context, |
| 125 fileapi::FileSystemContext* file_system_context, | 123 const storage::FileSystemURL& url, |
| 126 const fileapi::FileSystemURL& url, | 124 bool clear_local_changes, |
| 127 bool clear_local_changes, | 125 const base::Closure& done_callback); |
| 128 const base::Closure& done_callback); | |
| 129 | 126 |
| 130 // Prepares for sync |url| by disabling writes on |url|. | 127 // Prepares for sync |url| by disabling writes on |url|. |
| 131 // If the target |url| is being written and cannot start sync it | 128 // If the target |url| is being written and cannot start sync it |
| 132 // returns SYNC_STATUS_WRITING status code via |callback|. | 129 // returns SYNC_STATUS_WRITING status code via |callback|. |
| 133 // Otherwise returns the current change sets made on |url|. | 130 // Otherwise returns the current change sets made on |url|. |
| 134 // | 131 // |
| 135 // If |sync_mode| is SYNC_EXCLUSIVE this leaves the target file locked. | 132 // If |sync_mode| is SYNC_EXCLUSIVE this leaves the target file locked. |
| 136 // If |sync_mode| is SYNC_SNAPSHOT this creates a snapshot (if the | 133 // If |sync_mode| is SYNC_SNAPSHOT this creates a snapshot (if the |
| 137 // target file is not deleted) and unlocks the file before returning. | 134 // target file is not deleted) and unlocks the file before returning. |
| 138 // | 135 // |
| 139 // For SYNC_EXCLUSIVE, caller must call FinalizeExclusiveSync() to finalize | 136 // For SYNC_EXCLUSIVE, caller must call FinalizeExclusiveSync() to finalize |
| 140 // sync and unlock the file. | 137 // sync and unlock the file. |
| 141 // For SYNC_SNAPSHOT, caller must call FinalizeSnapshotSync() to finalize | 138 // For SYNC_SNAPSHOT, caller must call FinalizeSnapshotSync() to finalize |
| 142 // sync to reset the mirrored change status and decrement writing count. | 139 // sync to reset the mirrored change status and decrement writing count. |
| 143 // | 140 // |
| 144 // This method must be called on UI thread. | 141 // This method must be called on UI thread. |
| 145 void PrepareForSync(fileapi::FileSystemContext* file_system_context, | 142 void PrepareForSync(storage::FileSystemContext* file_system_context, |
| 146 const fileapi::FileSystemURL& url, | 143 const storage::FileSystemURL& url, |
| 147 SyncMode sync_mode, | 144 SyncMode sync_mode, |
| 148 const LocalFileSyncInfoCallback& callback); | 145 const LocalFileSyncInfoCallback& callback); |
| 149 | 146 |
| 150 // Registers |url| to wait until sync is enabled for |url|. | 147 // Registers |url| to wait until sync is enabled for |url|. |
| 151 // |on_syncable_callback| is to be called when |url| becomes syncable | 148 // |on_syncable_callback| is to be called when |url| becomes syncable |
| 152 // (i.e. when we have no pending writes and the file is successfully locked | 149 // (i.e. when we have no pending writes and the file is successfully locked |
| 153 // for sync). | 150 // for sync). |
| 154 // | 151 // |
| 155 // Calling this method again while this already has another URL waiting | 152 // Calling this method again while this already has another URL waiting |
| 156 // for sync will overwrite the previously registered URL. | 153 // for sync will overwrite the previously registered URL. |
| 157 // | 154 // |
| 158 // This method must be called on UI thread. | 155 // This method must be called on UI thread. |
| 159 void RegisterURLForWaitingSync(const fileapi::FileSystemURL& url, | 156 void RegisterURLForWaitingSync(const storage::FileSystemURL& url, |
| 160 const base::Closure& on_syncable_callback); | 157 const base::Closure& on_syncable_callback); |
| 161 | 158 |
| 162 // Applies a remote change. | 159 // Applies a remote change. |
| 163 // This method must be called on UI thread. | 160 // This method must be called on UI thread. |
| 164 void ApplyRemoteChange( | 161 void ApplyRemoteChange(storage::FileSystemContext* file_system_context, |
| 165 fileapi::FileSystemContext* file_system_context, | 162 const FileChange& change, |
| 166 const FileChange& change, | 163 const base::FilePath& local_path, |
| 167 const base::FilePath& local_path, | 164 const storage::FileSystemURL& url, |
| 168 const fileapi::FileSystemURL& url, | 165 const SyncStatusCallback& callback); |
| 169 const SyncStatusCallback& callback); | |
| 170 | 166 |
| 171 // Records a fake local change in the local change tracker. | 167 // Records a fake local change in the local change tracker. |
| 172 void RecordFakeLocalChange( | 168 void RecordFakeLocalChange(storage::FileSystemContext* file_system_context, |
| 173 fileapi::FileSystemContext* file_system_context, | 169 const storage::FileSystemURL& url, |
| 174 const fileapi::FileSystemURL& url, | 170 const FileChange& change, |
| 175 const FileChange& change, | 171 const SyncStatusCallback& callback); |
| 176 const SyncStatusCallback& callback); | |
| 177 | 172 |
| 178 // This must be called on UI thread. | 173 // This must be called on UI thread. |
| 179 void GetFileMetadata( | 174 void GetFileMetadata(storage::FileSystemContext* file_system_context, |
| 180 fileapi::FileSystemContext* file_system_context, | 175 const storage::FileSystemURL& url, |
| 181 const fileapi::FileSystemURL& url, | 176 const SyncFileMetadataCallback& callback); |
| 182 const SyncFileMetadataCallback& callback); | |
| 183 | 177 |
| 184 // Returns true via |callback| if the given file |url| has local pending | 178 // Returns true via |callback| if the given file |url| has local pending |
| 185 // changes. | 179 // changes. |
| 186 void HasPendingLocalChanges( | 180 void HasPendingLocalChanges(storage::FileSystemContext* file_system_context, |
| 187 fileapi::FileSystemContext* file_system_context, | 181 const storage::FileSystemURL& url, |
| 188 const fileapi::FileSystemURL& url, | 182 const HasPendingLocalChangeCallback& callback); |
| 189 const HasPendingLocalChangeCallback& callback); | |
| 190 | 183 |
| 191 void PromoteDemotedChanges(const GURL& origin, | 184 void PromoteDemotedChanges(const GURL& origin, |
| 192 fileapi::FileSystemContext* file_system_context, | 185 storage::FileSystemContext* file_system_context, |
| 193 const base::Closure& callback); | 186 const base::Closure& callback); |
| 194 void UpdateChangesForOrigin(const GURL& origin, | 187 void UpdateChangesForOrigin(const GURL& origin, |
| 195 const base::Closure& callback); | 188 const base::Closure& callback); |
| 196 | 189 |
| 197 // They must be called on UI thread. | 190 // They must be called on UI thread. |
| 198 void AddOriginChangeObserver(LocalOriginChangeObserver* observer); | 191 void AddOriginChangeObserver(LocalOriginChangeObserver* observer); |
| 199 void RemoveOriginChangeObserver(LocalOriginChangeObserver* observer); | 192 void RemoveOriginChangeObserver(LocalOriginChangeObserver* observer); |
| 200 | 193 |
| 201 // OperationRunner is accessible only on IO thread. | 194 // OperationRunner is accessible only on IO thread. |
| 202 base::WeakPtr<SyncableFileOperationRunner> operation_runner() const; | 195 base::WeakPtr<SyncableFileOperationRunner> operation_runner() const; |
| 203 | 196 |
| 204 // SyncContext is accessible only on IO thread. | 197 // SyncContext is accessible only on IO thread. |
| 205 LocalFileSyncStatus* sync_status() const; | 198 LocalFileSyncStatus* sync_status() const; |
| 206 | 199 |
| 207 // For testing; override the duration to notify changes from the | 200 // For testing; override the duration to notify changes from the |
| 208 // default value. | 201 // default value. |
| 209 void set_mock_notify_changes_duration_in_sec(int duration) { | 202 void set_mock_notify_changes_duration_in_sec(int duration) { |
| 210 mock_notify_changes_duration_in_sec_ = duration; | 203 mock_notify_changes_duration_in_sec_ = duration; |
| 211 } | 204 } |
| 212 | 205 |
| 213 protected: | 206 protected: |
| 214 // LocalFileSyncStatus::Observer overrides. They are called on IO thread. | 207 // LocalFileSyncStatus::Observer overrides. They are called on IO thread. |
| 215 virtual void OnSyncEnabled(const fileapi::FileSystemURL& url) OVERRIDE; | 208 virtual void OnSyncEnabled(const storage::FileSystemURL& url) OVERRIDE; |
| 216 virtual void OnWriteEnabled(const fileapi::FileSystemURL& url) OVERRIDE; | 209 virtual void OnWriteEnabled(const storage::FileSystemURL& url) OVERRIDE; |
| 217 | 210 |
| 218 private: | 211 private: |
| 219 typedef base::Callback<void(base::File::Error result)> StatusCallback; | 212 typedef base::Callback<void(base::File::Error result)> StatusCallback; |
| 220 typedef std::deque<SyncStatusCallback> StatusCallbackQueue; | 213 typedef std::deque<SyncStatusCallback> StatusCallbackQueue; |
| 221 typedef std::deque<fileapi::FileSystemURL> FileSystemURLQueue; | 214 typedef std::deque<storage::FileSystemURL> FileSystemURLQueue; |
| 222 friend class base::RefCountedThreadSafe<LocalFileSyncContext>; | 215 friend class base::RefCountedThreadSafe<LocalFileSyncContext>; |
| 223 friend class CannedSyncableFileSystem; | 216 friend class CannedSyncableFileSystem; |
| 224 | 217 |
| 225 virtual ~LocalFileSyncContext(); | 218 virtual ~LocalFileSyncContext(); |
| 226 | 219 |
| 227 void ShutdownOnIOThread(); | 220 void ShutdownOnIOThread(); |
| 228 | 221 |
| 229 // Starts a timer to eventually call NotifyAvailableChangesOnIOThread. | 222 // Starts a timer to eventually call NotifyAvailableChangesOnIOThread. |
| 230 // The caller is expected to update origins_with_pending_changes_ before | 223 // The caller is expected to update origins_with_pending_changes_ before |
| 231 // calling this. | 224 // calling this. |
| 232 void ScheduleNotifyChangesUpdatedOnIOThread(const base::Closure& callback); | 225 void ScheduleNotifyChangesUpdatedOnIOThread(const base::Closure& callback); |
| 233 | 226 |
| 234 // Called by the internal timer on IO thread to notify changes to UI thread. | 227 // Called by the internal timer on IO thread to notify changes to UI thread. |
| 235 void NotifyAvailableChangesOnIOThread(const base::Closure& callback); | 228 void NotifyAvailableChangesOnIOThread(const base::Closure& callback); |
| 236 | 229 |
| 237 // Called from NotifyAvailableChangesOnIOThread. | 230 // Called from NotifyAvailableChangesOnIOThread. |
| 238 void NotifyAvailableChanges(const std::set<GURL>& origins, | 231 void NotifyAvailableChanges(const std::set<GURL>& origins, |
| 239 const base::Closure& callback); | 232 const base::Closure& callback); |
| 240 | 233 |
| 241 // Helper routines for MaybeInitializeFileSystemContext. | 234 // Helper routines for MaybeInitializeFileSystemContext. |
| 242 void InitializeFileSystemContextOnIOThread( | 235 void InitializeFileSystemContextOnIOThread( |
| 243 const GURL& source_url, | 236 const GURL& source_url, |
| 244 fileapi::FileSystemContext* file_system_context, | 237 storage::FileSystemContext* file_system_context, |
| 245 const GURL& /* root */, | 238 const GURL& /* root */, |
| 246 const std::string& /* name */, | 239 const std::string& /* name */, |
| 247 base::File::Error error); | 240 base::File::Error error); |
| 248 SyncStatusCode InitializeChangeTrackerOnFileThread( | 241 SyncStatusCode InitializeChangeTrackerOnFileThread( |
| 249 scoped_ptr<LocalFileChangeTracker>* tracker_ptr, | 242 scoped_ptr<LocalFileChangeTracker>* tracker_ptr, |
| 250 fileapi::FileSystemContext* file_system_context, | 243 storage::FileSystemContext* file_system_context, |
| 251 std::set<GURL>* origins_with_changes); | 244 std::set<GURL>* origins_with_changes); |
| 252 void DidInitializeChangeTrackerOnIOThread( | 245 void DidInitializeChangeTrackerOnIOThread( |
| 253 scoped_ptr<LocalFileChangeTracker>* tracker_ptr, | 246 scoped_ptr<LocalFileChangeTracker>* tracker_ptr, |
| 254 const GURL& source_url, | 247 const GURL& source_url, |
| 255 fileapi::FileSystemContext* file_system_context, | 248 storage::FileSystemContext* file_system_context, |
| 256 std::set<GURL>* origins_with_changes, | 249 std::set<GURL>* origins_with_changes, |
| 257 SyncStatusCode status); | 250 SyncStatusCode status); |
| 258 void DidInitialize( | 251 void DidInitialize(const GURL& source_url, |
| 259 const GURL& source_url, | 252 storage::FileSystemContext* file_system_context, |
| 260 fileapi::FileSystemContext* file_system_context, | 253 SyncStatusCode status); |
| 261 SyncStatusCode status); | |
| 262 | 254 |
| 263 // Helper routines for GetFileForLocalSync. | 255 // Helper routines for GetFileForLocalSync. |
| 264 scoped_ptr<FileSystemURLQueue> GetNextURLsForSyncOnFileThread( | 256 scoped_ptr<FileSystemURLQueue> GetNextURLsForSyncOnFileThread( |
| 265 fileapi::FileSystemContext* file_system_context); | 257 storage::FileSystemContext* file_system_context); |
| 266 void TryPrepareForLocalSync( | 258 void TryPrepareForLocalSync(storage::FileSystemContext* file_system_context, |
| 267 fileapi::FileSystemContext* file_system_context, | 259 const LocalFileSyncInfoCallback& callback, |
| 268 const LocalFileSyncInfoCallback& callback, | 260 scoped_ptr<FileSystemURLQueue> urls); |
| 269 scoped_ptr<FileSystemURLQueue> urls); | |
| 270 void DidTryPrepareForLocalSync( | 261 void DidTryPrepareForLocalSync( |
| 271 fileapi::FileSystemContext* file_system_context, | 262 storage::FileSystemContext* file_system_context, |
| 272 scoped_ptr<FileSystemURLQueue> remaining_urls, | 263 scoped_ptr<FileSystemURLQueue> remaining_urls, |
| 273 const LocalFileSyncInfoCallback& callback, | 264 const LocalFileSyncInfoCallback& callback, |
| 274 SyncStatusCode status, | 265 SyncStatusCode status, |
| 275 const LocalFileSyncInfo& sync_file_info, | 266 const LocalFileSyncInfo& sync_file_info, |
| 276 webkit_blob::ScopedFile snapshot); | 267 storage::ScopedFile snapshot); |
| 277 void PromoteDemotedChangesForURL( | 268 void PromoteDemotedChangesForURL( |
| 278 fileapi::FileSystemContext* file_system_context, | 269 storage::FileSystemContext* file_system_context, |
| 279 const fileapi::FileSystemURL& url); | 270 const storage::FileSystemURL& url); |
| 280 void PromoteDemotedChangesForURLs( | 271 void PromoteDemotedChangesForURLs( |
| 281 fileapi::FileSystemContext* file_system_context, | 272 storage::FileSystemContext* file_system_context, |
| 282 scoped_ptr<FileSystemURLQueue> url); | 273 scoped_ptr<FileSystemURLQueue> url); |
| 283 | 274 |
| 284 // Callback routine for PrepareForSync and GetFileForLocalSync. | 275 // Callback routine for PrepareForSync and GetFileForLocalSync. |
| 285 void DidGetWritingStatusForSync( | 276 void DidGetWritingStatusForSync( |
| 286 fileapi::FileSystemContext* file_system_context, | 277 storage::FileSystemContext* file_system_context, |
| 287 SyncStatusCode status, | 278 SyncStatusCode status, |
| 288 const fileapi::FileSystemURL& url, | 279 const storage::FileSystemURL& url, |
| 289 SyncMode sync_mode, | 280 SyncMode sync_mode, |
| 290 const LocalFileSyncInfoCallback& callback); | 281 const LocalFileSyncInfoCallback& callback); |
| 291 | 282 |
| 292 // Helper routine for sync/writing flag handling. | 283 // Helper routine for sync/writing flag handling. |
| 293 // | 284 // |
| 294 // If |for_snapshot_sync| is true, this increments the writing counter | 285 // If |for_snapshot_sync| is true, this increments the writing counter |
| 295 // for |url| (after clearing syncing flag), so that other sync activities | 286 // for |url| (after clearing syncing flag), so that other sync activities |
| 296 // won't step in while snapshot sync is ongoing. | 287 // won't step in while snapshot sync is ongoing. |
| 297 // In this case FinalizeSnapshotSyncOnIOThread must be called after the | 288 // In this case FinalizeSnapshotSyncOnIOThread must be called after the |
| 298 // snapshot sync is finished to decrement the writing counter. | 289 // snapshot sync is finished to decrement the writing counter. |
| 299 void ClearSyncFlagOnIOThread(const fileapi::FileSystemURL& url, | 290 void ClearSyncFlagOnIOThread(const storage::FileSystemURL& url, |
| 300 bool for_snapshot_sync); | 291 bool for_snapshot_sync); |
| 301 void FinalizeSnapshotSyncOnIOThread(const fileapi::FileSystemURL& url); | 292 void FinalizeSnapshotSyncOnIOThread(const storage::FileSystemURL& url); |
| 302 | 293 |
| 303 void HandleRemoteDelete( | 294 void HandleRemoteDelete(storage::FileSystemContext* file_system_context, |
| 304 fileapi::FileSystemContext* file_system_context, | 295 const storage::FileSystemURL& url, |
| 305 const fileapi::FileSystemURL& url, | 296 const SyncStatusCallback& callback); |
| 306 const SyncStatusCallback& callback); | 297 void HandleRemoteAddOrUpdate(storage::FileSystemContext* file_system_context, |
| 307 void HandleRemoteAddOrUpdate( | 298 const FileChange& change, |
| 308 fileapi::FileSystemContext* file_system_context, | 299 const base::FilePath& local_path, |
| 300 const storage::FileSystemURL& url, |
| 301 const SyncStatusCallback& callback); |
| 302 void DidRemoveExistingEntryForRemoteAddOrUpdate( |
| 303 storage::FileSystemContext* file_system_context, |
| 309 const FileChange& change, | 304 const FileChange& change, |
| 310 const base::FilePath& local_path, | 305 const base::FilePath& local_path, |
| 311 const fileapi::FileSystemURL& url, | 306 const storage::FileSystemURL& url, |
| 312 const SyncStatusCallback& callback); | |
| 313 void DidRemoveExistingEntryForRemoteAddOrUpdate( | |
| 314 fileapi::FileSystemContext* file_system_context, | |
| 315 const FileChange& change, | |
| 316 const base::FilePath& local_path, | |
| 317 const fileapi::FileSystemURL& url, | |
| 318 const SyncStatusCallback& callback, | 307 const SyncStatusCallback& callback, |
| 319 base::File::Error error); | 308 base::File::Error error); |
| 320 | 309 |
| 321 // Callback routine for ApplyRemoteChange. | 310 // Callback routine for ApplyRemoteChange. |
| 322 void DidApplyRemoteChange( | 311 void DidApplyRemoteChange(const storage::FileSystemURL& url, |
| 323 const fileapi::FileSystemURL& url, | 312 const SyncStatusCallback& callback_on_ui, |
| 324 const SyncStatusCallback& callback_on_ui, | 313 base::File::Error file_error); |
| 325 base::File::Error file_error); | |
| 326 | 314 |
| 327 void DidGetFileMetadata( | 315 void DidGetFileMetadata( |
| 328 const SyncFileMetadataCallback& callback, | 316 const SyncFileMetadataCallback& callback, |
| 329 base::File::Error file_error, | 317 base::File::Error file_error, |
| 330 const base::File::Info& file_info); | 318 const base::File::Info& file_info); |
| 331 | 319 |
| 332 base::TimeDelta NotifyChangesDuration(); | 320 base::TimeDelta NotifyChangesDuration(); |
| 333 | 321 |
| 334 void DidCreateDirectoryForCopyIn( | 322 void DidCreateDirectoryForCopyIn( |
| 335 fileapi::FileSystemContext* file_system_context, | 323 storage::FileSystemContext* file_system_context, |
| 336 const base::FilePath& local_file_path, | 324 const base::FilePath& local_file_path, |
| 337 const fileapi::FileSystemURL& dest_url, | 325 const storage::FileSystemURL& dest_url, |
| 338 const StatusCallback& callback, | 326 const StatusCallback& callback, |
| 339 base::File::Error error); | 327 base::File::Error error); |
| 340 | 328 |
| 341 const base::FilePath local_base_path_; | 329 const base::FilePath local_base_path_; |
| 342 leveldb::Env* env_override_; | 330 leveldb::Env* env_override_; |
| 343 | 331 |
| 344 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_; | 332 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_; |
| 345 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_; | 333 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_; |
| 346 | 334 |
| 347 // Indicates if the sync service is shutdown. | 335 // Indicates if the sync service is shutdown. |
| 348 bool shutdown_on_ui_; // Updated and referred only on UI thread. | 336 bool shutdown_on_ui_; // Updated and referred only on UI thread. |
| 349 bool shutdown_on_io_; // Updated and referred only on IO thread. | 337 bool shutdown_on_io_; // Updated and referred only on IO thread. |
| 350 | 338 |
| 351 // OperationRunner. This must be accessed only on IO thread. | 339 // OperationRunner. This must be accessed only on IO thread. |
| 352 scoped_ptr<SyncableFileOperationRunner> operation_runner_; | 340 scoped_ptr<SyncableFileOperationRunner> operation_runner_; |
| 353 | 341 |
| 354 // Keeps track of writing/syncing status. | 342 // Keeps track of writing/syncing status. |
| 355 // This must be accessed only on IO thread. | 343 // This must be accessed only on IO thread. |
| 356 scoped_ptr<LocalFileSyncStatus> sync_status_; | 344 scoped_ptr<LocalFileSyncStatus> sync_status_; |
| 357 | 345 |
| 358 // Pointers to file system contexts that have been initialized for | 346 // Pointers to file system contexts that have been initialized for |
| 359 // synchronization (i.e. that own this instance). | 347 // synchronization (i.e. that own this instance). |
| 360 // This must be accessed only on UI thread. | 348 // This must be accessed only on UI thread. |
| 361 std::set<fileapi::FileSystemContext*> file_system_contexts_; | 349 std::set<storage::FileSystemContext*> file_system_contexts_; |
| 362 | 350 |
| 363 // Accessed only on UI thread. | 351 // Accessed only on UI thread. |
| 364 std::map<fileapi::FileSystemContext*, StatusCallbackQueue> | 352 std::map<storage::FileSystemContext*, StatusCallbackQueue> |
| 365 pending_initialize_callbacks_; | 353 pending_initialize_callbacks_; |
| 366 | 354 |
| 367 // A URL and associated callback waiting for sync is enabled. | 355 // A URL and associated callback waiting for sync is enabled. |
| 368 // Accessed only on IO thread. | 356 // Accessed only on IO thread. |
| 369 fileapi::FileSystemURL url_waiting_sync_on_io_; | 357 storage::FileSystemURL url_waiting_sync_on_io_; |
| 370 base::Closure url_syncable_callback_; | 358 base::Closure url_syncable_callback_; |
| 371 | 359 |
| 372 // Used only on IO thread for available changes notifications. | 360 // Used only on IO thread for available changes notifications. |
| 373 base::Time last_notified_changes_; | 361 base::Time last_notified_changes_; |
| 374 scoped_ptr<base::OneShotTimer<LocalFileSyncContext> > timer_on_io_; | 362 scoped_ptr<base::OneShotTimer<LocalFileSyncContext> > timer_on_io_; |
| 375 std::set<GURL> origins_with_pending_changes_; | 363 std::set<GURL> origins_with_pending_changes_; |
| 376 | 364 |
| 377 // Populated while root directory deletion is being handled for | 365 // Populated while root directory deletion is being handled for |
| 378 // ApplyRemoteChange(). Modified only on IO thread. | 366 // ApplyRemoteChange(). Modified only on IO thread. |
| 379 scoped_ptr<RootDeleteHelper> root_delete_helper_; | 367 scoped_ptr<RootDeleteHelper> root_delete_helper_; |
| 380 | 368 |
| 381 ObserverList<LocalOriginChangeObserver> origin_change_observers_; | 369 ObserverList<LocalOriginChangeObserver> origin_change_observers_; |
| 382 | 370 |
| 383 int mock_notify_changes_duration_in_sec_; | 371 int mock_notify_changes_duration_in_sec_; |
| 384 | 372 |
| 385 DISALLOW_COPY_AND_ASSIGN(LocalFileSyncContext); | 373 DISALLOW_COPY_AND_ASSIGN(LocalFileSyncContext); |
| 386 }; | 374 }; |
| 387 | 375 |
| 388 } // namespace sync_file_system | 376 } // namespace sync_file_system |
| 389 | 377 |
| 390 #endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_LOCAL_LOCAL_FILE_SYNC_CONTEXT_H_ | 378 #endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_LOCAL_LOCAL_FILE_SYNC_CONTEXT_H_ |
| OLD | NEW |