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

Side by Side Diff: chrome/browser/chromeos/gdata/gdata_cache.h

Issue 10690149: gdata: Move GDataCache::CacheEntry out of GDataCache (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: removing the existing test Created 8 years, 5 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_CHROMEOS_GDATA_GDATA_CACHE_H_ 5 #ifndef CHROME_BROWSER_CHROMEOS_GDATA_GDATA_CACHE_H_
6 #define CHROME_BROWSER_CHROMEOS_GDATA_GDATA_CACHE_H_ 6 #define CHROME_BROWSER_CHROMEOS_GDATA_GDATA_CACHE_H_
7 7
8 #include <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 10
11 #include "base/file_path.h" 11 #include "base/file_path.h"
12 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/scoped_ptr.h"
13 #include "base/memory/weak_ptr.h" 13 #include "base/memory/weak_ptr.h"
14 #include "base/observer_list.h" 14 #include "base/observer_list.h"
15 #include "base/platform_file.h" 15 #include "base/platform_file.h"
16 #include "base/threading/sequenced_worker_pool.h" 16 #include "base/threading/sequenced_worker_pool.h"
17 #include "chrome/browser/chromeos/gdata/gdata_cache_entry.h"
17 18
18 class Profile; 19 class Profile;
19 20
20 namespace gdata { 21 namespace gdata {
21 22
22 class GDataCacheMetadata; 23 class GDataCacheMetadata;
23 24
24 // Callback for SetMountedStateOnUIThread. 25 // Callback for SetMountedStateOnUIThread.
25 typedef base::Callback<void(base::PlatformFileError error, 26 typedef base::Callback<void(base::PlatformFileError error,
26 const FilePath& file_path)> SetMountedStateCallback; 27 const FilePath& file_path)> SetMountedStateCallback;
(...skipping 14 matching lines...) Expand all
41 // |to_fetch| is for resource IDs of pinned-but-not-fetched files. 42 // |to_fetch| is for resource IDs of pinned-but-not-fetched files.
42 // |to_upload| is for resource IDs of dirty-but-not-uploaded files. 43 // |to_upload| is for resource IDs of dirty-but-not-uploaded files.
43 typedef base::Callback<void(const std::vector<std::string>& to_fetch, 44 typedef base::Callback<void(const std::vector<std::string>& to_fetch,
44 const std::vector<std::string>& to_upload)> 45 const std::vector<std::string>& to_upload)>
45 GetResourceIdsOfBacklogCallback; 46 GetResourceIdsOfBacklogCallback;
46 47
47 // Callback for GetResourceIdsOfExistingPinnedFilesOnUIThread. 48 // Callback for GetResourceIdsOfExistingPinnedFilesOnUIThread.
48 typedef base::Callback<void(const std::vector<std::string>& resource_ids)> 49 typedef base::Callback<void(const std::vector<std::string>& resource_ids)>
49 GetResourceIdsCallback; 50 GetResourceIdsCallback;
50 51
52 // Callback for GetCacheEntryOnUIThread.
53 // |success| indicates if the operation was successful.
54 // |cache_entry| is the obtained cache entry. On failure, |cache_state| is
55 // set to CACHE_STATE_NONE.
56 typedef base::Callback<void(bool success, const GDataCacheEntry& cache_entry)>
57 GetCacheEntryCallback;
58
51 // GDataCache is used to maintain cache states of GDataFileSystem. 59 // GDataCache is used to maintain cache states of GDataFileSystem.
52 // 60 //
53 // All non-static public member functions, unless mentioned otherwise (see 61 // All non-static public member functions, unless mentioned otherwise (see
54 // GetCacheFilePath() for example), should be called from the sequenced 62 // GetCacheFilePath() for example), should be called from the sequenced
55 // worker pool with the sequence token set by CreateGDataCacheOnUIThread(). This 63 // worker pool with the sequence token set by CreateGDataCacheOnUIThread(). This
56 // threading model is enforced by AssertOnSequencedWorkerPool(). 64 // threading model is enforced by AssertOnSequencedWorkerPool().
57 // 65 //
58 // TODO(hashimoto): Change threading model of this class to make public methods 66 // TODO(hashimoto): Change threading model of this class to make public methods
59 // being called on UI thread unless mentioned otherwise. crbug.com/132926 67 // being called on UI thread unless mentioned otherwise. crbug.com/132926
60 class GDataCache { 68 class GDataCache {
61 public: 69 public:
62 // Enum defining GCache subdirectory location. 70 // Enum defining GCache subdirectory location.
63 // This indexes into |GDataCache::cache_paths_| vector. 71 // This indexes into |GDataCache::cache_paths_| vector.
64 enum CacheSubDirectoryType { 72 enum CacheSubDirectoryType {
65 CACHE_TYPE_META = 0, // Downloaded feeds. 73 CACHE_TYPE_META = 0, // Downloaded feeds.
66 CACHE_TYPE_PINNED, // Symlinks to files in persistent dir that are 74 CACHE_TYPE_PINNED, // Symlinks to files in persistent dir that are
67 // pinned, or to /dev/null for non-existent 75 // pinned, or to /dev/null for non-existent
68 // files. 76 // files.
69 CACHE_TYPE_OUTGOING, // Symlinks to files in persistent or tmp dir to 77 CACHE_TYPE_OUTGOING, // Symlinks to files in persistent or tmp dir to
70 // be uploaded. 78 // be uploaded.
71 CACHE_TYPE_PERSISTENT, // Files that are pinned or modified locally, 79 CACHE_TYPE_PERSISTENT, // Files that are pinned or modified locally,
72 // not evictable, hopefully. 80 // not evictable, hopefully.
73 CACHE_TYPE_TMP, // Files that don't meet criteria to be in 81 CACHE_TYPE_TMP, // Files that don't meet criteria to be in
74 // persistent dir, and hence evictable. 82 // persistent dir, and hence evictable.
75 CACHE_TYPE_TMP_DOWNLOADS, // Downloaded files. 83 CACHE_TYPE_TMP_DOWNLOADS, // Downloaded files.
76 CACHE_TYPE_TMP_DOCUMENTS, // Temporary JSON files for hosted documents. 84 CACHE_TYPE_TMP_DOCUMENTS, // Temporary JSON files for hosted documents.
77 NUM_CACHE_TYPES, // This must be at the end. 85 NUM_CACHE_TYPES, // This must be at the end.
78 }; 86 };
79 87
80 // This is used as a bitmask for the cache state.
81 enum CacheState {
82 CACHE_STATE_NONE = 0x0,
83 CACHE_STATE_PINNED = 0x1 << 0,
84 CACHE_STATE_PRESENT = 0x1 << 1,
85 CACHE_STATE_DIRTY = 0x1 << 2,
86 CACHE_STATE_MOUNTED = 0x1 << 3,
87 CACHE_STATE_PERSISTENT = 0x1 << 4,
88 };
89
90 // Enum defining origin of a cached file. 88 // Enum defining origin of a cached file.
91 enum CachedFileOrigin { 89 enum CachedFileOrigin {
92 CACHED_FILE_FROM_SERVER = 0, 90 CACHED_FILE_FROM_SERVER = 0,
93 CACHED_FILE_LOCALLY_MODIFIED, 91 CACHED_FILE_LOCALLY_MODIFIED,
94 CACHED_FILE_MOUNTED, 92 CACHED_FILE_MOUNTED,
95 }; 93 };
96 94
97 // Enum defining type of file operation e.g. copy or move, etc. 95 // Enum defining type of file operation e.g. copy or move, etc.
98 enum FileOperationType { 96 enum FileOperationType {
99 FILE_OPERATION_MOVE = 0, 97 FILE_OPERATION_MOVE = 0,
(...skipping 11 matching lines...) Expand all
111 virtual void OnCacheUnpinned(const std::string& resource_id, 109 virtual void OnCacheUnpinned(const std::string& resource_id,
112 const std::string& md5) {} 110 const std::string& md5) {}
113 111
114 // Triggered when a dirty file has been committed (saved) successfully. 112 // Triggered when a dirty file has been committed (saved) successfully.
115 virtual void OnCacheCommitted(const std::string& resource_id) {} 113 virtual void OnCacheCommitted(const std::string& resource_id) {}
116 114
117 protected: 115 protected:
118 virtual ~Observer() {} 116 virtual ~Observer() {}
119 }; 117 };
120 118
121 // Structure to store information of an existing cache file.
122 class CacheEntry {
123 public:
124 CacheEntry() : cache_state_(CACHE_STATE_NONE) {}
125
126 CacheEntry(const std::string& md5,
127 int cache_state)
128 : md5_(md5),
129 cache_state_(cache_state) {
130 }
131
132 // The MD5 of the cache file. This can be "local" if the file is
133 // locally modified.
134 const std::string& md5() const { return md5_; }
135
136 // The cache state represented as a bitmask of GDataCacheState.
137 int cache_state() const { return cache_state_; }
138
139 void set_md5(const std::string& md5) { md5_ = md5; }
140 void set_cache_state(int cache_state) { cache_state_ = cache_state; }
141
142 // Returns true if the file is present locally.
143 bool IsPresent() const { return cache_state_ & CACHE_STATE_PRESENT; }
144
145 // Returns true if the file is pinned (i.e. available offline).
146 bool IsPinned() const { return cache_state_ & CACHE_STATE_PINNED; }
147
148 // Returns true if the file is dirty (i.e. modified locally).
149 bool IsDirty() const { return cache_state_ & CACHE_STATE_DIRTY; }
150
151 // Returns true if the file is a mounted archive file.
152 bool IsMounted() const { return cache_state_ & CACHE_STATE_MOUNTED; }
153
154 // Returns true if the file is in the persistent directory.
155 bool IsPersistent() const { return cache_state_ & CACHE_STATE_PERSISTENT; }
156
157 // Setters for the states describe above.
158 void SetPresent(bool value) {
159 if (value)
160 cache_state_ |= CACHE_STATE_PRESENT;
161 else
162 cache_state_ &= ~CACHE_STATE_PRESENT;
163 }
164 void SetPinned(bool value) {
165 if (value)
166 cache_state_ |= CACHE_STATE_PINNED;
167 else
168 cache_state_ &= ~CACHE_STATE_PINNED;
169 }
170 void SetDirty(bool value) {
171 if (value)
172 cache_state_ |= CACHE_STATE_DIRTY;
173 else
174 cache_state_ &= ~CACHE_STATE_DIRTY;
175 }
176 void SetMounted(bool value) {
177 if (value)
178 cache_state_ |= CACHE_STATE_MOUNTED;
179 else
180 cache_state_ &= ~CACHE_STATE_MOUNTED;
181 }
182 void SetPersistent(bool value) {
183 if (value)
184 cache_state_ |= CACHE_STATE_PERSISTENT;
185 else
186 cache_state_ &= ~CACHE_STATE_PERSISTENT;
187 }
188
189 // Returns the type of the sub directory where the cache file is stored.
190 CacheSubDirectoryType GetSubDirectoryType() const {
191 return IsPersistent() ? CACHE_TYPE_PERSISTENT : CACHE_TYPE_TMP;
192 }
193
194 // For debugging purposes.
195 std::string ToString() const;
196
197 private:
198 std::string md5_;
199 int cache_state_;
200 };
201
202 // Callback for GetCacheEntryOnUIThread.
203 // |success| indicates if the operation was successful.
204 // |cache_entry| is the obtained cache entry. On failure, |cache_state| is
205 // set to CACHE_STATE_NONE.
206 //
207 // TODO(satorux): Unlike other callback types, this has to be defined
208 // inside GDataCache as CacheEntry is inside GDataCache. We should get them
209 // outside of GDataCache.
210 typedef base::Callback<void(bool success, const CacheEntry& cache_entry)>
211 GetCacheEntryCallback;
212
213 // Returns the sub-directory under gdata cache directory for the given sub 119 // Returns the sub-directory under gdata cache directory for the given sub
214 // directory type. Example: <user_profile_dir>/GCache/v1/tmp 120 // directory type. Example: <user_profile_dir>/GCache/v1/tmp
215 // 121 //
216 // Can be called on any thread. 122 // Can be called on any thread.
217 FilePath GetCacheDirectoryPath(CacheSubDirectoryType sub_dir_type) const; 123 FilePath GetCacheDirectoryPath(CacheSubDirectoryType sub_dir_type) const;
218 124
219 // Returns absolute path of the file if it were cached or to be cached. 125 // Returns absolute path of the file if it were cached or to be cached.
220 // 126 //
221 // Can be called on any thread. 127 // Can be called on any thread.
222 FilePath GetCacheFilePath(const std::string& resource_id, 128 FilePath GetCacheFilePath(const std::string& resource_id,
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 const CacheOperationCallback& callback); 249 const CacheOperationCallback& callback);
344 250
345 // Utility method to call Initialize on UI thread. 251 // Utility method to call Initialize on UI thread.
346 void RequestInitializeOnUIThread(); 252 void RequestInitializeOnUIThread();
347 253
348 // Returns the cache entry for file corresponding to |resource_id| and |md5| 254 // Returns the cache entry for file corresponding to |resource_id| and |md5|
349 // if entry exists in cache map. Otherwise, returns NULL. 255 // if entry exists in cache map. Otherwise, returns NULL.
350 // |md5| can be empty if only matching |resource_id| is desired, which may 256 // |md5| can be empty if only matching |resource_id| is desired, which may
351 // happen when looking for pinned entries where symlinks' filenames have no 257 // happen when looking for pinned entries where symlinks' filenames have no
352 // extension and hence no md5. 258 // extension and hence no md5.
353 scoped_ptr<CacheEntry> GetCacheEntry(const std::string& resource_id, 259 scoped_ptr<GDataCacheEntry> GetCacheEntry(const std::string& resource_id,
354 const std::string& md5); 260 const std::string& md5);
355 261
356 // Factory methods for GDataCache. 262 // Factory methods for GDataCache.
357 // |pool| and |sequence_token| are used to assert that the functions are 263 // |pool| and |sequence_token| are used to assert that the functions are
358 // called on the right sequenced worker pool with the right sequence token. 264 // called on the right sequenced worker pool with the right sequence token.
359 // 265 //
360 // For testing, the thread assertion can be disabled by passing NULL and 266 // For testing, the thread assertion can be disabled by passing NULL and
361 // the default value of SequenceToken. 267 // the default value of SequenceToken.
362 static GDataCache* CreateGDataCacheOnUIThread( 268 static GDataCache* CreateGDataCacheOnUIThread(
363 const FilePath& cache_root_path, 269 const FilePath& cache_root_path,
364 base::SequencedWorkerPool* pool, 270 base::SequencedWorkerPool* pool,
(...skipping 11 matching lines...) Expand all
376 // |cache_root_path|. 282 // |cache_root_path|.
377 static std::vector<FilePath> GetCachePaths(const FilePath& cache_root_path); 283 static std::vector<FilePath> GetCachePaths(const FilePath& cache_root_path);
378 284
379 // Creates cache directory and its sub-directories if they don't exist. 285 // Creates cache directory and its sub-directories if they don't exist.
380 // TODO(glotov): take care of this when the setup and cleanup part is 286 // TODO(glotov): take care of this when the setup and cleanup part is
381 // landed, noting that these directories need to be created for development 287 // landed, noting that these directories need to be created for development
382 // in linux box and unittest. (http://crosbug.com/27577) 288 // in linux box and unittest. (http://crosbug.com/27577)
383 static bool CreateCacheDirectories( 289 static bool CreateCacheDirectories(
384 const std::vector<FilePath>& paths_to_create); 290 const std::vector<FilePath>& paths_to_create);
385 291
292 // Returns the type of the sub directory where the cache file is stored.
293 static CacheSubDirectoryType GetSubDirectoryType(
294 const GDataCacheEntry& cache_entry);
295
386 private: 296 private:
387 GDataCache( 297 GDataCache(
388 const FilePath& cache_root_path, 298 const FilePath& cache_root_path,
389 base::SequencedWorkerPool* pool_, 299 base::SequencedWorkerPool* pool_,
390 const base::SequencedWorkerPool::SequenceToken& sequence_token); 300 const base::SequencedWorkerPool::SequenceToken& sequence_token);
391 virtual ~GDataCache(); 301 virtual ~GDataCache();
392 302
393 // Checks whether the current thread is on the right sequenced worker pool 303 // Checks whether the current thread is on the right sequenced worker pool
394 // with the right sequence ID. If not, DCHECK will fail. 304 // with the right sequence ID. If not, DCHECK will fail.
395 void AssertOnSequencedWorkerPool(); 305 void AssertOnSequencedWorkerPool();
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 // Runs callback and notifies the observers when file is committed. 388 // Runs callback and notifies the observers when file is committed.
479 void OnCommitDirty(base::PlatformFileError* error, 389 void OnCommitDirty(base::PlatformFileError* error,
480 const std::string& resource_id, 390 const std::string& resource_id,
481 const std::string& md5, 391 const std::string& md5,
482 const CacheOperationCallback& callback); 392 const CacheOperationCallback& callback);
483 393
484 // Helper function to implement GetCacheEntryOnUIThread(). 394 // Helper function to implement GetCacheEntryOnUIThread().
485 void GetCacheEntryHelper(const std::string& resource_id, 395 void GetCacheEntryHelper(const std::string& resource_id,
486 const std::string& md5, 396 const std::string& md5,
487 bool* success, 397 bool* success,
488 GDataCache::CacheEntry* cache_entry); 398 GDataCacheEntry* cache_entry);
489 399
490 // The root directory of the cache (i.e. <user_profile_dir>/GCache/v1). 400 // The root directory of the cache (i.e. <user_profile_dir>/GCache/v1).
491 const FilePath cache_root_path_; 401 const FilePath cache_root_path_;
492 // Paths for all subdirectories of GCache, one for each 402 // Paths for all subdirectories of GCache, one for each
493 // GDataCache::CacheSubDirectoryType enum. 403 // GDataCache::CacheSubDirectoryType enum.
494 const std::vector<FilePath> cache_paths_; 404 const std::vector<FilePath> cache_paths_;
495 base::SequencedWorkerPool* pool_; 405 base::SequencedWorkerPool* pool_;
496 const base::SequencedWorkerPool::SequenceToken sequence_token_; 406 const base::SequencedWorkerPool::SequenceToken sequence_token_;
497 407
498 // The cache state data. This member must be access only on the blocking pool. 408 // The cache state data. This member must be access only on the blocking pool.
(...skipping 26 matching lines...) Expand all
525 }; 435 };
526 436
527 // Sets the free disk space getter for testing. 437 // Sets the free disk space getter for testing.
528 // The existing getter is deleted. 438 // The existing getter is deleted.
529 void SetFreeDiskSpaceGetterForTesting( 439 void SetFreeDiskSpaceGetterForTesting(
530 FreeDiskSpaceGetterInterface* getter); 440 FreeDiskSpaceGetterInterface* getter);
531 441
532 } // namespace gdata 442 } // namespace gdata
533 443
534 #endif // CHROME_BROWSER_CHROMEOS_GDATA_GDATA_CACHE_H_ 444 #endif // CHROME_BROWSER_CHROMEOS_GDATA_GDATA_CACHE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698