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

Side by Side Diff: chrome/common/extensions/permissions/media_galleries_permission.cc

Issue 12236005: Media Galleries: Disable write support. (try 2) (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 10 months 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 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 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 #include "chrome/common/extensions/permissions/media_galleries_permission.h" 5 #include "chrome/common/extensions/permissions/media_galleries_permission.h"
6 6
7 #include <set> 7 #include <set>
8 #include <string> 8 #include <string>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/string16.h" 11 #include "base/string16.h"
12 #include "base/utf_string_conversions.h" 12 #include "base/utf_string_conversions.h"
13 #include "chrome/common/extensions/permissions/permissions_info.h" 13 #include "chrome/common/extensions/permissions/permissions_info.h"
14 #include "grit/generated_resources.h" 14 #include "grit/generated_resources.h"
15 #include "ui/base/l10n/l10n_util.h" 15 #include "ui/base/l10n/l10n_util.h"
16 16
17 namespace extensions { 17 namespace extensions {
18 18
19 const char MediaGalleriesPermission::kAllAutoDetectedPermission[] = 19 const char MediaGalleriesPermission::kAllAutoDetectedPermission[] =
20 "allAutoDetected"; 20 "allAutoDetected";
21 const char MediaGalleriesPermission::kReadPermission[] = "read"; 21 const char MediaGalleriesPermission::kReadPermission[] = "read";
22 const char MediaGalleriesPermission::kWritePermission[] = "write";
23 22
24 MediaGalleriesPermission::MediaGalleriesPermission( 23 MediaGalleriesPermission::MediaGalleriesPermission(
25 const APIPermissionInfo* info) 24 const APIPermissionInfo* info)
26 : SetDisjunctionPermission<MediaGalleriesPermissionData, 25 : SetDisjunctionPermission<MediaGalleriesPermissionData,
27 MediaGalleriesPermission>(info) { 26 MediaGalleriesPermission>(info) {
28 } 27 }
29 28
30 MediaGalleriesPermission::~MediaGalleriesPermission() { 29 MediaGalleriesPermission::~MediaGalleriesPermission() {
31 } 30 }
32 31
33 bool MediaGalleriesPermission::FromValue(const base::Value* value) { 32 bool MediaGalleriesPermission::FromValue(const base::Value* value) {
34 if (!SetDisjunctionPermission<MediaGalleriesPermissionData, 33 if (!SetDisjunctionPermission<MediaGalleriesPermissionData,
35 MediaGalleriesPermission>::FromValue(value)) { 34 MediaGalleriesPermission>::FromValue(value)) {
36 return false; 35 return false;
37 } 36 }
38 37
39 bool has_read = false;
40 bool has_write = false;
41 for (std::set<MediaGalleriesPermissionData>::const_iterator it = 38 for (std::set<MediaGalleriesPermissionData>::const_iterator it =
42 data_set_.begin(); it != data_set_.end(); ++it) { 39 data_set_.begin(); it != data_set_.end(); ++it) {
43 if (it->permission() == kReadPermission) { 40 if (it->permission() == kReadPermission) {
44 has_read = true; 41 continue;
45 } else if (it->permission() == kWritePermission) {
46 has_write = true;
47 } else if (it->permission() == kAllAutoDetectedPermission) { 42 } else if (it->permission() == kAllAutoDetectedPermission) {
48 continue; 43 continue;
49 } else { 44 } else {
50 // No other permissions, so reaching this means 45 // No other permissions, so reaching this means
51 // MediaGalleriesPermissionData is probably out of sync in some way. 46 // MediaGalleriesPermissionData is probably out of sync in some way.
52 // Fail so developers notice this. 47 // Fail so developers notice this.
53 NOTREACHED(); 48 NOTREACHED();
54 return false; 49 return false;
55 } 50 }
56 } 51 }
57 52
58 // Read and write permissions are mutually exclusive. 53 return true;
59 return (!has_read || !has_write);
60 } 54 }
61 55
62 PermissionMessages MediaGalleriesPermission::GetMessages() const { 56 PermissionMessages MediaGalleriesPermission::GetMessages() const {
63 DCHECK(HasMessages()); 57 DCHECK(HasMessages());
64 PermissionMessages result; 58 PermissionMessages result;
65 59
66 bool has_all_auto_detected = false; 60 bool has_all_auto_detected = false;
67 bool has_read = false; 61 bool has_read = false;
68 bool has_write = false;
69 62
70 for (std::set<MediaGalleriesPermissionData>::const_iterator it = 63 for (std::set<MediaGalleriesPermissionData>::const_iterator it =
71 data_set_.begin(); it != data_set_.end(); ++it) { 64 data_set_.begin(); it != data_set_.end(); ++it) {
72 if (it->permission() == kAllAutoDetectedPermission) 65 if (it->permission() == kAllAutoDetectedPermission)
73 has_all_auto_detected = true; 66 has_all_auto_detected = true;
74 else if (it->permission() == kReadPermission) 67 else if (it->permission() == kReadPermission)
75 has_read = true; 68 has_read = true;
76 else if (it->permission() == kWritePermission)
77 has_write = true;
78 } 69 }
79 // FromValue() should never allow this.
80 DCHECK(!has_read || !has_write);
81 70
82 // If |has_all_auto_detected| is false, then Chrome will prompt the user at 71 // If |has_all_auto_detected| is false, then Chrome will prompt the user at
83 // runtime when the extension call the getMediaGalleries API. 72 // runtime when the extension call the getMediaGalleries API.
84 if (!has_all_auto_detected || !(has_read || has_write)) 73 if (!has_all_auto_detected || !has_read)
85 return result; 74 return result;
86 75
87 // Separate PermissionMessage IDs for read and write. Otherwise an extension 76 PermissionMessage::ID permission_id =
88 // can silently gain new access capabilities.
89 PermissionMessage::ID permission_id = has_write ?
90 PermissionMessage::kMediaGalleriesAllGalleriesWrite :
91 PermissionMessage::kMediaGalleriesAllGalleriesRead; 77 PermissionMessage::kMediaGalleriesAllGalleriesRead;
92 int message_id = has_write ? 78 int message_id =
93 IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ_WRITE_ALL_GALLERIES :
94 IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ_ALL_GALLERIES; 79 IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ_ALL_GALLERIES;
95 result.push_back( 80 result.push_back(
96 PermissionMessage(permission_id, l10n_util::GetStringUTF16(message_id))); 81 PermissionMessage(permission_id, l10n_util::GetStringUTF16(message_id)));
97 return result; 82 return result;
98 } 83 }
99 84
100 } // namespace extensions 85 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698