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

Unified Diff: extensions/common/permissions/media_galleries_permission.cc

Issue 795543002: Added PermissionIDSet to APIPermissions (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@permissions_patch_1_static_initializer_fix
Patch Set: Rebase Created 6 years 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 side-by-side diff with in-line comments
Download patch
Index: extensions/common/permissions/media_galleries_permission.cc
diff --git a/extensions/common/permissions/media_galleries_permission.cc b/extensions/common/permissions/media_galleries_permission.cc
index df8f946a7e1394066e8d492472d855e22da8c953..7f0133217e9f470a275e598cb014ab3a85f8b439 100644
--- a/extensions/common/permissions/media_galleries_permission.cc
+++ b/extensions/common/permissions/media_galleries_permission.cc
@@ -13,6 +13,8 @@
#include "grit/extensions_strings.h"
#include "ui/base/l10n/l10n_util.h"
+namespace extensions {
+
namespace {
// copyTo permission requires delete permission as a prerequisite.
@@ -36,9 +38,83 @@ bool IsValidPermissionSet(bool has_read, bool has_copy_to, bool has_delete,
return true;
}
-} // namespace
+// Adds the permissions from the |data_set| to the permission lists that are
+// not NULL. If NULL, that list is ignored.
+void AddPermissionsToLists(
+ const std::set<MediaGalleriesPermissionData>& data_set,
+ PermissionIDSet* ids,
+ PermissionMessages* messages) {
+ // TODO(sashab): Once GetMessages() is deprecated, move this logic back into
+ // GetPermissions().
+ bool has_all_auto_detected = false;
+ bool has_read = false;
+ bool has_copy_to = false;
+ bool has_delete = false;
-namespace extensions {
+ for (std::set<MediaGalleriesPermissionData>::const_iterator it =
+ data_set.begin();
+ it != data_set.end(); ++it) {
+ if (it->permission() ==
+ MediaGalleriesPermission::kAllAutoDetectedPermission)
+ has_all_auto_detected = true;
+ else if (it->permission() == MediaGalleriesPermission::kReadPermission)
+ has_read = true;
+ else if (it->permission() == MediaGalleriesPermission::kCopyToPermission)
+ has_copy_to = true;
+ else if (it->permission() == MediaGalleriesPermission::kDeletePermission)
+ has_delete = true;
+ }
+
+ if (!IsValidPermissionSet(has_read, has_copy_to, has_delete, NULL)) {
+ NOTREACHED();
+ return;
+ }
+
+ // If |has_all_auto_detected| is false, then Chrome will prompt the user at
+ // runtime when the extension call the getMediaGalleries API.
+ if (!has_all_auto_detected)
+ return;
+ // No access permission case.
+ if (!has_read)
+ return;
+
+ // Separate PermissionMessage IDs for read, copyTo, and delete. Otherwise an
+ // extension can silently gain new access capabilities.
+ if (messages) {
+ messages->push_back(PermissionMessage(
+ PermissionMessage::kMediaGalleriesAllGalleriesRead,
+ l10n_util::GetStringUTF16(
+ IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ)));
+ }
+ if (ids)
+ ids->insert(APIPermission::kMediaGalleriesAllGalleriesRead);
+
+ // For copyTo and delete, the proper combined permission message will be
+ // derived in ChromePermissionMessageProvider::GetWarningMessages(), such
+ // that the user get 1 entry for all media galleries access permissions,
+ // rather than several separate entries.
+ if (has_copy_to) {
+ if (messages) {
+ messages->push_back(PermissionMessage(
+ PermissionMessage::kMediaGalleriesAllGalleriesCopyTo,
+ base::string16()));
+ }
+ if (ids)
+ ids->insert(APIPermission::kMediaGalleriesAllGalleriesCopyTo);
+ }
+ if (has_delete) {
+ if (messages) {
+ messages->push_back(PermissionMessage(
+ PermissionMessage::kMediaGalleriesAllGalleriesDelete,
+ base::string16()));
+ }
+ if (ids)
+ ids->insert(APIPermission::kMediaGalleriesAllGalleriesDelete);
+ }
+ return;
+}
+
+} // namespace
const char MediaGalleriesPermission::kAllAutoDetectedPermission[] =
"allAutoDetected";
@@ -110,61 +186,17 @@ bool MediaGalleriesPermission::FromValue(
return IsValidPermissionSet(has_read, has_copy_to, has_delete, error);
}
+PermissionIDSet MediaGalleriesPermission::GetPermissions() const {
+ DCHECK(HasMessages());
+ PermissionIDSet result;
+ AddPermissionsToLists(data_set_, &result, NULL);
+ return result;
+}
+
PermissionMessages MediaGalleriesPermission::GetMessages() const {
DCHECK(HasMessages());
PermissionMessages result;
-
- bool has_all_auto_detected = false;
- bool has_read = false;
- bool has_copy_to = false;
- bool has_delete = false;
-
- for (std::set<MediaGalleriesPermissionData>::const_iterator it =
- data_set_.begin(); it != data_set_.end(); ++it) {
- if (it->permission() == kAllAutoDetectedPermission)
- has_all_auto_detected = true;
- else if (it->permission() == kReadPermission)
- has_read = true;
- else if (it->permission() == kCopyToPermission)
- has_copy_to = true;
- else if (it->permission() == kDeletePermission)
- has_delete = true;
- }
-
- if (!IsValidPermissionSet(has_read, has_copy_to, has_delete, NULL)) {
- NOTREACHED();
- return result;
- }
-
- // If |has_all_auto_detected| is false, then Chrome will prompt the user at
- // runtime when the extension call the getMediaGalleries API.
- if (!has_all_auto_detected)
- return result;
- // No access permission case.
- if (!has_read)
- return result;
-
- // Separate PermissionMessage IDs for read, copyTo, and delete. Otherwise an
- // extension can silently gain new access capabilities.
- result.push_back(PermissionMessage(
- PermissionMessage::kMediaGalleriesAllGalleriesRead,
- l10n_util::GetStringUTF16(
- IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ)));
-
- // For copyTo and delete, the proper combined permission message will be
- // derived in ChromePermissionMessageProvider::GetWarningMessages(), such
- // that the user get 1 entry for all media galleries access permissions,
- // rather than several separate entries.
- if (has_copy_to) {
- result.push_back(PermissionMessage(
- PermissionMessage::kMediaGalleriesAllGalleriesCopyTo,
- base::string16()));
- }
- if (has_delete) {
- result.push_back(PermissionMessage(
- PermissionMessage::kMediaGalleriesAllGalleriesDelete,
- base::string16()));
- }
+ AddPermissionsToLists(data_set_, NULL, &result);
return result;
}

Powered by Google App Engine
This is Rietveld 408576698