| 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..eea82177dd976ebaca6bd92cbe05913d593028ac 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())->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));
|
| }
|
|
|