| 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 <stddef.h> | 9 #include <stddef.h> |
| 10 #include <set> | 10 #include <set> |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 #include "chrome/browser/extensions/api/file_system/file_system_api.h" | 24 #include "chrome/browser/extensions/api/file_system/file_system_api.h" |
| 25 #include "chrome/browser/extensions/blob_reader.h" | 25 #include "chrome/browser/extensions/blob_reader.h" |
| 26 #include "chrome/browser/extensions/chrome_extension_function_details.h" | 26 #include "chrome/browser/extensions/chrome_extension_function_details.h" |
| 27 #include "chrome/browser/extensions/extension_tab_util.h" | 27 #include "chrome/browser/extensions/extension_tab_util.h" |
| 28 #include "chrome/browser/media_galleries/fileapi/safe_media_metadata_parser.h" | 28 #include "chrome/browser/media_galleries/fileapi/safe_media_metadata_parser.h" |
| 29 #include "chrome/browser/media_galleries/gallery_watch_manager.h" | 29 #include "chrome/browser/media_galleries/gallery_watch_manager.h" |
| 30 #include "chrome/browser/media_galleries/media_file_system_registry.h" | 30 #include "chrome/browser/media_galleries/media_file_system_registry.h" |
| 31 #include "chrome/browser/media_galleries/media_galleries_histograms.h" | 31 #include "chrome/browser/media_galleries/media_galleries_histograms.h" |
| 32 #include "chrome/browser/media_galleries/media_galleries_permission_controller.h
" | 32 #include "chrome/browser/media_galleries/media_galleries_permission_controller.h
" |
| 33 #include "chrome/browser/media_galleries/media_galleries_preferences.h" | 33 #include "chrome/browser/media_galleries/media_galleries_preferences.h" |
| 34 #include "chrome/browser/media_galleries/media_galleries_scan_result_controller.
h" | |
| 35 #include "chrome/browser/media_galleries/media_scan_manager.h" | |
| 36 #include "chrome/browser/platform_util.h" | 34 #include "chrome/browser/platform_util.h" |
| 37 #include "chrome/browser/profiles/profile.h" | 35 #include "chrome/browser/profiles/profile.h" |
| 38 #include "chrome/browser/ui/chrome_select_file_policy.h" | 36 #include "chrome/browser/ui/chrome_select_file_policy.h" |
| 39 #include "chrome/common/extensions/api/media_galleries.h" | 37 #include "chrome/common/extensions/api/media_galleries.h" |
| 40 #include "chrome/common/pref_names.h" | 38 #include "chrome/common/pref_names.h" |
| 41 #include "chrome/grit/generated_resources.h" | 39 #include "chrome/grit/generated_resources.h" |
| 42 #include "components/storage_monitor/storage_info.h" | 40 #include "components/storage_monitor/storage_info.h" |
| 43 #include "content/public/browser/blob_handle.h" | 41 #include "content/public/browser/blob_handle.h" |
| 44 #include "content/public/browser/browser_context.h" | 42 #include "content/public/browser/browser_context.h" |
| 45 #include "content/public/browser/browser_thread.h" | 43 #include "content/public/browser/browser_thread.h" |
| (...skipping 29 matching lines...) Expand all Loading... |
| 75 | 73 |
| 76 namespace { | 74 namespace { |
| 77 | 75 |
| 78 const char kDisallowedByPolicy[] = | 76 const char kDisallowedByPolicy[] = |
| 79 "Media Galleries API is disallowed by policy: "; | 77 "Media Galleries API is disallowed by policy: "; |
| 80 const char kFailedToSetGalleryPermission[] = | 78 const char kFailedToSetGalleryPermission[] = |
| 81 "Failed to set gallery permission."; | 79 "Failed to set gallery permission."; |
| 82 const char kInvalidGalleryIdMsg[] = "Invalid gallery id."; | 80 const char kInvalidGalleryIdMsg[] = "Invalid gallery id."; |
| 83 const char kMissingEventListener[] = "Missing event listener registration."; | 81 const char kMissingEventListener[] = "Missing event listener registration."; |
| 84 const char kNonExistentGalleryId[] = "Non-existent gallery id."; | 82 const char kNonExistentGalleryId[] = "Non-existent gallery id."; |
| 85 const char kNoScanPermission[] = "No permission to scan."; | |
| 86 | 83 |
| 87 const char kDeviceIdKey[] = "deviceId"; | 84 const char kDeviceIdKey[] = "deviceId"; |
| 88 const char kGalleryIdKey[] = "galleryId"; | 85 const char kGalleryIdKey[] = "galleryId"; |
| 89 const char kIsAvailableKey[] = "isAvailable"; | 86 const char kIsAvailableKey[] = "isAvailable"; |
| 90 const char kIsMediaDeviceKey[] = "isMediaDevice"; | 87 const char kIsMediaDeviceKey[] = "isMediaDevice"; |
| 91 const char kIsRemovableKey[] = "isRemovable"; | 88 const char kIsRemovableKey[] = "isRemovable"; |
| 92 const char kNameKey[] = "name"; | 89 const char kNameKey[] = "name"; |
| 93 | 90 |
| 94 const char kMetadataKey[] = "metadata"; | 91 const char kMetadataKey[] = "metadata"; |
| 95 const char kAttachedImagesBlobInfoKey[] = "attachedImagesBlobInfo"; | 92 const char kAttachedImagesBlobInfoKey[] = "attachedImagesBlobInfo"; |
| 96 const char kBlobUUIDKey[] = "blobUUID"; | 93 const char kBlobUUIDKey[] = "blobUUID"; |
| 97 const char kTypeKey[] = "type"; | 94 const char kTypeKey[] = "type"; |
| 98 const char kSizeKey[] = "size"; | 95 const char kSizeKey[] = "size"; |
| 99 | 96 |
| 100 const char kInvalidGalleryId[] = "-1"; | 97 const char kInvalidGalleryId[] = "-1"; |
| 101 | 98 |
| 102 MediaFileSystemRegistry* media_file_system_registry() { | 99 MediaFileSystemRegistry* media_file_system_registry() { |
| 103 return g_browser_process->media_file_system_registry(); | 100 return g_browser_process->media_file_system_registry(); |
| 104 } | 101 } |
| 105 | 102 |
| 106 GalleryWatchManager* gallery_watch_manager() { | 103 GalleryWatchManager* gallery_watch_manager() { |
| 107 return media_file_system_registry()->gallery_watch_manager(); | 104 return media_file_system_registry()->gallery_watch_manager(); |
| 108 } | 105 } |
| 109 | 106 |
| 110 MediaScanManager* media_scan_manager() { | |
| 111 return media_file_system_registry()->media_scan_manager(); | |
| 112 } | |
| 113 | |
| 114 // Checks whether the MediaGalleries API is currently accessible (it may be | 107 // Checks whether the MediaGalleries API is currently accessible (it may be |
| 115 // disallowed even if an extension has the requisite permission). Then | 108 // disallowed even if an extension has the requisite permission). Then |
| 116 // initializes the MediaGalleriesPreferences | 109 // initializes the MediaGalleriesPreferences |
| 117 bool Setup(Profile* profile, std::string* error, base::Closure callback) { | 110 bool Setup(Profile* profile, std::string* error, base::Closure callback) { |
| 118 if (!ChromeSelectFilePolicy::FileSelectDialogsAllowed()) { | 111 if (!ChromeSelectFilePolicy::FileSelectDialogsAllowed()) { |
| 119 *error = std::string(kDisallowedByPolicy) + | 112 *error = std::string(kDisallowedByPolicy) + |
| 120 prefs::kAllowFileSelectionDialogs; | 113 prefs::kAllowFileSelectionDialogs; |
| 121 return false; | 114 return false; |
| 122 } | 115 } |
| 123 | 116 |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 210 if (has_copy_to_permission) { | 203 if (has_copy_to_permission) { |
| 211 policy->GrantCopyInto(child_id, filesystems[i].path); | 204 policy->GrantCopyInto(child_id, filesystems[i].path); |
| 212 } | 205 } |
| 213 } | 206 } |
| 214 } | 207 } |
| 215 } | 208 } |
| 216 | 209 |
| 217 return list.release(); | 210 return list.release(); |
| 218 } | 211 } |
| 219 | 212 |
| 220 bool CheckScanPermission(const extensions::Extension* extension, | |
| 221 std::string* error) { | |
| 222 DCHECK(extension); | |
| 223 DCHECK(error); | |
| 224 MediaGalleriesPermission::CheckParam scan_param( | |
| 225 MediaGalleriesPermission::kScanPermission); | |
| 226 bool has_scan_permission = | |
| 227 extension->permissions_data()->CheckAPIPermissionWithParam( | |
| 228 APIPermission::kMediaGalleries, &scan_param); | |
| 229 if (!has_scan_permission) | |
| 230 *error = kNoScanPermission; | |
| 231 return has_scan_permission; | |
| 232 } | |
| 233 | |
| 234 class SelectDirectoryDialog : public ui::SelectFileDialog::Listener, | 213 class SelectDirectoryDialog : public ui::SelectFileDialog::Listener, |
| 235 public base::RefCounted<SelectDirectoryDialog> { | 214 public base::RefCounted<SelectDirectoryDialog> { |
| 236 public: | 215 public: |
| 237 // Selected file path, or an empty path if the user canceled. | 216 // Selected file path, or an empty path if the user canceled. |
| 238 typedef base::Callback<void(const base::FilePath&)> Callback; | 217 typedef base::Callback<void(const base::FilePath&)> Callback; |
| 239 | 218 |
| 240 SelectDirectoryDialog(WebContents* web_contents, const Callback& callback) | 219 SelectDirectoryDialog(WebContents* web_contents, const Callback& callback) |
| 241 : web_contents_(web_contents), | 220 : web_contents_(web_contents), |
| 242 callback_(callback) { | 221 callback_(callback) { |
| 243 select_file_dialog_ = ui::SelectFileDialog::Create( | 222 select_file_dialog_ = ui::SelectFileDialog::Create( |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 291 MediaGalleriesEventRouter::MediaGalleriesEventRouter( | 270 MediaGalleriesEventRouter::MediaGalleriesEventRouter( |
| 292 content::BrowserContext* context) | 271 content::BrowserContext* context) |
| 293 : profile_(Profile::FromBrowserContext(context)), weak_ptr_factory_(this) { | 272 : profile_(Profile::FromBrowserContext(context)), weak_ptr_factory_(this) { |
| 294 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 273 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 295 DCHECK(profile_); | 274 DCHECK(profile_); |
| 296 | 275 |
| 297 EventRouter::Get(profile_)->RegisterObserver( | 276 EventRouter::Get(profile_)->RegisterObserver( |
| 298 this, MediaGalleries::OnGalleryChanged::kEventName); | 277 this, MediaGalleries::OnGalleryChanged::kEventName); |
| 299 | 278 |
| 300 gallery_watch_manager()->AddObserver(profile_, this); | 279 gallery_watch_manager()->AddObserver(profile_, this); |
| 301 media_scan_manager()->AddObserver(profile_, this); | |
| 302 } | 280 } |
| 303 | 281 |
| 304 MediaGalleriesEventRouter::~MediaGalleriesEventRouter() { | 282 MediaGalleriesEventRouter::~MediaGalleriesEventRouter() { |
| 305 } | 283 } |
| 306 | 284 |
| 307 void MediaGalleriesEventRouter::Shutdown() { | 285 void MediaGalleriesEventRouter::Shutdown() { |
| 308 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 286 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 309 weak_ptr_factory_.InvalidateWeakPtrs(); | 287 weak_ptr_factory_.InvalidateWeakPtrs(); |
| 310 | 288 |
| 311 EventRouter::Get(profile_)->UnregisterObserver(this); | 289 EventRouter::Get(profile_)->UnregisterObserver(this); |
| 312 | 290 |
| 313 gallery_watch_manager()->RemoveObserver(profile_); | 291 gallery_watch_manager()->RemoveObserver(profile_); |
| 314 media_scan_manager()->RemoveObserver(profile_); | |
| 315 media_scan_manager()->CancelScansForProfile(profile_); | |
| 316 } | 292 } |
| 317 | 293 |
| 318 static base::LazyInstance< | 294 static base::LazyInstance< |
| 319 BrowserContextKeyedAPIFactory<MediaGalleriesEventRouter> > g_factory = | 295 BrowserContextKeyedAPIFactory<MediaGalleriesEventRouter> > g_factory = |
| 320 LAZY_INSTANCE_INITIALIZER; | 296 LAZY_INSTANCE_INITIALIZER; |
| 321 | 297 |
| 322 // static | 298 // static |
| 323 BrowserContextKeyedAPIFactory<MediaGalleriesEventRouter>* | 299 BrowserContextKeyedAPIFactory<MediaGalleriesEventRouter>* |
| 324 MediaGalleriesEventRouter::GetFactoryInstance() { | 300 MediaGalleriesEventRouter::GetFactoryInstance() { |
| 325 return g_factory.Pointer(); | 301 return g_factory.Pointer(); |
| 326 } | 302 } |
| 327 | 303 |
| 328 // static | 304 // static |
| 329 MediaGalleriesEventRouter* MediaGalleriesEventRouter::Get( | 305 MediaGalleriesEventRouter* MediaGalleriesEventRouter::Get( |
| 330 content::BrowserContext* context) { | 306 content::BrowserContext* context) { |
| 331 DCHECK(media_file_system_registry() | 307 DCHECK(media_file_system_registry() |
| 332 ->GetPreferences(Profile::FromBrowserContext(context)) | 308 ->GetPreferences(Profile::FromBrowserContext(context)) |
| 333 ->IsInitialized()); | 309 ->IsInitialized()); |
| 334 return BrowserContextKeyedAPIFactory<MediaGalleriesEventRouter>::Get(context); | 310 return BrowserContextKeyedAPIFactory<MediaGalleriesEventRouter>::Get(context); |
| 335 } | 311 } |
| 336 | 312 |
| 337 bool MediaGalleriesEventRouter::ExtensionHasGalleryChangeListener( | 313 bool MediaGalleriesEventRouter::ExtensionHasGalleryChangeListener( |
| 338 const std::string& extension_id) const { | 314 const std::string& extension_id) const { |
| 339 return EventRouter::Get(profile_)->ExtensionHasEventListener( | 315 return EventRouter::Get(profile_)->ExtensionHasEventListener( |
| 340 extension_id, MediaGalleries::OnGalleryChanged::kEventName); | 316 extension_id, MediaGalleries::OnGalleryChanged::kEventName); |
| 341 } | 317 } |
| 342 | 318 |
| 343 bool MediaGalleriesEventRouter::ExtensionHasScanProgressListener( | |
| 344 const std::string& extension_id) const { | |
| 345 return EventRouter::Get(profile_)->ExtensionHasEventListener( | |
| 346 extension_id, MediaGalleries::OnScanProgress::kEventName); | |
| 347 } | |
| 348 | |
| 349 void MediaGalleriesEventRouter::OnScanStarted(const std::string& extension_id) { | |
| 350 MediaGalleries::ScanProgressDetails details; | |
| 351 details.type = MediaGalleries::SCAN_PROGRESS_TYPE_START; | |
| 352 DispatchEventToExtension(extension_id, | |
| 353 events::MEDIA_GALLERIES_ON_SCAN_PROGRESS, | |
| 354 MediaGalleries::OnScanProgress::kEventName, | |
| 355 MediaGalleries::OnScanProgress::Create(details)); | |
| 356 } | |
| 357 | |
| 358 void MediaGalleriesEventRouter::OnScanCancelled( | |
| 359 const std::string& extension_id) { | |
| 360 MediaGalleries::ScanProgressDetails details; | |
| 361 details.type = MediaGalleries::SCAN_PROGRESS_TYPE_CANCEL; | |
| 362 DispatchEventToExtension(extension_id, | |
| 363 events::MEDIA_GALLERIES_ON_SCAN_PROGRESS, | |
| 364 MediaGalleries::OnScanProgress::kEventName, | |
| 365 MediaGalleries::OnScanProgress::Create(details)); | |
| 366 } | |
| 367 | |
| 368 void MediaGalleriesEventRouter::OnScanFinished( | |
| 369 const std::string& extension_id, int gallery_count, | |
| 370 const MediaGalleryScanResult& file_counts) { | |
| 371 media_galleries::UsageCount(media_galleries::SCAN_FINISHED); | |
| 372 MediaGalleries::ScanProgressDetails details; | |
| 373 details.type = MediaGalleries::SCAN_PROGRESS_TYPE_FINISH; | |
| 374 details.gallery_count.reset(new int(gallery_count)); | |
| 375 details.audio_count.reset(new int(file_counts.audio_count)); | |
| 376 details.image_count.reset(new int(file_counts.image_count)); | |
| 377 details.video_count.reset(new int(file_counts.video_count)); | |
| 378 DispatchEventToExtension(extension_id, | |
| 379 events::MEDIA_GALLERIES_ON_SCAN_PROGRESS, | |
| 380 MediaGalleries::OnScanProgress::kEventName, | |
| 381 MediaGalleries::OnScanProgress::Create(details)); | |
| 382 } | |
| 383 | |
| 384 void MediaGalleriesEventRouter::OnScanError( | |
| 385 const std::string& extension_id) { | |
| 386 MediaGalleries::ScanProgressDetails details; | |
| 387 details.type = MediaGalleries::SCAN_PROGRESS_TYPE_ERROR; | |
| 388 DispatchEventToExtension(extension_id, | |
| 389 events::MEDIA_GALLERIES_ON_SCAN_PROGRESS, | |
| 390 MediaGalleries::OnScanProgress::kEventName, | |
| 391 MediaGalleries::OnScanProgress::Create(details)); | |
| 392 } | |
| 393 | |
| 394 void MediaGalleriesEventRouter::DispatchEventToExtension( | 319 void MediaGalleriesEventRouter::DispatchEventToExtension( |
| 395 const std::string& extension_id, | 320 const std::string& extension_id, |
| 396 events::HistogramValue histogram_value, | 321 events::HistogramValue histogram_value, |
| 397 const std::string& event_name, | 322 const std::string& event_name, |
| 398 scoped_ptr<base::ListValue> event_args) { | 323 scoped_ptr<base::ListValue> event_args) { |
| 399 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 324 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 400 | 325 |
| 401 EventRouter* router = EventRouter::Get(profile_); | 326 EventRouter* router = EventRouter::Get(profile_); |
| 402 if (!router->ExtensionHasEventListener(extension_id, event_name)) | 327 if (!router->ExtensionHasEventListener(extension_id, event_name)) |
| 403 return; | 328 return; |
| (...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 758 bool dropped = preferences->SetGalleryPermissionForExtension( | 683 bool dropped = preferences->SetGalleryPermissionForExtension( |
| 759 *extension(), pref_id, false); | 684 *extension(), pref_id, false); |
| 760 if (dropped) | 685 if (dropped) |
| 761 SetResult(new base::StringValue(base::Uint64ToString(pref_id))); | 686 SetResult(new base::StringValue(base::Uint64ToString(pref_id))); |
| 762 else | 687 else |
| 763 error_ = kFailedToSetGalleryPermission; | 688 error_ = kFailedToSetGalleryPermission; |
| 764 SendResponse(dropped); | 689 SendResponse(dropped); |
| 765 } | 690 } |
| 766 | 691 |
| 767 /////////////////////////////////////////////////////////////////////////////// | 692 /////////////////////////////////////////////////////////////////////////////// |
| 768 // MediaGalleriesStartMediaScanFunction // | |
| 769 /////////////////////////////////////////////////////////////////////////////// | |
| 770 MediaGalleriesStartMediaScanFunction::~MediaGalleriesStartMediaScanFunction() {} | |
| 771 | |
| 772 bool MediaGalleriesStartMediaScanFunction::RunAsync() { | |
| 773 media_galleries::UsageCount(media_galleries::START_MEDIA_SCAN); | |
| 774 if (!CheckScanPermission(extension(), &error_)) { | |
| 775 MediaGalleriesEventRouter::Get(GetProfile()) | |
| 776 ->OnScanError(extension()->id()); | |
| 777 return false; | |
| 778 } | |
| 779 return Setup(GetProfile(), &error_, base::Bind( | |
| 780 &MediaGalleriesStartMediaScanFunction::OnPreferencesInit, this)); | |
| 781 } | |
| 782 | |
| 783 void MediaGalleriesStartMediaScanFunction::OnPreferencesInit() { | |
| 784 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | |
| 785 MediaGalleriesEventRouter* api = MediaGalleriesEventRouter::Get(GetProfile()); | |
| 786 if (!api->ExtensionHasScanProgressListener(extension()->id())) { | |
| 787 error_ = kMissingEventListener; | |
| 788 SendResponse(false); | |
| 789 return; | |
| 790 } | |
| 791 | |
| 792 media_scan_manager()->StartScan(GetProfile(), extension(), user_gesture()); | |
| 793 SendResponse(true); | |
| 794 } | |
| 795 | |
| 796 /////////////////////////////////////////////////////////////////////////////// | |
| 797 // MediaGalleriesCancelMediaScanFunction // | |
| 798 /////////////////////////////////////////////////////////////////////////////// | |
| 799 MediaGalleriesCancelMediaScanFunction:: | |
| 800 ~MediaGalleriesCancelMediaScanFunction() { | |
| 801 } | |
| 802 | |
| 803 bool MediaGalleriesCancelMediaScanFunction::RunAsync() { | |
| 804 media_galleries::UsageCount(media_galleries::CANCEL_MEDIA_SCAN); | |
| 805 if (!CheckScanPermission(extension(), &error_)) { | |
| 806 MediaGalleriesEventRouter::Get(GetProfile()) | |
| 807 ->OnScanError(extension()->id()); | |
| 808 return false; | |
| 809 } | |
| 810 return Setup(GetProfile(), &error_, base::Bind( | |
| 811 &MediaGalleriesCancelMediaScanFunction::OnPreferencesInit, this)); | |
| 812 } | |
| 813 | |
| 814 void MediaGalleriesCancelMediaScanFunction::OnPreferencesInit() { | |
| 815 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | |
| 816 media_scan_manager()->CancelScan(GetProfile(), extension()); | |
| 817 SendResponse(true); | |
| 818 } | |
| 819 | |
| 820 /////////////////////////////////////////////////////////////////////////////// | |
| 821 // MediaGalleriesAddScanResultsFunction // | |
| 822 /////////////////////////////////////////////////////////////////////////////// | |
| 823 MediaGalleriesAddScanResultsFunction::~MediaGalleriesAddScanResultsFunction() {} | |
| 824 | |
| 825 bool MediaGalleriesAddScanResultsFunction::RunAsync() { | |
| 826 media_galleries::UsageCount(media_galleries::ADD_SCAN_RESULTS); | |
| 827 if (!CheckScanPermission(extension(), &error_)) { | |
| 828 // We don't fire a scan progress error here, as it would be unintuitive. | |
| 829 return false; | |
| 830 } | |
| 831 if (!user_gesture()) | |
| 832 return false; | |
| 833 | |
| 834 return Setup(GetProfile(), &error_, base::Bind( | |
| 835 &MediaGalleriesAddScanResultsFunction::OnPreferencesInit, this)); | |
| 836 } | |
| 837 | |
| 838 MediaGalleriesScanResultController* | |
| 839 MediaGalleriesAddScanResultsFunction::MakeDialog( | |
| 840 content::WebContents* web_contents, | |
| 841 const extensions::Extension& extension, | |
| 842 const base::Closure& on_finish) { | |
| 843 // Controller will delete itself. | |
| 844 return new MediaGalleriesScanResultController(web_contents, extension, | |
| 845 on_finish); | |
| 846 } | |
| 847 | |
| 848 void MediaGalleriesAddScanResultsFunction::OnPreferencesInit() { | |
| 849 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | |
| 850 MediaGalleriesPreferences* preferences = | |
| 851 media_file_system_registry()->GetPreferences(GetProfile()); | |
| 852 if (MediaGalleriesScanResultController::ScanResultCountForExtension( | |
| 853 preferences, extension()) == 0) { | |
| 854 GetAndReturnGalleries(); | |
| 855 return; | |
| 856 } | |
| 857 | |
| 858 WebContents* contents = | |
| 859 ChromeExtensionFunctionDetails(this).GetOriginWebContents(); | |
| 860 if (!contents) { | |
| 861 SendResponse(false); | |
| 862 return; | |
| 863 } | |
| 864 | |
| 865 base::Closure cb = base::Bind( | |
| 866 &MediaGalleriesAddScanResultsFunction::GetAndReturnGalleries, this); | |
| 867 MakeDialog(contents, *extension(), cb); | |
| 868 } | |
| 869 | |
| 870 void MediaGalleriesAddScanResultsFunction::GetAndReturnGalleries() { | |
| 871 if (!render_frame_host()) { | |
| 872 ReturnGalleries(std::vector<MediaFileSystemInfo>()); | |
| 873 return; | |
| 874 } | |
| 875 MediaFileSystemRegistry* registry = media_file_system_registry(); | |
| 876 DCHECK(registry->GetPreferences(GetProfile())->IsInitialized()); | |
| 877 registry->GetMediaFileSystemsForExtension( | |
| 878 GetSenderWebContents(), extension(), | |
| 879 base::Bind(&MediaGalleriesAddScanResultsFunction::ReturnGalleries, this)); | |
| 880 } | |
| 881 | |
| 882 void MediaGalleriesAddScanResultsFunction::ReturnGalleries( | |
| 883 const std::vector<MediaFileSystemInfo>& filesystems) { | |
| 884 scoped_ptr<base::ListValue> list( | |
| 885 ConstructFileSystemList(render_frame_host(), extension(), filesystems)); | |
| 886 if (!list.get()) { | |
| 887 SendResponse(false); | |
| 888 return; | |
| 889 } | |
| 890 | |
| 891 // The custom JS binding will use this list to create DOMFileSystem objects. | |
| 892 SetResult(list.release()); | |
| 893 SendResponse(true); | |
| 894 } | |
| 895 | |
| 896 /////////////////////////////////////////////////////////////////////////////// | |
| 897 // MediaGalleriesGetMetadataFunction // | 693 // MediaGalleriesGetMetadataFunction // |
| 898 /////////////////////////////////////////////////////////////////////////////// | 694 /////////////////////////////////////////////////////////////////////////////// |
| 899 MediaGalleriesGetMetadataFunction::~MediaGalleriesGetMetadataFunction() {} | 695 MediaGalleriesGetMetadataFunction::~MediaGalleriesGetMetadataFunction() {} |
| 900 | 696 |
| 901 bool MediaGalleriesGetMetadataFunction::RunAsync() { | 697 bool MediaGalleriesGetMetadataFunction::RunAsync() { |
| 902 media_galleries::UsageCount(media_galleries::GET_METADATA); | 698 media_galleries::UsageCount(media_galleries::GET_METADATA); |
| 903 std::string blob_uuid; | 699 std::string blob_uuid; |
| 904 EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &blob_uuid)); | 700 EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &blob_uuid)); |
| 905 | 701 |
| 906 const base::Value* options_value = NULL; | 702 const base::Value* options_value = NULL; |
| (...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1251 &MediaGalleriesRemoveAllGalleryWatchFunction::OnPreferencesInit, this)); | 1047 &MediaGalleriesRemoveAllGalleryWatchFunction::OnPreferencesInit, this)); |
| 1252 return true; | 1048 return true; |
| 1253 } | 1049 } |
| 1254 | 1050 |
| 1255 void MediaGalleriesRemoveAllGalleryWatchFunction::OnPreferencesInit() { | 1051 void MediaGalleriesRemoveAllGalleryWatchFunction::OnPreferencesInit() { |
| 1256 gallery_watch_manager()->RemoveAllWatches(GetProfile(), extension_id()); | 1052 gallery_watch_manager()->RemoveAllWatches(GetProfile(), extension_id()); |
| 1257 SendResponse(true); | 1053 SendResponse(true); |
| 1258 } | 1054 } |
| 1259 | 1055 |
| 1260 } // namespace extensions | 1056 } // namespace extensions |
| OLD | NEW |