OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/chromeos/file_manager/file_tasks.h" | 5 #include "chrome/browser/chromeos/file_manager/file_tasks.h" |
6 | 6 |
7 #include "apps/launcher.h" | 7 #include "apps/launcher.h" |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/prefs/pref_service.h" | 9 #include "base/prefs/pref_service.h" |
10 #include "base/prefs/scoped_user_pref_update.h" | 10 #include "base/prefs/scoped_user_pref_update.h" |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 } | 127 } |
128 return false; | 128 return false; |
129 } | 129 } |
130 | 130 |
131 } // namespace | 131 } // namespace |
132 | 132 |
133 FullTaskDescriptor::FullTaskDescriptor( | 133 FullTaskDescriptor::FullTaskDescriptor( |
134 const TaskDescriptor& task_descriptor, | 134 const TaskDescriptor& task_descriptor, |
135 const std::string& task_title, | 135 const std::string& task_title, |
136 const GURL& icon_url, | 136 const GURL& icon_url, |
137 bool is_default) | 137 bool is_default, |
| 138 bool is_generic_file_handler) |
138 : task_descriptor_(task_descriptor), | 139 : task_descriptor_(task_descriptor), |
139 task_title_(task_title), | 140 task_title_(task_title), |
140 icon_url_(icon_url), | 141 icon_url_(icon_url), |
141 is_default_(is_default) { | 142 is_default_(is_default), |
| 143 is_generic_file_handler_(is_generic_file_handler) { |
142 } | 144 } |
143 | 145 |
144 void UpdateDefaultTask(PrefService* pref_service, | 146 void UpdateDefaultTask(PrefService* pref_service, |
145 const std::string& task_id, | 147 const std::string& task_id, |
146 const std::set<std::string>& suffixes, | 148 const std::set<std::string>& suffixes, |
147 const std::set<std::string>& mime_types) { | 149 const std::set<std::string>& mime_types) { |
148 if (!pref_service) | 150 if (!pref_service) |
149 return; | 151 return; |
150 | 152 |
151 if (!mime_types.empty()) { | 153 if (!mime_types.empty()) { |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
347 TaskDescriptor descriptor(app_info.app_id, | 349 TaskDescriptor descriptor(app_info.app_id, |
348 TASK_TYPE_DRIVE_APP, | 350 TASK_TYPE_DRIVE_APP, |
349 kDriveAppActionID); | 351 kDriveAppActionID); |
350 GURL icon_url = drive::util::FindPreferredIcon( | 352 GURL icon_url = drive::util::FindPreferredIcon( |
351 app_info.app_icons, | 353 app_info.app_icons, |
352 drive::util::kPreferredIconSize); | 354 drive::util::kPreferredIconSize); |
353 result_list->push_back( | 355 result_list->push_back( |
354 FullTaskDescriptor(descriptor, | 356 FullTaskDescriptor(descriptor, |
355 app_info.app_name, | 357 app_info.app_name, |
356 icon_url, | 358 icon_url, |
357 false /* is_default */)); | 359 false /* is_default */, |
| 360 false /* is_generic_file_handler */)); |
358 } | 361 } |
359 } | 362 } |
360 | 363 |
| 364 bool IsGenericFileHandler( |
| 365 const extensions::FileHandlerInfo& file_handler_info) { |
| 366 return file_handler_info.extensions.count("*") > 0 || |
| 367 file_handler_info.types.count("*") > 0 || |
| 368 file_handler_info.types.count("*/*") > 0; |
| 369 } |
| 370 |
361 void FindFileHandlerTasks( | 371 void FindFileHandlerTasks( |
362 Profile* profile, | 372 Profile* profile, |
363 const PathAndMimeTypeSet& path_mime_set, | 373 const PathAndMimeTypeSet& path_mime_set, |
364 std::vector<FullTaskDescriptor>* result_list) { | 374 std::vector<FullTaskDescriptor>* result_list) { |
365 DCHECK(!path_mime_set.empty()); | 375 DCHECK(!path_mime_set.empty()); |
366 DCHECK(result_list); | 376 DCHECK(result_list); |
367 | 377 |
368 const extensions::ExtensionSet& enabled_extensions = | 378 const extensions::ExtensionSet& enabled_extensions = |
369 extensions::ExtensionRegistry::Get(profile)->enabled_extensions(); | 379 extensions::ExtensionRegistry::Get(profile)->enabled_extensions(); |
| 380 |
370 for (extensions::ExtensionSet::const_iterator iter = | 381 for (extensions::ExtensionSet::const_iterator iter = |
371 enabled_extensions.begin(); | 382 enabled_extensions.begin(); |
372 iter != enabled_extensions.end(); | 383 iter != enabled_extensions.end(); |
373 ++iter) { | 384 ++iter) { |
374 const Extension* extension = iter->get(); | 385 const Extension* extension = iter->get(); |
375 | 386 |
376 // Check that the extension can be launched via an event. This includes all | 387 // Check that the extension can be launched via an event. This includes all |
377 // platform apps plus whitelisted extensions. | 388 // platform apps plus whitelisted extensions. |
378 if (!CanLaunchViaEvent(extension)) | 389 if (!CanLaunchViaEvent(extension)) |
379 continue; | 390 continue; |
(...skipping 13 matching lines...) Expand all Loading... |
393 continue; | 404 continue; |
394 | 405 |
395 // If the new ZIP unpacker is disabled, then hide its handlers, so we don't | 406 // If the new ZIP unpacker is disabled, then hide its handlers, so we don't |
396 // show both the legacy one and the new one in Files app for ZIP files. | 407 // show both the legacy one and the new one in Files app for ZIP files. |
397 if (extension->id() == extension_misc::kZIPUnpackerExtensionId && | 408 if (extension->id() == extension_misc::kZIPUnpackerExtensionId && |
398 CommandLine::ForCurrentProcess()->HasSwitch( | 409 CommandLine::ForCurrentProcess()->HasSwitch( |
399 chromeos::switches::kDisableNewZIPUnpacker)) { | 410 chromeos::switches::kDisableNewZIPUnpacker)) { |
400 continue; | 411 continue; |
401 } | 412 } |
402 | 413 |
403 // Only show the first matching handler from each app. | 414 // Show the first matching non-generic handler of each app. If there doesn't |
404 const extensions::FileHandlerInfo* file_handler = file_handlers.front(); | 415 // exist such handler, show the first matching handler of the app. |
| 416 const extensions::FileHandlerInfo* file_handler = nullptr; |
| 417 for (auto handler : file_handlers) { |
| 418 if (!IsGenericFileHandler(*handler)) { |
| 419 file_handler = handler; |
| 420 break; |
| 421 } |
| 422 } |
| 423 if (file_handler == nullptr) { |
| 424 file_handler = file_handlers.front(); |
| 425 } |
| 426 |
405 std::string task_id = file_tasks::MakeTaskID( | 427 std::string task_id = file_tasks::MakeTaskID( |
406 extension->id(), file_tasks::TASK_TYPE_FILE_HANDLER, file_handler->id); | 428 extension->id(), file_tasks::TASK_TYPE_FILE_HANDLER, file_handler->id); |
407 | 429 |
408 GURL best_icon = extensions::ExtensionIconSource::GetIconURL( | 430 GURL best_icon = extensions::ExtensionIconSource::GetIconURL( |
409 extension, | 431 extension, |
410 drive::util::kPreferredIconSize, | 432 drive::util::kPreferredIconSize, |
411 ExtensionIconSet::MATCH_BIGGER, | 433 ExtensionIconSet::MATCH_BIGGER, |
412 false, // grayscale | 434 false, // grayscale |
413 NULL); // exists | 435 NULL); // exists |
414 | 436 |
415 result_list->push_back( | 437 result_list->push_back( |
416 FullTaskDescriptor(TaskDescriptor(extension->id(), | 438 FullTaskDescriptor(TaskDescriptor(extension->id(), |
417 file_tasks::TASK_TYPE_FILE_HANDLER, | 439 file_tasks::TASK_TYPE_FILE_HANDLER, |
418 file_handler->id), | 440 file_handler->id), |
419 extension->name(), | 441 extension->name(), |
420 best_icon, | 442 best_icon, |
421 false /* is_default */)); | 443 false /* is_default */, |
| 444 IsGenericFileHandler(*file_handler))); |
422 } | 445 } |
423 } | 446 } |
424 | 447 |
425 void FindFileBrowserHandlerTasks( | 448 void FindFileBrowserHandlerTasks( |
426 Profile* profile, | 449 Profile* profile, |
427 const std::vector<GURL>& file_urls, | 450 const std::vector<GURL>& file_urls, |
428 std::vector<FullTaskDescriptor>* result_list) { | 451 std::vector<FullTaskDescriptor>* result_list) { |
429 DCHECK(!file_urls.empty()); | 452 DCHECK(!file_urls.empty()); |
430 DCHECK(result_list); | 453 DCHECK(result_list); |
431 | 454 |
(...skipping 21 matching lines...) Expand all Loading... |
453 ExtensionIconSet::MATCH_BIGGER, | 476 ExtensionIconSet::MATCH_BIGGER, |
454 false, // grayscale | 477 false, // grayscale |
455 NULL); // exists | 478 NULL); // exists |
456 | 479 |
457 result_list->push_back(FullTaskDescriptor( | 480 result_list->push_back(FullTaskDescriptor( |
458 TaskDescriptor(extension_id, | 481 TaskDescriptor(extension_id, |
459 file_tasks::TASK_TYPE_FILE_BROWSER_HANDLER, | 482 file_tasks::TASK_TYPE_FILE_BROWSER_HANDLER, |
460 handler->id()), | 483 handler->id()), |
461 handler->title(), | 484 handler->title(), |
462 icon_url, | 485 icon_url, |
463 false /* is_default */)); | 486 false /* is_default */, |
| 487 false /* is_generic_file_handler */)); |
464 } | 488 } |
465 } | 489 } |
466 | 490 |
467 void FindAllTypesOfTasks( | 491 void FindAllTypesOfTasks( |
468 Profile* profile, | 492 Profile* profile, |
469 const drive::DriveAppRegistry* drive_app_registry, | 493 const drive::DriveAppRegistry* drive_app_registry, |
470 const PathAndMimeTypeSet& path_mime_set, | 494 const PathAndMimeTypeSet& path_mime_set, |
471 const std::vector<GURL>& file_urls, | 495 const std::vector<GURL>& file_urls, |
472 std::vector<FullTaskDescriptor>* result_list) { | 496 std::vector<FullTaskDescriptor>* result_list) { |
473 DCHECK(profile); | 497 DCHECK(profile); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
527 DCHECK(!task->is_default()); | 551 DCHECK(!task->is_default()); |
528 if (IsFallbackFileHandler(task->task_descriptor())) { | 552 if (IsFallbackFileHandler(task->task_descriptor())) { |
529 task->set_is_default(true); | 553 task->set_is_default(true); |
530 return; | 554 return; |
531 } | 555 } |
532 } | 556 } |
533 } | 557 } |
534 | 558 |
535 } // namespace file_tasks | 559 } // namespace file_tasks |
536 } // namespace file_manager | 560 } // namespace file_manager |
OLD | NEW |