| 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..22152b9ddf69eccc6f545cb97cca108012efc474 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,10 +242,13 @@ 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());
|
| + // If root resource ID is not set, it means no children.
|
| + if (!root_->resource_id().empty()) {
|
| + // 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();
|
|
|