diff options
Diffstat (limited to 'chrome/browser/chromeos/gdata/gdata_cache.cc')
-rw-r--r-- | chrome/browser/chromeos/gdata/gdata_cache.cc | 51 |
1 files changed, 50 insertions, 1 deletions
diff --git a/chrome/browser/chromeos/gdata/gdata_cache.cc b/chrome/browser/chromeos/gdata/gdata_cache.cc index 24f4b9b..2737fe2 100644 --- a/chrome/browser/chromeos/gdata/gdata_cache.cc +++ b/chrome/browser/chromeos/gdata/gdata_cache.cc @@ -346,7 +346,7 @@ void RunGetFileFromCacheCallback(const GetFileFromCacheCallback& callback, } // Runs callback with pointers dereferenced. -// Used to implement GetResourceIdsOfBacklog(). +// Used to implement GetResourceIdsOfBacklogOnUIThread(). void RunGetResourceIdsCallback(const GetResourceIdsCallback& callback, std::vector<std::string>* to_fetch, std::vector<std::string>* to_upload) { @@ -358,6 +358,19 @@ void RunGetResourceIdsCallback(const GetResourceIdsCallback& callback, callback.Run(*to_fetch, *to_upload); } +// Runs callback with pointers dereferenced. +// Used to implement GetCacheEntryOnUIThread(). +void RunGetCacheEntryCallback( + const GDataCache::GetCacheEntryCallback& callback, + bool* success, + GDataCache::CacheEntry* cache_entry) { + DCHECK(success); + DCHECK(cache_entry); + + if (!callback.is_null()) + callback.Run(*success, *cache_entry); +} + } // namespace std::string GDataCache::CacheEntry::ToString() const { @@ -445,6 +458,28 @@ void GDataCache::RemoveObserver(Observer* observer) { observers_.RemoveObserver(observer); } +void GDataCache::GetCacheEntryOnUIThread( + const std::string& resource_id, + const std::string& md5, + const GetCacheEntryCallback& callback) { + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); + + bool* success = new bool(false); + GDataCache::CacheEntry* cache_entry = new GDataCache::CacheEntry; + pool_->GetSequencedTaskRunner(sequence_token_)->PostTaskAndReply( + FROM_HERE, + base::Bind(&GDataCache::GetCacheEntryHelper, + base::Unretained(this), + resource_id, + md5, + success, + cache_entry), + base::Bind(&RunGetCacheEntryCallback, + callback, + base::Owned(success), + base::Owned(cache_entry))); +} + void GDataCache::GetResourceIdsOfBacklogOnUIThread( const GetResourceIdsCallback& callback) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); @@ -1463,6 +1498,20 @@ void GDataCache::OnCommitDirty(base::PlatformFileError* error, FOR_EACH_OBSERVER(Observer, observers_, OnCacheCommitted(resource_id)); } +void GDataCache::GetCacheEntryHelper(const std::string& resource_id, + const std::string& md5, + bool* success, + GDataCache::CacheEntry* cache_entry) { + AssertOnSequencedWorkerPool(); + DCHECK(success); + DCHECK(cache_entry); + + scoped_ptr<GDataCache::CacheEntry> value(GetCacheEntry(resource_id, md5)); + *success = value.get(); + if (*success) + *cache_entry = *value; +} + // static FilePath GDataCache::GetCacheRootPath(Profile* profile) { FilePath cache_base_path; |