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

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

Issue 10827211: Replace GDataDirectory::TakeEntry with GDataDirectoryService::AddEntryToDirectory. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: better tests 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
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_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 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 329
330 // Add entry to resource map. 330 // Add entry to resource map.
331 if (directory_service_) 331 if (directory_service_)
332 directory_service_->AddEntryToResourceMap(entry); 332 directory_service_->AddEntryToResourceMap(entry);
333 333
334 // Setup child and parent links. 334 // Setup child and parent links.
335 AddChild(entry); 335 AddChild(entry);
336 entry->SetParent(this); 336 entry->SetParent(this);
337 } 337 }
338 338
339 bool GDataDirectory::TakeEntry(GDataEntry* entry) {
340 DCHECK(entry);
341 DCHECK(entry->parent());
342
343 entry->parent()->RemoveChild(entry);
344 AddEntry(entry);
345
346 return true;
347 }
348
349 bool GDataDirectory::TakeOverEntries(GDataDirectory* dir) { 339 bool GDataDirectory::TakeOverEntries(GDataDirectory* dir) {
350 for (GDataFileCollection::iterator iter = dir->child_files_.begin(); 340 for (GDataFileCollection::iterator iter = dir->child_files_.begin();
351 iter != dir->child_files_.end(); ++iter) { 341 iter != dir->child_files_.end(); ++iter) {
352 AddEntry(iter->second); 342 AddEntry(iter->second);
353 } 343 }
354 dir->child_files_.clear(); 344 dir->child_files_.clear();
355 345
356 for (GDataDirectoryCollection::iterator iter = 346 for (GDataDirectoryCollection::iterator iter =
357 dir->child_directories_.begin(); 347 dir->child_directories_.begin();
358 iter != dir->child_directories_.end(); ++iter) { 348 iter != dir->child_directories_.end(); ++iter) {
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
582 void GDataDirectoryService::ClearRoot() { 572 void GDataDirectoryService::ClearRoot() {
583 // Note that children have a reference to root_, 573 // Note that children have a reference to root_,
584 // so we need to delete them here. 574 // so we need to delete them here.
585 root_->RemoveChildren(); 575 root_->RemoveChildren();
586 RemoveEntryFromResourceMap(root_.get()); 576 RemoveEntryFromResourceMap(root_.get());
587 DCHECK(resource_map_.empty()); 577 DCHECK(resource_map_.empty());
588 resource_map_.clear(); 578 resource_map_.clear();
589 root_.reset(); 579 root_.reset();
590 } 580 }
591 581
592 void GDataDirectoryService::AddEntryToDirectory( 582 void GDataDirectoryService::MoveEntryToDirectory(
593 const FilePath& directory_path, 583 const FilePath& directory_path,
594 GDataEntry* entry, 584 GDataEntry* entry,
595 const FileOperationCallback& callback) { 585 const FileMoveCallback& callback) {
586 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
587 DCHECK(entry);
588
589 if (entry->parent())
590 entry->parent()->RemoveChild(entry);
591
596 GDataEntry* destination = FindEntryByPathSync(directory_path); 592 GDataEntry* destination = FindEntryByPathSync(directory_path);
593 FilePath moved_file_path;
597 GDataFileError error = GDATA_FILE_ERROR_FAILED; 594 GDataFileError error = GDATA_FILE_ERROR_FAILED;
598 if (!destination) { 595 if (!destination) {
599 error = GDATA_FILE_ERROR_NOT_FOUND; 596 error = GDATA_FILE_ERROR_NOT_FOUND;
600 } else if (!destination->AsGDataDirectory()) { 597 } else if (!destination->AsGDataDirectory()) {
601 error = GDATA_FILE_ERROR_NOT_A_DIRECTORY; 598 error = GDATA_FILE_ERROR_NOT_A_DIRECTORY;
602 } else { 599 } else {
603 destination->AsGDataDirectory()->AddEntry(entry); 600 destination->AsGDataDirectory()->AddEntry(entry);
601 moved_file_path = entry->GetFilePath();
604 error = GDATA_FILE_OK; 602 error = GDATA_FILE_OK;
605 } 603 }
606 if (!callback.is_null()) { 604 if (!callback.is_null()) {
607 base::MessageLoopProxy::current()->PostTask( 605 base::MessageLoopProxy::current()->PostTask(
608 FROM_HERE, base::Bind(callback, error)); 606 FROM_HERE, base::Bind(callback, error, moved_file_path));
609 } 607 }
610 } 608 }
611 609
612 void GDataDirectoryService::AddEntryToResourceMap(GDataEntry* entry) { 610 void GDataDirectoryService::AddEntryToResourceMap(GDataEntry* entry) {
613 // GDataFileSystem has already locked. 611 // GDataFileSystem has already locked.
614 DVLOG(1) << "AddEntryToResourceMap " << entry->resource_id(); 612 DVLOG(1) << "AddEntryToResourceMap " << entry->resource_id();
615 resource_map_.insert(std::make_pair(entry->resource_id(), entry)); 613 resource_map_.insert(std::make_pair(entry->resource_id(), entry));
616 } 614 }
617 615
618 void GDataDirectoryService::RemoveEntryFromResourceMap(GDataEntry* entry) { 616 void GDataDirectoryService::RemoveEntryFromResourceMap(GDataEntry* entry) {
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after
1025 file_specific_info->set_file_md5(file_md5_); 1023 file_specific_info->set_file_md5(file_md5_);
1026 file_specific_info->set_document_extension(document_extension_); 1024 file_specific_info->set_document_extension(document_extension_);
1027 file_specific_info->set_is_hosted_document(is_hosted_document_); 1025 file_specific_info->set_is_hosted_document(is_hosted_document_);
1028 } 1026 }
1029 1027
1030 bool GDataDirectory::FromProto(const GDataDirectoryProto& proto) { 1028 bool GDataDirectory::FromProto(const GDataDirectoryProto& proto) {
1031 DCHECK(proto.gdata_entry().file_info().is_directory()); 1029 DCHECK(proto.gdata_entry().file_info().is_directory());
1032 DCHECK(!proto.gdata_entry().has_file_specific_info()); 1030 DCHECK(!proto.gdata_entry().has_file_specific_info());
1033 1031
1034 for (int i = 0; i < proto.child_files_size(); ++i) { 1032 for (int i = 0; i < proto.child_files_size(); ++i) {
1035 scoped_ptr<GDataFile> file(new GDataFile(this, directory_service_)); 1033 scoped_ptr<GDataFile> file(new GDataFile(NULL, directory_service_));
1036 if (!file->FromProto(proto.child_files(i))) { 1034 if (!file->FromProto(proto.child_files(i))) {
1037 RemoveChildren(); 1035 RemoveChildren();
1038 return false; 1036 return false;
1039 } 1037 }
1040 AddEntry(file.release()); 1038 AddEntry(file.release());
1041 } 1039 }
1042 for (int i = 0; i < proto.child_directories_size(); ++i) { 1040 for (int i = 0; i < proto.child_directories_size(); ++i) {
1043 scoped_ptr<GDataDirectory> dir(new GDataDirectory(this, 1041 scoped_ptr<GDataDirectory> dir(new GDataDirectory(NULL,
1044 directory_service_)); 1042 directory_service_));
1045 if (!dir->FromProto(proto.child_directories(i))) { 1043 if (!dir->FromProto(proto.child_directories(i))) {
1046 RemoveChildren(); 1044 RemoveChildren();
1047 return false; 1045 return false;
1048 } 1046 }
1049 AddEntry(dir.release()); 1047 AddEntry(dir.release());
1050 } 1048 }
1051 1049
1052 // The states of the directory should be updated after children are 1050 // The states of the directory should be updated after children are
1053 // handled successfully, so that incomplete states are not left. 1051 // handled successfully, so that incomplete states are not left.
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
1214 DCHECK(result.get()); 1212 DCHECK(result.get());
1215 1213
1216 result->second.path = second_path; 1214 result->second.path = second_path;
1217 result->second.error = error; 1215 result->second.error = error;
1218 result->second.proto = entry_proto.Pass(); 1216 result->second.proto = entry_proto.Pass();
1219 1217
1220 callback.Run(result.Pass()); 1218 callback.Run(result.Pass());
1221 } 1219 }
1222 1220
1223 } // namespace gdata 1221 } // namespace gdata
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698