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 #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 Loading... | |
| 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 base::ScopedClosureRunner callback_runner(callback); |
|
achuithb
2012/08/02 19:08:37
nit: Please add a comment since this is not common
satorux1
2012/08/02 19:41:13
ah this is pretty cool.
hshi1
2012/08/02 19:55:13
Done.
| |
| 3531 | 3531 |
| 3532 if (!entry.get()) { | 3532 if (!entry.get()) { |
| 3533 NOTREACHED(); | 3533 NOTREACHED(); |
| 3534 callback.Run(); | |
| 3535 return; | 3534 return; |
| 3536 } | 3535 } |
| 3537 | 3536 |
| 3538 GDataEntry* dir_entry = directory_service_->FindEntryByPathSync( | 3537 GDataEntry* dir_entry = directory_service_->FindEntryByPathSync( |
| 3539 virtual_dir_path); | 3538 virtual_dir_path); |
| 3540 if (!dir_entry) { | 3539 if (!dir_entry) |
| 3541 callback.Run(); | |
| 3542 return; | 3540 return; |
| 3543 } | |
| 3544 | 3541 |
| 3545 GDataDirectory* parent_dir = dir_entry->AsGDataDirectory(); | 3542 GDataDirectory* parent_dir = dir_entry->AsGDataDirectory(); |
| 3546 if (!parent_dir) { | 3543 if (!parent_dir) |
| 3547 callback.Run(); | |
| 3548 return; | 3544 return; |
| 3549 } | |
| 3550 | 3545 |
| 3551 scoped_ptr<GDataEntry> new_entry( | 3546 scoped_ptr<GDataEntry> new_entry( |
| 3552 GDataEntry::FromDocumentEntry( | 3547 GDataEntry::FromDocumentEntry( |
| 3553 parent_dir, entry.get(), directory_service_.get())); | 3548 parent_dir, entry.get(), directory_service_.get())); |
| 3554 if (!new_entry.get()) { | 3549 if (!new_entry.get()) |
| 3555 callback.Run(); | |
| 3556 return; | 3550 return; |
| 3557 } | |
| 3558 | 3551 |
| 3559 if (upload_mode == UPLOAD_EXISTING_FILE) { | 3552 if (upload_mode == UPLOAD_EXISTING_FILE) { |
| 3560 // Remove an existing entry, which should be present. | 3553 // Remove an existing entry, which should be present. |
| 3561 const std::string& resource_id = new_entry->resource_id(); | 3554 const std::string& resource_id = new_entry->resource_id(); |
| 3562 directory_service_->GetEntryByResourceIdAsync(resource_id, | 3555 directory_service_->GetEntryByResourceIdAsync(resource_id, |
| 3563 base::Bind(&RemoveStaleEntryOnUpload, resource_id, parent_dir)); | 3556 base::Bind(&RemoveStaleEntryOnUpload, resource_id, parent_dir)); |
| 3564 } | 3557 } |
| 3565 | 3558 |
| 3566 GDataFile* file = new_entry->AsGDataFile(); | 3559 GDataFile* file = new_entry->AsGDataFile(); |
| 3567 DCHECK(file); | 3560 DCHECK(file); |
| 3568 const std::string& resource_id = file->resource_id(); | 3561 const std::string& resource_id = file->resource_id(); |
| 3569 const std::string& md5 = file->file_md5(); | 3562 const std::string& md5 = file->file_md5(); |
| 3570 parent_dir->AddEntry(new_entry.release()); | 3563 parent_dir->AddEntry(new_entry.release()); |
| 3571 | 3564 |
| 3572 FOR_EACH_OBSERVER(GDataFileSystemInterface::Observer, observers_, | 3565 FOR_EACH_OBSERVER(GDataFileSystemInterface::Observer, observers_, |
| 3573 OnDirectoryChanged(virtual_dir_path)); | 3566 OnDirectoryChanged(virtual_dir_path)); |
| 3574 | 3567 |
| 3575 if (upload_mode == UPLOAD_NEW_FILE) { | 3568 if (upload_mode == UPLOAD_NEW_FILE) { |
| 3576 // Add the file to the cache if we have uploaded a new file. | 3569 // Add the file to the cache if we have uploaded a new file. |
| 3577 cache_->StoreOnUIThread(resource_id, | 3570 cache_->StoreOnUIThread(resource_id, |
| 3578 md5, | 3571 md5, |
| 3579 file_content_path, | 3572 file_content_path, |
| 3580 cache_operation, | 3573 cache_operation, |
| 3581 base::Bind(&OnCacheUpdatedForAddUploadedFile, | 3574 base::Bind(&OnCacheUpdatedForAddUploadedFile, |
| 3582 callback)); | 3575 callback_runner.Release())); |
| 3583 } else if (upload_mode == UPLOAD_EXISTING_FILE) { | 3576 } else if (upload_mode == UPLOAD_EXISTING_FILE) { |
| 3584 // Clear the dirty bit if we have updated an existing file. | 3577 // Clear the dirty bit if we have updated an existing file. |
| 3585 cache_->ClearDirtyOnUIThread(resource_id, | 3578 cache_->ClearDirtyOnUIThread(resource_id, |
| 3586 md5, | 3579 md5, |
| 3587 base::Bind(&OnCacheUpdatedForAddUploadedFile, | 3580 base::Bind(&OnCacheUpdatedForAddUploadedFile, |
| 3588 callback)); | 3581 callback_runner.Release())); |
| 3589 } else { | 3582 } else { |
| 3590 NOTREACHED() << "Unexpected upload mode: " << upload_mode; | 3583 NOTREACHED() << "Unexpected upload mode: " << upload_mode; |
| 3591 } | 3584 } |
| 3592 } | 3585 } |
| 3593 | 3586 |
| 3594 void GDataFileSystem::Observe(int type, | 3587 void GDataFileSystem::Observe(int type, |
| 3595 const content::NotificationSource& source, | 3588 const content::NotificationSource& source, |
| 3596 const content::NotificationDetails& details) { | 3589 const content::NotificationDetails& details) { |
| 3597 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 3590 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 3598 | 3591 |
| (...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4051 } | 4044 } |
| 4052 | 4045 |
| 4053 PlatformFileInfoProto entry_file_info; | 4046 PlatformFileInfoProto entry_file_info; |
| 4054 GDataEntry::ConvertPlatformFileInfoToProto(*file_info, &entry_file_info); | 4047 GDataEntry::ConvertPlatformFileInfoToProto(*file_info, &entry_file_info); |
| 4055 *entry_proto->mutable_file_info() = entry_file_info; | 4048 *entry_proto->mutable_file_info() = entry_file_info; |
| 4056 if (!callback.is_null()) | 4049 if (!callback.is_null()) |
| 4057 callback.Run(GDATA_FILE_OK, entry_proto.Pass()); | 4050 callback.Run(GDATA_FILE_OK, entry_proto.Pass()); |
| 4058 } | 4051 } |
| 4059 | 4052 |
| 4060 } // namespace gdata | 4053 } // namespace gdata |
| OLD | NEW |