Chromium Code Reviews| Index: chrome/browser/chromeos/gdata/gdata_files.cc |
| =================================================================== |
| --- chrome/browser/chromeos/gdata/gdata_files.cc (revision 151875) |
| +++ chrome/browser/chromeos/gdata/gdata_files.cc (working copy) |
| @@ -33,6 +33,7 @@ |
| : parent_(NULL), |
| directory_service_(directory_service), |
| deleted_(false) { |
| + DCHECK(directory_service); |
| } |
| GDataEntry::~GDataEntry() { |
| @@ -236,8 +237,7 @@ |
| << ", resource = " + entry->resource_id(); |
| // Add entry to resource map. |
| - if (directory_service_) |
| - directory_service_->AddEntryToResourceMap(entry); |
| + directory_service_->AddEntryToResourceMap(entry); |
| // Setup child and parent links. |
| AddChild(entry); |
| @@ -245,9 +245,10 @@ |
| } |
| bool GDataDirectory::TakeOverEntries(GDataDirectory* dir) { |
| - for (GDataFileCollection::iterator iter = dir->child_files_.begin(); |
| + for (GDataFileCollection::const_iterator iter = dir->child_files_.begin(); |
| iter != dir->child_files_.end(); ++iter) { |
| GDataEntry* entry = iter->second; |
| + directory_service_->RemoveEntryFromResourceMap(entry->resource_id()); |
| entry->SetParent(NULL); |
| AddEntry(entry); |
| } |
| @@ -257,6 +258,7 @@ |
| dir->child_directories_.begin(); |
| iter != dir->child_directories_.end(); ++iter) { |
| GDataEntry* entry = iter->second; |
| + directory_service_->RemoveEntryFromResourceMap(entry->resource_id()); |
| entry->SetParent(NULL); |
| AddEntry(entry); |
| } |
| @@ -273,9 +275,9 @@ |
| GDataEntry* GDataDirectory::FindChild( |
| const FilePath::StringType& file_name) const { |
| - GDataFileCollection::const_iterator it = child_files_.find(file_name); |
| - if (it != child_files_.end()) |
| - return it->second; |
| + GDataFileCollection::const_iterator iter = child_files_.find(file_name); |
| + if (iter != child_files_.end()) |
| + return iter->second; |
| GDataDirectoryCollection::const_iterator itd = |
| child_directories_.find(file_name); |
| @@ -288,13 +290,13 @@ |
| void GDataDirectory::AddChild(GDataEntry* entry) { |
| DCHECK(entry); |
| - GDataFile* file = entry->AsGDataFile(); |
| - if (file) |
| - child_files_.insert(std::make_pair(entry->base_name(), file)); |
| + if (entry->AsGDataFile()) |
| + child_files_.insert(std::make_pair(entry->base_name(), |
| + entry->AsGDataFile())); |
| - GDataDirectory* directory = entry->AsGDataDirectory(); |
| - if (directory) |
| - child_directories_.insert(std::make_pair(entry->base_name(), directory)); |
| + if (entry->AsGDataDirectory()) |
| + child_directories_.insert(std::make_pair(entry->base_name(), |
| + entry->AsGDataDirectory())); |
| } |
| void GDataDirectory::RemoveChild(GDataEntry* entry) { |
| @@ -304,8 +306,7 @@ |
| // entry must be present in this directory. |
| DCHECK_EQ(entry, FindChild(base_name)); |
| // Remove entry from resource map first. |
| - if (directory_service_) |
| - directory_service_->RemoveEntryFromResourceMap(entry); |
| + directory_service_->RemoveEntryFromResourceMap(entry->resource_id()); |
| // Then delete it from tree. |
| child_files_.erase(base_name); |
| @@ -320,10 +321,10 @@ |
| } |
| void GDataDirectory::RemoveChildFiles() { |
| + DVLOG(1) << "RemoveChildFiles " << resource_id(); |
| for (GDataFileCollection::const_iterator iter = child_files_.begin(); |
| iter != child_files_.end(); ++iter) { |
| - if (directory_service_) |
| - directory_service_->RemoveEntryFromResourceMap(iter->second); |
| + directory_service_->RemoveEntryFromResourceMap(iter->second->resource_id()); |
| } |
| STLDeleteValues(&child_files_); |
| child_files_.clear(); |
| @@ -335,13 +336,22 @@ |
| GDataDirectory* dir = iter->second; |
| // Remove directories recursively. |
| dir->RemoveChildren(); |
| - if (directory_service_) |
| - directory_service_->RemoveEntryFromResourceMap(dir); |
| + directory_service_->RemoveEntryFromResourceMap(dir->resource_id()); |
| } |
| STLDeleteValues(&child_directories_); |
| child_directories_.clear(); |
| } |
| +// Recursively extracts the paths set of all sub-directories. |
|
satorux1
2012/08/17 11:49:17
remove this comment?
achuithb
2012/08/17 21:02:27
Done.
|
| +void GDataDirectory::GetChildDirectoryPaths(std::set<FilePath>* child_dirs) { |
| + for (GDataDirectoryCollection::const_iterator it = child_directories_.begin(); |
| + it != child_directories_.end(); ++it) { |
| + GDataDirectory* child_dir = it->second; |
| + child_dirs->insert(child_dir->GetFilePath()); |
| + child_dir->GetChildDirectoryPaths(child_dirs); |
| + } |
| +} |
| + |
| // Convert to/from proto. |
| // static |
| @@ -498,15 +508,15 @@ |
| scoped_ptr<GDataEntryProtoVector> GDataDirectory::ToProtoVector() const { |
| scoped_ptr<GDataEntryProtoVector> entries(new GDataEntryProtoVector); |
| - for (GDataFileCollection::const_iterator iter = child_files().begin(); |
| - iter != child_files().end(); ++iter) { |
| + for (GDataFileCollection::const_iterator iter = child_files_.begin(); |
| + iter != child_files_.end(); ++iter) { |
| GDataEntryProto proto; |
| iter->second->ToProto(&proto); |
| entries->push_back(proto); |
| } |
| for (GDataDirectoryCollection::const_iterator iter = |
| - child_directories().begin(); |
| - iter != child_directories().end(); ++iter) { |
| + child_directories_.begin(); |
| + iter != child_directories_.end(); ++iter) { |
| GDataEntryProto proto; |
| // Convert to GDataEntry, as we don't want to include children in |proto|. |
| static_cast<const GDataEntry*>(iter->second)->ToProtoFull(&proto); |