Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include <map> | 9 #include <map> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 78 NUM_CACHE_TYPES, // This must be at the end. | 78 NUM_CACHE_TYPES, // This must be at the end. |
| 79 }; | 79 }; |
| 80 | 80 |
| 81 // This is used as a bitmask for the cache state. | 81 // This is used as a bitmask for the cache state. |
| 82 enum CacheState { | 82 enum CacheState { |
| 83 CACHE_STATE_NONE = 0x0, | 83 CACHE_STATE_NONE = 0x0, |
| 84 CACHE_STATE_PINNED = 0x1 << 0, | 84 CACHE_STATE_PINNED = 0x1 << 0, |
| 85 CACHE_STATE_PRESENT = 0x1 << 1, | 85 CACHE_STATE_PRESENT = 0x1 << 1, |
| 86 CACHE_STATE_DIRTY = 0x1 << 2, | 86 CACHE_STATE_DIRTY = 0x1 << 2, |
| 87 CACHE_STATE_MOUNTED = 0x1 << 3, | 87 CACHE_STATE_MOUNTED = 0x1 << 3, |
| 88 CACHE_STATE_PERSISTENT = 0x1 << 4, | |
|
hshi1
2012/07/10 17:41:59
Nit: Let's make the spacing consistent. Either ver
satorux1
2012/07/10 18:26:12
Done.
| |
| 88 }; | 89 }; |
| 89 | 90 |
| 90 // Enum defining origin of a cached file. | 91 // Enum defining origin of a cached file. |
| 91 enum CachedFileOrigin { | 92 enum CachedFileOrigin { |
| 92 CACHED_FILE_FROM_SERVER = 0, | 93 CACHED_FILE_FROM_SERVER = 0, |
| 93 CACHED_FILE_LOCALLY_MODIFIED, | 94 CACHED_FILE_LOCALLY_MODIFIED, |
| 94 CACHED_FILE_MOUNTED, | 95 CACHED_FILE_MOUNTED, |
| 95 }; | 96 }; |
| 96 | 97 |
| 97 // Enum defining type of file operation e.g. copy or move, etc. | 98 // Enum defining type of file operation e.g. copy or move, etc. |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 113 | 114 |
| 114 // Triggered when a dirty file has been committed (saved) successfully. | 115 // Triggered when a dirty file has been committed (saved) successfully. |
| 115 virtual void OnCacheCommitted(const std::string& resource_id) {} | 116 virtual void OnCacheCommitted(const std::string& resource_id) {} |
| 116 | 117 |
| 117 protected: | 118 protected: |
| 118 virtual ~Observer() {} | 119 virtual ~Observer() {} |
| 119 }; | 120 }; |
| 120 | 121 |
| 121 // Structure to store information of an existing cache file. | 122 // Structure to store information of an existing cache file. |
| 122 struct CacheEntry { | 123 struct CacheEntry { |
| 123 CacheEntry() : sub_dir_type(CACHE_TYPE_META), | 124 CacheEntry() : cache_state(0) {} |
| 124 cache_state(0) {} | |
| 125 | 125 |
| 126 CacheEntry(const std::string& md5, | 126 CacheEntry(const std::string& md5, |
| 127 CacheSubDirectoryType sub_dir_type, | |
| 128 int cache_state) | 127 int cache_state) |
| 129 : md5(md5), | 128 : md5(md5), |
| 130 sub_dir_type(sub_dir_type), | |
| 131 cache_state(cache_state) { | 129 cache_state(cache_state) { |
| 132 } | 130 } |
| 133 | 131 |
| 134 bool IsPresent() const { return IsCachePresent(cache_state); } | 132 bool IsPresent() const { return IsCachePresent(cache_state); } |
| 135 bool IsPinned() const { return IsCachePinned(cache_state); } | 133 bool IsPinned() const { return IsCachePinned(cache_state); } |
| 136 bool IsDirty() const { return IsCacheDirty(cache_state); } | 134 bool IsDirty() const { return IsCacheDirty(cache_state); } |
| 137 bool IsMounted() const { return IsCacheMounted(cache_state); } | 135 bool IsMounted() const { return IsCacheMounted(cache_state); } |
| 136 bool IsPersistent() const { return IsCachePersistent(cache_state); } | |
|
hshi1
2012/07/10 17:41:59
Nit: Let's remove the double spaces between "const
satorux1
2012/07/10 18:26:12
Done.
| |
| 137 | |
| 138 // Returns the type of the sub directory where the cache file is stored. | |
| 139 CacheSubDirectoryType GetSubDirectoryType() const { | |
| 140 return IsPersistent() ? CACHE_TYPE_PERSISTENT : CACHE_TYPE_TMP; | |
| 141 } | |
| 138 | 142 |
| 139 // For debugging purposes. | 143 // For debugging purposes. |
| 140 std::string ToString() const; | 144 std::string ToString() const; |
| 141 | 145 |
| 142 std::string md5; | 146 std::string md5; |
| 143 CacheSubDirectoryType sub_dir_type; | |
| 144 int cache_state; | 147 int cache_state; |
| 145 }; | 148 }; |
| 146 | 149 |
| 147 // Callback for GetCacheEntryOnUIThread. | 150 // Callback for GetCacheEntryOnUIThread. |
| 148 // |success| indicates if the operation was successful. | 151 // |success| indicates if the operation was successful. |
| 149 // |cache_entry| is the obtained cache entry. | 152 // |cache_entry| is the obtained cache entry. |
| 150 // | 153 // |
| 151 // TODO(satorux): Unlike other callback types, this has to be defined | 154 // TODO(satorux): Unlike other callback types, this has to be defined |
| 152 // inside GDataCache as CacheEntry is inside GDataCache. We should get them | 155 // inside GDataCache as CacheEntry is inside GDataCache. We should get them |
| 153 // outside of GDataCache. | 156 // outside of GDataCache. |
| 154 typedef base::Callback<void(bool success, const CacheEntry& cache_entry)> | 157 typedef base::Callback<void(bool success, const CacheEntry& cache_entry)> |
| 155 GetCacheEntryCallback; | 158 GetCacheEntryCallback; |
| 156 | 159 |
| 157 static bool IsCachePresent(int cache_state) { | 160 static bool IsCachePresent(int cache_state) { |
| 158 return cache_state & CACHE_STATE_PRESENT; | 161 return cache_state & CACHE_STATE_PRESENT; |
| 159 } | 162 } |
| 160 static bool IsCachePinned(int cache_state) { | 163 static bool IsCachePinned(int cache_state) { |
| 161 return cache_state & CACHE_STATE_PINNED; | 164 return cache_state & CACHE_STATE_PINNED; |
| 162 } | 165 } |
| 163 static bool IsCacheDirty(int cache_state) { | 166 static bool IsCacheDirty(int cache_state) { |
| 164 return cache_state & CACHE_STATE_DIRTY; | 167 return cache_state & CACHE_STATE_DIRTY; |
| 165 } | 168 } |
| 166 static bool IsCacheMounted(int cache_state) { | 169 static bool IsCacheMounted(int cache_state) { |
| 167 return cache_state & CACHE_STATE_MOUNTED; | 170 return cache_state & CACHE_STATE_MOUNTED; |
| 168 } | 171 } |
| 172 static bool IsCachePersistent(int cache_state) { | |
| 173 return cache_state & CACHE_STATE_PERSISTENT; | |
| 174 } | |
| 169 static int SetCachePresent(int cache_state) { | 175 static int SetCachePresent(int cache_state) { |
| 170 return cache_state |= CACHE_STATE_PRESENT; | 176 return cache_state |= CACHE_STATE_PRESENT; |
| 171 } | 177 } |
| 172 static int SetCachePinned(int cache_state) { | 178 static int SetCachePinned(int cache_state) { |
| 173 return cache_state |= CACHE_STATE_PINNED; | 179 return cache_state |= CACHE_STATE_PINNED; |
| 174 } | 180 } |
| 175 static int SetCacheDirty(int cache_state) { | 181 static int SetCacheDirty(int cache_state) { |
| 176 return cache_state |= CACHE_STATE_DIRTY; | 182 return cache_state |= CACHE_STATE_DIRTY; |
| 177 } | 183 } |
| 178 static int SetCacheMounted(int cache_state) { | 184 static int SetCacheMounted(int cache_state) { |
| 179 return cache_state |= CACHE_STATE_MOUNTED; | 185 return cache_state |= CACHE_STATE_MOUNTED; |
| 180 } | 186 } |
| 187 static int SetCachePersistent(int cache_state) { | |
| 188 return cache_state |= CACHE_STATE_PERSISTENT; | |
| 189 } | |
| 181 static int ClearCachePresent(int cache_state) { | 190 static int ClearCachePresent(int cache_state) { |
| 182 return cache_state &= ~CACHE_STATE_PRESENT; | 191 return cache_state &= ~CACHE_STATE_PRESENT; |
| 183 } | 192 } |
| 184 static int ClearCachePinned(int cache_state) { | 193 static int ClearCachePinned(int cache_state) { |
| 185 return cache_state &= ~CACHE_STATE_PINNED; | 194 return cache_state &= ~CACHE_STATE_PINNED; |
| 186 } | 195 } |
| 187 static int ClearCacheDirty(int cache_state) { | 196 static int ClearCacheDirty(int cache_state) { |
| 188 return cache_state &= ~CACHE_STATE_DIRTY; | 197 return cache_state &= ~CACHE_STATE_DIRTY; |
| 189 } | 198 } |
| 190 static int ClearCacheMounted(int cache_state) { | 199 static int ClearCacheMounted(int cache_state) { |
| 191 return cache_state &= ~CACHE_STATE_MOUNTED; | 200 return cache_state &= ~CACHE_STATE_MOUNTED; |
| 192 } | 201 } |
| 202 static int ClearCachePersistent(int cache_state) { | |
| 203 return cache_state &= ~CACHE_STATE_PERSISTENT; | |
| 204 } | |
| 193 | 205 |
| 194 // Returns the sub-directory under gdata cache directory for the given sub | 206 // Returns the sub-directory under gdata cache directory for the given sub |
| 195 // directory type. Example: <user_profile_dir>/GCache/v1/tmp | 207 // directory type. Example: <user_profile_dir>/GCache/v1/tmp |
| 196 // | 208 // |
| 197 // Can be called on any thread. | 209 // Can be called on any thread. |
| 198 FilePath GetCacheDirectoryPath(CacheSubDirectoryType sub_dir_type) const; | 210 FilePath GetCacheDirectoryPath(CacheSubDirectoryType sub_dir_type) const; |
| 199 | 211 |
| 200 // Returns absolute path of the file if it were cached or to be cached. | 212 // Returns absolute path of the file if it were cached or to be cached. |
| 201 // | 213 // |
| 202 // Can be called on any thread. | 214 // Can be called on any thread. |
| (...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 461 const std::string& resource_id, | 473 const std::string& resource_id, |
| 462 const std::string& md5, | 474 const std::string& md5, |
| 463 const CacheOperationCallback& callback); | 475 const CacheOperationCallback& callback); |
| 464 | 476 |
| 465 // Helper function to implement GetCacheEntryOnUIThread(). | 477 // Helper function to implement GetCacheEntryOnUIThread(). |
| 466 void GetCacheEntryHelper(const std::string& resource_id, | 478 void GetCacheEntryHelper(const std::string& resource_id, |
| 467 const std::string& md5, | 479 const std::string& md5, |
| 468 bool* success, | 480 bool* success, |
| 469 GDataCache::CacheEntry* cache_entry); | 481 GDataCache::CacheEntry* cache_entry); |
| 470 | 482 |
| 483 // Wrapper around GDataCacheMetadata::UpdateCache(). This function takes | |
| 484 // |sub_dir_type| and modifies |cache_state| per the sub directory type. | |
| 485 void UpdateCacheWithSubDirectoryType(const std::string& resource_id, | |
| 486 const std::string& md5, | |
| 487 CacheSubDirectoryType sub_dir_type, | |
| 488 int cache_state); | |
| 489 | |
| 471 // The root directory of the cache (i.e. <user_profile_dir>/GCache/v1). | 490 // The root directory of the cache (i.e. <user_profile_dir>/GCache/v1). |
| 472 const FilePath cache_root_path_; | 491 const FilePath cache_root_path_; |
| 473 // Paths for all subdirectories of GCache, one for each | 492 // Paths for all subdirectories of GCache, one for each |
| 474 // GDataCache::CacheSubDirectoryType enum. | 493 // GDataCache::CacheSubDirectoryType enum. |
| 475 const std::vector<FilePath> cache_paths_; | 494 const std::vector<FilePath> cache_paths_; |
| 476 base::SequencedWorkerPool* pool_; | 495 base::SequencedWorkerPool* pool_; |
| 477 const base::SequencedWorkerPool::SequenceToken sequence_token_; | 496 const base::SequencedWorkerPool::SequenceToken sequence_token_; |
| 478 | 497 |
| 479 // The cache state data. This member must be access only on the blocking pool. | 498 // The cache state data. This member must be access only on the blocking pool. |
| 480 scoped_ptr<GDataCacheMetadata> metadata_; | 499 scoped_ptr<GDataCacheMetadata> metadata_; |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 506 }; | 525 }; |
| 507 | 526 |
| 508 // Sets the free disk space getter for testing. | 527 // Sets the free disk space getter for testing. |
| 509 // The existing getter is deleted. | 528 // The existing getter is deleted. |
| 510 void SetFreeDiskSpaceGetterForTesting( | 529 void SetFreeDiskSpaceGetterForTesting( |
| 511 FreeDiskSpaceGetterInterface* getter); | 530 FreeDiskSpaceGetterInterface* getter); |
| 512 | 531 |
| 513 } // namespace gdata | 532 } // namespace gdata |
| 514 | 533 |
| 515 #endif // CHROME_BROWSER_CHROMEOS_GDATA_GDATA_CACHE_H_ | 534 #endif // CHROME_BROWSER_CHROMEOS_GDATA_GDATA_CACHE_H_ |
| OLD | NEW |