| Index: chrome/browser/chromeos/file_manager/file_tasks_unittest.cc
|
| diff --git a/chrome/browser/chromeos/file_manager/file_tasks_unittest.cc b/chrome/browser/chromeos/file_manager/file_tasks_unittest.cc
|
| index 21be58d98a9b1083a7d7e6bb13e1a81ae73e8284..7d8f39c141f258fd50e83e3bf3d9fc28a1acdcd9 100644
|
| --- a/chrome/browser/chromeos/file_manager/file_tasks_unittest.cc
|
| +++ b/chrome/browser/chromeos/file_manager/file_tasks_unittest.cc
|
| @@ -65,7 +65,8 @@ TEST(FileManagerFileTasksTest,
|
| "action-id"),
|
| "task title",
|
| GURL("http://example.com/icon.png"),
|
| - true /* is_default */);
|
| + true /* is_default */,
|
| + false /* is_generic_file_handler */);
|
|
|
| const std::string task_id =
|
| TaskDescriptorToId(full_descriptor.task_descriptor());
|
| @@ -83,7 +84,8 @@ TEST(FileManagerFileTasksTest,
|
| "action-id"),
|
| "task title",
|
| GURL(), // No icon URL.
|
| - false /* is_default */);
|
| + false /* is_default */,
|
| + false /* is_generic_file_handler */);
|
|
|
| const std::string task_id =
|
| TaskDescriptorToId(full_descriptor.task_descriptor());
|
| @@ -267,12 +269,14 @@ TEST(FileManagerFileTasksTest, ChooseAndSetDefaultTask_MultipleTasks) {
|
| text_app_task,
|
| "Text.app",
|
| GURL("http://example.com/text_app.png"),
|
| - false /* is_default */));
|
| + false /* is_default */,
|
| + false /* is_generic_file_handler */));
|
| tasks.push_back(FullTaskDescriptor(
|
| nice_app_task,
|
| "Nice.app",
|
| GURL("http://example.com/nice_app.png"),
|
| - false /* is_default */));
|
| + false /* is_default */,
|
| + false /* is_generic_file_handler */));
|
| PathAndMimeTypeSet path_mime_set;
|
| path_mime_set.insert(std::make_pair(
|
| base::FilePath::FromUTF8Unsafe("foo.txt"),
|
| @@ -334,7 +338,8 @@ TEST(FileManagerFileTasksTest, ChooseAndSetDefaultTask_FallbackFileBrowser) {
|
| files_app_task,
|
| "View in browser",
|
| GURL("http://example.com/some_icon.png"),
|
| - false /* is_default */));
|
| + false /* is_default */,
|
| + false /* is_generic_file_handler */));
|
| PathAndMimeTypeSet path_mime_set;
|
| path_mime_set.insert(std::make_pair(
|
| base::FilePath::FromUTF8Unsafe("foo.txt"),
|
| @@ -346,6 +351,56 @@ TEST(FileManagerFileTasksTest, ChooseAndSetDefaultTask_FallbackFileBrowser) {
|
| EXPECT_TRUE(tasks[0].is_default());
|
| }
|
|
|
| +// Test IsGenericFileHandler which returns whether a file handle info is a
|
| +// generic file handler or not.
|
| +TEST(FileManagerFileTasksTest, IsGenericFileHandler) {
|
| + using FileHandlerInfo = extensions::FileHandlerInfo;
|
| +
|
| + // extensions: ["*"]
|
| + FileHandlerInfo file_handler_info_1;
|
| + file_handler_info_1.extensions.insert("*");
|
| + EXPECT_TRUE(IsGenericFileHandler(file_handler_info_1));
|
| +
|
| + // extensions: ["*", "jpg"]
|
| + FileHandlerInfo file_handler_info_2;
|
| + file_handler_info_2.extensions.insert("*");
|
| + file_handler_info_2.extensions.insert("jpg");
|
| + EXPECT_TRUE(IsGenericFileHandler(file_handler_info_2));
|
| +
|
| + // extensions: ["jpg"]
|
| + FileHandlerInfo file_handler_info_3;
|
| + file_handler_info_3.extensions.insert("jpg");
|
| + EXPECT_FALSE(IsGenericFileHandler(file_handler_info_3));
|
| +
|
| + // types: ["*"]
|
| + FileHandlerInfo file_handler_info_4;
|
| + file_handler_info_4.types.insert("*");
|
| + EXPECT_TRUE(IsGenericFileHandler(file_handler_info_4));
|
| +
|
| + // types: ["*/*"]
|
| + FileHandlerInfo file_handler_info_5;
|
| + file_handler_info_5.types.insert("*/*");
|
| + EXPECT_TRUE(IsGenericFileHandler(file_handler_info_5));
|
| +
|
| + // types: ["image/*"]
|
| + FileHandlerInfo file_handler_info_6;
|
| + file_handler_info_6.types.insert("image/*");
|
| + // Partial wild card is not generic.
|
| + EXPECT_FALSE(IsGenericFileHandler(file_handler_info_6));
|
| +
|
| + // types: ["*", "image/*"]
|
| + FileHandlerInfo file_handler_info_7;
|
| + file_handler_info_7.types.insert("*");
|
| + file_handler_info_7.types.insert("image/*");
|
| + EXPECT_TRUE(IsGenericFileHandler(file_handler_info_7));
|
| +
|
| + // extensions: ["*"], types: ["image/*"]
|
| + FileHandlerInfo file_handler_info_8;
|
| + file_handler_info_8.extensions.insert("*");
|
| + file_handler_info_8.types.insert("image/*");
|
| + EXPECT_TRUE(IsGenericFileHandler(file_handler_info_8));
|
| +}
|
| +
|
| // Test using the test extension system, which needs lots of setup.
|
| class FileManagerFileTasksComplexTest : public testing::Test {
|
| protected:
|
| @@ -794,5 +849,144 @@ TEST_F(FileManagerFileTasksComplexTest, FindAllTypesOfTasks_GoogleDocument) {
|
| EXPECT_EQ(kFileManagerAppId, tasks[0].task_descriptor().app_id);
|
| }
|
|
|
| +TEST_F(FileManagerFileTasksComplexTest, FindFileHandlerTask_Generic) {
|
| + // Since we want to keep the order of the result as foo,bar,baz,qux,
|
| + // keep the ids in alphabetical order.
|
| + const char kFooId[] = "hhgbjpmdppecanaaogonaigmmifgpaph";
|
| + const char kBarId[] = "odlhccgofgkadkkhcmhgnhgahonahoca";
|
| + const char kBazId[] = "plifkpkakemokpflgbnnigcoldgcbdmc";
|
| + const char kQuxId[] = "pmifkpkakgkadkkhcmhgnigmmifgpaph";
|
| +
|
| + // Foo app provides file handler for text/plain and all file types.
|
| + extensions::ExtensionBuilder foo_app;
|
| + foo_app.SetManifest(extensions::DictionaryBuilder()
|
| + .Set("name", "Foo")
|
| + .Set("version", "1.0.0")
|
| + .Set("manifest_version", 2)
|
| + .Set("app", extensions::DictionaryBuilder()
|
| + .Set("background", extensions::DictionaryBuilder()
|
| + .Set("scripts", extensions::ListBuilder()
|
| + .Append("background.js"))))
|
| + .Set("file_handlers",
|
| + extensions::DictionaryBuilder()
|
| + .Set("any",
|
| + extensions::DictionaryBuilder()
|
| + .Set("types", extensions::ListBuilder()
|
| + .Append("*/*")))
|
| + .Set("text",
|
| + extensions::DictionaryBuilder()
|
| + .Set("types", extensions::ListBuilder()
|
| + .Append("text/plain")))));
|
| + foo_app.SetID(kFooId);
|
| + extension_service_->AddExtension(foo_app.Build().get());
|
| +
|
| + // Bar app provides file handler for .txt and not provide generic file
|
| + // handler.
|
| + extensions::ExtensionBuilder bar_app;
|
| + bar_app.SetManifest(extensions::DictionaryBuilder()
|
| + .Set("name", "Bar")
|
| + .Set("version", "1.0.0")
|
| + .Set("manifest_version", 2)
|
| + .Set("app", extensions::DictionaryBuilder()
|
| + .Set("background", extensions::DictionaryBuilder()
|
| + .Set("scripts", extensions::ListBuilder()
|
| + .Append("background.js"))))
|
| + .Set("file_handlers",
|
| + extensions::DictionaryBuilder()
|
| + .Set("text",
|
| + extensions::DictionaryBuilder()
|
| + .Set("extensions", extensions::ListBuilder()
|
| + .Append("txt")))));
|
| + bar_app.SetID(kBarId);
|
| + extension_service_->AddExtension(bar_app.Build().get());
|
| +
|
| + // Baz app provides file handler for all extensions and images.
|
| + extensions::ExtensionBuilder baz_app;
|
| + baz_app.SetManifest(extensions::DictionaryBuilder()
|
| + .Set("name", "Baz")
|
| + .Set("version", "1.0.0")
|
| + .Set("manifest_version", 2)
|
| + .Set("app", extensions::DictionaryBuilder()
|
| + .Set("background", extensions::DictionaryBuilder()
|
| + .Set("scripts", extensions::ListBuilder()
|
| + .Append("background.js"))))
|
| + .Set("file_handlers",
|
| + extensions::DictionaryBuilder()
|
| + .Set("any",
|
| + extensions::DictionaryBuilder()
|
| + .Set("extensions", extensions::ListBuilder()
|
| + .Append("*")
|
| + .Append("bar")))
|
| + .Set("image",
|
| + extensions::DictionaryBuilder()
|
| + .Set("types", extensions::ListBuilder()
|
| + .Append("image/*")))));
|
| + baz_app.SetID(kBazId);
|
| + extension_service_->AddExtension(baz_app.Build().get());
|
| +
|
| + // Qux app provides file handler for all types.
|
| + extensions::ExtensionBuilder qux_app;
|
| + qux_app.SetManifest(extensions::DictionaryBuilder()
|
| + .Set("name", "Qux")
|
| + .Set("version", "1.0.0")
|
| + .Set("manifest_version", 2)
|
| + .Set("app", extensions::DictionaryBuilder()
|
| + .Set("background", extensions::DictionaryBuilder()
|
| + .Set("scripts", extensions::ListBuilder()
|
| + .Append("background.js"))))
|
| + .Set("file_handlers",
|
| + extensions::DictionaryBuilder()
|
| + .Set("any",
|
| + extensions::DictionaryBuilder()
|
| + .Set("types", extensions::ListBuilder()
|
| + .Append("*")))));
|
| + qux_app.SetID(kQuxId);
|
| + extension_service_->AddExtension(qux_app.Build().get());
|
| +
|
| + // Test case with .txt file
|
| + PathAndMimeTypeSet txt_path_mime_set;
|
| + txt_path_mime_set.insert(
|
| + std::make_pair(
|
| + drive::util::GetDriveMountPointPath(&test_profile_).AppendASCII(
|
| + "foo.txt"),
|
| + "text/plain"));
|
| + std::vector<FullTaskDescriptor> txt_result;
|
| + FindFileHandlerTasks(&test_profile_, txt_path_mime_set, &txt_result);
|
| + EXPECT_EQ(4U, txt_result.size());
|
| + // Foo app provides a handler for text/plain.
|
| + EXPECT_EQ("Foo", txt_result[0].task_title());
|
| + EXPECT_FALSE(txt_result[0].is_generic_file_handler());
|
| + // Bar app provides a handler for .txt.
|
| + EXPECT_EQ("Bar", txt_result[1].task_title());
|
| + EXPECT_FALSE(txt_result[1].is_generic_file_handler());
|
| + // Baz app provides a handler for all extensions.
|
| + EXPECT_EQ("Baz", txt_result[2].task_title());
|
| + EXPECT_TRUE(txt_result[2].is_generic_file_handler());
|
| + // Qux app provides a handler for all types.
|
| + EXPECT_EQ("Qux", txt_result[3].task_title());
|
| + EXPECT_TRUE(txt_result[3].is_generic_file_handler());
|
| +
|
| + // Test case with .jpg file
|
| + PathAndMimeTypeSet jpg_path_mime_set;
|
| + jpg_path_mime_set.insert(
|
| + std::make_pair(
|
| + drive::util::GetDriveMountPointPath(&test_profile_).AppendASCII(
|
| + "foo.jpg"),
|
| + "image/jpeg"));
|
| + std::vector<FullTaskDescriptor> jpg_result;
|
| + FindFileHandlerTasks(&test_profile_, jpg_path_mime_set, &jpg_result);
|
| + EXPECT_EQ(3U, jpg_result.size());
|
| + // Foo app provides a handler for all types.
|
| + EXPECT_EQ("Foo", jpg_result[0].task_title());
|
| + EXPECT_TRUE(jpg_result[0].is_generic_file_handler());
|
| + // Baz app provides a handler for image/*. A partial wildcarded handler is
|
| + // treated as non-generic handler.
|
| + EXPECT_EQ("Baz", jpg_result[1].task_title());
|
| + EXPECT_FALSE(jpg_result[1].is_generic_file_handler());
|
| + // Qux app provides a handler for all types.
|
| + EXPECT_EQ("Qux", jpg_result[2].task_title());
|
| + EXPECT_TRUE(jpg_result[2].is_generic_file_handler());
|
| +}
|
| +
|
| } // namespace file_tasks
|
| } // namespace file_manager.
|
|
|