| 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 ba8385397598d5c19f9e205751bcdda174d626f1..9e98b6f7b804e7c848a37e50239394fd170f4991 100644
|
| --- a/chrome/browser/chromeos/drive/drive_resource_metadata.cc
|
| +++ b/chrome/browser/chromeos/drive/drive_resource_metadata.cc
|
| @@ -187,8 +187,8 @@ DriveResourceMetadata::DriveResourceMetadata()
|
| initialized_(false),
|
| 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() {
|
| @@ -208,11 +208,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::InitializeRootEntry(const std::string& id) {
|
| + DCHECK(root_->resource_id().empty());
|
| + root_->set_resource_id(id);
|
| AddEntryToResourceMap(root_.get());
|
| }
|
|
|
| @@ -220,11 +218,17 @@ void DriveResourceMetadata::ClearRoot() {
|
| if (!root_.get())
|
| return;
|
|
|
| + // The root is not yet initialized.
|
| + if (root_->resource_id().empty())
|
| + 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());
|
| + // The resource_map_ should be empty here, but to make sure for non-Debug
|
| + // build.
|
| resource_map_.clear();
|
| root_.reset();
|
| }
|
| @@ -342,7 +346,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;
|
| }
|
| @@ -630,7 +634,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()) {
|
| @@ -638,6 +641,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.
|
| @@ -699,7 +704,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());
|
| @@ -785,6 +790,9 @@ bool DriveResourceMetadata::ParseFromString(
|
| }
|
|
|
| root_->FromProto(proto.drive_directory());
|
| + // Call AddEntryToResourceMap() instead of InitializeRootEntry() as the root
|
| + // resource is already set from proto.
|
| + AddEntryToResourceMap(root_.get());
|
|
|
| initialized_ = true;
|
| largest_changestamp_ = proto.largest_changestamp();
|
|
|