Index: extensions/common/permissions/socket_permission.cc |
diff --git a/extensions/common/permissions/socket_permission.cc b/extensions/common/permissions/socket_permission.cc |
index f457248e0007504d4c7b0e78f9b9e3be263a3d60..e5fac9d5626de0aaa211fee75918be09ef862029 100644 |
--- a/extensions/common/permissions/socket_permission.cc |
+++ b/extensions/common/permissions/socket_permission.cc |
@@ -9,6 +9,7 @@ |
#include "base/logging.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/strings/utf_string_conversions.h" |
+#include "extensions/common/api/sockets/sockets_manifest_permission.h" |
#include "extensions/common/permissions/permissions_info.h" |
#include "extensions/common/permissions/set_disjunction_permission.h" |
#include "grit/extensions_strings.h" |
@@ -16,115 +17,40 @@ |
namespace extensions { |
+namespace { |
+ |
+// Extracts the SocketPermissionEntry fields from a set of SocketPermissionData, |
+// and places them in their own set. Useful for converting the |
+// std::set<SocketPermissionEntry> field from SocketPermission into a parameter |
+// that can be passed to SocketsManifestPermission::AddSocketHostPermissions(). |
+SocketPermissionEntrySet ExtractSocketEntries( |
+ const std::set<SocketPermissionData>& data_set) { |
+ SocketPermissionEntrySet entries; |
+ for (const auto& data : data_set) |
+ entries.insert(data.entry()); |
+ return entries; |
+} |
+ |
+} // namespace |
+ |
SocketPermission::SocketPermission(const APIPermissionInfo* info) |
: SetDisjunctionPermission<SocketPermissionData, SocketPermission>(info) {} |
SocketPermission::~SocketPermission() {} |
PermissionIDSet SocketPermission::GetPermissions() const { |
- PermissionMessages messages; |
PermissionIDSet ids; |
- AddAllHostMessages(messages, ids); |
+ SocketPermissionEntrySet entries = ExtractSocketEntries(data_set_); |
+ SocketsManifestPermission::AddSocketHostPermissions(entries, &ids, NULL); |
return ids; |
} |
PermissionMessages SocketPermission::GetMessages() const { |
DCHECK(HasMessages()); |
PermissionMessages messages; |
- PermissionIDSet ids; |
- AddAllHostMessages(messages, ids); |
+ SocketPermissionEntrySet entries = ExtractSocketEntries(data_set_); |
+ SocketsManifestPermission::AddSocketHostPermissions(entries, NULL, &messages); |
return messages; |
} |
-void SocketPermission::AddAllHostMessages(PermissionMessages& messages, |
- PermissionIDSet& ids) const { |
- // TODO(rpaquay): This function and callees is (almost) a copy/paste from |
- // extensions::SocketsManifestPermission. |
- if (!AddAnyHostMessage(messages, ids)) { |
- AddSpecificHostMessage(messages, ids); |
- AddSubdomainHostMessage(messages, ids); |
- } |
- AddNetworkListMessage(messages, ids); |
-} |
- |
-bool SocketPermission::AddAnyHostMessage(PermissionMessages& messages, |
- PermissionIDSet& ids) const { |
- std::set<SocketPermissionData>::const_iterator i; |
- for (i = data_set_.begin(); i != data_set_.end(); ++i) { |
- if (i->entry().IsAddressBoundType() && |
- i->entry().GetHostType() == SocketPermissionEntry::ANY_HOST) { |
- messages.push_back( |
- PermissionMessage(PermissionMessage::kSocketAnyHost, |
- l10n_util::GetStringUTF16( |
- IDS_EXTENSION_PROMPT_WARNING_SOCKET_ANY_HOST))); |
- ids.insert(APIPermission::kSocketAnyHost); |
- return true; |
- } |
- } |
- return false; |
-} |
- |
-void SocketPermission::AddSubdomainHostMessage(PermissionMessages& messages, |
- PermissionIDSet& ids) const { |
- std::set<base::string16> domains; |
- std::set<SocketPermissionData>::const_iterator i; |
- for (i = data_set_.begin(); i != data_set_.end(); ++i) { |
- if (i->entry().GetHostType() == SocketPermissionEntry::HOSTS_IN_DOMAINS) |
- domains.insert(base::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<base::string16>(domains.begin(), domains.end()), |
- ' ')))); |
- for (const auto& domain : domains) |
- ids.insert(APIPermission::kSocketDomainHosts, domain); |
- } |
-} |
- |
-void SocketPermission::AddSpecificHostMessage(PermissionMessages& messages, |
- PermissionIDSet& ids) const { |
- std::set<base::string16> hostnames; |
- std::set<SocketPermissionData>::const_iterator i; |
- for (i = data_set_.begin(); i != data_set_.end(); ++i) { |
- if (i->entry().GetHostType() == SocketPermissionEntry::SPECIFIC_HOSTS) |
- hostnames.insert(base::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<base::string16>(hostnames.begin(), hostnames.end()), |
- ' ')))); |
- for (const auto& hostname : hostnames) |
- ids.insert(APIPermission::kSocketSpecificHosts, hostname); |
- } |
-} |
- |
-void SocketPermission::AddNetworkListMessage(PermissionMessages& messages, |
- PermissionIDSet& ids) const { |
- std::set<SocketPermissionData>::const_iterator i; |
- for (i = data_set_.begin(); i != data_set_.end(); ++i) { |
- if (i->entry().pattern().type == |
- content::SocketPermissionRequest::NETWORK_STATE) { |
- messages.push_back( |
- PermissionMessage(PermissionMessage::kNetworkState, |
- l10n_util::GetStringUTF16( |
- IDS_EXTENSION_PROMPT_WARNING_NETWORK_STATE))); |
- ids.insert(APIPermission::kNetworkState); |
- } |
- } |
-} |
- |
} // namespace extensions |