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

Side by Side Diff: chrome/common/extensions/api/sockets/sockets_handler.cc

Issue 51433002: Enable permission warnings from ManifestHandlers. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Working on adding ManifestPermissionSet to PermissionSet. Created 7 years, 1 month 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 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/api/sockets/sockets_handler.h" 5 #include "chrome/common/extensions/api/sockets/sockets_handler.h"
6 6
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/strings/utf_string_conversions.h" 8 #include "base/strings/utf_string_conversions.h"
9 #include "base/values.h" 9 #include "base/values.h"
10 #include "chrome/common/extensions/api/manifest_types.h" 10 #include "chrome/common/extensions/api/manifest_types.h"
11 #include "chrome/common/extensions/extension.h" 11 #include "chrome/common/extensions/extension.h"
12 #include "chrome/common/extensions/permissions/permissions_data.h" 12 #include "chrome/common/extensions/permissions/permissions_data.h"
13 #include "chrome/common/extensions/permissions/socket_permission_data.h" 13 #include "chrome/common/extensions/permissions/socket_permission_data.h"
14 #include "extensions/common/error_utils.h" 14 #include "extensions/common/error_utils.h"
15 #include "extensions/common/manifest_constants.h" 15 #include "extensions/common/manifest_constants.h"
16 #include "extensions/common/permissions/api_permission_set.h" 16 #include "extensions/common/permissions/api_permission_set.h"
17 #include "grit/generated_resources.h"
18 #include "ui/base/l10n/l10n_util.h"
17 19
18 namespace extensions { 20 namespace extensions {
19 21
20 namespace sockets_errors { 22 namespace sockets_errors {
21 const char kErrorInvalidHostPattern[] = "Invalid host:port pattern '*'"; 23 const char kErrorInvalidHostPattern[] = "Invalid host:port pattern '*'";
22 } 24 }
23 25
24 namespace keys = extensions::manifest_keys; 26 namespace keys = extensions::manifest_keys;
25 namespace errors = sockets_errors; 27 namespace errors = sockets_errors;
26 using api::manifest_types::Sockets; 28 using api::manifest_types::Sockets;
(...skipping 11 matching lines...) Expand all
38 &install_warnings, 40 &install_warnings,
39 error); 41 error);
40 if (!data) 42 if (!data)
41 return false; 43 return false;
42 44
43 extension->AddInstallWarnings(install_warnings); 45 extension->AddInstallWarnings(install_warnings);
44 extension->SetManifestData(keys::kSockets, data.release()); 46 extension->SetManifestData(keys::kSockets, data.release());
45 return true; 47 return true;
46 } 48 }
47 49
50 void SocketsHandler::AddPermissionWarningMessages(
51 const Extension* extension,
52 std::vector<string16>& messages) const {
53 SocketsManifestData* manifest_data = SocketsManifestData::Get(extension);
54 if (!manifest_data)
55 return;
56 PermissionMessages permission_messages =
57 manifest_data->GetPermissionMessages();
58 for (PermissionMessages::const_iterator i = permission_messages.begin();
59 i != permission_messages.end(); ++i) {
60 messages.push_back(i->message());
61 }
62 }
63
64 void SocketsHandler::AddPermissionWarningMessagesDetails(
65 const Extension* extension,
66 std::vector<string16>& messages) const {
67 SocketsManifestData* manifest_data = SocketsManifestData::Get(extension);
68 if (!manifest_data)
69 return;
70 PermissionMessages permission_messages =
71 manifest_data->GetPermissionMessages();
72 for (PermissionMessages::const_iterator i = permission_messages.begin();
73 i != permission_messages.end(); ++i) {
74 messages.push_back(i->details());
75 }
76 }
77
48 const std::vector<std::string> SocketsHandler::Keys() const { 78 const std::vector<std::string> SocketsHandler::Keys() const {
49 return SingleKey(manifest_keys::kSockets); 79 return SingleKey(manifest_keys::kSockets);
50 } 80 }
51 81
52 SocketsManifestData::SocketsManifestData() {} 82 SocketsManifestData::SocketsManifestData() {}
53 SocketsManifestData::~SocketsManifestData() {} 83 SocketsManifestData::~SocketsManifestData() {}
54 84
55 // static 85 // static
56 SocketsManifestData* SocketsManifestData::Get(const Extension* extension) { 86 SocketsManifestData* SocketsManifestData::Get(const Extension* extension) {
57 return static_cast<SocketsManifestData*>( 87 return static_cast<SocketsManifestData*>(
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 const Extension* extension, 175 const Extension* extension,
146 const content::SocketPermissionRequest& request) { 176 const content::SocketPermissionRequest& request) {
147 for (PermissionSet::const_iterator it = permissions_.begin(); 177 for (PermissionSet::const_iterator it = permissions_.begin();
148 it != permissions_.end(); ++it) { 178 it != permissions_.end(); ++it) {
149 if (it->Check(request)) 179 if (it->Check(request))
150 return true; 180 return true;
151 } 181 }
152 return false; 182 return false;
153 } 183 }
154 184
185 PermissionMessages SocketsManifestData::GetPermissionMessages() const {
186 // TODO(rpaquay): This function and callees is (almost) a copy/paste
Yoyo Zhou 2013/11/06 04:02:36 Have you thought about how extensions that current
rpaquay 2013/11/06 16:16:16 Good question. I guess unless we do extra work, th
187 // from |extensions::SocketPermission|.
188 PermissionMessages result;
189 if (!AddAnyHostMessage(result)) {
190 AddSpecificHostMessage(result);
191 AddSubdomainHostMessage(result);
192 }
193 AddNetworkListMessage(result);
194 return result;
195 }
196
197 bool SocketsManifestData::AddAnyHostMessage(
198 PermissionMessages& messages) const {
199 for (PermissionSet::const_iterator it = permissions_.begin();
200 it != permissions_.end(); ++it) {
201 if (it->IsAddressBoundType() &&
202 it->GetHostType() == SocketPermissionEntry::ANY_HOST) {
203 messages.push_back(PermissionMessage(
204 PermissionMessage::kSocketAnyHost,
205 l10n_util::GetStringUTF16(
206 IDS_EXTENSION_PROMPT_WARNING_SOCKET_ANY_HOST)));
207 return true;
208 }
209 }
210 return false;
211 }
212
213 void SocketsManifestData::AddSubdomainHostMessage(
214 PermissionMessages& messages) const {
215 std::set<string16> domains;
216 std::set<SocketPermissionData>::const_iterator i;
217 for (PermissionSet::const_iterator it = permissions_.begin();
218 it != permissions_.end(); ++it) {
219 if (it->GetHostType() == SocketPermissionEntry::HOSTS_IN_DOMAINS)
220 domains.insert(UTF8ToUTF16(i->entry().pattern().host));
221 }
222 if (!domains.empty()) {
223 int id = (domains.size() == 1) ?
224 IDS_EXTENSION_PROMPT_WARNING_SOCKET_HOSTS_IN_DOMAIN :
225 IDS_EXTENSION_PROMPT_WARNING_SOCKET_HOSTS_IN_DOMAINS;
226 messages.push_back(PermissionMessage(
227 PermissionMessage::kSocketDomainHosts,
228 l10n_util::GetStringFUTF16(
229 id,
230 JoinString(
231 std::vector<string16>(
232 domains.begin(), domains.end()), ' '))));
233 }
234 }
235
236 void SocketsManifestData::AddSpecificHostMessage(
237 PermissionMessages& messages) const {
238 std::set<string16> hostnames;
239 std::set<SocketPermissionData>::const_iterator i;
240 for (PermissionSet::const_iterator it = permissions_.begin();
241 it != permissions_.end(); ++it) {
242 if (it->GetHostType() == SocketPermissionEntry::SPECIFIC_HOSTS)
243 hostnames.insert(UTF8ToUTF16(i->entry().pattern().host));
244 }
245 if (!hostnames.empty()) {
246 int id = (hostnames.size() == 1) ?
247 IDS_EXTENSION_PROMPT_WARNING_SOCKET_SPECIFIC_HOST :
248 IDS_EXTENSION_PROMPT_WARNING_SOCKET_SPECIFIC_HOSTS;
249 messages.push_back(PermissionMessage(
250 PermissionMessage::kSocketSpecificHosts,
251 l10n_util::GetStringFUTF16(
252 id,
253 JoinString(
254 std::vector<string16>(
255 hostnames.begin(), hostnames.end()), ' '))));
256 }
257 }
258
259 void SocketsManifestData::AddNetworkListMessage(
260 PermissionMessages& messages) const {
261 std::set<SocketPermissionData>::const_iterator i;
262 for (PermissionSet::const_iterator it = permissions_.begin();
263 it != permissions_.end(); ++it) {
264 if (it->pattern().type == content::SocketPermissionRequest::NETWORK_STATE) {
265 messages.push_back(PermissionMessage(
266 PermissionMessage::kNetworkState,
267 l10n_util::GetStringUTF16(
268 IDS_EXTENSION_PROMPT_WARNING_NETWORK_STATE)));
269 }
270 }
271 }
272
155 } // namespace extensions 273 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698