| Index: chrome/browser/chromeos/gdata/gdata_files.cc
|
| ===================================================================
|
| --- chrome/browser/chromeos/gdata/gdata_files.cc (revision 150246)
|
| +++ chrome/browser/chromeos/gdata/gdata_files.cc (working copy)
|
| @@ -350,14 +350,11 @@
|
| return true;
|
| }
|
|
|
| -bool GDataDirectory::RemoveEntry(GDataEntry* entry) {
|
| +void GDataDirectory::RemoveEntry(GDataEntry* entry) {
|
| DCHECK(entry);
|
|
|
| - if (!RemoveChild(entry))
|
| - return false;
|
| -
|
| + RemoveChild(entry);
|
| delete entry;
|
| - return true;
|
| }
|
|
|
| GDataEntry* GDataDirectory::FindChild(
|
| @@ -386,25 +383,19 @@
|
| child_directories_.insert(std::make_pair(entry->base_name(), directory));
|
| }
|
|
|
| -bool GDataDirectory::RemoveChild(GDataEntry* entry) {
|
| +void GDataDirectory::RemoveChild(GDataEntry* entry) {
|
| DCHECK(entry);
|
|
|
| - const std::string file_name(entry->base_name());
|
| - GDataEntry* found_entry = FindChild(file_name);
|
| - if (!found_entry)
|
| - return false;
|
| -
|
| - DCHECK_EQ(entry, found_entry);
|
| -
|
| + const std::string& base_name(entry->base_name());
|
| + // 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);
|
|
|
| // Then delete it from tree.
|
| - child_files_.erase(file_name);
|
| - child_directories_.erase(file_name);
|
| -
|
| - return true;
|
| + child_files_.erase(base_name);
|
| + child_directories_.erase(base_name);
|
| }
|
|
|
| void GDataDirectory::RemoveChildren() {
|
| @@ -619,39 +610,22 @@
|
|
|
| GDataEntry* GDataDirectoryService::FindEntryByPathSync(
|
| const FilePath& file_path) {
|
| + if (file_path == root_->GetFilePath())
|
| + return root_.get();
|
| +
|
| std::vector<FilePath::StringType> components;
|
| file_path.GetComponents(&components);
|
| -
|
| GDataDirectory* current_dir = root_.get();
|
| - FilePath directory_path;
|
|
|
| - for (size_t i = 0; i < components.size() && current_dir; i++) {
|
| - directory_path = directory_path.Append(current_dir->base_name());
|
| -
|
| - // Last element must match, if not last then it must be a directory.
|
| - if (i == components.size() - 1) {
|
| - if (current_dir->base_name() == components[i])
|
| - return current_dir;
|
| - else
|
| - return NULL;
|
| - }
|
| -
|
| - // Not the last part of the path, search for the next segment.
|
| - GDataEntry* entry = current_dir->FindChild(components[i + 1]);
|
| - if (!entry) {
|
| + for (size_t i = 1; i < components.size() && current_dir; ++i) {
|
| + GDataEntry* entry = current_dir->FindChild(components[i]);
|
| + if (!entry)
|
| return NULL;
|
| - }
|
|
|
| - // Found file, must be the last segment.
|
| - if (entry->file_info().is_directory) {
|
| - // Found directory, continue traversal.
|
| + if (i == components.size() - 1) // Last component.
|
| + return entry;
|
| + else
|
| current_dir = entry->AsGDataDirectory();
|
| - } else {
|
| - if ((i + 1) == (components.size() - 1))
|
| - return entry;
|
| - else
|
| - return NULL;
|
| - }
|
| }
|
| return NULL;
|
| }
|
|
|