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

Unified Diff: extensions/common/api/sockets/sockets_manifest_permission.cc

Issue 794063002: Removed duplicate code from Socket permission messages (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@permissions_patch_2
Patch Set: Test namespace fix Created 6 years 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: extensions/common/api/sockets/sockets_manifest_permission.cc
diff --git a/extensions/common/api/sockets/sockets_manifest_permission.cc b/extensions/common/api/sockets/sockets_manifest_permission.cc
index b20285ed9b68d55d09a5bb321dd194e4f0942f0a..52f42058609daef73d0bee02bd9918fc775eddc7 100644
--- a/extensions/common/api/sockets/sockets_manifest_permission.cc
+++ b/extensions/common/api/sockets/sockets_manifest_permission.cc
@@ -77,16 +77,135 @@ static void SetHostPatterns(
content::SocketPermissionRequest::OperationType operation_type) {
host_patterns.reset(new SocketHostPatterns());
host_patterns->as_strings.reset(new std::vector<std::string>());
- for (SocketsManifestPermission::SocketPermissionEntrySet::const_iterator it =
+ for (SocketPermissionEntrySet::const_iterator it =
permission->entries().begin();
- it != permission->entries().end();
- ++it) {
+ it != permission->entries().end(); ++it) {
if (it->pattern().type == operation_type) {
host_patterns->as_strings->push_back(it->GetHostPatternAsString());
}
}
}
+// Helper function for adding the 'any host' permission. Determines if the
+// message is needed from |sockets|, and adds the permission to |ids| and/or
+// |messages|, ignoring them if they are NULL. Returns true if it added the
+// message.
+bool AddAnyHostMessage(const SocketPermissionEntrySet& sockets,
+ PermissionIDSet* ids,
+ PermissionMessages* messages) {
+ for (const auto& socket : sockets) {
+ if (socket.IsAddressBoundType() &&
+ socket.GetHostType() == SocketPermissionEntry::ANY_HOST) {
+ // TODO(sashab): Add a rule to ChromePermissionMessageProvider:
+ // kSocketAnyHost -> IDS_EXTENSION_PROMPT_WARNING_SOCKET_ANY_HOST
+ if (ids)
+ ids->insert(APIPermission::kSocketAnyHost);
+ if (messages) {
+ messages->push_back(PermissionMessage(
+ PermissionMessage::kSocketAnyHost,
+ l10n_util::GetStringUTF16(
+ IDS_EXTENSION_PROMPT_WARNING_SOCKET_ANY_HOST)));
+ }
+ return true;
+ }
+ }
+ return false;
+}
+
+// Helper function for adding subdomain socket permissions. Determines what
+// messages are needed from |sockets|, and adds permissions to |ids| and/or
+// |messages|, ignoring them if they are NULL.
+void AddSubdomainHostMessage(const SocketPermissionEntrySet& sockets,
+ PermissionIDSet* ids,
+ PermissionMessages* messages) {
+ std::set<base::string16> domains;
+ for (const auto& socket : sockets) {
+ if (socket.GetHostType() == SocketPermissionEntry::HOSTS_IN_DOMAINS)
+ domains.insert(base::UTF8ToUTF16(socket.pattern().host));
+ }
+ if (!domains.empty()) {
+ // TODO(sashab): This is not correct for all languages - add proper
+ // internationalization of this string for all plural states.
+ if (messages) {
+ 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<base::string16>(domains.begin(),
+ domains.end()),
+ ' '))));
+ }
+ // TODO(sashab): Add rules to ChromePermissionMessageProvider:
+ // kSocketDomainHosts ->
+ // IDS_EXTENSION_PROMPT_WARNING_SOCKET_HOSTS_IN_DOMAIN if 1
+ // IDS_EXTENSION_PROMPT_WARNING_SOCKET_HOSTS_IN_DOMAINS if many
+ if (ids) {
+ for (const auto& domain : domains)
+ ids->insert(APIPermission::kSocketDomainHosts, domain);
+ }
+ }
+}
+
+// Helper function for adding specific host socket permissions. Determines what
+// messages are needed from |sockets|, and adds permissions to |ids| and/or
+// |messages|, ignoring them if they are NULL.
+void AddSpecificHostMessage(const SocketPermissionEntrySet& sockets,
+ PermissionIDSet* ids,
+ PermissionMessages* messages) {
+ std::set<base::string16> hostnames;
+ for (const auto& socket : sockets) {
+ if (socket.GetHostType() == SocketPermissionEntry::SPECIFIC_HOSTS)
+ hostnames.insert(base::UTF8ToUTF16(socket.pattern().host));
+ }
+ if (!hostnames.empty()) {
+ // TODO(sashab): This is not correct for all languages - add proper
+ // internationalization of this string for all plural states.
+ if (messages) {
+ 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<base::string16>(hostnames.begin(),
+ hostnames.end()),
+ ' '))));
+ }
+ // TODO(sashab): Add rules to ChromePermissionMessageProvider:
+ // kSocketSpecificHosts ->
+ // IDS_EXTENSION_PROMPT_WARNING_SOCKET_SPECIFIC_HOST if 1
+ // IDS_EXTENSION_PROMPT_WARNING_SOCKET_SPECIFIC_HOSTS if many
+ if (ids) {
+ for (const auto& hostname : hostnames)
+ ids->insert(APIPermission::kSocketSpecificHosts, hostname);
+ }
+ }
+}
+
+// Helper function for adding the network list socket permission. Determines if
+// the message is needed from |sockets|, and adds the permission to |ids| and/or
+// |messages|, ignoring them if they are NULL.
+void AddNetworkListMessage(const SocketPermissionEntrySet& sockets,
+ PermissionIDSet* ids,
+ PermissionMessages* messages) {
+ for (const auto& socket : sockets) {
+ if (socket.pattern().type == SocketPermissionRequest::NETWORK_STATE) {
+ // TODO(sashab): Add a rule to ChromePermissionMessageProvider:
+ // kNetworkState -> IDS_EXTENSION_PROMPT_WARNING_NETWORK_STATE
+ if (ids)
+ ids->insert(APIPermission::kNetworkState);
+ if (messages) {
+ messages->push_back(
+ PermissionMessage(PermissionMessage::kNetworkState,
+ l10n_util::GetStringUTF16(
+ IDS_EXTENSION_PROMPT_WARNING_NETWORK_STATE)));
+ }
+ }
+ }
+}
+
} // namespace
SocketsManifestPermission::SocketsManifestPermission() {}
@@ -160,9 +279,8 @@ std::string SocketsManifestPermission::name() const {
std::string SocketsManifestPermission::id() const { return name(); }
PermissionIDSet SocketsManifestPermission::GetPermissions() const {
- PermissionMessages messages;
PermissionIDSet ids;
- AddAllHostMessages(messages, ids);
+ AddSocketHostPermissions(permissions_, &ids, NULL);
return ids;
}
@@ -173,8 +291,7 @@ bool SocketsManifestPermission::HasMessages() const {
PermissionMessages SocketsManifestPermission::GetMessages() const {
PermissionMessages messages;
- PermissionIDSet ids;
- AddAllHostMessages(messages, ids);
+ AddSocketHostPermissions(permissions_, NULL, &messages);
return messages;
}
@@ -263,117 +380,16 @@ void SocketsManifestPermission::AddPermission(
permissions_.insert(entry);
}
-void SocketsManifestPermission::AddAllHostMessages(PermissionMessages& messages,
- PermissionIDSet& ids) const {
- // TODO(rpaquay): This function and callees is (almost) a copy/paste from
- // extensions::SocketPermission.
- if (!AddAnyHostMessage(messages, ids)) {
- AddSpecificHostMessage(messages, ids);
- AddSubdomainHostMessage(messages, ids);
- }
- AddNetworkListMessage(messages, ids);
-}
-
-bool SocketsManifestPermission::AddAnyHostMessage(PermissionMessages& messages,
- PermissionIDSet& ids) const {
- for (SocketPermissionEntrySet::const_iterator it = permissions_.begin();
- it != permissions_.end();
- ++it) {
- if (it->IsAddressBoundType() &&
- it->GetHostType() == SocketPermissionEntry::ANY_HOST) {
- // TODO(sashab): Add a rule to ChromePermissionMessageProvider:
- // kSocketAnyHost -> IDS_EXTENSION_PROMPT_WARNING_SOCKET_ANY_HOST
- ids.insert(APIPermission::kSocketAnyHost);
- messages.push_back(
- PermissionMessage(PermissionMessage::kSocketAnyHost,
- l10n_util::GetStringUTF16(
- IDS_EXTENSION_PROMPT_WARNING_SOCKET_ANY_HOST)));
- return true;
- }
- }
- return false;
-}
-
-void SocketsManifestPermission::AddSubdomainHostMessage(
- PermissionMessages& messages,
- PermissionIDSet& ids) const {
- std::set<base::string16> domains;
- for (SocketPermissionEntrySet::const_iterator it = permissions_.begin();
- it != permissions_.end();
- ++it) {
- if (it->GetHostType() == SocketPermissionEntry::HOSTS_IN_DOMAINS)
- domains.insert(base::UTF8ToUTF16(it->pattern().host));
- }
- if (!domains.empty()) {
- // TODO(sashab): This is not correct for all languages - add proper
- // internationalization of this string for all plural states.
- 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<base::string16>(domains.begin(), domains.end()),
- ' '))));
- // TODO(sashab): Add rules to ChromePermissionMessageProvider:
- // kSocketDomainHosts ->
- // IDS_EXTENSION_PROMPT_WARNING_SOCKET_HOSTS_IN_DOMAIN if 1
- // IDS_EXTENSION_PROMPT_WARNING_SOCKET_HOSTS_IN_DOMAINS if many
- for (const auto& domain : domains)
- ids.insert(APIPermission::kSocketDomainHosts, domain);
- }
-}
-
-void SocketsManifestPermission::AddSpecificHostMessage(
- PermissionMessages& messages,
- PermissionIDSet& ids) const {
- std::set<base::string16> hostnames;
- for (SocketPermissionEntrySet::const_iterator it = permissions_.begin();
- it != permissions_.end();
- ++it) {
- if (it->GetHostType() == SocketPermissionEntry::SPECIFIC_HOSTS)
- hostnames.insert(base::UTF8ToUTF16(it->pattern().host));
- }
- if (!hostnames.empty()) {
- // TODO(sashab): This is not correct for all languages - add proper
- // internationalization of this string for all plural states.
- 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<base::string16>(hostnames.begin(), hostnames.end()),
- ' '))));
- // TODO(sashab): Add rules to ChromePermissionMessageProvider:
- // kSocketSpecificHosts ->
- // IDS_EXTENSION_PROMPT_WARNING_SOCKET_SPECIFIC_HOST if 1
- // IDS_EXTENSION_PROMPT_WARNING_SOCKET_SPECIFIC_HOSTS if many
- for (const auto& hostname : hostnames)
- ids.insert(APIPermission::kSocketSpecificHosts, hostname);
- }
-}
-
-void SocketsManifestPermission::AddNetworkListMessage(
- PermissionMessages& messages,
- PermissionIDSet& ids) const {
- for (SocketPermissionEntrySet::const_iterator it = permissions_.begin();
- it != permissions_.end();
- ++it) {
- if (it->pattern().type == SocketPermissionRequest::NETWORK_STATE) {
- // TODO(sashab): Add a rule to ChromePermissionMessageProvider:
- // kNetworkState -> IDS_EXTENSION_PROMPT_WARNING_NETWORK_STATE
- ids.insert(APIPermission::kNetworkState);
- messages.push_back(
- PermissionMessage(PermissionMessage::kNetworkState,
- l10n_util::GetStringUTF16(
- IDS_EXTENSION_PROMPT_WARNING_NETWORK_STATE)));
- }
+// static
+void SocketsManifestPermission::AddSocketHostPermissions(
+ const SocketPermissionEntrySet& sockets,
+ PermissionIDSet* ids,
+ PermissionMessages* messages) {
+ if (!AddAnyHostMessage(sockets, ids, messages)) {
+ AddSpecificHostMessage(sockets, ids, messages);
+ AddSubdomainHostMessage(sockets, ids, messages);
}
+ AddNetworkListMessage(sockets, ids, messages);
}
} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698