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/drive/drive_resource_metadata.h" | 5 #include "chrome/browser/chromeos/drive/drive_resource_metadata.h" |
6 | 6 |
7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
8 #include "base/stringprintf.h" | 8 #include "base/stringprintf.h" |
9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
10 #include "chrome/browser/chromeos/drive/drive.pb.h" | 10 #include "chrome/browser/chromeos/drive/drive.pb.h" |
(...skipping 571 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
582 | 582 |
583 DVLOG(1) << "RenameEntry " << file_path.value() << " to " << new_name; | 583 DVLOG(1) << "RenameEntry " << file_path.value() << " to " << new_name; |
584 scoped_ptr<DriveEntryProto> entry = FindEntryByPathSync(file_path); | 584 scoped_ptr<DriveEntryProto> entry = FindEntryByPathSync(file_path); |
585 if (!entry) | 585 if (!entry) |
586 return FileMoveResult(DRIVE_FILE_ERROR_NOT_FOUND); | 586 return FileMoveResult(DRIVE_FILE_ERROR_NOT_FOUND); |
587 | 587 |
588 if (base::FilePath::FromUTF8Unsafe(new_name) == file_path.BaseName()) | 588 if (base::FilePath::FromUTF8Unsafe(new_name) == file_path.BaseName()) |
589 return FileMoveResult(DRIVE_FILE_ERROR_EXISTS); | 589 return FileMoveResult(DRIVE_FILE_ERROR_EXISTS); |
590 | 590 |
591 entry->set_title(new_name); | 591 entry->set_title(new_name); |
592 storage_->PutEntry(*entry); | 592 scoped_ptr<GetEntryInfoWithFilePathResult> result = |
593 | 593 RefreshEntryOnBlockingPool(*entry); |
594 // After changing the title of the entry, call MoveEntryToDirectory to | 594 return FileMoveResult(result->error, result->path); |
595 // remove the entry from its parent directory and then add it back in order to | |
596 // go through the file name de-duplication. | |
597 // TODO(achuith/satorux/zel): This code is fragile. The title has been | |
598 // changed, but not the file_name. MoveEntryToDirectory calls RemoveChild to | |
599 // remove the child based on the old file_name, and then re-adds the child by | |
600 // first assigning the new title to file_name. http://crbug.com/30157 | |
601 return MoveEntryToDirectoryOnBlockingPool( | |
602 file_path, GetFilePath(entry->parent_resource_id())); | |
603 } | 595 } |
604 | 596 |
605 DriveResourceMetadata::FileMoveResult | 597 DriveResourceMetadata::FileMoveResult |
606 DriveResourceMetadata::RemoveEntryOnBlockingPool( | 598 DriveResourceMetadata::RemoveEntryOnBlockingPool( |
607 const std::string& resource_id) { | 599 const std::string& resource_id) { |
608 DCHECK(blocking_task_runner_->RunsTasksOnCurrentThread()); | 600 DCHECK(blocking_task_runner_->RunsTasksOnCurrentThread()); |
609 | 601 |
610 // Disallow deletion of root. | 602 // Disallow deletion of root. |
611 if (resource_id == root_resource_id_) | 603 if (resource_id == root_resource_id_) |
612 return FileMoveResult(DRIVE_FILE_ERROR_ACCESS_DENIED); | 604 return FileMoveResult(DRIVE_FILE_ERROR_ACCESS_DENIED); |
(...skipping 565 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1178 storage_->PutEntry( | 1170 storage_->PutEntry( |
1179 CreateEntryWithProperBaseName(proto.drive_directory().drive_entry())); | 1171 CreateEntryWithProperBaseName(proto.drive_directory().drive_entry())); |
1180 AddDescendantsFromProto(proto.drive_directory()); | 1172 AddDescendantsFromProto(proto.drive_directory()); |
1181 | 1173 |
1182 storage_->SetLargestChangestamp(proto.largest_changestamp()); | 1174 storage_->SetLargestChangestamp(proto.largest_changestamp()); |
1183 | 1175 |
1184 return true; | 1176 return true; |
1185 } | 1177 } |
1186 | 1178 |
1187 } // namespace drive | 1179 } // namespace drive |
OLD | NEW |