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

Side by Side Diff: chrome/browser/extensions/api/media_galleries/media_galleries_api.cc

Issue 440813002: Expose gallery watching functionality to the public mediaGalleries API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix issue where a number needed to be passed as a string for gallery_id. Also add test for this. Created 6 years, 4 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
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 // Implements the Chrome Extensions Media Galleries API. 5 // Implements the Chrome Extensions Media Galleries API.
6 6
7 #include "chrome/browser/extensions/api/media_galleries/media_galleries_api.h" 7 #include "chrome/browser/extensions/api/media_galleries/media_galleries_api.h"
8 8
9 #include <set> 9 #include <set>
10 #include <string> 10 #include <string>
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 using storage_monitor::MediaStorageUtil; 61 using storage_monitor::MediaStorageUtil;
62 using storage_monitor::StorageInfo; 62 using storage_monitor::StorageInfo;
63 using web_modal::WebContentsModalDialogManager; 63 using web_modal::WebContentsModalDialogManager;
64 64
65 namespace extensions { 65 namespace extensions {
66 66
67 namespace MediaGalleries = api::media_galleries; 67 namespace MediaGalleries = api::media_galleries;
68 namespace DropPermissionForMediaFileSystem = 68 namespace DropPermissionForMediaFileSystem =
69 MediaGalleries::DropPermissionForMediaFileSystem; 69 MediaGalleries::DropPermissionForMediaFileSystem;
70 namespace GetMediaFileSystems = MediaGalleries::GetMediaFileSystems; 70 namespace GetMediaFileSystems = MediaGalleries::GetMediaFileSystems;
71 namespace AddGalleryWatch = MediaGalleries::AddGalleryWatch;
72 namespace RemoveGalleryWatch = MediaGalleries::RemoveGalleryWatch;
73 namespace GetAllGalleryWatch = MediaGalleries::GetAllGalleryWatch;
71 74
72 namespace { 75 namespace {
73 76
74 const char kDisallowedByPolicy[] = 77 const char kDisallowedByPolicy[] =
75 "Media Galleries API is disallowed by policy: "; 78 "Media Galleries API is disallowed by policy: ";
76 const char kFailedToSetGalleryPermission[] = 79 const char kFailedToSetGalleryPermission[] =
77 "Failed to set gallery permission."; 80 "Failed to set gallery permission.";
78 const char kInvalidGalleryId[] = "Invalid gallery id."; 81 const char kInvalidGalleryIdMsg[] = "Invalid gallery id.";
79 const char kMissingEventListener[] = "Missing event listener registration."; 82 const char kMissingEventListener[] = "Missing event listener registration.";
80 const char kNonExistentGalleryId[] = "Non-existent gallery id."; 83 const char kNonExistentGalleryId[] = "Non-existent gallery id.";
81 const char kNoScanPermission[] = "No permission to scan."; 84 const char kNoScanPermission[] = "No permission to scan.";
82 85
83 const char kDeviceIdKey[] = "deviceId"; 86 const char kDeviceIdKey[] = "deviceId";
84 const char kGalleryIdKey[] = "galleryId"; 87 const char kGalleryIdKey[] = "galleryId";
85 const char kIsAvailableKey[] = "isAvailable"; 88 const char kIsAvailableKey[] = "isAvailable";
86 const char kIsMediaDeviceKey[] = "isMediaDevice"; 89 const char kIsMediaDeviceKey[] = "isMediaDevice";
87 const char kIsRemovableKey[] = "isRemovable"; 90 const char kIsRemovableKey[] = "isRemovable";
88 const char kNameKey[] = "name"; 91 const char kNameKey[] = "name";
89 92
90 const char kMetadataKey[] = "metadata"; 93 const char kMetadataKey[] = "metadata";
91 const char kAttachedImagesBlobInfoKey[] = "attachedImagesBlobInfo"; 94 const char kAttachedImagesBlobInfoKey[] = "attachedImagesBlobInfo";
92 const char kBlobUUIDKey[] = "blobUUID"; 95 const char kBlobUUIDKey[] = "blobUUID";
93 const char kTypeKey[] = "type"; 96 const char kTypeKey[] = "type";
94 const char kSizeKey[] = "size"; 97 const char kSizeKey[] = "size";
95 98
99 const char kInvalidGalleryId[] = "-1";
100
96 MediaFileSystemRegistry* media_file_system_registry() { 101 MediaFileSystemRegistry* media_file_system_registry() {
97 return g_browser_process->media_file_system_registry(); 102 return g_browser_process->media_file_system_registry();
98 } 103 }
99 104
100 GalleryWatchManager* gallery_watch_manager() { 105 GalleryWatchManager* gallery_watch_manager() {
101 return media_file_system_registry()->gallery_watch_manager(); 106 return media_file_system_registry()->gallery_watch_manager();
102 } 107 }
103 108
104 MediaScanManager* media_scan_manager() { 109 MediaScanManager* media_scan_manager() {
105 return media_file_system_registry()->media_scan_manager(); 110 return media_file_system_registry()->media_scan_manager();
106 } 111 }
107 112
108 // Checks whether the MediaGalleries API is currently accessible (it may be 113 // Checks whether the MediaGalleries API is currently accessible (it may be
109 // disallowed even if an extension has the requisite permission). Then 114 // disallowed even if an extension has the requisite permission). Then
110 // initializes the MediaGalleriesPreferences 115 // initializes the MediaGalleriesPreferences
111 bool Setup(Profile* profile, std::string* error, base::Closure callback) { 116 bool Setup(Profile* profile, std::string* error, base::Closure callback) {
112 if (!ChromeSelectFilePolicy::FileSelectDialogsAllowed()) { 117 if (!ChromeSelectFilePolicy::FileSelectDialogsAllowed()) {
113 *error = std::string(kDisallowedByPolicy) + 118 *error = std::string(kDisallowedByPolicy) +
114 prefs::kAllowFileSelectionDialogs; 119 prefs::kAllowFileSelectionDialogs;
115 return false; 120 return false;
116 } 121 }
117 122
118 MediaGalleriesPreferences* preferences = 123 MediaGalleriesPreferences* preferences =
119 media_file_system_registry()->GetPreferences(profile); 124 media_file_system_registry()->GetPreferences(profile);
120 preferences->EnsureInitialized(callback); 125 preferences->EnsureInitialized(callback);
121 return true; 126 return true;
122 } 127 }
123 128
129 // Returns true and sets |gallery_file_path| and |gallery_pref_id| if the
130 // |gallery_id| is valid and returns false otherwise.
131 bool GetGalleryFilePathAndId(const std::string& gallery_id,
132 Profile* profile,
133 const Extension* extension,
134 base::FilePath* gallery_file_path,
135 MediaGalleryPrefId* gallery_pref_id) {
136 MediaGalleryPrefId pref_id;
137 if (!base::StringToUint64(gallery_id, &pref_id))
138 return false;
139 MediaGalleriesPreferences* preferences =
140 g_browser_process->media_file_system_registry()->GetPreferences(profile);
141 base::FilePath file_path(
142 preferences->LookUpGalleryPathForExtension(pref_id, extension, false));
143 if (file_path.empty())
144 return false;
145 *gallery_pref_id = pref_id;
146 *gallery_file_path = file_path;
147 return true;
148 }
149
124 WebContents* GetWebContents(content::RenderViewHost* rvh, 150 WebContents* GetWebContents(content::RenderViewHost* rvh,
125 Profile* profile, 151 Profile* profile,
126 const std::string& app_id) { 152 const std::string& app_id) {
127 WebContents* contents = WebContents::FromRenderViewHost(rvh); 153 WebContents* contents = WebContents::FromRenderViewHost(rvh);
128 WebContentsModalDialogManager* web_contents_modal_dialog_manager = 154 WebContentsModalDialogManager* web_contents_modal_dialog_manager =
129 WebContentsModalDialogManager::FromWebContents(contents); 155 WebContentsModalDialogManager::FromWebContents(contents);
130 if (!web_contents_modal_dialog_manager) { 156 if (!web_contents_modal_dialog_manager) {
131 // If there is no WebContentsModalDialogManager, then this contents is 157 // If there is no WebContentsModalDialogManager, then this contents is
132 // probably the background page for an app. Try to find a app window to 158 // probably the background page for an app. Try to find a app window to
133 // host the dialog. 159 // host the dialog.
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 418
393 scoped_ptr<extensions::Event> event( 419 scoped_ptr<extensions::Event> event(
394 new extensions::Event(event_name, event_args.Pass())); 420 new extensions::Event(event_name, event_args.Pass()));
395 router->DispatchEventToExtension(extension_id, event.Pass()); 421 router->DispatchEventToExtension(extension_id, event.Pass());
396 } 422 }
397 423
398 void MediaGalleriesEventRouter::OnGalleryChanged( 424 void MediaGalleriesEventRouter::OnGalleryChanged(
399 const std::string& extension_id, MediaGalleryPrefId gallery_id) { 425 const std::string& extension_id, MediaGalleryPrefId gallery_id) {
400 MediaGalleries::GalleryChangeDetails details; 426 MediaGalleries::GalleryChangeDetails details;
401 details.type = MediaGalleries::GALLERY_CHANGE_TYPE_CONTENTS_CHANGED; 427 details.type = MediaGalleries::GALLERY_CHANGE_TYPE_CONTENTS_CHANGED;
402 details.gallery_id = gallery_id; 428 details.gallery_id = base::Uint64ToString(gallery_id);
403 DispatchEventToExtension( 429 DispatchEventToExtension(
404 extension_id, 430 extension_id,
405 MediaGalleries::OnGalleryChanged::kEventName, 431 MediaGalleries::OnGalleryChanged::kEventName,
406 MediaGalleries::OnGalleryChanged::Create(details).Pass()); 432 MediaGalleries::OnGalleryChanged::Create(details).Pass());
407 } 433 }
408 434
409 void MediaGalleriesEventRouter::OnGalleryWatchDropped( 435 void MediaGalleriesEventRouter::OnGalleryWatchDropped(
410 const std::string& extension_id, MediaGalleryPrefId gallery_id) { 436 const std::string& extension_id, MediaGalleryPrefId gallery_id) {
411 MediaGalleries::GalleryChangeDetails details; 437 MediaGalleries::GalleryChangeDetails details;
412 details.type = MediaGalleries::GALLERY_CHANGE_TYPE_WATCH_DROPPED; 438 details.type = MediaGalleries::GALLERY_CHANGE_TYPE_WATCH_DROPPED;
413 details.gallery_id = gallery_id; 439 details.gallery_id = gallery_id;
414 DispatchEventToExtension( 440 DispatchEventToExtension(
415 extension_id, 441 extension_id,
416 MediaGalleries::OnGalleryChanged::kEventName, 442 MediaGalleries::OnGalleryChanged::kEventName,
417 MediaGalleries::OnGalleryChanged::Create(details).Pass()); 443 MediaGalleries::OnGalleryChanged::Create(details).Pass());
418 } 444 }
419 445
420 void MediaGalleriesEventRouter::OnListenerRemoved( 446 void MediaGalleriesEventRouter::OnListenerRemoved(
421 const EventListenerInfo& details) { 447 const EventListenerInfo& details) {
422 if (details.event_name == MediaGalleries::OnGalleryChanged::kEventName && 448 if (details.event_name == MediaGalleries::OnGalleryChanged::kEventName &&
423 !ExtensionHasGalleryChangeListener(details.extension_id)) { 449 !ExtensionHasGalleryChangeListener(details.extension_id)) {
424 gallery_watch_manager()->RemoveAllWatches(profile_, details.extension_id); 450 gallery_watch_manager()->RemoveAllWatches(profile_, details.extension_id);
425 } 451 }
426 } 452 }
427 453
454 ///////////////////////////////////////////////////////////////////////////////
455 // MediaGalleriesGetMediaFileSystemsFunction //
456 ///////////////////////////////////////////////////////////////////////////////
428 MediaGalleriesGetMediaFileSystemsFunction:: 457 MediaGalleriesGetMediaFileSystemsFunction::
429 ~MediaGalleriesGetMediaFileSystemsFunction() {} 458 ~MediaGalleriesGetMediaFileSystemsFunction() {}
430 459
431 bool MediaGalleriesGetMediaFileSystemsFunction::RunAsync() { 460 bool MediaGalleriesGetMediaFileSystemsFunction::RunAsync() {
432 media_galleries::UsageCount(media_galleries::GET_MEDIA_FILE_SYSTEMS); 461 media_galleries::UsageCount(media_galleries::GET_MEDIA_FILE_SYSTEMS);
433 scoped_ptr<GetMediaFileSystems::Params> params( 462 scoped_ptr<GetMediaFileSystems::Params> params(
434 GetMediaFileSystems::Params::Create(*args_)); 463 GetMediaFileSystems::Params::Create(*args_));
435 EXTENSION_FUNCTION_VALIDATE(params.get()); 464 EXTENSION_FUNCTION_VALIDATE(params.get());
436 MediaGalleries::GetMediaFileSystemsInteractivity interactive = 465 MediaGalleries::GetMediaFileSystemsInteractivity interactive =
437 MediaGalleries::GET_MEDIA_FILE_SYSTEMS_INTERACTIVITY_NO; 466 MediaGalleries::GET_MEDIA_FILE_SYSTEMS_INTERACTIVITY_NO;
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 if (!render_view_host()) { 554 if (!render_view_host()) {
526 cb.Run(std::vector<MediaFileSystemInfo>()); 555 cb.Run(std::vector<MediaFileSystemInfo>());
527 return; 556 return;
528 } 557 }
529 MediaFileSystemRegistry* registry = media_file_system_registry(); 558 MediaFileSystemRegistry* registry = media_file_system_registry();
530 DCHECK(registry->GetPreferences(GetProfile())->IsInitialized()); 559 DCHECK(registry->GetPreferences(GetProfile())->IsInitialized());
531 registry->GetMediaFileSystemsForExtension( 560 registry->GetMediaFileSystemsForExtension(
532 render_view_host(), extension(), cb); 561 render_view_host(), extension(), cb);
533 } 562 }
534 563
564
565 ///////////////////////////////////////////////////////////////////////////////
566 // MediaGalleriesGetAllMediaFileSystemMetadataFunction //
567 ///////////////////////////////////////////////////////////////////////////////
535 MediaGalleriesGetAllMediaFileSystemMetadataFunction:: 568 MediaGalleriesGetAllMediaFileSystemMetadataFunction::
536 ~MediaGalleriesGetAllMediaFileSystemMetadataFunction() {} 569 ~MediaGalleriesGetAllMediaFileSystemMetadataFunction() {}
537 570
538 bool MediaGalleriesGetAllMediaFileSystemMetadataFunction::RunAsync() { 571 bool MediaGalleriesGetAllMediaFileSystemMetadataFunction::RunAsync() {
539 media_galleries::UsageCount( 572 media_galleries::UsageCount(
540 media_galleries::GET_ALL_MEDIA_FILE_SYSTEM_METADATA); 573 media_galleries::GET_ALL_MEDIA_FILE_SYSTEM_METADATA);
541 return Setup(GetProfile(), &error_, base::Bind( 574 return Setup(GetProfile(), &error_, base::Bind(
542 &MediaGalleriesGetAllMediaFileSystemMetadataFunction::OnPreferencesInit, 575 &MediaGalleriesGetAllMediaFileSystemMetadataFunction::OnPreferencesInit,
543 this)); 576 this));
544 } 577 }
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
587 metadata.is_removable = StorageInfo::IsRemovableDevice(gallery.device_id); 620 metadata.is_removable = StorageInfo::IsRemovableDevice(gallery.device_id);
588 metadata.is_media_device = StorageInfo::IsMediaDevice(gallery.device_id); 621 metadata.is_media_device = StorageInfo::IsMediaDevice(gallery.device_id);
589 metadata.is_available = ContainsKey(*available_devices, gallery.device_id); 622 metadata.is_available = ContainsKey(*available_devices, gallery.device_id);
590 list->Append(metadata.ToValue().release()); 623 list->Append(metadata.ToValue().release());
591 } 624 }
592 625
593 SetResult(list); 626 SetResult(list);
594 SendResponse(true); 627 SendResponse(true);
595 } 628 }
596 629
630 ///////////////////////////////////////////////////////////////////////////////
631 // MediaGalleriesAddUserSelectedFolderFunction //
632 ///////////////////////////////////////////////////////////////////////////////
597 MediaGalleriesAddUserSelectedFolderFunction:: 633 MediaGalleriesAddUserSelectedFolderFunction::
598 ~MediaGalleriesAddUserSelectedFolderFunction() {} 634 ~MediaGalleriesAddUserSelectedFolderFunction() {}
599 635
600 bool MediaGalleriesAddUserSelectedFolderFunction::RunAsync() { 636 bool MediaGalleriesAddUserSelectedFolderFunction::RunAsync() {
601 media_galleries::UsageCount(media_galleries::ADD_USER_SELECTED_FOLDER); 637 media_galleries::UsageCount(media_galleries::ADD_USER_SELECTED_FOLDER);
602 return Setup(GetProfile(), &error_, base::Bind( 638 return Setup(GetProfile(), &error_, base::Bind(
603 &MediaGalleriesAddUserSelectedFolderFunction::OnPreferencesInit, this)); 639 &MediaGalleriesAddUserSelectedFolderFunction::OnPreferencesInit, this));
604 } 640 }
605 641
606 void MediaGalleriesAddUserSelectedFolderFunction::OnPreferencesInit() { 642 void MediaGalleriesAddUserSelectedFolderFunction::OnPreferencesInit() {
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
696 if (!render_view_host()) { 732 if (!render_view_host()) {
697 cb.Run(std::vector<MediaFileSystemInfo>()); 733 cb.Run(std::vector<MediaFileSystemInfo>());
698 return; 734 return;
699 } 735 }
700 MediaFileSystemRegistry* registry = media_file_system_registry(); 736 MediaFileSystemRegistry* registry = media_file_system_registry();
701 DCHECK(registry->GetPreferences(GetProfile())->IsInitialized()); 737 DCHECK(registry->GetPreferences(GetProfile())->IsInitialized());
702 registry->GetMediaFileSystemsForExtension( 738 registry->GetMediaFileSystemsForExtension(
703 render_view_host(), extension(), cb); 739 render_view_host(), extension(), cb);
704 } 740 }
705 741
742 ///////////////////////////////////////////////////////////////////////////////
743 // MediaGalleriesDropPermissionForMediaFileSystemFunction //
744 ///////////////////////////////////////////////////////////////////////////////
706 MediaGalleriesDropPermissionForMediaFileSystemFunction:: 745 MediaGalleriesDropPermissionForMediaFileSystemFunction::
707 ~MediaGalleriesDropPermissionForMediaFileSystemFunction() {} 746 ~MediaGalleriesDropPermissionForMediaFileSystemFunction() {}
708 747
709 bool MediaGalleriesDropPermissionForMediaFileSystemFunction::RunAsync() { 748 bool MediaGalleriesDropPermissionForMediaFileSystemFunction::RunAsync() {
710 media_galleries::UsageCount( 749 media_galleries::UsageCount(
711 media_galleries::DROP_PERMISSION_FOR_MEDIA_FILE_SYSTEM); 750 media_galleries::DROP_PERMISSION_FOR_MEDIA_FILE_SYSTEM);
712 751
713 scoped_ptr<DropPermissionForMediaFileSystem::Params> params( 752 scoped_ptr<DropPermissionForMediaFileSystem::Params> params(
714 DropPermissionForMediaFileSystem::Params::Create(*args_)); 753 DropPermissionForMediaFileSystem::Params::Create(*args_));
715 EXTENSION_FUNCTION_VALIDATE(params.get()); 754 EXTENSION_FUNCTION_VALIDATE(params.get());
716 MediaGalleryPrefId pref_id; 755 MediaGalleryPrefId pref_id;
717 if (!base::StringToUint64(params->gallery_id, &pref_id)) { 756 if (!base::StringToUint64(params->gallery_id, &pref_id)) {
718 error_ = kInvalidGalleryId; 757 error_ = kInvalidGalleryIdMsg;
719 return false; 758 return false;
720 } 759 }
721 760
722 base::Closure callback = base::Bind( 761 base::Closure callback = base::Bind(
723 &MediaGalleriesDropPermissionForMediaFileSystemFunction:: 762 &MediaGalleriesDropPermissionForMediaFileSystemFunction::
724 OnPreferencesInit, 763 OnPreferencesInit,
725 this, 764 this,
726 pref_id); 765 pref_id);
727 return Setup(GetProfile(), &error_, callback); 766 return Setup(GetProfile(), &error_, callback);
728 } 767 }
(...skipping 10 matching lines...) Expand all
739 778
740 bool dropped = preferences->SetGalleryPermissionForExtension( 779 bool dropped = preferences->SetGalleryPermissionForExtension(
741 *extension(), pref_id, false); 780 *extension(), pref_id, false);
742 if (dropped) 781 if (dropped)
743 SetResult(new base::StringValue(base::Uint64ToString(pref_id))); 782 SetResult(new base::StringValue(base::Uint64ToString(pref_id)));
744 else 783 else
745 error_ = kFailedToSetGalleryPermission; 784 error_ = kFailedToSetGalleryPermission;
746 SendResponse(dropped); 785 SendResponse(dropped);
747 } 786 }
748 787
788 ///////////////////////////////////////////////////////////////////////////////
789 // MediaGalleriesStartMediaScanFunction //
790 ///////////////////////////////////////////////////////////////////////////////
749 MediaGalleriesStartMediaScanFunction::~MediaGalleriesStartMediaScanFunction() {} 791 MediaGalleriesStartMediaScanFunction::~MediaGalleriesStartMediaScanFunction() {}
750 792
751 bool MediaGalleriesStartMediaScanFunction::RunAsync() { 793 bool MediaGalleriesStartMediaScanFunction::RunAsync() {
752 media_galleries::UsageCount(media_galleries::START_MEDIA_SCAN); 794 media_galleries::UsageCount(media_galleries::START_MEDIA_SCAN);
753 if (!CheckScanPermission(extension(), &error_)) { 795 if (!CheckScanPermission(extension(), &error_)) {
754 MediaGalleriesEventRouter::Get(GetProfile()) 796 MediaGalleriesEventRouter::Get(GetProfile())
755 ->OnScanError(extension()->id()); 797 ->OnScanError(extension()->id());
756 return false; 798 return false;
757 } 799 }
758 return Setup(GetProfile(), &error_, base::Bind( 800 return Setup(GetProfile(), &error_, base::Bind(
759 &MediaGalleriesStartMediaScanFunction::OnPreferencesInit, this)); 801 &MediaGalleriesStartMediaScanFunction::OnPreferencesInit, this));
760 } 802 }
761 803
762 void MediaGalleriesStartMediaScanFunction::OnPreferencesInit() { 804 void MediaGalleriesStartMediaScanFunction::OnPreferencesInit() {
763 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 805 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
764 MediaGalleriesEventRouter* api = MediaGalleriesEventRouter::Get(GetProfile()); 806 MediaGalleriesEventRouter* api = MediaGalleriesEventRouter::Get(GetProfile());
765 if (!api->ExtensionHasScanProgressListener(extension()->id())) { 807 if (!api->ExtensionHasScanProgressListener(extension()->id())) {
766 error_ = kMissingEventListener; 808 error_ = kMissingEventListener;
767 SendResponse(false); 809 SendResponse(false);
768 return; 810 return;
769 } 811 }
770 812
771 media_scan_manager()->StartScan(GetProfile(), extension(), user_gesture()); 813 media_scan_manager()->StartScan(GetProfile(), extension(), user_gesture());
772 SendResponse(true); 814 SendResponse(true);
773 } 815 }
774 816
817 ///////////////////////////////////////////////////////////////////////////////
818 // MediaGalleriesCancelMediaScanFunction //
819 ///////////////////////////////////////////////////////////////////////////////
775 MediaGalleriesCancelMediaScanFunction:: 820 MediaGalleriesCancelMediaScanFunction::
776 ~MediaGalleriesCancelMediaScanFunction() { 821 ~MediaGalleriesCancelMediaScanFunction() {
777 } 822 }
778 823
779 bool MediaGalleriesCancelMediaScanFunction::RunAsync() { 824 bool MediaGalleriesCancelMediaScanFunction::RunAsync() {
780 media_galleries::UsageCount(media_galleries::CANCEL_MEDIA_SCAN); 825 media_galleries::UsageCount(media_galleries::CANCEL_MEDIA_SCAN);
781 if (!CheckScanPermission(extension(), &error_)) { 826 if (!CheckScanPermission(extension(), &error_)) {
782 MediaGalleriesEventRouter::Get(GetProfile()) 827 MediaGalleriesEventRouter::Get(GetProfile())
783 ->OnScanError(extension()->id()); 828 ->OnScanError(extension()->id());
784 return false; 829 return false;
785 } 830 }
786 return Setup(GetProfile(), &error_, base::Bind( 831 return Setup(GetProfile(), &error_, base::Bind(
787 &MediaGalleriesCancelMediaScanFunction::OnPreferencesInit, this)); 832 &MediaGalleriesCancelMediaScanFunction::OnPreferencesInit, this));
788 } 833 }
789 834
790 void MediaGalleriesCancelMediaScanFunction::OnPreferencesInit() { 835 void MediaGalleriesCancelMediaScanFunction::OnPreferencesInit() {
791 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 836 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
792 media_scan_manager()->CancelScan(GetProfile(), extension()); 837 media_scan_manager()->CancelScan(GetProfile(), extension());
793 SendResponse(true); 838 SendResponse(true);
794 } 839 }
795 840
841 ///////////////////////////////////////////////////////////////////////////////
842 // MediaGalleriesAddScanResultsFunction //
843 ///////////////////////////////////////////////////////////////////////////////
796 MediaGalleriesAddScanResultsFunction::~MediaGalleriesAddScanResultsFunction() {} 844 MediaGalleriesAddScanResultsFunction::~MediaGalleriesAddScanResultsFunction() {}
797 845
798 bool MediaGalleriesAddScanResultsFunction::RunAsync() { 846 bool MediaGalleriesAddScanResultsFunction::RunAsync() {
799 media_galleries::UsageCount(media_galleries::ADD_SCAN_RESULTS); 847 media_galleries::UsageCount(media_galleries::ADD_SCAN_RESULTS);
800 if (!CheckScanPermission(extension(), &error_)) { 848 if (!CheckScanPermission(extension(), &error_)) {
801 // We don't fire a scan progress error here, as it would be unintuitive. 849 // We don't fire a scan progress error here, as it would be unintuitive.
802 return false; 850 return false;
803 } 851 }
804 if (!user_gesture()) 852 if (!user_gesture())
805 return false; 853 return false;
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
860 if (!list.get()) { 908 if (!list.get()) {
861 SendResponse(false); 909 SendResponse(false);
862 return; 910 return;
863 } 911 }
864 912
865 // The custom JS binding will use this list to create DOMFileSystem objects. 913 // The custom JS binding will use this list to create DOMFileSystem objects.
866 SetResult(list.release()); 914 SetResult(list.release());
867 SendResponse(true); 915 SendResponse(true);
868 } 916 }
869 917
918 ///////////////////////////////////////////////////////////////////////////////
919 // MediaGalleriesGetMetadataFunction //
920 ///////////////////////////////////////////////////////////////////////////////
870 MediaGalleriesGetMetadataFunction::~MediaGalleriesGetMetadataFunction() {} 921 MediaGalleriesGetMetadataFunction::~MediaGalleriesGetMetadataFunction() {}
871 922
872 bool MediaGalleriesGetMetadataFunction::RunAsync() { 923 bool MediaGalleriesGetMetadataFunction::RunAsync() {
873 std::string blob_uuid; 924 std::string blob_uuid;
874 EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &blob_uuid)); 925 EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &blob_uuid));
875 926
876 const base::Value* options_value = NULL; 927 const base::Value* options_value = NULL;
877 if (!args_->Get(1, &options_value)) 928 if (!args_->Get(1, &options_value))
878 return false; 929 return false;
879 scoped_ptr<MediaGalleries::MediaMetadataOptions> options = 930 scoped_ptr<MediaGalleries::MediaMetadataOptions> options =
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
1027 base::Passed(&attached_images), base::Passed(&blob_uuids))); 1078 base::Passed(&attached_images), base::Passed(&blob_uuids)));
1028 return; 1079 return;
1029 } 1080 }
1030 1081
1031 // All Blobs have been constructed. The renderer will take ownership. 1082 // All Blobs have been constructed. The renderer will take ownership.
1032 SetResult(result_dictionary.release()); 1083 SetResult(result_dictionary.release());
1033 SetTransferredBlobUUIDs(*blob_uuids); 1084 SetTransferredBlobUUIDs(*blob_uuids);
1034 SendResponse(true); 1085 SendResponse(true);
1035 } 1086 }
1036 1087
1088 ///////////////////////////////////////////////////////////////////////////////
1089 // MediaGalleriesAddGalleryWatchFunction //
1090 ///////////////////////////////////////////////////////////////////////////////
1091 MediaGalleriesAddGalleryWatchFunction::
1092 ~MediaGalleriesAddGalleryWatchFunction() {
1093 }
1094
1095 bool MediaGalleriesAddGalleryWatchFunction::RunAsync() {
1096 DCHECK(GetProfile());
1097 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
Lei Zhang 2014/08/25 22:45:21 nit: we usually check what thread we are on before
Oren Blasberg 2014/08/26 00:40:49 Done.
1098 if (!render_view_host() || !render_view_host()->GetProcess())
1099 return false;
1100
1101 scoped_ptr<AddGalleryWatch::Params> params(
1102 AddGalleryWatch::Params::Create(*args_));
1103 EXTENSION_FUNCTION_VALIDATE(params.get());
1104
1105 MediaGalleriesPreferences* preferences =
1106 g_browser_process->media_file_system_registry()->GetPreferences(
1107 GetProfile());
1108 preferences->EnsureInitialized(
1109 base::Bind(&MediaGalleriesAddGalleryWatchFunction::OnPreferencesInit,
1110 this,
1111 params->gallery_id));
1112
1113 return true;
1114 }
1115
1116 void MediaGalleriesAddGalleryWatchFunction::OnPreferencesInit(
1117 const std::string& pref_id) {
1118 base::FilePath gallery_file_path;
1119 MediaGalleryPrefId gallery_pref_id = 0;
Lei Zhang 2014/08/25 22:45:21 Use kInvalidMediaGalleryPrefId instead of 0
Oren Blasberg 2014/08/26 00:40:49 Done.
1120 if (!GetGalleryFilePathAndId(pref_id,
1121 GetProfile(),
1122 extension(),
1123 &gallery_file_path,
1124 &gallery_pref_id)) {
1125 api::media_galleries::AddGalleryWatchResult result;
1126 error_ = kInvalidGalleryIdMsg;
1127 result.gallery_id = kInvalidGalleryId;
1128 result.success = false;
1129 SetResult(result.ToValue().release());
1130 SendResponse(false);
1131 return;
1132 }
1133
1134 gallery_watch_manager()->AddWatch(
1135 GetProfile(),
1136 extension(),
1137 gallery_pref_id,
1138 base::Bind(&MediaGalleriesAddGalleryWatchFunction::HandleResponse,
1139 this,
1140 gallery_pref_id));
1141 }
1142
1143 void MediaGalleriesAddGalleryWatchFunction::HandleResponse(
1144 MediaGalleryPrefId gallery_id,
1145 const std::string& error) {
1146 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
1147
1148 // If an app added a file watch without any event listeners on the
1149 // onGalleryChanged event, that's an error.
1150 MediaGalleriesEventRouter* api = MediaGalleriesEventRouter::Get(GetProfile());
1151 if (!api->ExtensionHasGalleryChangeListener(extension()->id())) {
1152 api::media_galleries::AddGalleryWatchResult result;
1153 result.gallery_id = base::Uint64ToString(gallery_id);
1154 result.success = false;
1155 SetResult(result.ToValue().release());
1156 error_ = kMissingEventListener;
1157 SendResponse(false);
1158 return;
1159 }
1160
1161 api::media_galleries::AddGalleryWatchResult result;
Lei Zhang 2014/08/25 22:45:21 These two lines are redundant with lines 1152/1153
Oren Blasberg 2014/08/26 00:40:49 Done.
1162 result.gallery_id = base::Uint64ToString(gallery_id);
1163 result.success = error.empty();
1164 SetResult(result.ToValue().release());
1165 if (error.empty()) {
1166 SendResponse(true);
1167 } else {
1168 error_ = error.c_str();
1169 SendResponse(false);
1170 }
1171 }
1172
1173 ///////////////////////////////////////////////////////////////////////////////
1174 // MediaGalleriesRemoveGalleryWatchFunction //
1175 ///////////////////////////////////////////////////////////////////////////////
1176
1177 MediaGalleriesRemoveGalleryWatchFunction::
1178 ~MediaGalleriesRemoveGalleryWatchFunction() {
1179 }
1180
1181 bool MediaGalleriesRemoveGalleryWatchFunction::RunAsync() {
1182 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
1183 if (!render_view_host() || !render_view_host()->GetProcess())
1184 return false;
1185
1186 scoped_ptr<RemoveGalleryWatch::Params> params(
1187 RemoveGalleryWatch::Params::Create(*args_));
1188 EXTENSION_FUNCTION_VALIDATE(params.get());
1189
1190 MediaGalleriesPreferences* preferences =
1191 g_browser_process->media_file_system_registry()->GetPreferences(
1192 GetProfile());
1193 preferences->EnsureInitialized(
1194 base::Bind(&MediaGalleriesRemoveGalleryWatchFunction::OnPreferencesInit,
1195 this,
1196 params->gallery_id));
1197 return true;
1198 }
1199
1200 void MediaGalleriesRemoveGalleryWatchFunction::OnPreferencesInit(
1201 const std::string& pref_id) {
1202 base::FilePath gallery_file_path;
1203 MediaGalleryPrefId gallery_pref_id = 0;
1204 if (!GetGalleryFilePathAndId(pref_id,
1205 GetProfile(),
1206 extension(),
1207 &gallery_file_path,
1208 &gallery_pref_id)) {
1209 error_ = kInvalidGalleryIdMsg;
1210 SendResponse(false);
1211 return;
1212 }
1213
1214 gallery_watch_manager()->RemoveWatch(
1215 GetProfile(), extension_id(), gallery_pref_id);
1216 SendResponse(true);
1217 }
1218
1219 ///////////////////////////////////////////////////////////////////////////////
1220 // MediaGalleriesGetAllGalleryWatchFunction //
1221 ///////////////////////////////////////////////////////////////////////////////
1222
1223 MediaGalleriesGetAllGalleryWatchFunction::
1224 ~MediaGalleriesGetAllGalleryWatchFunction() {
1225 }
1226
1227 bool MediaGalleriesGetAllGalleryWatchFunction::RunAsync() {
1228 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
1229 if (!render_view_host() || !render_view_host()->GetProcess())
1230 return false;
1231
1232 MediaGalleriesPreferences* preferences =
1233 g_browser_process->media_file_system_registry()->GetPreferences(
1234 GetProfile());
1235 preferences->EnsureInitialized(base::Bind(
1236 &MediaGalleriesGetAllGalleryWatchFunction::OnPreferencesInit, this));
1237 return true;
1238 }
1239
1240 void MediaGalleriesGetAllGalleryWatchFunction::OnPreferencesInit() {
1241 std::vector<std::string> result;
1242 MediaGalleryPrefIdSet gallery_ids =
1243 gallery_watch_manager()->GetWatchSet(GetProfile(), extension_id());
1244 for (MediaGalleryPrefIdSet::const_iterator iter = gallery_ids.begin();
1245 iter != gallery_ids.end();
1246 ++iter) {
1247 result.push_back(base::Uint64ToString(*iter));
1248 }
1249 results_ = GetAllGalleryWatch::Results::Create(result);
1250 SendResponse(true);
1251 }
1252
1253 ///////////////////////////////////////////////////////////////////////////////
1254 // MediaGalleriesRemoveAllGalleryWatchFunction //
1255 ///////////////////////////////////////////////////////////////////////////////
1256
1257 MediaGalleriesRemoveAllGalleryWatchFunction::
1258 ~MediaGalleriesRemoveAllGalleryWatchFunction() {
1259 }
1260
1261 bool MediaGalleriesRemoveAllGalleryWatchFunction::RunAsync() {
1262 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
1263 if (!render_view_host() || !render_view_host()->GetProcess())
1264 return false;
1265
1266 MediaGalleriesPreferences* preferences =
1267 g_browser_process->media_file_system_registry()->GetPreferences(
1268 GetProfile());
1269 preferences->EnsureInitialized(base::Bind(
1270 &MediaGalleriesRemoveAllGalleryWatchFunction::OnPreferencesInit, this));
1271 return true;
1272 }
1273
1274 void MediaGalleriesRemoveAllGalleryWatchFunction::OnPreferencesInit() {
1275 gallery_watch_manager()->RemoveAllWatches(GetProfile(), extension_id());
1276 SendResponse(true);
1277 }
1278
1037 } // namespace extensions 1279 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698