Chromium Code Reviews| Index: chrome/browser/chromeos/drive/drive_resource_metadata.cc |
| diff --git a/chrome/browser/chromeos/drive/drive_resource_metadata.cc b/chrome/browser/chromeos/drive/drive_resource_metadata.cc |
| index a6f780c7c917e6021eb82393fd9134d30e3cd97a..5147a224debb7c4fad0778f17cce9594ed8dc9a4 100644 |
| --- a/chrome/browser/chromeos/drive/drive_resource_metadata.cc |
| +++ b/chrome/browser/chromeos/drive/drive_resource_metadata.cc |
| @@ -198,8 +198,8 @@ DriveResourceMetadata::DriveResourceMetadata() |
| origin_(UNINITIALIZED), |
| ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) { |
| root_ = CreateDriveDirectory().Pass(); |
| - if (!google_apis::util::IsDriveV2ApiEnabled()) |
| - InitializeRootEntry(kDriveRootDirectoryResourceId); |
| + root_->set_title(kDriveRootDirectory); |
| + root_->SetBaseNameFromTitle(); |
| } |
| DriveResourceMetadata::~DriveResourceMetadata() { |
| @@ -232,11 +232,9 @@ scoped_ptr<DriveDirectory> DriveResourceMetadata::CreateDriveDirectory() { |
| return scoped_ptr<DriveDirectory>(new DriveDirectory(this)); |
| } |
| -void DriveResourceMetadata::InitializeRootEntry(const std::string& root_id) { |
| - root_ = CreateDriveDirectory().Pass(); |
| - root_->set_title(kDriveRootDirectory); |
| - root_->SetBaseNameFromTitle(); |
| - root_->set_resource_id(root_id); |
| +void DriveResourceMetadata::SetRootResourceId(const std::string& id) { |
| + DCHECK(root_->resource_id().empty()); |
| + root_->set_resource_id(id); |
| AddEntryToResourceMap(root_.get()); |
| } |
| @@ -244,12 +242,15 @@ void DriveResourceMetadata::ClearRoot() { |
| if (!root_.get()) |
| return; |
| - // Note that children have a reference to root_, |
| - // so we need to delete them here. |
| - root_->RemoveChildren(); |
| - RemoveEntryFromResourceMap(root_->resource_id()); |
| - DCHECK(resource_map_.empty()); |
| - resource_map_.clear(); |
| + // If root resource ID is not set, it means no children. |
| + if (!root_->resource_id().empty()) { |
|
satorux1
2012/10/26 06:14:36
Do we need to check? Can we just always run the sa
kochi
2012/10/26 07:35:42
No. RemoveEntryFromResourceMap DCHECK()'s empty re
satorux1
2012/10/26 07:52:44
I think we can change ClearRoot() to do something
|
| + // Note that children have a reference to root_, |
| + // so we need to delete them here. |
| + root_->RemoveChildren(); |
| + RemoveEntryFromResourceMap(root_->resource_id()); |
| + DCHECK(resource_map_.empty()); |
| + resource_map_.clear(); |
| + } |
| root_.reset(); |
| } |
| @@ -365,7 +366,7 @@ void DriveResourceMetadata::RemoveEntryFromParent( |
| DCHECK(!callback.is_null()); |
| // Disallow deletion of root. |
| - if (resource_id == kDriveRootDirectoryResourceId) { |
| + if (resource_id == root_->resource_id()) { |
| PostFileMoveCallbackError(callback, DRIVE_FILE_ERROR_ACCESS_DENIED); |
| return; |
| } |
| @@ -652,7 +653,6 @@ void DriveResourceMetadata::InitResourceMap( |
| DCHECK(!resource_metadata_db_.get()); |
| DCHECK(!callback.is_null()); |
| - |
| SerializedMap* serialized_resources = &create_params->serialized_resources; |
| resource_metadata_db_ = create_params->db.Pass(); |
| if (serialized_resources->empty()) { |
| @@ -661,6 +661,8 @@ void DriveResourceMetadata::InitResourceMap( |
| return; |
| } |
| + // Save root directory resource ID as ClearRoot() resets |root_|. |
| + std::string saved_root_resource_id = root_->resource_id(); |
| ClearRoot(); |
| // Version check. |
| @@ -722,7 +724,7 @@ void DriveResourceMetadata::InitResourceMap( |
| } else { |
| NOTREACHED() << "Parent is not a directory " << parent->resource_id(); |
| } |
| - } else if (entry->resource_id() == kDriveRootDirectoryResourceId) { |
| + } else if (entry->resource_id() == saved_root_resource_id) { |
| root_.reset(entry->AsDriveDirectory()); |
| DCHECK(root_.get()); |
| AddEntryToResourceMap(root_.get()); |
| @@ -808,6 +810,8 @@ bool DriveResourceMetadata::ParseFromString( |
| } |
| root_->FromProto(proto.drive_directory()); |
| + // Root resource ID is already set from proto. |
| + AddEntryToResourceMap(root_.get()); |
| origin_ = FROM_CACHE; |
| largest_changestamp_ = proto.largest_changestamp(); |