| 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_files.h" | 5 #include "chrome/browser/chromeos/gdata/gdata_files.h" |
| 6 | 6 |
| 7 #include <leveldb/db.h> | 7 #include <leveldb/db.h> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/message_loop_proxy.h" | 10 #include "base/message_loop_proxy.h" |
| (...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 317 | 317 |
| 318 // Add entry to resource map. | 318 // Add entry to resource map. |
| 319 if (directory_service_) | 319 if (directory_service_) |
| 320 directory_service_->AddEntryToResourceMap(entry); | 320 directory_service_->AddEntryToResourceMap(entry); |
| 321 | 321 |
| 322 // Setup child and parent links. | 322 // Setup child and parent links. |
| 323 AddChild(entry); | 323 AddChild(entry); |
| 324 entry->SetParent(this); | 324 entry->SetParent(this); |
| 325 } | 325 } |
| 326 | 326 |
| 327 bool GDataDirectory::TakeEntry(GDataEntry* entry) { | |
| 328 DCHECK(entry); | |
| 329 DCHECK(entry->parent()); | |
| 330 | |
| 331 entry->parent()->RemoveChild(entry); | |
| 332 AddEntry(entry); | |
| 333 | |
| 334 return true; | |
| 335 } | |
| 336 | |
| 337 bool GDataDirectory::TakeOverEntries(GDataDirectory* dir) { | 327 bool GDataDirectory::TakeOverEntries(GDataDirectory* dir) { |
| 338 for (GDataFileCollection::iterator iter = dir->child_files_.begin(); | 328 for (GDataFileCollection::iterator iter = dir->child_files_.begin(); |
| 339 iter != dir->child_files_.end(); ++iter) { | 329 iter != dir->child_files_.end(); ++iter) { |
| 340 AddEntry(iter->second); | 330 AddEntry(iter->second); |
| 341 } | 331 } |
| 342 dir->child_files_.clear(); | 332 dir->child_files_.clear(); |
| 343 | 333 |
| 344 for (GDataDirectoryCollection::iterator iter = | 334 for (GDataDirectoryCollection::iterator iter = |
| 345 dir->child_directories_.begin(); | 335 dir->child_directories_.begin(); |
| 346 iter != dir->child_directories_.end(); ++iter) { | 336 iter != dir->child_directories_.end(); ++iter) { |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 573 root_->RemoveChildren(); | 563 root_->RemoveChildren(); |
| 574 RemoveEntryFromResourceMap(root_.get()); | 564 RemoveEntryFromResourceMap(root_.get()); |
| 575 DCHECK(resource_map_.empty()); | 565 DCHECK(resource_map_.empty()); |
| 576 resource_map_.clear(); | 566 resource_map_.clear(); |
| 577 root_.reset(); | 567 root_.reset(); |
| 578 } | 568 } |
| 579 | 569 |
| 580 void GDataDirectoryService::AddEntryToDirectory( | 570 void GDataDirectoryService::AddEntryToDirectory( |
| 581 const FilePath& directory_path, | 571 const FilePath& directory_path, |
| 582 GDataEntry* entry, | 572 GDataEntry* entry, |
| 583 const FileOperationCallback& callback) { | 573 const FilePathUpdateCallback& callback) { |
| 574 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 575 DCHECK(entry); |
| 576 |
| 577 if (entry->parent()) |
| 578 entry->parent()->RemoveChild(entry); |
| 579 |
| 584 GDataEntry* destination = FindEntryByPathSync(directory_path); | 580 GDataEntry* destination = FindEntryByPathSync(directory_path); |
| 581 FilePath updated_file_path; |
| 585 GDataFileError error = GDATA_FILE_ERROR_FAILED; | 582 GDataFileError error = GDATA_FILE_ERROR_FAILED; |
| 586 if (!destination) { | 583 if (!destination) { |
| 587 error = GDATA_FILE_ERROR_NOT_FOUND; | 584 error = GDATA_FILE_ERROR_NOT_FOUND; |
| 588 } else if (!destination->AsGDataDirectory()) { | 585 } else if (!destination->AsGDataDirectory()) { |
| 589 error = GDATA_FILE_ERROR_NOT_A_DIRECTORY; | 586 error = GDATA_FILE_ERROR_NOT_A_DIRECTORY; |
| 590 } else { | 587 } else { |
| 591 destination->AsGDataDirectory()->AddEntry(entry); | 588 destination->AsGDataDirectory()->AddEntry(entry); |
| 589 updated_file_path = entry->GetFilePath(); |
| 592 error = GDATA_FILE_OK; | 590 error = GDATA_FILE_OK; |
| 593 } | 591 } |
| 594 if (!callback.is_null()) { | 592 if (!callback.is_null()) { |
| 595 base::MessageLoopProxy::current()->PostTask( | 593 base::MessageLoopProxy::current()->PostTask( |
| 596 FROM_HERE, base::Bind(callback, error)); | 594 FROM_HERE, base::Bind(callback, error, updated_file_path)); |
| 597 } | 595 } |
| 598 } | 596 } |
| 599 | 597 |
| 600 void GDataDirectoryService::AddEntryToResourceMap(GDataEntry* entry) { | 598 void GDataDirectoryService::AddEntryToResourceMap(GDataEntry* entry) { |
| 601 // GDataFileSystem has already locked. | 599 // GDataFileSystem has already locked. |
| 602 DVLOG(1) << "AddEntryToResourceMap " << entry->resource_id(); | 600 DVLOG(1) << "AddEntryToResourceMap " << entry->resource_id(); |
| 603 resource_map_.insert(std::make_pair(entry->resource_id(), entry)); | 601 resource_map_.insert(std::make_pair(entry->resource_id(), entry)); |
| 604 } | 602 } |
| 605 | 603 |
| 606 void GDataDirectoryService::RemoveEntryFromResourceMap(GDataEntry* entry) { | 604 void GDataDirectoryService::RemoveEntryFromResourceMap(GDataEntry* entry) { |
| (...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 949 file_specific_info->set_file_md5(file_md5_); | 947 file_specific_info->set_file_md5(file_md5_); |
| 950 file_specific_info->set_document_extension(document_extension_); | 948 file_specific_info->set_document_extension(document_extension_); |
| 951 file_specific_info->set_is_hosted_document(is_hosted_document_); | 949 file_specific_info->set_is_hosted_document(is_hosted_document_); |
| 952 } | 950 } |
| 953 | 951 |
| 954 bool GDataDirectory::FromProto(const GDataDirectoryProto& proto) { | 952 bool GDataDirectory::FromProto(const GDataDirectoryProto& proto) { |
| 955 DCHECK(proto.gdata_entry().file_info().is_directory()); | 953 DCHECK(proto.gdata_entry().file_info().is_directory()); |
| 956 DCHECK(!proto.gdata_entry().has_file_specific_info()); | 954 DCHECK(!proto.gdata_entry().has_file_specific_info()); |
| 957 | 955 |
| 958 for (int i = 0; i < proto.child_files_size(); ++i) { | 956 for (int i = 0; i < proto.child_files_size(); ++i) { |
| 959 scoped_ptr<GDataFile> file(new GDataFile(this, directory_service_)); | 957 scoped_ptr<GDataFile> file(new GDataFile(NULL, directory_service_)); |
| 960 if (!file->FromProto(proto.child_files(i))) { | 958 if (!file->FromProto(proto.child_files(i))) { |
| 961 RemoveChildren(); | 959 RemoveChildren(); |
| 962 return false; | 960 return false; |
| 963 } | 961 } |
| 964 AddEntry(file.release()); | 962 AddEntry(file.release()); |
| 965 } | 963 } |
| 966 for (int i = 0; i < proto.child_directories_size(); ++i) { | 964 for (int i = 0; i < proto.child_directories_size(); ++i) { |
| 967 scoped_ptr<GDataDirectory> dir(new GDataDirectory(this, | 965 scoped_ptr<GDataDirectory> dir(new GDataDirectory(NULL, |
| 968 directory_service_)); | 966 directory_service_)); |
| 969 if (!dir->FromProto(proto.child_directories(i))) { | 967 if (!dir->FromProto(proto.child_directories(i))) { |
| 970 RemoveChildren(); | 968 RemoveChildren(); |
| 971 return false; | 969 return false; |
| 972 } | 970 } |
| 973 AddEntry(dir.release()); | 971 AddEntry(dir.release()); |
| 974 } | 972 } |
| 975 | 973 |
| 976 // The states of the directory should be updated after children are | 974 // The states of the directory should be updated after children are |
| 977 // handled successfully, so that incomplete states are not left. | 975 // handled successfully, so that incomplete states are not left. |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1071 if (file->FromProto(entry_proto)) { | 1069 if (file->FromProto(entry_proto)) { |
| 1072 entry.reset(file.release()); | 1070 entry.reset(file.release()); |
| 1073 } else { | 1071 } else { |
| 1074 NOTREACHED() << "FromProto (file) failed"; | 1072 NOTREACHED() << "FromProto (file) failed"; |
| 1075 } | 1073 } |
| 1076 } | 1074 } |
| 1077 return entry.Pass(); | 1075 return entry.Pass(); |
| 1078 } | 1076 } |
| 1079 | 1077 |
| 1080 } // namespace gdata | 1078 } // namespace gdata |
| OLD | NEW |