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

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

Issue 141743005: Extensions: Make it possible for permission parsing code to return a detailed error message. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 6 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/strings/utf_string_conversions.h" 11 #include "base/strings/utf_string_conversions.h"
12 #include "extensions/common/permissions/permissions_info.h" 12 #include "extensions/common/permissions/permissions_info.h"
13 #include "grit/generated_resources.h" 13 #include "grit/generated_resources.h"
14 #include "ui/base/l10n/l10n_util.h" 14 #include "ui/base/l10n/l10n_util.h"
15 15
16 namespace { 16 namespace {
17 17
18 // copyTo permission requires delete permission as a prerequisite. 18 // copyTo permission requires delete permission as a prerequisite.
19 // delete permission requires read permission as a prerequisite. 19 // delete permission requires read permission as a prerequisite.
20 bool IsValidPermissionSet(bool has_read, bool has_copy_to, bool has_delete) { 20 bool IsValidPermissionSet(bool has_read, bool has_copy_to, bool has_delete,
21 if (has_copy_to) 21 std::string* error) {
22 return has_read && has_delete; 22 if (has_copy_to) {
23 if (has_delete) 23 if (has_read && has_delete)
24 return has_read; 24 return true;
25
26 std::string error_msg;
27 if (has_read) {
28 error_msg = "copyTo permission requires delete permission";
Yoyo Zhou 2014/01/29 00:39:59 I foresee somebody with ["copyTo", "read"] encount
Lei Zhang 2014/01/29 00:47:36 Done.
29 } else if (has_delete) {
30 error_msg = "copyTo permission requires read permission";
31 } else {
32 error_msg = "copyTo permission requires read and delete permissions";
33 }
34 if (error)
35 *error = error_msg;
36 return false;
37 }
38 if (has_delete) {
39 if (has_read)
40 return true;
41 *error = "delete permission requires read permission";
42 return false;
43 }
25 return true; 44 return true;
26 } 45 }
27 46
28 } // namespace 47 } // namespace
29 48
30 namespace extensions { 49 namespace extensions {
31 50
32 const char MediaGalleriesPermission::kAllAutoDetectedPermission[] = 51 const char MediaGalleriesPermission::kAllAutoDetectedPermission[] =
33 "allAutoDetected"; 52 "allAutoDetected";
34 const char MediaGalleriesPermission::kReadPermission[] = "read"; 53 const char MediaGalleriesPermission::kReadPermission[] = "read";
35 const char MediaGalleriesPermission::kCopyToPermission[] = "copyTo"; 54 const char MediaGalleriesPermission::kCopyToPermission[] = "copyTo";
36 const char MediaGalleriesPermission::kDeletePermission[] = "delete"; 55 const char MediaGalleriesPermission::kDeletePermission[] = "delete";
37 56
38 MediaGalleriesPermission::MediaGalleriesPermission( 57 MediaGalleriesPermission::MediaGalleriesPermission(
39 const APIPermissionInfo* info) 58 const APIPermissionInfo* info)
40 : SetDisjunctionPermission<MediaGalleriesPermissionData, 59 : SetDisjunctionPermission<MediaGalleriesPermissionData,
41 MediaGalleriesPermission>(info) { 60 MediaGalleriesPermission>(info) {
42 } 61 }
43 62
44 MediaGalleriesPermission::~MediaGalleriesPermission() { 63 MediaGalleriesPermission::~MediaGalleriesPermission() {
45 } 64 }
46 65
47 bool MediaGalleriesPermission::FromValue(const base::Value* value) { 66 bool MediaGalleriesPermission::FromValue(const base::Value* value,
67 std::string* error) {
48 if (!SetDisjunctionPermission<MediaGalleriesPermissionData, 68 if (!SetDisjunctionPermission<MediaGalleriesPermissionData,
49 MediaGalleriesPermission>::FromValue(value)) { 69 MediaGalleriesPermission>::FromValue(value,
70 error)) {
50 return false; 71 return false;
51 } 72 }
52 73
53 bool has_read = false; 74 bool has_read = false;
54 bool has_copy_to = false; 75 bool has_copy_to = false;
55 bool has_delete = false; 76 bool has_delete = false;
56 for (std::set<MediaGalleriesPermissionData>::const_iterator it = 77 for (std::set<MediaGalleriesPermissionData>::const_iterator it =
57 data_set_.begin(); it != data_set_.end(); ++it) { 78 data_set_.begin(); it != data_set_.end(); ++it) {
58 if (it->permission() == kAllAutoDetectedPermission) { 79 if (it->permission() == kAllAutoDetectedPermission) {
59 continue; 80 continue;
(...skipping 11 matching lines...) Expand all
71 continue; 92 continue;
72 } 93 }
73 94
74 // No other permissions, so reaching this means 95 // No other permissions, so reaching this means
75 // MediaGalleriesPermissionData is probably out of sync in some way. 96 // MediaGalleriesPermissionData is probably out of sync in some way.
76 // Fail so developers notice this. 97 // Fail so developers notice this.
77 NOTREACHED(); 98 NOTREACHED();
78 return false; 99 return false;
79 } 100 }
80 101
81 return IsValidPermissionSet(has_read, has_copy_to, has_delete); 102 return IsValidPermissionSet(has_read, has_copy_to, has_delete, error);
82 } 103 }
83 104
84 PermissionMessages MediaGalleriesPermission::GetMessages() const { 105 PermissionMessages MediaGalleriesPermission::GetMessages() const {
85 DCHECK(HasMessages()); 106 DCHECK(HasMessages());
86 PermissionMessages result; 107 PermissionMessages result;
87 108
88 bool has_all_auto_detected = false; 109 bool has_all_auto_detected = false;
89 bool has_read = false; 110 bool has_read = false;
90 bool has_copy_to = false; 111 bool has_copy_to = false;
91 bool has_delete = false; 112 bool has_delete = false;
92 113
93 for (std::set<MediaGalleriesPermissionData>::const_iterator it = 114 for (std::set<MediaGalleriesPermissionData>::const_iterator it =
94 data_set_.begin(); it != data_set_.end(); ++it) { 115 data_set_.begin(); it != data_set_.end(); ++it) {
95 if (it->permission() == kAllAutoDetectedPermission) 116 if (it->permission() == kAllAutoDetectedPermission)
96 has_all_auto_detected = true; 117 has_all_auto_detected = true;
97 else if (it->permission() == kReadPermission) 118 else if (it->permission() == kReadPermission)
98 has_read = true; 119 has_read = true;
99 else if (it->permission() == kCopyToPermission) 120 else if (it->permission() == kCopyToPermission)
100 has_copy_to = true; 121 has_copy_to = true;
101 else if (it->permission() == kDeletePermission) 122 else if (it->permission() == kDeletePermission)
102 has_delete = true; 123 has_delete = true;
103 } 124 }
104 125
105 if (!IsValidPermissionSet(has_read, has_copy_to, has_delete)) { 126 if (!IsValidPermissionSet(has_read, has_copy_to, has_delete, NULL)) {
106 NOTREACHED(); 127 NOTREACHED();
107 return result; 128 return result;
108 } 129 }
109 130
110 // If |has_all_auto_detected| is false, then Chrome will prompt the user at 131 // If |has_all_auto_detected| is false, then Chrome will prompt the user at
111 // runtime when the extension call the getMediaGalleries API. 132 // runtime when the extension call the getMediaGalleries API.
112 if (!has_all_auto_detected) 133 if (!has_all_auto_detected)
113 return result; 134 return result;
114 // No access permission case. 135 // No access permission case.
115 if (!has_read) 136 if (!has_read)
(...skipping 17 matching lines...) Expand all
133 } 154 }
134 if (has_delete) { 155 if (has_delete) {
135 result.push_back(PermissionMessage( 156 result.push_back(PermissionMessage(
136 PermissionMessage::kMediaGalleriesAllGalleriesDelete, 157 PermissionMessage::kMediaGalleriesAllGalleriesDelete,
137 base::string16())); 158 base::string16()));
138 } 159 }
139 return result; 160 return result;
140 } 161 }
141 162
142 } // namespace extensions 163 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698