Index: chrome/browser/chromeos/file_manager/file_tasks.cc |
diff --git a/chrome/browser/chromeos/file_manager/file_tasks.cc b/chrome/browser/chromeos/file_manager/file_tasks.cc |
index 238a29eee0f59909d9e97c557d354d8497e98ef5..0a6395e7c0761744ea4f47d00342cf5eacfcacc8 100644 |
--- a/chrome/browser/chromeos/file_manager/file_tasks.cc |
+++ b/chrome/browser/chromeos/file_manager/file_tasks.cc |
@@ -133,11 +133,13 @@ FullTaskDescriptor::FullTaskDescriptor( |
const TaskDescriptor& task_descriptor, |
const std::string& task_title, |
const GURL& icon_url, |
- bool is_default) |
+ bool is_default, |
+ bool is_generic_file_handler) |
: task_descriptor_(task_descriptor), |
task_title_(task_title), |
icon_url_(icon_url), |
- is_default_(is_default) { |
+ is_default_(is_default), |
+ is_generic_file_handler_(is_generic_file_handler) { |
} |
void UpdateDefaultTask(PrefService* pref_service, |
@@ -353,10 +355,18 @@ void FindDriveAppTasks( |
FullTaskDescriptor(descriptor, |
app_info.app_name, |
icon_url, |
- false /* is_default */)); |
+ false /* is_default */, |
+ false /* is_generic_file_handler */)); |
} |
} |
+bool IsGenericFileHandler( |
+ const extensions::FileHandlerInfo& file_handler_info) { |
+ return file_handler_info.extensions.count("*") > 0 || |
+ file_handler_info.types.count("*") > 0 || |
+ file_handler_info.types.count("*/*") > 0; |
+} |
+ |
void FindFileHandlerTasks( |
Profile* profile, |
const PathAndMimeTypeSet& path_mime_set, |
@@ -366,6 +376,7 @@ void FindFileHandlerTasks( |
const extensions::ExtensionSet& enabled_extensions = |
extensions::ExtensionRegistry::Get(profile)->enabled_extensions(); |
+ |
for (extensions::ExtensionSet::const_iterator iter = |
enabled_extensions.begin(); |
iter != enabled_extensions.end(); |
@@ -391,8 +402,19 @@ void FindFileHandlerTasks( |
if (file_handlers.empty()) |
continue; |
- // Only show the first matching handler from each app. |
- const extensions::FileHandlerInfo* file_handler = file_handlers.front(); |
+ // Show the first matching non-generic handler of each app. If there doesn't |
+ // exist such handler, show the first matching handler of the app. |
+ const extensions::FileHandlerInfo* file_handler = nullptr; |
+ for (auto handler : file_handlers) { |
+ if (!IsGenericFileHandler(*handler)) { |
+ file_handler = handler; |
+ break; |
+ } |
+ } |
+ if (file_handler == nullptr) { |
+ file_handler = file_handlers.front(); |
+ } |
+ |
std::string task_id = file_tasks::MakeTaskID( |
extension->id(), file_tasks::TASK_TYPE_FILE_HANDLER, file_handler->id); |
@@ -409,7 +431,8 @@ void FindFileHandlerTasks( |
file_handler->id), |
extension->name(), |
best_icon, |
- false /* is_default */)); |
+ false /* is_default */, |
+ IsGenericFileHandler(*file_handler))); |
} |
} |
@@ -451,7 +474,8 @@ void FindFileBrowserHandlerTasks( |
handler->id()), |
handler->title(), |
icon_url, |
- false /* is_default */)); |
+ false /* is_default */, |
+ false /* is_generic_file_handler */)); |
} |
} |