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

Side by Side Diff: chrome/browser/chromeos/gdata/gdata_file_system.cc

Issue 10825160: gdata: Cleanup GDataFileSystem::AddUploadedFileOnUIThread(). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add comment to explain the ScopedClosureRunner. Created 8 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #include "chrome/browser/chromeos/gdata/gdata_file_system.h" 5 #include "chrome/browser/chromeos/gdata/gdata_file_system.h"
6 6
7 #include <set> 7 #include <set>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 3509 matching lines...) Expand 10 before | Expand all | Expand 10 after
3520 } 3520 }
3521 3521
3522 void GDataFileSystem::AddUploadedFileOnUIThread( 3522 void GDataFileSystem::AddUploadedFileOnUIThread(
3523 UploadMode upload_mode, 3523 UploadMode upload_mode,
3524 const FilePath& virtual_dir_path, 3524 const FilePath& virtual_dir_path,
3525 scoped_ptr<DocumentEntry> entry, 3525 scoped_ptr<DocumentEntry> entry,
3526 const FilePath& file_content_path, 3526 const FilePath& file_content_path,
3527 GDataCache::FileOperationType cache_operation, 3527 GDataCache::FileOperationType cache_operation,
3528 const base::Closure& callback) { 3528 const base::Closure& callback) {
3529 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 3529 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
3530 DCHECK(!callback.is_null()); 3530
3531 // ScopedClosureRunner ensures that the specified callback is always invoked
3532 // upon return or passed on.
3533 base::ScopedClosureRunner callback_runner(callback);
3531 3534
3532 if (!entry.get()) { 3535 if (!entry.get()) {
3533 NOTREACHED(); 3536 NOTREACHED();
3534 callback.Run();
3535 return; 3537 return;
3536 } 3538 }
3537 3539
3538 GDataEntry* dir_entry = directory_service_->FindEntryByPathSync( 3540 GDataEntry* dir_entry = directory_service_->FindEntryByPathSync(
3539 virtual_dir_path); 3541 virtual_dir_path);
3540 if (!dir_entry) { 3542 if (!dir_entry)
3541 callback.Run();
3542 return; 3543 return;
3543 }
3544 3544
3545 GDataDirectory* parent_dir = dir_entry->AsGDataDirectory(); 3545 GDataDirectory* parent_dir = dir_entry->AsGDataDirectory();
3546 if (!parent_dir) { 3546 if (!parent_dir)
3547 callback.Run();
3548 return; 3547 return;
3549 }
3550 3548
3551 scoped_ptr<GDataEntry> new_entry( 3549 scoped_ptr<GDataEntry> new_entry(
3552 GDataEntry::FromDocumentEntry( 3550 GDataEntry::FromDocumentEntry(
3553 parent_dir, entry.get(), directory_service_.get())); 3551 parent_dir, entry.get(), directory_service_.get()));
3554 if (!new_entry.get()) { 3552 if (!new_entry.get())
3555 callback.Run();
3556 return; 3553 return;
3557 }
3558 3554
3559 if (upload_mode == UPLOAD_EXISTING_FILE) { 3555 if (upload_mode == UPLOAD_EXISTING_FILE) {
3560 // Remove an existing entry, which should be present. 3556 // Remove an existing entry, which should be present.
3561 const std::string& resource_id = new_entry->resource_id(); 3557 const std::string& resource_id = new_entry->resource_id();
3562 directory_service_->GetEntryByResourceIdAsync(resource_id, 3558 directory_service_->GetEntryByResourceIdAsync(resource_id,
3563 base::Bind(&RemoveStaleEntryOnUpload, resource_id, parent_dir)); 3559 base::Bind(&RemoveStaleEntryOnUpload, resource_id, parent_dir));
3564 } 3560 }
3565 3561
3566 GDataFile* file = new_entry->AsGDataFile(); 3562 GDataFile* file = new_entry->AsGDataFile();
3567 DCHECK(file); 3563 DCHECK(file);
3568 const std::string& resource_id = file->resource_id(); 3564 const std::string& resource_id = file->resource_id();
3569 const std::string& md5 = file->file_md5(); 3565 const std::string& md5 = file->file_md5();
3570 parent_dir->AddEntry(new_entry.release()); 3566 parent_dir->AddEntry(new_entry.release());
3571 3567
3572 FOR_EACH_OBSERVER(GDataFileSystemInterface::Observer, observers_, 3568 FOR_EACH_OBSERVER(GDataFileSystemInterface::Observer, observers_,
3573 OnDirectoryChanged(virtual_dir_path)); 3569 OnDirectoryChanged(virtual_dir_path));
3574 3570
3575 if (upload_mode == UPLOAD_NEW_FILE) { 3571 if (upload_mode == UPLOAD_NEW_FILE) {
3576 // Add the file to the cache if we have uploaded a new file. 3572 // Add the file to the cache if we have uploaded a new file.
3577 cache_->StoreOnUIThread(resource_id, 3573 cache_->StoreOnUIThread(resource_id,
3578 md5, 3574 md5,
3579 file_content_path, 3575 file_content_path,
3580 cache_operation, 3576 cache_operation,
3581 base::Bind(&OnCacheUpdatedForAddUploadedFile, 3577 base::Bind(&OnCacheUpdatedForAddUploadedFile,
3582 callback)); 3578 callback_runner.Release()));
3583 } else if (upload_mode == UPLOAD_EXISTING_FILE) { 3579 } else if (upload_mode == UPLOAD_EXISTING_FILE) {
3584 // Clear the dirty bit if we have updated an existing file. 3580 // Clear the dirty bit if we have updated an existing file.
3585 cache_->ClearDirtyOnUIThread(resource_id, 3581 cache_->ClearDirtyOnUIThread(resource_id,
3586 md5, 3582 md5,
3587 base::Bind(&OnCacheUpdatedForAddUploadedFile, 3583 base::Bind(&OnCacheUpdatedForAddUploadedFile,
3588 callback)); 3584 callback_runner.Release()));
3589 } else { 3585 } else {
3590 NOTREACHED() << "Unexpected upload mode: " << upload_mode; 3586 NOTREACHED() << "Unexpected upload mode: " << upload_mode;
3591 } 3587 }
3592 } 3588 }
3593 3589
3594 void GDataFileSystem::Observe(int type, 3590 void GDataFileSystem::Observe(int type,
3595 const content::NotificationSource& source, 3591 const content::NotificationSource& source,
3596 const content::NotificationDetails& details) { 3592 const content::NotificationDetails& details) {
3597 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 3593 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
3598 3594
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after
4051 } 4047 }
4052 4048
4053 PlatformFileInfoProto entry_file_info; 4049 PlatformFileInfoProto entry_file_info;
4054 GDataEntry::ConvertPlatformFileInfoToProto(*file_info, &entry_file_info); 4050 GDataEntry::ConvertPlatformFileInfoToProto(*file_info, &entry_file_info);
4055 *entry_proto->mutable_file_info() = entry_file_info; 4051 *entry_proto->mutable_file_info() = entry_file_info;
4056 if (!callback.is_null()) 4052 if (!callback.is_null())
4057 callback.Run(GDATA_FILE_OK, entry_proto.Pass()); 4053 callback.Run(GDATA_FILE_OK, entry_proto.Pass());
4058 } 4054 }
4059 4055
4060 } // namespace gdata 4056 } // namespace gdata
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698