| 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
|
|
|