Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(357)

Side by Side Diff: chrome/browser/chromeos/extensions/file_manager/file_browser_handlers.cc

Issue 23857004: file_manager: Unify the file task selection logic (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/extensions/file_manager/file_browser_handlers. h" 5 #include "chrome/browser/chromeos/extensions/file_manager/file_browser_handlers. h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/i18n/case_conversion.h" 9 #include "base/i18n/case_conversion.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
(...skipping 509 matching lines...) Expand 10 before | Expand all | Expand 10 after
520 } 520 }
521 521
522 bool IsFallbackFileBrowserHandler(const file_tasks::TaskDescriptor& task) { 522 bool IsFallbackFileBrowserHandler(const file_tasks::TaskDescriptor& task) {
523 return (task.task_type == file_tasks::TASK_TYPE_FILE_BROWSER_HANDLER && 523 return (task.task_type == file_tasks::TASK_TYPE_FILE_BROWSER_HANDLER &&
524 (task.app_id == kFileManagerAppId || 524 (task.app_id == kFileManagerAppId ||
525 task.app_id == extension_misc::kQuickOfficeComponentExtensionId || 525 task.app_id == extension_misc::kQuickOfficeComponentExtensionId ||
526 task.app_id == extension_misc::kQuickOfficeDevExtensionId || 526 task.app_id == extension_misc::kQuickOfficeDevExtensionId ||
527 task.app_id == extension_misc::kQuickOfficeExtensionId)); 527 task.app_id == extension_misc::kQuickOfficeExtensionId));
528 } 528 }
529 529
530 FileBrowserHandlerList FindDefaultFileBrowserHandlers( 530 FileBrowserHandlerList FindFileBrowserHandlers(
531 const PrefService& pref_service,
532 const std::vector<base::FilePath>& file_list,
533 const FileBrowserHandlerList& common_handlers) {
534 FileBrowserHandlerList default_handlers;
535
536 std::set<std::string> default_ids;
537 for (std::vector<base::FilePath>::const_iterator it = file_list.begin();
538 it != file_list.end(); ++it) {
539 std::string task_id = file_tasks::GetDefaultTaskIdFromPrefs(
540 pref_service, "", it->Extension());
541 if (!task_id.empty())
542 default_ids.insert(task_id);
543 }
544
545 const FileBrowserHandler* fallback_handler = NULL;
546 // Convert the default task IDs collected above to one of the handler pointers
547 // from common_handlers.
548 for (size_t i = 0; i < common_handlers.size(); ++i) {
549 const FileBrowserHandler* handler = common_handlers[i];
550 const file_tasks::TaskDescriptor task_descriptor(
551 handler->extension_id(),
552 file_tasks::TASK_TYPE_FILE_BROWSER_HANDLER,
553 handler->id());
554 const std::string task_id =
555 file_tasks::TaskDescriptorToId(task_descriptor);
556 std::set<std::string>::iterator default_iter = default_ids.find(task_id);
557 if (default_iter != default_ids.end()) {
558 default_handlers.push_back(handler);
559 continue;
560 }
561
562 // Remember the first fallback handler.
563 if (!fallback_handler && IsFallbackFileBrowserHandler(task_descriptor))
564 fallback_handler = handler;
565 }
566
567 // If there are no default handlers found, use fallback as default.
568 if (fallback_handler && default_handlers.empty())
569 default_handlers.push_back(fallback_handler);
570
571 return default_handlers;
572 }
573
574 FileBrowserHandlerList FindCommonFileBrowserHandlers(
575 Profile* profile, 531 Profile* profile,
576 const std::vector<GURL>& file_list) { 532 const std::vector<GURL>& file_list) {
577 FileBrowserHandlerList common_handlers; 533 FileBrowserHandlerList common_handlers;
578 for (std::vector<GURL>::const_iterator it = file_list.begin(); 534 for (std::vector<GURL>::const_iterator it = file_list.begin();
579 it != file_list.end(); ++it) { 535 it != file_list.end(); ++it) {
580 FileBrowserHandlerList handlers = 536 FileBrowserHandlerList handlers =
581 FindFileBrowserHandlersForURL(profile, *it); 537 FindFileBrowserHandlersForURL(profile, *it);
582 // If there is nothing to do for one file, the intersection of handlers 538 // If there is nothing to do for one file, the intersection of handlers
583 // for all files will be empty at the end, so no need to check further. 539 // for all files will be empty at the end, so no need to check further.
584 if (handlers.empty()) 540 if (handlers.empty())
(...skipping 30 matching lines...) Expand all
615 // for multiple selection). 571 // for multiple selection).
616 if (file_list.size() == 1) 572 if (file_list.size() == 1)
617 common_handlers.erase(gallery_iter); 573 common_handlers.erase(gallery_iter);
618 else 574 else
619 common_handlers.erase(watch_iter); 575 common_handlers.erase(watch_iter);
620 } 576 }
621 577
622 return common_handlers; 578 return common_handlers;
623 } 579 }
624 580
625 const FileBrowserHandler* FindFileBrowserHandlerForURLAndPath(
626 Profile* profile,
627 const GURL& url,
628 const base::FilePath& file_path) {
629 std::vector<GURL> file_urls;
630 file_urls.push_back(url);
631
632 FileBrowserHandlerList common_handlers =
633 FindCommonFileBrowserHandlers(profile, file_urls);
634 if (common_handlers.empty())
635 return NULL;
636
637 std::vector<base::FilePath> file_paths;
638 file_paths.push_back(file_path);
639
640 FileBrowserHandlerList default_handlers =
641 FindDefaultFileBrowserHandlers(*profile->GetPrefs(),
642 file_paths,
643 common_handlers);
644
645 // If there's none, or more than one, then we don't have a canonical default.
646 if (!default_handlers.empty()) {
647 // There should not be multiple default handlers for a single URL.
648 DCHECK_EQ(1u, default_handlers.size());
649
650 return *default_handlers.begin();
651 }
652
653 // If there are no default handlers, use first handler in the list (file
654 // manager does the same in this situation). TODO(tbarzic): This is not so
655 // optimal behaviour.
656 return *common_handlers.begin();
657 }
658
659 } // namespace file_browser_handlers 581 } // namespace file_browser_handlers
660 } // namespace file_manager 582 } // namespace file_manager
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698