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 #include "chrome/browser/chromeos/gdata/gdata_file_system.h" | 5 #include "chrome/browser/chromeos/gdata/gdata_file_system.h" |
6 | 6 |
7 #include <errno.h> | 7 #include <errno.h> |
8 #include <sys/stat.h> | 8 #include <sys/stat.h> |
9 | 9 |
10 #include <set> | 10 #include <set> |
(...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
452 // | 452 // |
453 // |callback| is run on the thread represented by |relay_proxy|. | 453 // |callback| is run on the thread represented by |relay_proxy|. |
454 void OnTransferRegularFileCompleteForCopy( | 454 void OnTransferRegularFileCompleteForCopy( |
455 const FileOperationCallback& callback, | 455 const FileOperationCallback& callback, |
456 scoped_refptr<base::MessageLoopProxy> relay_proxy, | 456 scoped_refptr<base::MessageLoopProxy> relay_proxy, |
457 base::PlatformFileError error) { | 457 base::PlatformFileError error) { |
458 if (!callback.is_null()) | 458 if (!callback.is_null()) |
459 relay_proxy->PostTask(FROM_HERE, base::Bind(callback, error)); | 459 relay_proxy->PostTask(FROM_HERE, base::Bind(callback, error)); |
460 } | 460 } |
461 | 461 |
462 void GetCacheEntryOnBlockingPool( | |
satorux1
2012/06/13 23:03:03
nit: function comment is missing.
satorux1
2012/06/14 00:41:47
ping.
hashimoto
2012/06/14 01:17:53
Done.
| |
463 GDataCache* cache, | |
464 const std::string& resource_id, | |
465 const std::string& md5, | |
466 scoped_ptr<GDataCache::CacheEntry>* cache_entry) { | |
467 cache_entry->reset(cache->GetCacheEntry(resource_id, md5).release()); | |
468 } | |
469 | |
462 // Runs GetFileCallback with pointers dereferenced. | 470 // Runs GetFileCallback with pointers dereferenced. |
463 // Used for PostTaskAndReply(). | 471 // Used for PostTaskAndReply(). |
464 void RunGetFileCallbackHelper(const GetFileCallback& callback, | 472 void RunGetFileCallbackHelper(const GetFileCallback& callback, |
465 base::PlatformFileError* error, | 473 base::PlatformFileError* error, |
466 FilePath* file_path, | 474 FilePath* file_path, |
467 std::string* mime_type, | 475 std::string* mime_type, |
468 GDataFileType* file_type) { | 476 GDataFileType* file_type) { |
469 DCHECK(error); | 477 DCHECK(error); |
470 DCHECK(file_path); | 478 DCHECK(file_path); |
471 DCHECK(mime_type); | 479 DCHECK(mime_type); |
(...skipping 2764 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3236 void GDataFileSystem::OnFileDownloaded( | 3244 void GDataFileSystem::OnFileDownloaded( |
3237 const GetFileFromCacheParams& params, | 3245 const GetFileFromCacheParams& params, |
3238 GDataErrorCode status, | 3246 GDataErrorCode status, |
3239 const GURL& content_url, | 3247 const GURL& content_url, |
3240 const FilePath& downloaded_file_path) { | 3248 const FilePath& downloaded_file_path) { |
3241 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 3249 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
3242 | 3250 |
3243 // If user cancels download of a pinned-but-not-fetched file, mark file as | 3251 // If user cancels download of a pinned-but-not-fetched file, mark file as |
3244 // unpinned so that we do not sync the file again. | 3252 // unpinned so that we do not sync the file again. |
3245 if (status == GDATA_CANCELLED) { | 3253 if (status == GDATA_CANCELLED) { |
3246 bool pinning_cancelled = false; | 3254 scoped_ptr<GDataCache::CacheEntry>* cache_entry = |
3247 { | 3255 new scoped_ptr<GDataCache::CacheEntry>(); |
achuithb
2012/06/13 21:37:11
Why not
GDataCache::CacheEntry* cache_entry = new
satorux1
2012/06/13 23:03:03
I think hashimoto's intention was to clarify owner
hashimoto
2012/06/14 00:12:42
We cannot use raw pointer here since NULL is passe
satorux1
2012/06/14 00:23:56
I'm confused. I thought we could delete "cache_ent
hashimoto
2012/06/14 00:33:35
In your code, UnpinIfPinned always receives NULL
satorux1
2012/06/14 00:37:57
Oh you are absolutely right... Then, I'm fine with
achuithb
2012/06/14 00:45:51
I think it would be preferable to copy CacheEntry
satorux1
2012/06/14 00:48:11
Ah, I like that!
hashimoto
2012/06/14 00:58:09
The reason I was not copying the object here was t
satorux1
2012/06/14 01:00:09
That's a very valid point... Maybe just a historic
hashimoto
2012/06/14 01:17:53
Done, added the default constructor for GDataCache
| |
3248 // To access root_. Limit the scope as SetPinStateOnUIThread() will | 3256 PostBlockingPoolSequencedTaskAndReply( |
3249 // acquire the lock. | 3257 FROM_HERE, |
3250 base::AutoLock lock(lock_); | 3258 base::Bind(&GetCacheEntryOnBlockingPool, |
3251 // TODO(satorux): Should not call this on UI thread. crbug.com/131826. | 3259 cache_, |
3252 scoped_ptr<GDataCache::CacheEntry> cache_entry = cache_->GetCacheEntry( | 3260 params.resource_id, |
3253 params.resource_id, | 3261 params.md5, |
3254 params.md5); | 3262 cache_entry), |
3255 if (cache_entry.get() && cache_entry->IsPinned()) | 3263 base::Bind(&GDataFileSystem::UnpinIfPinned, |
3256 pinning_cancelled = true; | 3264 ui_weak_ptr_, |
3257 } | 3265 params.virtual_file_path, |
3258 // TODO(hshi): http://crbug.com/127138 notify when file properties change. | 3266 base::Owned(cache_entry))); |
3259 // This allows file manager to clear the "Available offline" checkbox. | |
3260 if (pinning_cancelled) { | |
3261 SetPinStateOnUIThread(params.virtual_file_path, false, | |
3262 FileOperationCallback()); | |
3263 } | |
3264 } | 3267 } |
3265 | 3268 |
3266 // At this point, the disk can be full or nearly full for several reasons: | 3269 // At this point, the disk can be full or nearly full for several reasons: |
3267 // - The expected file size was incorrect and the file was larger | 3270 // - The expected file size was incorrect and the file was larger |
3268 // - There was an in-flight download operation and it used up space | 3271 // - There was an in-flight download operation and it used up space |
3269 // - The disk became full for some user actions we cannot control | 3272 // - The disk became full for some user actions we cannot control |
3270 // (ex. the user might have downloaded a large file from a regular web site) | 3273 // (ex. the user might have downloaded a large file from a regular web site) |
3271 // | 3274 // |
3272 // If we don't have enough space, we return PLATFORM_FILE_ERROR_NO_SPACE, | 3275 // If we don't have enough space, we return PLATFORM_FILE_ERROR_NO_SPACE, |
3273 // and try to free up space, even if the file was downloaded successfully. | 3276 // and try to free up space, even if the file was downloaded successfully. |
3274 bool* has_enough_space = new bool(false); | 3277 bool* has_enough_space = new bool(false); |
3275 PostBlockingPoolSequencedTaskAndReply( | 3278 PostBlockingPoolSequencedTaskAndReply( |
3276 FROM_HERE, | 3279 FROM_HERE, |
3277 base::Bind(&GDataFileSystem::FreeDiskSpaceIfNeeded, | 3280 base::Bind(&GDataFileSystem::FreeDiskSpaceIfNeeded, |
3278 base::Unretained(this), | 3281 base::Unretained(this), |
3279 has_enough_space), | 3282 has_enough_space), |
3280 base::Bind(&GDataFileSystem::OnFileDownloadedAndSpaceChecked, | 3283 base::Bind(&GDataFileSystem::OnFileDownloadedAndSpaceChecked, |
3281 ui_weak_ptr_, | 3284 ui_weak_ptr_, |
3282 params, | 3285 params, |
3283 status, | 3286 status, |
3284 content_url, | 3287 content_url, |
3285 downloaded_file_path, | 3288 downloaded_file_path, |
3286 base::Owned(has_enough_space))); | 3289 base::Owned(has_enough_space))); |
3287 } | 3290 } |
3288 | 3291 |
3292 void GDataFileSystem::UnpinIfPinned( | |
3293 const FilePath& file_path, | |
3294 scoped_ptr<GDataCache::CacheEntry>* cache_entry) { | |
3295 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | |
3296 // TODO(hshi): http://crbug.com/127138 notify when file properties change. | |
3297 // This allows file manager to clear the "Available offline" checkbox. | |
3298 if ((*cache_entry).get() && (*cache_entry)->IsPinned()) | |
3299 SetPinStateOnUIThread(file_path, false, FileOperationCallback()); | |
3300 } | |
3301 | |
3289 void GDataFileSystem::OnFileDownloadedAndSpaceChecked( | 3302 void GDataFileSystem::OnFileDownloadedAndSpaceChecked( |
3290 const GetFileFromCacheParams& params, | 3303 const GetFileFromCacheParams& params, |
3291 GDataErrorCode status, | 3304 GDataErrorCode status, |
3292 const GURL& content_url, | 3305 const GURL& content_url, |
3293 const FilePath& downloaded_file_path, | 3306 const FilePath& downloaded_file_path, |
3294 bool* has_enough_space) { | 3307 bool* has_enough_space) { |
3295 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 3308 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
3296 | 3309 |
3297 base::PlatformFileError error = GDataToPlatformError(status); | 3310 base::PlatformFileError error = GDataToPlatformError(status); |
3298 | 3311 |
(...skipping 1905 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5204 base::PlatformFileError error, | 5217 base::PlatformFileError error, |
5205 const std::string& resource_id, | 5218 const std::string& resource_id, |
5206 const std::string& md5) { | 5219 const std::string& md5) { |
5207 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 5220 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
5208 | 5221 |
5209 if (!callback.is_null()) | 5222 if (!callback.is_null()) |
5210 callback.Run(error); | 5223 callback.Run(error); |
5211 } | 5224 } |
5212 | 5225 |
5213 } // namespace gdata | 5226 } // namespace gdata |
OLD | NEW |