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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: chrome/common/extensions/api/sockets/sockets_handler.cc
diff --git a/chrome/common/extensions/api/sockets/sockets_handler.cc b/chrome/common/extensions/api/sockets/sockets_handler.cc
index a1b51c21e3a0974a19e75b779742eb714ed162a5..9ecdd218f83465cdd24c4f132182b8a5804e57d5 100644
--- a/chrome/common/extensions/api/sockets/sockets_handler.cc
+++ b/chrome/common/extensions/api/sockets/sockets_handler.cc
@@ -14,6 +14,8 @@
#include "extensions/common/error_utils.h"
#include "extensions/common/manifest_constants.h"
#include "extensions/common/permissions/api_permission_set.h"
+#include "grit/generated_resources.h"
+#include "ui/base/l10n/l10n_util.h"
namespace extensions {
@@ -45,6 +47,34 @@ bool SocketsHandler::Parse(Extension* extension, string16* error) {
return true;
}
+void SocketsHandler::AddPermissionWarningMessages(
+ const Extension* extension,
+ std::vector<string16>& messages) const {
+ SocketsManifestData* manifest_data = SocketsManifestData::Get(extension);
+ if (!manifest_data)
+ return;
+ PermissionMessages permission_messages =
+ manifest_data->GetPermissionMessages();
+ for (PermissionMessages::const_iterator i = permission_messages.begin();
+ i != permission_messages.end(); ++i) {
+ messages.push_back(i->message());
+ }
+}
+
+void SocketsHandler::AddPermissionWarningMessagesDetails(
+ const Extension* extension,
+ std::vector<string16>& messages) const {
+ SocketsManifestData* manifest_data = SocketsManifestData::Get(extension);
+ if (!manifest_data)
+ return;
+ PermissionMessages permission_messages =
+ manifest_data->GetPermissionMessages();
+ for (PermissionMessages::const_iterator i = permission_messages.begin();
+ i != permission_messages.end(); ++i) {
+ messages.push_back(i->details());
+ }
+}
+
const std::vector<std::string> SocketsHandler::Keys() const {
return SingleKey(manifest_keys::kSockets);
}
@@ -152,4 +182,92 @@ bool SocketsManifestData::CheckRequestImpl(
return false;
}
+PermissionMessages SocketsManifestData::GetPermissionMessages() const {
+ // 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
+ // from |extensions::SocketPermission|.
+ PermissionMessages result;
+ if (!AddAnyHostMessage(result)) {
+ AddSpecificHostMessage(result);
+ AddSubdomainHostMessage(result);
+ }
+ AddNetworkListMessage(result);
+ return result;
+}
+
+bool SocketsManifestData::AddAnyHostMessage(
+ PermissionMessages& messages) const {
+ for (PermissionSet::const_iterator it = permissions_.begin();
+ it != permissions_.end(); ++it) {
+ if (it->IsAddressBoundType() &&
+ it->GetHostType() == SocketPermissionEntry::ANY_HOST) {
+ messages.push_back(PermissionMessage(
+ PermissionMessage::kSocketAnyHost,
+ l10n_util::GetStringUTF16(
+ IDS_EXTENSION_PROMPT_WARNING_SOCKET_ANY_HOST)));
+ return true;
+ }
+ }
+ return false;
+}
+
+void SocketsManifestData::AddSubdomainHostMessage(
+ PermissionMessages& messages) const {
+ std::set<string16> domains;
+ std::set<SocketPermissionData>::const_iterator i;
+ for (PermissionSet::const_iterator it = permissions_.begin();
+ it != permissions_.end(); ++it) {
+ if (it->GetHostType() == SocketPermissionEntry::HOSTS_IN_DOMAINS)
+ domains.insert(UTF8ToUTF16(i->entry().pattern().host));
+ }
+ if (!domains.empty()) {
+ int id = (domains.size() == 1) ?
+ IDS_EXTENSION_PROMPT_WARNING_SOCKET_HOSTS_IN_DOMAIN :
+ IDS_EXTENSION_PROMPT_WARNING_SOCKET_HOSTS_IN_DOMAINS;
+ messages.push_back(PermissionMessage(
+ PermissionMessage::kSocketDomainHosts,
+ l10n_util::GetStringFUTF16(
+ id,
+ JoinString(
+ std::vector<string16>(
+ domains.begin(), domains.end()), ' '))));
+ }
+}
+
+void SocketsManifestData::AddSpecificHostMessage(
+ PermissionMessages& messages) const {
+ std::set<string16> hostnames;
+ std::set<SocketPermissionData>::const_iterator i;
+ for (PermissionSet::const_iterator it = permissions_.begin();
+ it != permissions_.end(); ++it) {
+ if (it->GetHostType() == SocketPermissionEntry::SPECIFIC_HOSTS)
+ hostnames.insert(UTF8ToUTF16(i->entry().pattern().host));
+ }
+ if (!hostnames.empty()) {
+ int id = (hostnames.size() == 1) ?
+ IDS_EXTENSION_PROMPT_WARNING_SOCKET_SPECIFIC_HOST :
+ IDS_EXTENSION_PROMPT_WARNING_SOCKET_SPECIFIC_HOSTS;
+ messages.push_back(PermissionMessage(
+ PermissionMessage::kSocketSpecificHosts,
+ l10n_util::GetStringFUTF16(
+ id,
+ JoinString(
+ std::vector<string16>(
+ hostnames.begin(), hostnames.end()), ' '))));
+ }
+}
+
+void SocketsManifestData::AddNetworkListMessage(
+ PermissionMessages& messages) const {
+ std::set<SocketPermissionData>::const_iterator i;
+ for (PermissionSet::const_iterator it = permissions_.begin();
+ it != permissions_.end(); ++it) {
+ if (it->pattern().type == content::SocketPermissionRequest::NETWORK_STATE) {
+ messages.push_back(PermissionMessage(
+ PermissionMessage::kNetworkState,
+ l10n_util::GetStringUTF16(
+ IDS_EXTENSION_PROMPT_WARNING_NETWORK_STATE)));
+ }
+ }
+}
+
} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698