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 // 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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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_CURRENTLY_ON(content::BrowserThread::UI); |
| 1097 DCHECK(GetProfile()); |
| 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 = kInvalidMediaGalleryPrefId; |
| 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 api::media_galleries::AddGalleryWatchResult result; |
| 1152 result.gallery_id = base::Uint64ToString(gallery_id); |
| 1153 |
| 1154 if (!api->ExtensionHasGalleryChangeListener(extension()->id())) { |
| 1155 result.success = false; |
| 1156 SetResult(result.ToValue().release()); |
| 1157 error_ = kMissingEventListener; |
| 1158 SendResponse(false); |
| 1159 return; |
| 1160 } |
| 1161 |
| 1162 result.success = error.empty(); |
| 1163 SetResult(result.ToValue().release()); |
| 1164 if (error.empty()) { |
| 1165 SendResponse(true); |
| 1166 } else { |
| 1167 error_ = error.c_str(); |
| 1168 SendResponse(false); |
| 1169 } |
| 1170 } |
| 1171 |
| 1172 /////////////////////////////////////////////////////////////////////////////// |
| 1173 // MediaGalleriesRemoveGalleryWatchFunction // |
| 1174 /////////////////////////////////////////////////////////////////////////////// |
| 1175 |
| 1176 MediaGalleriesRemoveGalleryWatchFunction:: |
| 1177 ~MediaGalleriesRemoveGalleryWatchFunction() { |
| 1178 } |
| 1179 |
| 1180 bool MediaGalleriesRemoveGalleryWatchFunction::RunAsync() { |
| 1181 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 1182 if (!render_view_host() || !render_view_host()->GetProcess()) |
| 1183 return false; |
| 1184 |
| 1185 scoped_ptr<RemoveGalleryWatch::Params> params( |
| 1186 RemoveGalleryWatch::Params::Create(*args_)); |
| 1187 EXTENSION_FUNCTION_VALIDATE(params.get()); |
| 1188 |
| 1189 MediaGalleriesPreferences* preferences = |
| 1190 g_browser_process->media_file_system_registry()->GetPreferences( |
| 1191 GetProfile()); |
| 1192 preferences->EnsureInitialized( |
| 1193 base::Bind(&MediaGalleriesRemoveGalleryWatchFunction::OnPreferencesInit, |
| 1194 this, |
| 1195 params->gallery_id)); |
| 1196 return true; |
| 1197 } |
| 1198 |
| 1199 void MediaGalleriesRemoveGalleryWatchFunction::OnPreferencesInit( |
| 1200 const std::string& pref_id) { |
| 1201 base::FilePath gallery_file_path; |
| 1202 MediaGalleryPrefId gallery_pref_id = 0; |
| 1203 if (!GetGalleryFilePathAndId(pref_id, |
| 1204 GetProfile(), |
| 1205 extension(), |
| 1206 &gallery_file_path, |
| 1207 &gallery_pref_id)) { |
| 1208 error_ = kInvalidGalleryIdMsg; |
| 1209 SendResponse(false); |
| 1210 return; |
| 1211 } |
| 1212 |
| 1213 gallery_watch_manager()->RemoveWatch( |
| 1214 GetProfile(), extension_id(), gallery_pref_id); |
| 1215 SendResponse(true); |
| 1216 } |
| 1217 |
| 1218 /////////////////////////////////////////////////////////////////////////////// |
| 1219 // MediaGalleriesGetAllGalleryWatchFunction // |
| 1220 /////////////////////////////////////////////////////////////////////////////// |
| 1221 |
| 1222 MediaGalleriesGetAllGalleryWatchFunction:: |
| 1223 ~MediaGalleriesGetAllGalleryWatchFunction() { |
| 1224 } |
| 1225 |
| 1226 bool MediaGalleriesGetAllGalleryWatchFunction::RunAsync() { |
| 1227 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 1228 if (!render_view_host() || !render_view_host()->GetProcess()) |
| 1229 return false; |
| 1230 |
| 1231 MediaGalleriesPreferences* preferences = |
| 1232 g_browser_process->media_file_system_registry()->GetPreferences( |
| 1233 GetProfile()); |
| 1234 preferences->EnsureInitialized(base::Bind( |
| 1235 &MediaGalleriesGetAllGalleryWatchFunction::OnPreferencesInit, this)); |
| 1236 return true; |
| 1237 } |
| 1238 |
| 1239 void MediaGalleriesGetAllGalleryWatchFunction::OnPreferencesInit() { |
| 1240 std::vector<std::string> result; |
| 1241 MediaGalleryPrefIdSet gallery_ids = |
| 1242 gallery_watch_manager()->GetWatchSet(GetProfile(), extension_id()); |
| 1243 for (MediaGalleryPrefIdSet::const_iterator iter = gallery_ids.begin(); |
| 1244 iter != gallery_ids.end(); |
| 1245 ++iter) { |
| 1246 result.push_back(base::Uint64ToString(*iter)); |
| 1247 } |
| 1248 results_ = GetAllGalleryWatch::Results::Create(result); |
| 1249 SendResponse(true); |
| 1250 } |
| 1251 |
| 1252 /////////////////////////////////////////////////////////////////////////////// |
| 1253 // MediaGalleriesRemoveAllGalleryWatchFunction // |
| 1254 /////////////////////////////////////////////////////////////////////////////// |
| 1255 |
| 1256 MediaGalleriesRemoveAllGalleryWatchFunction:: |
| 1257 ~MediaGalleriesRemoveAllGalleryWatchFunction() { |
| 1258 } |
| 1259 |
| 1260 bool MediaGalleriesRemoveAllGalleryWatchFunction::RunAsync() { |
| 1261 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 1262 if (!render_view_host() || !render_view_host()->GetProcess()) |
| 1263 return false; |
| 1264 |
| 1265 MediaGalleriesPreferences* preferences = |
| 1266 g_browser_process->media_file_system_registry()->GetPreferences( |
| 1267 GetProfile()); |
| 1268 preferences->EnsureInitialized(base::Bind( |
| 1269 &MediaGalleriesRemoveAllGalleryWatchFunction::OnPreferencesInit, this)); |
| 1270 return true; |
| 1271 } |
| 1272 |
| 1273 void MediaGalleriesRemoveAllGalleryWatchFunction::OnPreferencesInit() { |
| 1274 gallery_watch_manager()->RemoveAllWatches(GetProfile(), extension_id()); |
| 1275 SendResponse(true); |
| 1276 } |
| 1277 |
1037 } // namespace extensions | 1278 } // namespace extensions |
OLD | NEW |