Move chrome/browser/chromeos/drive/resource* (+deps) into components/drive.
Files moved from chrome/browser/chromeos/drive into components/drive:
- fake_free_disk_space_getter*
- file_cache*
- file_system_core_util*
- resource_entry_conversion*
- resource_metadata*
- resource_metadata_storage*
Other changes:
- Removed unneeded includes where needed and possible.
- Hidden usage of cryptohome::kMinFreeSpaceInBytes behind OS_CHROMEOS ifdefs
and provided an equivalent constant shared by other OS-es.
- Hidden usage of base::SetPosixFilePermissions behind OS_CHROMEOS ifdef
as it was only needed to support cros_disks service on ChromeOS.
- Moved 3 functions back from file_system_core_util into file_system_core.
The 3 functions are ChromeOS-specific (dealing with where GDrive is mounted
on ChromeOS) and moving them back helps avoid adding a new dependency on
components/drive from chromeos directories.
- When adding a third_party/leveldatabase dependency to gyp/gn/deps files
under components/drive, I realized that gn is not consistent with gyp, by
not explicitly listing a dependency on third_party/cacheinvalidation in
components/drive/BUILD.gn.
Test steps:
1. Verify that things still build via GYP (and unit tests pass).
$ GYP_DEFINES="use_goma=1 gomadir=... chromeos=1" gclient sync
$ ninja -C out/Debug -j 150 chrome unit_tests \
interactive_ui_tests browser_tests drive
$ out/Debug/unit_tests
2. Verify that things still build via GN.
$ gn gen out/Default --args='target_os="chromeos" use_goma=true'
$ ninja -C out/Default -j 150 chrome unit_tests \
interactive_ui_tests browser_tests components/drive
TEST=Please see "Test steps" above.
BUG=257943, 498951
[email protected], [email protected], [email protected], [email protected], [email protected],
Review URL: https://codereview.chromium.org/1296483003
Cr-Commit-Position: refs/heads/master@{#344637}
diff --git a/components/drive/resource_entry_conversion_unittest.cc b/components/drive/resource_entry_conversion_unittest.cc
new file mode 100644
index 0000000..b3fe252e
--- /dev/null
+++ b/components/drive/resource_entry_conversion_unittest.cc
@@ -0,0 +1,374 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/drive/resource_entry_conversion.h"
+
+#include "base/time/time.h"
+#include "components/drive/drive.pb.h"
+#include "components/drive/drive_api_util.h"
+#include "google_apis/drive/drive_api_parser.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace drive {
+
+namespace {
+
+base::Time GetTestTime() {
+ // 2011-12-14-T00:40:47.330Z
+ base::Time::Exploded exploded;
+ exploded.year = 2011;
+ exploded.month = 12;
+ exploded.day_of_month = 14;
+ exploded.day_of_week = 2; // Tuesday
+ exploded.hour = 0;
+ exploded.minute = 40;
+ exploded.second = 47;
+ exploded.millisecond = 330;
+ return base::Time::FromUTCExploded(exploded);
+}
+
+} // namespace
+
+TEST(ResourceEntryConversionTest, ConvertToResourceEntry_File) {
+ google_apis::FileResource file_resource;
+ file_resource.set_title("File 1.mp3");
+ file_resource.set_file_id("resource_id");
+ file_resource.set_created_date(GetTestTime());
+ file_resource.set_modified_date(
+ GetTestTime() + base::TimeDelta::FromSeconds(10));
+ file_resource.set_mime_type("audio/mpeg");
+ file_resource.set_alternate_link(GURL("https://file_link_alternate"));
+ file_resource.set_file_size(892721);
+ file_resource.set_md5_checksum("3b4382ebefec6e743578c76bbd0575ce");
+
+ ResourceEntry entry;
+ std::string parent_resource_id;
+ EXPECT_TRUE(ConvertFileResourceToResourceEntry(
+ file_resource, &entry, &parent_resource_id));
+
+ EXPECT_EQ(file_resource.title(), entry.title());
+ EXPECT_EQ(file_resource.title(), entry.base_name());
+ EXPECT_EQ(file_resource.file_id(), entry.resource_id());
+ EXPECT_EQ("", parent_resource_id);
+
+ EXPECT_FALSE(entry.deleted());
+ EXPECT_FALSE(entry.shared_with_me());
+ EXPECT_FALSE(entry.shared());
+
+ EXPECT_EQ(file_resource.modified_date().ToInternalValue(),
+ entry.file_info().last_modified());
+ // Last accessed value equal to 0 means that the file has never been viewed.
+ EXPECT_EQ(0, entry.file_info().last_accessed());
+ EXPECT_EQ(file_resource.created_date().ToInternalValue(),
+ entry.file_info().creation_time());
+
+ EXPECT_EQ(file_resource.mime_type(),
+ entry.file_specific_info().content_mime_type());
+ EXPECT_FALSE(entry.file_specific_info().is_hosted_document());
+ EXPECT_EQ(file_resource.alternate_link().spec(),
+ entry.file_specific_info().alternate_url());
+
+ // Regular file specific fields.
+ EXPECT_EQ(file_resource.file_size(), entry.file_info().size());
+ EXPECT_EQ(file_resource.md5_checksum(), entry.file_specific_info().md5());
+ EXPECT_FALSE(entry.file_info().is_directory());
+}
+
+TEST(ResourceEntryConversionTest,
+ ConvertFileResourceToResourceEntry_HostedDocument) {
+ google_apis::FileResource file_resource;
+ file_resource.set_title("Document 1");
+ file_resource.set_file_id("resource_id");
+ file_resource.set_created_date(GetTestTime());
+ file_resource.set_modified_date(
+ GetTestTime() + base::TimeDelta::FromSeconds(10));
+ file_resource.set_last_viewed_by_me_date(
+ GetTestTime() + base::TimeDelta::FromSeconds(20));
+ file_resource.set_mime_type(util::kGoogleDocumentMimeType);
+ file_resource.set_alternate_link(GURL("https://file_link_alternate"));
+ // Do not set file size to represent a hosted document.
+
+ ResourceEntry entry;
+ std::string parent_resource_id;
+ EXPECT_TRUE(ConvertFileResourceToResourceEntry(
+ file_resource, &entry, &parent_resource_id));
+
+ EXPECT_EQ(file_resource.title(), entry.title());
+ EXPECT_EQ(file_resource.title() + ".gdoc",
+ entry.base_name()); // The suffix added.
+ EXPECT_EQ(".gdoc", entry.file_specific_info().document_extension());
+ EXPECT_EQ(file_resource.file_id(), entry.resource_id());
+ EXPECT_EQ("", parent_resource_id);
+
+ EXPECT_FALSE(entry.deleted());
+ EXPECT_FALSE(entry.shared_with_me());
+ EXPECT_FALSE(entry.shared());
+
+ EXPECT_EQ(file_resource.modified_date().ToInternalValue(),
+ entry.file_info().last_modified());
+ EXPECT_EQ(file_resource.last_viewed_by_me_date().ToInternalValue(),
+ entry.file_info().last_accessed());
+ EXPECT_EQ(file_resource.created_date().ToInternalValue(),
+ entry.file_info().creation_time());
+
+ EXPECT_EQ(file_resource.mime_type(),
+ entry.file_specific_info().content_mime_type());
+ EXPECT_TRUE(entry.file_specific_info().is_hosted_document());
+ EXPECT_EQ(file_resource.alternate_link().spec(),
+ entry.file_specific_info().alternate_url());
+
+ // The size should be 0 for a hosted document.
+ EXPECT_EQ(0, entry.file_info().size());
+ EXPECT_FALSE(entry.file_info().is_directory());
+}
+
+TEST(ResourceEntryConversionTest,
+ ConvertFileResourceToResourceEntry_Directory) {
+ google_apis::FileResource file_resource;
+ file_resource.set_title("Folder");
+ file_resource.set_file_id("resource_id");
+ file_resource.set_created_date(GetTestTime());
+ file_resource.set_modified_date(
+ GetTestTime() + base::TimeDelta::FromSeconds(10));
+ file_resource.set_last_viewed_by_me_date(
+ GetTestTime() + base::TimeDelta::FromSeconds(20));
+ file_resource.set_mime_type(util::kDriveFolderMimeType);
+
+ google_apis::ParentReference parent;
+ parent.set_file_id("parent_resource_id");
+ file_resource.mutable_parents()->push_back(parent);
+
+ ResourceEntry entry;
+ std::string parent_resource_id;
+ EXPECT_TRUE(ConvertFileResourceToResourceEntry(
+ file_resource, &entry, &parent_resource_id));
+
+ EXPECT_EQ(file_resource.title(), entry.title());
+ EXPECT_EQ(file_resource.title(), entry.base_name());
+ EXPECT_EQ(file_resource.file_id(), entry.resource_id());
+ // The parent resource ID should be obtained as this is a sub directory
+ // under a non-root directory.
+ EXPECT_EQ(parent.file_id(), parent_resource_id);
+
+ EXPECT_FALSE(entry.deleted());
+ EXPECT_FALSE(entry.shared_with_me());
+ EXPECT_FALSE(entry.shared());
+
+ EXPECT_EQ(file_resource.modified_date().ToInternalValue(),
+ entry.file_info().last_modified());
+ EXPECT_EQ(file_resource.last_viewed_by_me_date().ToInternalValue(),
+ entry.file_info().last_accessed());
+ EXPECT_EQ(file_resource.created_date().ToInternalValue(),
+ entry.file_info().creation_time());
+
+ EXPECT_TRUE(entry.file_info().is_directory());
+}
+
+TEST(ResourceEntryConversionTest,
+ ConvertFileResourceToResourceEntry_DeletedHostedDocument) {
+ google_apis::FileResource file_resource;
+ file_resource.set_title("Document 1");
+ file_resource.set_file_id("resource_id");
+ file_resource.set_created_date(GetTestTime());
+ file_resource.set_modified_date(
+ GetTestTime() + base::TimeDelta::FromSeconds(10));
+ file_resource.set_last_viewed_by_me_date(
+ GetTestTime() + base::TimeDelta::FromSeconds(20));
+ file_resource.set_mime_type(util::kGoogleDocumentMimeType);
+ file_resource.set_alternate_link(GURL("https://file_link_alternate"));
+ file_resource.mutable_labels()->set_trashed(true);
+
+ ResourceEntry entry;
+ std::string parent_resource_id;
+ EXPECT_TRUE(ConvertFileResourceToResourceEntry(
+ file_resource, &entry, &parent_resource_id));
+
+ EXPECT_EQ(file_resource.title(), entry.title());
+ EXPECT_EQ(file_resource.title() + ".gdoc", entry.base_name());
+ EXPECT_EQ(file_resource.file_id(), entry.resource_id());
+ EXPECT_EQ("", parent_resource_id);
+
+ EXPECT_TRUE(entry.deleted()); // The document was deleted.
+ EXPECT_FALSE(entry.shared_with_me());
+ EXPECT_FALSE(entry.shared());
+
+ EXPECT_EQ(file_resource.modified_date().ToInternalValue(),
+ entry.file_info().last_modified());
+ EXPECT_EQ(file_resource.last_viewed_by_me_date().ToInternalValue(),
+ entry.file_info().last_accessed());
+ EXPECT_EQ(file_resource.created_date().ToInternalValue(),
+ entry.file_info().creation_time());
+
+ EXPECT_EQ(file_resource.mime_type(),
+ entry.file_specific_info().content_mime_type());
+ EXPECT_TRUE(entry.file_specific_info().is_hosted_document());
+ EXPECT_EQ(file_resource.alternate_link().spec(),
+ entry.file_specific_info().alternate_url());
+
+ // The size should be 0 for a hosted document.
+ EXPECT_EQ(0, entry.file_info().size());
+}
+
+TEST(ResourceEntryConversionTest, ConvertChangeResourceToResourceEntry) {
+ google_apis::ChangeResource change_resource;
+ change_resource.set_file(make_scoped_ptr(new google_apis::FileResource));
+ change_resource.set_file_id("resource_id");
+ change_resource.set_modification_date(GetTestTime());
+
+ google_apis::FileResource* file_resource = change_resource.mutable_file();
+ file_resource->set_title("File 1.mp3");
+ file_resource->set_file_id("resource_id");
+ // Set dummy file size to declare that this is a regular file.
+ file_resource->set_file_size(12345);
+
+ ResourceEntry entry;
+ std::string parent_resource_id;
+ EXPECT_TRUE(ConvertChangeResourceToResourceEntry(
+ change_resource, &entry, &parent_resource_id));
+
+ EXPECT_EQ(change_resource.file_id(), entry.resource_id());
+ EXPECT_EQ(change_resource.modification_date().ToInternalValue(),
+ entry.modification_date());
+
+ EXPECT_EQ(file_resource->title(), entry.title());
+ EXPECT_EQ(file_resource->title(), entry.base_name());
+ EXPECT_EQ("", parent_resource_id);
+
+ EXPECT_FALSE(entry.deleted());
+}
+
+TEST(ResourceEntryConversionTest,
+ ConvertChangeResourceToResourceEntry_Trashed) {
+ google_apis::ChangeResource change_resource;
+ change_resource.set_file(make_scoped_ptr(new google_apis::FileResource));
+ change_resource.set_file_id("resource_id");
+ change_resource.set_modification_date(GetTestTime());
+
+ google_apis::FileResource* file_resource = change_resource.mutable_file();
+ file_resource->set_title("File 1.mp3");
+ file_resource->set_file_id("resource_id");
+ // Set dummy file size to declare that this is a regular file.
+ file_resource->set_file_size(12345);
+ file_resource->mutable_labels()->set_trashed(true);
+
+ ResourceEntry entry;
+ std::string parent_resource_id;
+ EXPECT_TRUE(ConvertChangeResourceToResourceEntry(
+ change_resource, &entry, &parent_resource_id));
+
+ EXPECT_EQ(change_resource.file_id(), entry.resource_id());
+ EXPECT_EQ(change_resource.modification_date().ToInternalValue(),
+ entry.modification_date());
+
+ EXPECT_EQ(file_resource->title(), entry.title());
+ EXPECT_EQ(file_resource->title(), entry.base_name());
+ EXPECT_EQ("", parent_resource_id);
+
+ EXPECT_TRUE(entry.deleted());
+}
+
+TEST(ResourceEntryConversionTest,
+ ConvertChangeResourceToResourceEntry_Deleted) {
+ google_apis::ChangeResource change_resource;
+ change_resource.set_deleted(true);
+ change_resource.set_file_id("resource_id");
+ change_resource.set_modification_date(GetTestTime());
+
+ ResourceEntry entry;
+ std::string parent_resource_id;
+ EXPECT_TRUE(ConvertChangeResourceToResourceEntry(
+ change_resource, &entry, &parent_resource_id));
+
+ EXPECT_EQ(change_resource.file_id(), entry.resource_id());
+ EXPECT_EQ("", parent_resource_id);
+
+ EXPECT_TRUE(entry.deleted());
+
+ EXPECT_EQ(change_resource.modification_date().ToInternalValue(),
+ entry.modification_date());
+}
+
+TEST(ResourceEntryConversionTest,
+ ConvertFileResourceToResourceEntry_SharedWithMeEntry) {
+ google_apis::FileResource file_resource;
+ file_resource.set_shared(true);
+ file_resource.set_shared_with_me_date(GetTestTime());
+
+ ResourceEntry entry;
+ std::string parent_resource_id;
+ EXPECT_TRUE(ConvertFileResourceToResourceEntry(
+ file_resource, &entry, &parent_resource_id));
+ EXPECT_TRUE(entry.shared_with_me());
+ EXPECT_TRUE(entry.shared());
+}
+
+TEST(ResourceEntryConversionTest, ToPlatformFileInfo) {
+ ResourceEntry entry;
+ entry.mutable_file_info()->set_size(12345);
+ entry.mutable_file_info()->set_is_directory(true);
+ entry.mutable_file_info()->set_is_symbolic_link(true);
+ entry.mutable_file_info()->set_creation_time(999);
+ entry.mutable_file_info()->set_last_modified(123456789);
+ entry.mutable_file_info()->set_last_accessed(987654321);
+
+ base::File::Info file_info;
+ ConvertResourceEntryToFileInfo(entry, &file_info);
+ EXPECT_EQ(entry.file_info().size(), file_info.size);
+ EXPECT_EQ(entry.file_info().is_directory(), file_info.is_directory);
+ EXPECT_EQ(entry.file_info().is_symbolic_link(), file_info.is_symbolic_link);
+ EXPECT_EQ(base::Time::FromInternalValue(entry.file_info().creation_time()),
+ file_info.creation_time);
+ EXPECT_EQ(base::Time::FromInternalValue(entry.file_info().last_modified()),
+ file_info.last_modified);
+ EXPECT_EQ(base::Time::FromInternalValue(entry.file_info().last_accessed()),
+ file_info.last_accessed);
+}
+
+TEST(ResourceEntryConversionTest,
+ ConvertFileResourceToResourceEntry_ImageMediaMetadata) {
+ google_apis::FileResource entry_all_fields;
+ google_apis::FileResource entry_zero_fields;
+ google_apis::FileResource entry_no_fields;
+
+ entry_all_fields.mutable_image_media_metadata()->set_width(640);
+ entry_all_fields.mutable_image_media_metadata()->set_height(480);
+ entry_all_fields.mutable_image_media_metadata()->set_rotation(90);
+
+ entry_zero_fields.mutable_image_media_metadata()->set_width(0);
+ entry_zero_fields.mutable_image_media_metadata()->set_height(0);
+ entry_zero_fields.mutable_image_media_metadata()->set_rotation(0);
+
+ {
+ ResourceEntry entry;
+ std::string parent_resource_id;
+ EXPECT_TRUE(ConvertFileResourceToResourceEntry(
+ entry_all_fields, &entry, &parent_resource_id));
+ EXPECT_EQ(640, entry.file_specific_info().image_width());
+ EXPECT_EQ(480, entry.file_specific_info().image_height());
+ EXPECT_EQ(90, entry.file_specific_info().image_rotation());
+ }
+ {
+ ResourceEntry entry;
+ std::string parent_resource_id;
+ EXPECT_TRUE(ConvertFileResourceToResourceEntry(
+ entry_zero_fields, &entry, &parent_resource_id));
+ EXPECT_TRUE(entry.file_specific_info().has_image_width());
+ EXPECT_TRUE(entry.file_specific_info().has_image_height());
+ EXPECT_TRUE(entry.file_specific_info().has_image_rotation());
+ EXPECT_EQ(0, entry.file_specific_info().image_width());
+ EXPECT_EQ(0, entry.file_specific_info().image_height());
+ EXPECT_EQ(0, entry.file_specific_info().image_rotation());
+ }
+ {
+ ResourceEntry entry;
+ std::string parent_resource_id;
+ EXPECT_TRUE(ConvertFileResourceToResourceEntry(
+ entry_no_fields, &entry, &parent_resource_id));
+ EXPECT_FALSE(entry.file_specific_info().has_image_width());
+ EXPECT_FALSE(entry.file_specific_info().has_image_height());
+ EXPECT_FALSE(entry.file_specific_info().has_image_rotation());
+ }
+}
+
+} // namespace drive