1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/common/extensions/permissions/media_galleries_permission.h"
10 #include "base/logging.h"
11 #include "base/strings/utf_string_conversions.h"
12 #include "extensions/common/permissions/permissions_info.h"
13 #include "grit/generated_resources.h"
14 #include "ui/base/l10n/l10n_util.h"
16 namespace extensions {
18 const char MediaGalleriesPermission::kAllAutoDetectedPermission[] =
20 const char MediaGalleriesPermission::kReadPermission[] = "read";
21 const char MediaGalleriesPermission::kCopyToPermission[] = "copyTo";
23 MediaGalleriesPermission::MediaGalleriesPermission(
24 const APIPermissionInfo* info)
25 : SetDisjunctionPermission<MediaGalleriesPermissionData,
26 MediaGalleriesPermission>(info) {
29 MediaGalleriesPermission::~MediaGalleriesPermission() {
32 bool MediaGalleriesPermission::FromValue(const base::Value* value) {
33 if (!SetDisjunctionPermission<MediaGalleriesPermissionData,
34 MediaGalleriesPermission>::FromValue(value)) {
38 bool has_read = false;
39 bool has_copy_to = false;
40 for (std::set<MediaGalleriesPermissionData>::const_iterator it =
41 data_set_.begin(); it != data_set_.end(); ++it) {
42 if (it->permission() == kAllAutoDetectedPermission) {
45 if (it->permission() == kReadPermission) {
49 if (it->permission() == kCopyToPermission) {
54 // No other permissions, so reaching this means
55 // MediaGalleriesPermissionData is probably out of sync in some way.
56 // Fail so developers notice this.
61 return has_read || !has_copy_to;
64 PermissionMessages MediaGalleriesPermission::GetMessages() const {
65 DCHECK(HasMessages());
66 PermissionMessages result;
68 bool has_all_auto_detected = false;
69 bool has_read = false;
70 bool has_copy_to = false;
72 for (std::set<MediaGalleriesPermissionData>::const_iterator it =
73 data_set_.begin(); it != data_set_.end(); ++it) {
74 if (it->permission() == kAllAutoDetectedPermission)
75 has_all_auto_detected = true;
76 else if (it->permission() == kReadPermission)
78 else if (it->permission() == kCopyToPermission)
82 if (has_copy_to && !has_read) {
87 // If |has_all_auto_detected| is false, then Chrome will prompt the user at
88 // runtime when the extension call the getMediaGalleries API.
89 if (!has_all_auto_detected || !(has_read || has_copy_to))
92 // Separate PermissionMessage IDs for read and copyTo. Otherwise an extension
93 // can silently gain new access capabilities.
95 result.push_back(PermissionMessage(
96 PermissionMessage::kMediaGalleriesAllGalleriesRead,
97 l10n_util::GetStringUTF16(
98 IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ)));
100 result.push_back(PermissionMessage(
101 PermissionMessage::kMediaGalleriesAllGalleriesCopyTo,
102 l10n_util::GetStringUTF16(
103 IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ_WRITE)));
109 } // namespace extensions