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

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

Issue 442383002: Move storage-related files from webkit/ to new top-level directory storage/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 4 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_CHANGE_TRACKER_H_ 5 #ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_LOCAL_LOCAL_FILE_CHANGE_TRACKER_H_
6 #define CHROME_BROWSER_SYNC_FILE_SYSTEM_LOCAL_LOCAL_FILE_CHANGE_TRACKER_H_ 6 #define CHROME_BROWSER_SYNC_FILE_SYSTEM_LOCAL_LOCAL_FILE_CHANGE_TRACKER_H_
7 7
8 #include <deque> 8 #include <deque>
9 #include <map> 9 #include <map>
10 #include <string> 10 #include <string>
11 11
12 #include "base/basictypes.h" 12 #include "base/basictypes.h"
13 #include "base/compiler_specific.h" 13 #include "base/compiler_specific.h"
14 #include "base/files/file_path.h" 14 #include "base/files/file_path.h"
15 #include "base/memory/ref_counted.h" 15 #include "base/memory/ref_counted.h"
16 #include "base/memory/scoped_ptr.h" 16 #include "base/memory/scoped_ptr.h"
17 #include "base/synchronization/lock.h" 17 #include "base/synchronization/lock.h"
18 #include "chrome/browser/sync_file_system/file_change.h" 18 #include "chrome/browser/sync_file_system/file_change.h"
19 #include "chrome/browser/sync_file_system/sync_status_code.h" 19 #include "chrome/browser/sync_file_system/sync_status_code.h"
20 #include "webkit/browser/fileapi/file_observers.h" 20 #include "storage/browser/fileapi/file_observers.h"
21 #include "webkit/browser/fileapi/file_system_url.h" 21 #include "storage/browser/fileapi/file_system_url.h"
22 22
23 namespace base { 23 namespace base {
24 class SequencedTaskRunner; 24 class SequencedTaskRunner;
25 } 25 }
26 26
27 namespace fileapi { 27 namespace storage {
28 class FileSystemContext; 28 class FileSystemContext;
29 class FileSystemURL; 29 class FileSystemURL;
30 } 30 }
31 31
32 namespace leveldb { 32 namespace leveldb {
33 class Env; 33 class Env;
34 class WriteBatch; 34 class WriteBatch;
35 } 35 }
36 36
37 namespace sync_file_system { 37 namespace sync_file_system {
38 38
39 // Tracks local file changes for cloud-backed file systems. 39 // Tracks local file changes for cloud-backed file systems.
40 // All methods must be called on the file_task_runner given to the constructor. 40 // All methods must be called on the file_task_runner given to the constructor.
41 // Owned by FileSystemContext. 41 // Owned by FileSystemContext.
42 class LocalFileChangeTracker 42 class LocalFileChangeTracker : public storage::FileUpdateObserver,
43 : public fileapi::FileUpdateObserver, 43 public storage::FileChangeObserver {
44 public fileapi::FileChangeObserver {
45 public: 44 public:
46 // |file_task_runner| must be the one where the observee file operations run. 45 // |file_task_runner| must be the one where the observee file operations run.
47 // (So that we can make sure DB operations are done before actual update 46 // (So that we can make sure DB operations are done before actual update
48 // happens) 47 // happens)
49 LocalFileChangeTracker(const base::FilePath& base_path, 48 LocalFileChangeTracker(const base::FilePath& base_path,
50 leveldb::Env* env_override, 49 leveldb::Env* env_override,
51 base::SequencedTaskRunner* file_task_runner); 50 base::SequencedTaskRunner* file_task_runner);
52 virtual ~LocalFileChangeTracker(); 51 virtual ~LocalFileChangeTracker();
53 52
54 // FileUpdateObserver overrides. 53 // FileUpdateObserver overrides.
55 virtual void OnStartUpdate(const fileapi::FileSystemURL& url) OVERRIDE; 54 virtual void OnStartUpdate(const storage::FileSystemURL& url) OVERRIDE;
56 virtual void OnUpdate( 55 virtual void OnUpdate(const storage::FileSystemURL& url,
57 const fileapi::FileSystemURL& url, int64 delta) OVERRIDE {} 56 int64 delta) OVERRIDE {}
58 virtual void OnEndUpdate(const fileapi::FileSystemURL& url) OVERRIDE; 57 virtual void OnEndUpdate(const storage::FileSystemURL& url) OVERRIDE;
59 58
60 // FileChangeObserver overrides. 59 // FileChangeObserver overrides.
61 virtual void OnCreateFile(const fileapi::FileSystemURL& url) OVERRIDE; 60 virtual void OnCreateFile(const storage::FileSystemURL& url) OVERRIDE;
62 virtual void OnCreateFileFrom(const fileapi::FileSystemURL& url, 61 virtual void OnCreateFileFrom(const storage::FileSystemURL& url,
63 const fileapi::FileSystemURL& src) OVERRIDE; 62 const storage::FileSystemURL& src) OVERRIDE;
64 virtual void OnRemoveFile(const fileapi::FileSystemURL& url) OVERRIDE; 63 virtual void OnRemoveFile(const storage::FileSystemURL& url) OVERRIDE;
65 virtual void OnModifyFile(const fileapi::FileSystemURL& url) OVERRIDE; 64 virtual void OnModifyFile(const storage::FileSystemURL& url) OVERRIDE;
66 virtual void OnCreateDirectory(const fileapi::FileSystemURL& url) OVERRIDE; 65 virtual void OnCreateDirectory(const storage::FileSystemURL& url) OVERRIDE;
67 virtual void OnRemoveDirectory(const fileapi::FileSystemURL& url) OVERRIDE; 66 virtual void OnRemoveDirectory(const storage::FileSystemURL& url) OVERRIDE;
68 67
69 // Retrieves an array of |url| which have more than one pending changes. 68 // Retrieves an array of |url| which have more than one pending changes.
70 // If |max_urls| is non-zero (recommended in production code) this 69 // If |max_urls| is non-zero (recommended in production code) this
71 // returns URLs up to the number from the ones that have smallest 70 // returns URLs up to the number from the ones that have smallest
72 // change_seq numbers (i.e. older changes). 71 // change_seq numbers (i.e. older changes).
73 void GetNextChangedURLs(std::deque<fileapi::FileSystemURL>* urls, 72 void GetNextChangedURLs(std::deque<storage::FileSystemURL>* urls,
74 int max_urls); 73 int max_urls);
75 74
76 // Returns all changes recorded for the given |url|. 75 // Returns all changes recorded for the given |url|.
77 // Note that this also returns demoted changes. 76 // Note that this also returns demoted changes.
78 // This should be called after writing is disabled. 77 // This should be called after writing is disabled.
79 void GetChangesForURL(const fileapi::FileSystemURL& url, 78 void GetChangesForURL(const storage::FileSystemURL& url,
80 FileChangeList* changes); 79 FileChangeList* changes);
81 80
82 // Clears the pending changes recorded in this tracker for |url|. 81 // Clears the pending changes recorded in this tracker for |url|.
83 void ClearChangesForURL(const fileapi::FileSystemURL& url); 82 void ClearChangesForURL(const storage::FileSystemURL& url);
84 83
85 // Creates a fresh (empty) in-memory record for |url|. 84 // Creates a fresh (empty) in-memory record for |url|.
86 // Note that new changes are recorded to the mirror too. 85 // Note that new changes are recorded to the mirror too.
87 void CreateFreshMirrorForURL(const fileapi::FileSystemURL& url); 86 void CreateFreshMirrorForURL(const storage::FileSystemURL& url);
88 87
89 // Removes a mirror for |url|, and commits the change status to database. 88 // Removes a mirror for |url|, and commits the change status to database.
90 void RemoveMirrorAndCommitChangesForURL(const fileapi::FileSystemURL& url); 89 void RemoveMirrorAndCommitChangesForURL(const storage::FileSystemURL& url);
91 90
92 // Resets the changes to the ones recorded in mirror for |url|, and 91 // Resets the changes to the ones recorded in mirror for |url|, and
93 // commits the updated change status to database. 92 // commits the updated change status to database.
94 void ResetToMirrorAndCommitChangesForURL(const fileapi::FileSystemURL& url); 93 void ResetToMirrorAndCommitChangesForURL(const storage::FileSystemURL& url);
95 94
96 // Re-inserts changes into the separate demoted_changes_ queue. They won't 95 // Re-inserts changes into the separate demoted_changes_ queue. They won't
97 // be fetched by GetNextChangedURLs() unless PromoteDemotedChanges() is 96 // be fetched by GetNextChangedURLs() unless PromoteDemotedChanges() is
98 // called. 97 // called.
99 void DemoteChangesForURL(const fileapi::FileSystemURL& url); 98 void DemoteChangesForURL(const storage::FileSystemURL& url);
100 99
101 // Promotes demoted changes for |url| to the normal queue. 100 // Promotes demoted changes for |url| to the normal queue.
102 void PromoteDemotedChangesForURL(const fileapi::FileSystemURL& url); 101 void PromoteDemotedChangesForURL(const storage::FileSystemURL& url);
103 102
104 // Promotes all demoted changes to the normal queue. Returns true if it has 103 // Promotes all demoted changes to the normal queue. Returns true if it has
105 // promoted any changes. 104 // promoted any changes.
106 bool PromoteDemotedChanges(); 105 bool PromoteDemotedChanges();
107 106
108 // Called by FileSyncService at the startup time to restore last dirty changes 107 // Called by FileSyncService at the startup time to restore last dirty changes
109 // left after the last shutdown (if any). 108 // left after the last shutdown (if any).
110 SyncStatusCode Initialize(fileapi::FileSystemContext* file_system_context); 109 SyncStatusCode Initialize(storage::FileSystemContext* file_system_context);
111 110
112 // Resets all the changes recorded for the given |origin| and |type|. 111 // Resets all the changes recorded for the given |origin| and |type|.
113 // TODO(kinuko,nhiroki): Ideally this should be automatically called in 112 // TODO(kinuko,nhiroki): Ideally this should be automatically called in
114 // DeleteFileSystem via QuotaUtil::DeleteOriginDataOnFileThread. 113 // DeleteFileSystem via QuotaUtil::DeleteOriginDataOnFileThread.
115 void ResetForFileSystem(const GURL& origin, fileapi::FileSystemType type); 114 void ResetForFileSystem(const GURL& origin, storage::FileSystemType type);
116 115
117 // This method is (exceptionally) thread-safe. 116 // This method is (exceptionally) thread-safe.
118 int64 num_changes() const { 117 int64 num_changes() const {
119 base::AutoLock lock(num_changes_lock_); 118 base::AutoLock lock(num_changes_lock_);
120 return num_changes_; 119 return num_changes_;
121 } 120 }
122 121
123 private: 122 private:
124 class TrackerDB; 123 class TrackerDB;
125 friend class CannedSyncableFileSystem; 124 friend class CannedSyncableFileSystem;
126 friend class LocalFileChangeTrackerTest; 125 friend class LocalFileChangeTrackerTest;
127 friend class LocalFileSyncContext; 126 friend class LocalFileSyncContext;
128 friend class LocalFileSyncContextTest; 127 friend class LocalFileSyncContextTest;
129 friend class SyncableFileSystemTest; 128 friend class SyncableFileSystemTest;
130 129
131 struct ChangeInfo { 130 struct ChangeInfo {
132 ChangeInfo(); 131 ChangeInfo();
133 ~ChangeInfo(); 132 ~ChangeInfo();
134 FileChangeList change_list; 133 FileChangeList change_list;
135 int64 change_seq; 134 int64 change_seq;
136 }; 135 };
137 136
138 typedef std::map<fileapi::FileSystemURL, ChangeInfo, 137 typedef std::map<storage::FileSystemURL,
139 fileapi::FileSystemURL::Comparator> 138 ChangeInfo,
140 FileChangeMap; 139 storage::FileSystemURL::Comparator> FileChangeMap;
141 typedef std::map<int64, fileapi::FileSystemURL> ChangeSeqMap; 140 typedef std::map<int64, storage::FileSystemURL> ChangeSeqMap;
142 141
143 void UpdateNumChanges(); 142 void UpdateNumChanges();
144 143
145 // This does mostly same as calling GetNextChangedURLs with max_url=0 144 // This does mostly same as calling GetNextChangedURLs with max_url=0
146 // except that it returns urls in set rather than in deque. 145 // except that it returns urls in set rather than in deque.
147 // Used only in testings. 146 // Used only in testings.
148 void GetAllChangedURLs(fileapi::FileSystemURLSet* urls); 147 void GetAllChangedURLs(storage::FileSystemURLSet* urls);
149 148
150 // Used only in testings. 149 // Used only in testings.
151 void DropAllChanges(); 150 void DropAllChanges();
152 151
153 // Database related methods. 152 // Database related methods.
154 SyncStatusCode MarkDirtyOnDatabase(const fileapi::FileSystemURL& url); 153 SyncStatusCode MarkDirtyOnDatabase(const storage::FileSystemURL& url);
155 SyncStatusCode ClearDirtyOnDatabase(const fileapi::FileSystemURL& url); 154 SyncStatusCode ClearDirtyOnDatabase(const storage::FileSystemURL& url);
156 155
157 SyncStatusCode CollectLastDirtyChanges( 156 SyncStatusCode CollectLastDirtyChanges(
158 fileapi::FileSystemContext* file_system_context); 157 storage::FileSystemContext* file_system_context);
159 void RecordChange(const fileapi::FileSystemURL& url, 158 void RecordChange(const storage::FileSystemURL& url,
160 const FileChange& change); 159 const FileChange& change);
161 160
162 static void RecordChangeToChangeMaps(const fileapi::FileSystemURL& url, 161 static void RecordChangeToChangeMaps(const storage::FileSystemURL& url,
163 const FileChange& change, 162 const FileChange& change,
164 int change_seq, 163 int change_seq,
165 FileChangeMap* changes, 164 FileChangeMap* changes,
166 ChangeSeqMap* change_seqs); 165 ChangeSeqMap* change_seqs);
167 166
168 void ResetForURL(const fileapi::FileSystemURL& url, 167 void ResetForURL(const storage::FileSystemURL& url,
169 int change_seq, 168 int change_seq,
170 leveldb::WriteBatch* batch); 169 leveldb::WriteBatch* batch);
171 170
172 bool initialized_; 171 bool initialized_;
173 172
174 scoped_refptr<base::SequencedTaskRunner> file_task_runner_; 173 scoped_refptr<base::SequencedTaskRunner> file_task_runner_;
175 174
176 FileChangeMap changes_; 175 FileChangeMap changes_;
177 ChangeSeqMap change_seqs_; 176 ChangeSeqMap change_seqs_;
178 177
(...skipping 10 matching lines...) Expand all
189 // This can be accessed on any threads (with num_changes_lock_). 188 // This can be accessed on any threads (with num_changes_lock_).
190 int64 num_changes_; 189 int64 num_changes_;
191 mutable base::Lock num_changes_lock_; 190 mutable base::Lock num_changes_lock_;
192 191
193 DISALLOW_COPY_AND_ASSIGN(LocalFileChangeTracker); 192 DISALLOW_COPY_AND_ASSIGN(LocalFileChangeTracker);
194 }; 193 };
195 194
196 } // namespace sync_file_system 195 } // namespace sync_file_system
197 196
198 #endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_LOCAL_LOCAL_FILE_CHANGE_TRACKER_H_ 197 #endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_LOCAL_LOCAL_FILE_CHANGE_TRACKER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698