Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(32)

Side by Side Diff: chrome/browser/sync_file_system/local/local_file_sync_context.h

Issue 23578026: Use SNAPSHOT sync mode for LocalSync (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased on thread_bundle fix Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 15 matching lines...) Expand all
26 26
27 namespace base { 27 namespace base {
28 class SingleThreadTaskRunner; 28 class SingleThreadTaskRunner;
29 } 29 }
30 30
31 namespace fileapi { 31 namespace fileapi {
32 class FileSystemContext; 32 class FileSystemContext;
33 class FileSystemURL; 33 class FileSystemURL;
34 } 34 }
35 35
36 namespace webkit_blob {
37 class ScopedFile;
38 }
39
36 namespace sync_file_system { 40 namespace sync_file_system {
37 41
38 class FileChange; 42 class FileChange;
39 class LocalFileChangeTracker; 43 class LocalFileChangeTracker;
40 struct LocalFileSyncInfo; 44 struct LocalFileSyncInfo;
41 class LocalOriginChangeObserver; 45 class LocalOriginChangeObserver;
42 class SyncableFileOperationRunner; 46 class SyncableFileOperationRunner;
43 47
44 // This class works as a bridge between LocalFileSyncService (which is a 48 // This class works as a bridge between LocalFileSyncService (which is a
45 // per-profile object) and FileSystemContext's (which is a per-storage-partition 49 // per-profile object) and FileSystemContext's (which is a per-storage-partition
46 // object and may exist multiple in a profile). 50 // object and may exist multiple in a profile).
47 // An instance of this class is shared by FileSystemContexts and outlives 51 // An instance of this class is shared by FileSystemContexts and outlives
48 // LocalFileSyncService. 52 // LocalFileSyncService.
49 class LocalFileSyncContext 53 class LocalFileSyncContext
50 : public base::RefCountedThreadSafe<LocalFileSyncContext>, 54 : public base::RefCountedThreadSafe<LocalFileSyncContext>,
51 public LocalFileSyncStatus::Observer { 55 public LocalFileSyncStatus::Observer {
52 public: 56 public:
53 enum SyncMode { 57 enum SyncMode {
54 SYNC_EXCLUSIVE, 58 SYNC_EXCLUSIVE,
55 SYNC_SNAPSHOT, 59 SYNC_SNAPSHOT,
56 }; 60 };
57 61
58 typedef base::Callback<void( 62 typedef base::Callback<void(
59 SyncStatusCode status, const LocalFileSyncInfo& sync_file_info)> 63 SyncStatusCode status,
64 const LocalFileSyncInfo& sync_file_info,
65 scoped_ptr<webkit_blob::ScopedFile> snapshot)>
60 LocalFileSyncInfoCallback; 66 LocalFileSyncInfoCallback;
61 67
62 typedef base::Callback<void(SyncStatusCode status, 68 typedef base::Callback<void(SyncStatusCode status,
63 bool has_pending_changes)> 69 bool has_pending_changes)>
64 HasPendingLocalChangeCallback; 70 HasPendingLocalChangeCallback;
65 71
66 LocalFileSyncContext(base::SingleThreadTaskRunner* ui_task_runner, 72 LocalFileSyncContext(const base::FilePath& base_path,
73 base::SingleThreadTaskRunner* ui_task_runner,
67 base::SingleThreadTaskRunner* io_task_runner); 74 base::SingleThreadTaskRunner* io_task_runner);
68 75
69 // Initializes |file_system_context| for syncable file operations 76 // Initializes |file_system_context| for syncable file operations
70 // and registers the it into the internal map. 77 // and registers the it into the internal map.
71 // Calling this multiple times for the same file_system_context is valid. 78 // Calling this multiple times for the same file_system_context is valid.
72 // This method must be called on UI thread. 79 // This method must be called on UI thread.
73 void MaybeInitializeFileSystemContext( 80 void MaybeInitializeFileSystemContext(
74 const GURL& source_url, 81 const GURL& source_url,
75 fileapi::FileSystemContext* file_system_context, 82 fileapi::FileSystemContext* file_system_context,
76 const SyncStatusCallback& callback); 83 const SyncStatusCallback& callback);
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 std::deque<fileapi::FileSystemURL>* urls); 237 std::deque<fileapi::FileSystemURL>* urls);
231 void TryPrepareForLocalSync( 238 void TryPrepareForLocalSync(
232 fileapi::FileSystemContext* file_system_context, 239 fileapi::FileSystemContext* file_system_context,
233 std::deque<fileapi::FileSystemURL>* urls, 240 std::deque<fileapi::FileSystemURL>* urls,
234 const LocalFileSyncInfoCallback& callback); 241 const LocalFileSyncInfoCallback& callback);
235 void DidTryPrepareForLocalSync( 242 void DidTryPrepareForLocalSync(
236 fileapi::FileSystemContext* file_system_context, 243 fileapi::FileSystemContext* file_system_context,
237 std::deque<fileapi::FileSystemURL>* remaining_urls, 244 std::deque<fileapi::FileSystemURL>* remaining_urls,
238 const LocalFileSyncInfoCallback& callback, 245 const LocalFileSyncInfoCallback& callback,
239 SyncStatusCode status, 246 SyncStatusCode status,
240 const LocalFileSyncInfo& sync_file_info); 247 const LocalFileSyncInfo& sync_file_info,
248 scoped_ptr<webkit_blob::ScopedFile> snapshot);
241 249
242 // Callback routine for PrepareForSync and GetFileForLocalSync. 250 // Callback routine for PrepareForSync and GetFileForLocalSync.
243 void DidGetWritingStatusForSync( 251 void DidGetWritingStatusForSync(
244 fileapi::FileSystemContext* file_system_context, 252 fileapi::FileSystemContext* file_system_context,
245 SyncStatusCode status, 253 SyncStatusCode status,
246 const fileapi::FileSystemURL& url, 254 const fileapi::FileSystemURL& url,
247 SyncMode sync_mode, 255 SyncMode sync_mode,
248 const LocalFileSyncInfoCallback& callback); 256 const LocalFileSyncInfoCallback& callback);
249 257
250 // Helper routine for ClearSyncFlagForURL. 258 // Helper routine for sync/writing flag handling, primarily for
251 void EnableWritingOnIOThread(const fileapi::FileSystemURL& url, 259 // ClearSyncFlagForURL but is also called by other internal routines.
252 bool may_have_updates); 260 // If |keep_url_in_writing| is true this increments the writing counter
261 // for |url| (after clearing syncing flag), so that the caller can
262 // continue to hold a shared lock on the URL.
263 // (The counter must be manually decremented by EndWritingOnIOThread
264 // if that's the case)
265 void ClearSyncFlagOnIOThread(const fileapi::FileSystemURL& url,
266 bool keep_url_in_writing);
267 void EndWritingOnIOThread(const fileapi::FileSystemURL& url);
253 268
254 void DidRemoveExistingEntryForApplyRemoteChange( 269 void DidRemoveExistingEntryForApplyRemoteChange(
255 fileapi::FileSystemContext* file_system_context, 270 fileapi::FileSystemContext* file_system_context,
256 const FileChange& change, 271 const FileChange& change,
257 const base::FilePath& local_path, 272 const base::FilePath& local_path,
258 const fileapi::FileSystemURL& url, 273 const fileapi::FileSystemURL& url,
259 const SyncStatusCallback& callback, 274 const SyncStatusCallback& callback,
260 base::PlatformFileError error); 275 base::PlatformFileError error);
261 276
262 // Callback routine for ApplyRemoteChange. 277 // Callback routine for ApplyRemoteChange.
263 void DidApplyRemoteChange( 278 void DidApplyRemoteChange(
264 const fileapi::FileSystemURL& url, 279 const fileapi::FileSystemURL& url,
265 const SyncStatusCallback& callback_on_ui, 280 const SyncStatusCallback& callback_on_ui,
266 base::PlatformFileError file_error); 281 base::PlatformFileError file_error);
267 282
268 void DidGetFileMetadata( 283 void DidGetFileMetadata(
269 const SyncFileMetadataCallback& callback, 284 const SyncFileMetadataCallback& callback,
270 base::PlatformFileError file_error, 285 base::PlatformFileError file_error,
271 const base::PlatformFileInfo& file_info); 286 const base::PlatformFileInfo& file_info);
272 287
273 base::TimeDelta NotifyChangesDuration(); 288 base::TimeDelta NotifyChangesDuration();
274 289
275 void DidCreateDirectoryForCopyIn( 290 void DidCreateDirectoryForCopyIn(
276 fileapi::FileSystemContext* file_system_context, 291 fileapi::FileSystemContext* file_system_context,
277 const base::FilePath& local_file_path, 292 const base::FilePath& local_file_path,
278 const fileapi::FileSystemURL& dest_url, 293 const fileapi::FileSystemURL& dest_url,
279 const StatusCallback& callback, 294 const StatusCallback& callback,
280 base::PlatformFileError error); 295 base::PlatformFileError error);
281 296
297 const base::FilePath local_base_path_;
298
282 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_; 299 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_;
283 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_; 300 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_;
284 301
285 // Indicates if the sync service is shutdown on UI thread. 302 // Indicates if the sync service is shutdown on UI thread.
286 bool shutdown_on_ui_; 303 bool shutdown_on_ui_;
287 304
288 // OperationRunner. This must be accessed only on IO thread. 305 // OperationRunner. This must be accessed only on IO thread.
289 scoped_ptr<SyncableFileOperationRunner> operation_runner_; 306 scoped_ptr<SyncableFileOperationRunner> operation_runner_;
290 307
291 // Keeps track of writing/syncing status. 308 // Keeps track of writing/syncing status.
(...skipping 22 matching lines...) Expand all
314 ObserverList<LocalOriginChangeObserver> origin_change_observers_; 331 ObserverList<LocalOriginChangeObserver> origin_change_observers_;
315 332
316 int mock_notify_changes_duration_in_sec_; 333 int mock_notify_changes_duration_in_sec_;
317 334
318 DISALLOW_COPY_AND_ASSIGN(LocalFileSyncContext); 335 DISALLOW_COPY_AND_ASSIGN(LocalFileSyncContext);
319 }; 336 };
320 337
321 } // namespace sync_file_system 338 } // namespace sync_file_system
322 339
323 #endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_LOCAL_LOCAL_FILE_SYNC_CONTEXT_H_ 340 #endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_LOCAL_LOCAL_FILE_SYNC_CONTEXT_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698