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. |