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

Side by Side Diff: extensions/common/permissions/socket_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: Changed iterator loops to for-each loops 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "extensions/common/permissions/socket_permission.h" 5 #include "extensions/common/permissions/socket_permission.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
11 #include "base/strings/utf_string_conversions.h" 11 #include "base/strings/utf_string_conversions.h"
12 #include "extensions/common/api/sockets/sockets_manifest_permission.h"
12 #include "extensions/common/permissions/permissions_info.h" 13 #include "extensions/common/permissions/permissions_info.h"
13 #include "extensions/common/permissions/set_disjunction_permission.h" 14 #include "extensions/common/permissions/set_disjunction_permission.h"
14 #include "grit/extensions_strings.h" 15 #include "grit/extensions_strings.h"
15 #include "ui/base/l10n/l10n_util.h" 16 #include "ui/base/l10n/l10n_util.h"
16 17
17 namespace extensions { 18 namespace extensions {
18 19
20 namespace {
21
22 // Extracts the SocketPermissionEntry fields from a set of SocketPermissionData,
23 // and places them in their own set. Useful for converting the
24 // std::set<SocketPermissionEntry> field from SocketPermission into a parameter
25 // that can be passed to SocketsManifestPermission::AddSocketHostPermissions().
26 SocketPermissionEntrySet ExtractSocketEntries(
27 const std::set<SocketPermissionData>& data_set) {
28 SocketPermissionEntrySet entries;
29 for (const auto& data : data_set)
30 entries.insert(data.entry());
31 return entries;
32 }
33
34 } // namespace
35
19 SocketPermission::SocketPermission(const APIPermissionInfo* info) 36 SocketPermission::SocketPermission(const APIPermissionInfo* info)
20 : SetDisjunctionPermission<SocketPermissionData, SocketPermission>(info) {} 37 : SetDisjunctionPermission<SocketPermissionData, SocketPermission>(info) {}
21 38
22 SocketPermission::~SocketPermission() {} 39 SocketPermission::~SocketPermission() {}
23 40
24 PermissionIDSet SocketPermission::GetPermissions() const { 41 PermissionIDSet SocketPermission::GetPermissions() const {
25 PermissionMessages messages;
26 PermissionIDSet ids; 42 PermissionIDSet ids;
27 AddAllHostMessages(messages, ids); 43 SocketPermissionEntrySet entries = ExtractSocketEntries(data_set_);
44 SocketsManifestPermission::AddSocketHostPermissions(entries, &ids, NULL);
28 return ids; 45 return ids;
29 } 46 }
30 47
31 PermissionMessages SocketPermission::GetMessages() const { 48 PermissionMessages SocketPermission::GetMessages() const {
32 DCHECK(HasMessages()); 49 DCHECK(HasMessages());
33 PermissionMessages messages; 50 PermissionMessages messages;
34 PermissionIDSet ids; 51 SocketPermissionEntrySet entries = ExtractSocketEntries(data_set_);
35 AddAllHostMessages(messages, ids); 52 SocketsManifestPermission::AddSocketHostPermissions(entries, NULL, &messages);
36 return messages; 53 return messages;
37 } 54 }
38 55
39 void SocketPermission::AddAllHostMessages(PermissionMessages& messages,
40 PermissionIDSet& ids) const {
41 // TODO(rpaquay): This function and callees is (almost) a copy/paste from
42 // extensions::SocketsManifestPermission.
43 if (!AddAnyHostMessage(messages, ids)) {
44 AddSpecificHostMessage(messages, ids);
45 AddSubdomainHostMessage(messages, ids);
46 }
47 AddNetworkListMessage(messages, ids);
48 }
49
50 bool SocketPermission::AddAnyHostMessage(PermissionMessages& messages,
51 PermissionIDSet& ids) const {
52 std::set<SocketPermissionData>::const_iterator i;
53 for (i = data_set_.begin(); i != data_set_.end(); ++i) {
54 if (i->entry().IsAddressBoundType() &&
55 i->entry().GetHostType() == SocketPermissionEntry::ANY_HOST) {
56 messages.push_back(
57 PermissionMessage(PermissionMessage::kSocketAnyHost,
58 l10n_util::GetStringUTF16(
59 IDS_EXTENSION_PROMPT_WARNING_SOCKET_ANY_HOST)));
60 ids.insert(APIPermission::kSocketAnyHost);
61 return true;
62 }
63 }
64 return false;
65 }
66
67 void SocketPermission::AddSubdomainHostMessage(PermissionMessages& messages,
68 PermissionIDSet& ids) const {
69 std::set<base::string16> domains;
70 std::set<SocketPermissionData>::const_iterator i;
71 for (i = data_set_.begin(); i != data_set_.end(); ++i) {
72 if (i->entry().GetHostType() == SocketPermissionEntry::HOSTS_IN_DOMAINS)
73 domains.insert(base::UTF8ToUTF16(i->entry().pattern().host));
74 }
75 if (!domains.empty()) {
76 int id = (domains.size() == 1)
77 ? IDS_EXTENSION_PROMPT_WARNING_SOCKET_HOSTS_IN_DOMAIN
78 : IDS_EXTENSION_PROMPT_WARNING_SOCKET_HOSTS_IN_DOMAINS;
79 messages.push_back(PermissionMessage(
80 PermissionMessage::kSocketDomainHosts,
81 l10n_util::GetStringFUTF16(
82 id,
83 JoinString(
84 std::vector<base::string16>(domains.begin(), domains.end()),
85 ' '))));
86 for (const auto& domain : domains)
87 ids.insert(APIPermission::kSocketDomainHosts, domain);
88 }
89 }
90
91 void SocketPermission::AddSpecificHostMessage(PermissionMessages& messages,
92 PermissionIDSet& ids) const {
93 std::set<base::string16> hostnames;
94 std::set<SocketPermissionData>::const_iterator i;
95 for (i = data_set_.begin(); i != data_set_.end(); ++i) {
96 if (i->entry().GetHostType() == SocketPermissionEntry::SPECIFIC_HOSTS)
97 hostnames.insert(base::UTF8ToUTF16(i->entry().pattern().host));
98 }
99 if (!hostnames.empty()) {
100 int id = (hostnames.size() == 1)
101 ? IDS_EXTENSION_PROMPT_WARNING_SOCKET_SPECIFIC_HOST
102 : IDS_EXTENSION_PROMPT_WARNING_SOCKET_SPECIFIC_HOSTS;
103 messages.push_back(PermissionMessage(
104 PermissionMessage::kSocketSpecificHosts,
105 l10n_util::GetStringFUTF16(
106 id,
107 JoinString(
108 std::vector<base::string16>(hostnames.begin(), hostnames.end()),
109 ' '))));
110 for (const auto& hostname : hostnames)
111 ids.insert(APIPermission::kSocketSpecificHosts, hostname);
112 }
113 }
114
115 void SocketPermission::AddNetworkListMessage(PermissionMessages& messages,
116 PermissionIDSet& ids) const {
117 std::set<SocketPermissionData>::const_iterator i;
118 for (i = data_set_.begin(); i != data_set_.end(); ++i) {
119 if (i->entry().pattern().type ==
120 content::SocketPermissionRequest::NETWORK_STATE) {
121 messages.push_back(
122 PermissionMessage(PermissionMessage::kNetworkState,
123 l10n_util::GetStringUTF16(
124 IDS_EXTENSION_PROMPT_WARNING_NETWORK_STATE)));
125 ids.insert(APIPermission::kNetworkState);
126 }
127 }
128 }
129
130 } // namespace extensions 56 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698