Chromium Code Reviews| Index: chrome/browser/extensions/api/media_galleries/media_galleries_api.cc |
| diff --git a/chrome/browser/extensions/api/media_galleries/media_galleries_api.cc b/chrome/browser/extensions/api/media_galleries/media_galleries_api.cc |
| index 8f1c48dee33ad239a2b82da7fb39b5edad398e4c..6a97b040e7994dc16a8bd3e1312425a77cb4047d 100644 |
| --- a/chrome/browser/extensions/api/media_galleries/media_galleries_api.cc |
| +++ b/chrome/browser/extensions/api/media_galleries/media_galleries_api.cc |
| @@ -64,6 +64,8 @@ const char kDisallowedByPolicy[] = |
| "Media Galleries API is disallowed by policy: "; |
| const char kMissingEventListener[] = |
| "Missing event listener registration."; |
| +const char kNoScanPermission[] = |
| + "No permission to scan."; |
| const char kDeviceIdKey[] = "deviceId"; |
| const char kGalleryIdKey[] = "galleryId"; |
| @@ -181,6 +183,19 @@ base::ListValue* ConstructFileSystemList( |
| return list.release(); |
| } |
| +bool CheckScanPermission(const extensions::Extension* extension, |
| + std::string* error) { |
| + DCHECK(extension); |
| + DCHECK(error); |
| + MediaGalleriesPermission::CheckParam scan_param( |
| + MediaGalleriesPermission::kScanPermission); |
| + bool has_scan_permission = PermissionsData::CheckAPIPermissionWithParam( |
| + extension, APIPermission::kMediaGalleries, &scan_param); |
| + if (!has_scan_permission) |
| + *error = kNoScanPermission; |
| + return has_scan_permission; |
| +} |
| + |
| class SelectDirectoryDialog : public ui::SelectFileDialog::Listener, |
| public base::RefCounted<SelectDirectoryDialog> { |
| public: |
| @@ -315,6 +330,16 @@ void MediaGalleriesEventRouter::OnScanFinished( |
| MediaGalleries::OnScanProgress::Create(details).Pass()); |
| } |
| +void MediaGalleriesEventRouter::OnScanError( |
| + const std::string& extension_id) { |
| + MediaGalleries::ScanProgressDetails details; |
| + details.type = MediaGalleries::SCAN_PROGRESS_TYPE_ERROR; |
| + DispatchEventToExtension( |
| + extension_id, |
| + MediaGalleries::OnScanProgress::kEventName, |
| + MediaGalleries::OnScanProgress::Create(details).Pass()); |
| +} |
| + |
| void MediaGalleriesEventRouter::DispatchEventToExtension( |
| const std::string& extension_id, |
| const std::string& event_name, |
| @@ -605,6 +630,11 @@ MediaGalleriesStartMediaScanFunction::~MediaGalleriesStartMediaScanFunction() {} |
| bool MediaGalleriesStartMediaScanFunction::RunImpl() { |
| media_galleries::UsageCount(media_galleries::START_MEDIA_SCAN); |
| + if (!CheckScanPermission(GetExtension(), &error_)) { |
| + MediaGalleriesEventRouter::Get(GetProfile())-> |
|
Lei Zhang
2014/01/29 23:07:53
nit: OnScanError(\nGetExtension()->id());
Pointer
tommycli
2014/01/29 23:19:56
Done.
|
| + OnScanError(GetExtension()->id()); |
| + return false; |
| + } |
| return Setup(GetProfile(), &error_, base::Bind( |
| &MediaGalleriesStartMediaScanFunction::OnPreferencesInit, this)); |
| } |
| @@ -628,6 +658,11 @@ MediaGalleriesCancelMediaScanFunction:: |
| bool MediaGalleriesCancelMediaScanFunction::RunImpl() { |
| media_galleries::UsageCount(media_galleries::CANCEL_MEDIA_SCAN); |
| + if (!CheckScanPermission(GetExtension(), &error_)) { |
| + MediaGalleriesEventRouter::Get(GetProfile())-> |
| + OnScanError(GetExtension()->id()); |
| + return false; |
| + } |
| return Setup(GetProfile(), &error_, base::Bind( |
| &MediaGalleriesCancelMediaScanFunction::OnPreferencesInit, this)); |
| } |
| @@ -642,6 +677,10 @@ MediaGalleriesAddScanResultsFunction::~MediaGalleriesAddScanResultsFunction() {} |
| bool MediaGalleriesAddScanResultsFunction::RunImpl() { |
| media_galleries::UsageCount(media_galleries::ADD_SCAN_RESULTS); |
| + if (!CheckScanPermission(GetExtension(), &error_)) { |
| + // We don't fire a scan progress error here, as it would be unintuitive. |
| + return false; |
| + } |
| return Setup(GetProfile(), &error_, base::Bind( |
| &MediaGalleriesAddScanResultsFunction::OnPreferencesInit, this)); |
| } |