Index: chrome/browser/chromeos/gdata/gdata_files.cc |
=================================================================== |
--- chrome/browser/chromeos/gdata/gdata_files.cc (revision 152392) |
+++ chrome/browser/chromeos/gdata/gdata_files.cc (working copy) |
@@ -217,7 +217,7 @@ |
FilePath full_file_name(entry->base_name()); |
const std::string extension = full_file_name.Extension(); |
const std::string file_name = full_file_name.RemoveExtension().value(); |
- while (FindChild(full_file_name.value())) { |
+ while (!FindChild(full_file_name.value()).empty()) { |
if (!extension.empty()) { |
full_file_name = FilePath(base::StringPrintf("%s (%d)%s", |
file_name.c_str(), |
@@ -240,32 +240,38 @@ |
directory_service_->AddEntryToResourceMap(entry); |
// Setup child and parent links. |
- AddChild(entry); |
+ if (entry->AsGDataFile()) |
+ child_files_.insert(std::make_pair(entry->base_name(), |
+ entry->resource_id())); |
+ |
+ if (entry->AsGDataDirectory()) |
+ child_directories_.insert(std::make_pair(entry->base_name(), |
+ entry->resource_id())); |
entry->SetParent(this); |
} |
-bool GDataDirectory::TakeOverEntries(GDataDirectory* dir) { |
- for (GDataFileCollection::const_iterator iter = dir->child_files_.begin(); |
+void GDataDirectory::TakeOverEntries(GDataDirectory* dir) { |
+ for (GDataChildMap::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); |
+ TakeOverEntry(iter->second); |
} |
dir->child_files_.clear(); |
- for (GDataDirectoryCollection::iterator iter = |
- dir->child_directories_.begin(); |
+ for (GDataChildMap::iterator iter = 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); |
+ TakeOverEntry(iter->second); |
} |
dir->child_directories_.clear(); |
- return true; |
} |
+void GDataDirectory::TakeOverEntry(const std::string& resource_id) { |
+ GDataEntry* entry = directory_service_->GetEntryByResourceId(resource_id); |
+ DCHECK(entry); |
+ directory_service_->RemoveEntryFromResourceMap(resource_id); |
+ entry->SetParent(NULL); |
+ AddEntry(entry); |
+} |
+ |
void GDataDirectory::RemoveEntry(GDataEntry* entry) { |
DCHECK(entry); |
@@ -273,38 +279,25 @@ |
delete entry; |
} |
-GDataEntry* GDataDirectory::FindChild( |
+std::string GDataDirectory::FindChild( |
const FilePath::StringType& file_name) const { |
- GDataFileCollection::const_iterator iter = child_files_.find(file_name); |
+ GDataChildMap::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); |
- if (itd != child_directories_.end()) |
- return itd->second; |
+ iter = child_directories_.find(file_name); |
+ if (iter != child_directories_.end()) |
+ return iter->second; |
- return NULL; |
+ return std::string(); |
} |
-void GDataDirectory::AddChild(GDataEntry* entry) { |
- DCHECK(entry); |
- |
- if (entry->AsGDataFile()) |
- child_files_.insert(std::make_pair(entry->base_name(), |
- entry->AsGDataFile())); |
- |
- if (entry->AsGDataDirectory()) |
- child_directories_.insert(std::make_pair(entry->base_name(), |
- entry->AsGDataDirectory())); |
-} |
- |
void GDataDirectory::RemoveChild(GDataEntry* entry) { |
DCHECK(entry); |
const std::string& base_name(entry->base_name()); |
// entry must be present in this directory. |
- DCHECK_EQ(entry, FindChild(base_name)); |
+ DCHECK_EQ(entry->resource_id(), FindChild(base_name)); |
// Remove entry from resource map first. |
directory_service_->RemoveEntryFromResourceMap(entry->resource_id()); |
@@ -322,32 +315,38 @@ |
void GDataDirectory::RemoveChildFiles() { |
DVLOG(1) << "RemoveChildFiles " << resource_id(); |
- for (GDataFileCollection::const_iterator iter = child_files_.begin(); |
+ for (GDataChildMap::const_iterator iter = child_files_.begin(); |
iter != child_files_.end(); ++iter) { |
- directory_service_->RemoveEntryFromResourceMap(iter->second->resource_id()); |
+ GDataEntry* child = directory_service_->GetEntryByResourceId(iter->second); |
+ DCHECK(child); |
+ directory_service_->RemoveEntryFromResourceMap(iter->second); |
+ delete child; |
} |
- STLDeleteValues(&child_files_); |
child_files_.clear(); |
} |
void GDataDirectory::RemoveChildDirectories() { |
- for (GDataDirectoryCollection::iterator iter = child_directories_.begin(); |
+ for (GDataChildMap::iterator iter = child_directories_.begin(); |
iter != child_directories_.end(); ++iter) { |
- GDataDirectory* dir = iter->second; |
+ GDataDirectory* dir = directory_service_->GetEntryByResourceId( |
+ iter->second)->AsGDataDirectory(); |
+ DCHECK(dir); |
// Remove directories recursively. |
dir->RemoveChildren(); |
- directory_service_->RemoveEntryFromResourceMap(dir->resource_id()); |
+ directory_service_->RemoveEntryFromResourceMap(iter->second); |
+ delete dir; |
} |
- STLDeleteValues(&child_directories_); |
child_directories_.clear(); |
} |
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); |
+ for (GDataChildMap::const_iterator iter = child_directories_.begin(); |
+ iter != child_directories_.end(); ++iter) { |
+ GDataDirectory* dir = directory_service_->GetEntryByResourceId( |
+ iter->second)->AsGDataDirectory(); |
+ DCHECK(dir); |
+ child_dirs->insert(dir->GetFilePath()); |
+ dir->GetChildDirectoryPaths(child_dirs); |
} |
} |
@@ -470,33 +469,35 @@ |
GDataEntry::ToProto(proto->mutable_gdata_entry()); |
DCHECK(proto->gdata_entry().file_info().is_directory()); |
- for (GDataFileCollection::const_iterator iter = child_files_.begin(); |
+ for (GDataChildMap::const_iterator iter = child_files_.begin(); |
iter != child_files_.end(); ++iter) { |
- GDataFile* file = iter->second; |
+ GDataFile* file = directory_service_->GetEntryByResourceId( |
+ iter->second)->AsGDataFile(); |
+ DCHECK(file); |
file->ToProto(proto->add_child_files()); |
} |
- for (GDataDirectoryCollection::const_iterator iter = |
- child_directories_.begin(); |
+ for (GDataChildMap::const_iterator iter = child_directories_.begin(); |
iter != child_directories_.end(); ++iter) { |
- GDataDirectory* dir = iter->second; |
+ GDataDirectory* dir = directory_service_->GetEntryByResourceId( |
+ iter->second)->AsGDataDirectory(); |
+ DCHECK(dir); |
dir->ToProto(proto->add_child_directories()); |
} |
} |
scoped_ptr<GDataEntryProtoVector> GDataDirectory::ToProtoVector() const { |
scoped_ptr<GDataEntryProtoVector> entries(new GDataEntryProtoVector); |
- for (GDataFileCollection::const_iterator iter = child_files_.begin(); |
+ // Use ToProtoFull, as we don't want to include children in |proto|. |
+ for (GDataChildMap::const_iterator iter = child_files_.begin(); |
iter != child_files_.end(); ++iter) { |
GDataEntryProto proto; |
- iter->second->ToProto(&proto); |
+ directory_service_->GetEntryByResourceId(iter->second)->ToProtoFull(&proto); |
entries->push_back(proto); |
} |
- for (GDataDirectoryCollection::const_iterator iter = |
- child_directories_.begin(); |
+ for (GDataChildMap::const_iterator 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); |
+ directory_service_->GetEntryByResourceId(iter->second)->ToProtoFull(&proto); |
entries->push_back(proto); |
} |