OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "chrome/common/extensions/permissions/chrome_permission_message_provide r.h" | 5 #include "chrome/common/extensions/permissions/chrome_permission_message_provide r.h" |
6 | 6 |
7 #include "base/stl_util.h" | 7 #include "base/stl_util.h" |
8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
9 #include "extensions/common/extensions_client.h" | 9 #include "extensions/common/extensions_client.h" |
10 #include "extensions/common/permissions/permission_message.h" | 10 #include "extensions/common/permissions/permission_message.h" |
(...skipping 26 matching lines...) Expand all Loading... | |
37 int suppressing_message, | 37 int suppressing_message, |
38 int suppressed_message) { | 38 int suppressed_message) { |
39 typename T::iterator suppressed = FindMessageByID(messages, | 39 typename T::iterator suppressed = FindMessageByID(messages, |
40 suppressed_message); | 40 suppressed_message); |
41 if (suppressed != messages.end() && | 41 if (suppressed != messages.end() && |
42 FindMessageByID(messages, suppressing_message) != messages.end()) { | 42 FindMessageByID(messages, suppressing_message) != messages.end()) { |
43 messages.erase(suppressed); | 43 messages.erase(suppressed); |
44 } | 44 } |
45 } | 45 } |
46 | 46 |
47 bool ContainsBothMessages(PermissionMessages& messages, | |
48 int first_message, | |
49 int second_message) { | |
50 return FindMessageByID(messages, first_message) != messages.end() && | |
51 FindMessageByID(messages, second_message) != messages.end(); | |
52 } | |
53 | |
47 } // namespace | 54 } // namespace |
48 | 55 |
49 ChromePermissionMessageProvider::ChromePermissionMessageProvider() { | 56 ChromePermissionMessageProvider::ChromePermissionMessageProvider() { |
50 } | 57 } |
51 | 58 |
52 ChromePermissionMessageProvider::~ChromePermissionMessageProvider() { | 59 ChromePermissionMessageProvider::~ChromePermissionMessageProvider() { |
53 } | 60 } |
54 | 61 |
55 PermissionMessages ChromePermissionMessageProvider::GetPermissionMessages( | 62 PermissionMessages ChromePermissionMessageProvider::GetPermissionMessages( |
56 const PermissionSet* permissions, | 63 const PermissionSet* permissions, |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
104 return messages; | 111 return messages; |
105 } | 112 } |
106 | 113 |
107 std::vector<base::string16> ChromePermissionMessageProvider::GetWarningMessages( | 114 std::vector<base::string16> ChromePermissionMessageProvider::GetWarningMessages( |
108 const PermissionSet* permissions, | 115 const PermissionSet* permissions, |
109 Manifest::Type extension_type) const { | 116 Manifest::Type extension_type) const { |
110 std::vector<base::string16> message_strings; | 117 std::vector<base::string16> message_strings; |
111 PermissionMessages messages = | 118 PermissionMessages messages = |
112 GetPermissionMessages(permissions, extension_type); | 119 GetPermissionMessages(permissions, extension_type); |
113 | 120 |
114 bool audio_capture = false; | 121 SuppressMessage(messages, |
115 bool video_capture = false; | 122 PermissionMessage::kBluetooth, |
116 bool media_galleries_read = false; | 123 PermissionMessage::kBluetoothDevices); |
117 bool media_galleries_copy_to = false; | |
118 bool media_galleries_delete = false; | |
119 bool accessibility_read = false; | |
120 bool accessibility_write = false; | |
121 for (PermissionMessages::const_iterator i = messages.begin(); | |
122 i != messages.end(); ++i) { | |
123 switch (i->id()) { | |
124 case PermissionMessage::kAudioCapture: | |
125 audio_capture = true; | |
126 break; | |
127 case PermissionMessage::kVideoCapture: | |
128 video_capture = true; | |
129 break; | |
130 case PermissionMessage::kMediaGalleriesAllGalleriesRead: | |
131 media_galleries_read = true; | |
132 break; | |
133 case PermissionMessage::kMediaGalleriesAllGalleriesCopyTo: | |
134 media_galleries_copy_to = true; | |
135 break; | |
136 case PermissionMessage::kMediaGalleriesAllGalleriesDelete: | |
137 media_galleries_delete = true; | |
138 break; | |
139 case PermissionMessage::kAccessibilityFeaturesRead: | |
140 accessibility_read = true; | |
141 break; | |
142 case PermissionMessage::kAccessibilityFeaturesModify: | |
143 accessibility_write = true; | |
144 break; | |
145 default: | |
146 break; | |
147 } | |
148 } | |
149 | 124 |
150 for (PermissionMessages::const_iterator i = messages.begin(); | 125 for (PermissionMessages::const_iterator i = messages.begin(); |
151 i != messages.end(); ++i) { | 126 i != messages.end(); ++i) { |
152 int id = i->id(); | 127 int id = i->id(); |
153 if (audio_capture && video_capture) { | 128 if (id == PermissionMessage::kUsb || id == PermissionMessage::kBluetooth || |
154 if (id == PermissionMessage::kAudioCapture) { | 129 id == PermissionMessage::kSerial) { |
155 message_strings.push_back(l10n_util::GetStringUTF16( | 130 // Access to USB, Bluetooth and Serial |
not at google - send to devlin
2014/07/07 23:07:38
these little comments don't add much, it's clear f
mhm
2014/07/07 23:58:32
Done.
| |
156 IDS_EXTENSION_PROMPT_WARNING_AUDIO_AND_VIDEO_CAPTURE)); | 131 if (ContainsBothMessages(messages, |
132 PermissionMessage::kUsb, | |
133 PermissionMessage::kBluetooth) && | |
134 ContainsBothMessages(messages, | |
not at google - send to devlin
2014/07/07 23:07:38
could you have a method like "ContainsAll" and ove
mhm
2014/07/07 23:58:32
Done.
| |
135 PermissionMessage::kUsb, | |
136 PermissionMessage::kSerial)) { | |
137 if (id == PermissionMessage::kUsb) { | |
not at google - send to devlin
2014/07/07 23:07:38
epic nit: can we have these in alphabetic ordering
mhm
2014/07/07 23:58:32
Done.
| |
138 message_strings.push_back(l10n_util::GetStringUTF16( | |
139 IDS_EXTENSION_PROMPT_WARNING_ALL_DEVICES)); | |
140 } | |
157 continue; | 141 continue; |
158 } else if (id == PermissionMessage::kVideoCapture) { | 142 } |
159 // The combined message will be pushed above. | 143 // Access to USB and Bluetooth |
144 if (ContainsBothMessages(messages, | |
145 PermissionMessage::kUsb, | |
146 PermissionMessage::kBluetooth)) { | |
147 if (id == PermissionMessage::kUsb) { | |
148 message_strings.push_back(l10n_util::GetStringUTF16( | |
149 IDS_EXTENSION_PROMPT_WARNING_USB_BLUETOOTH)); | |
150 } | |
151 continue; | |
152 } | |
153 // Access to USB and Serial | |
154 if (ContainsBothMessages( | |
155 messages, PermissionMessage::kUsb, PermissionMessage::kSerial)) { | |
156 if (id == PermissionMessage::kUsb) { | |
157 message_strings.push_back(l10n_util::GetStringUTF16( | |
158 IDS_EXTENSION_PROMPT_WARNING_USB_SERIAL)); | |
159 } | |
160 continue; | |
161 } | |
162 // Access to Bluetooth and Serial | |
163 if (ContainsBothMessages(messages, | |
164 PermissionMessage::kBluetooth, | |
165 PermissionMessage::kSerial)) { | |
166 if (id == PermissionMessage::kBluetooth) { | |
167 message_strings.push_back(l10n_util::GetStringUTF16( | |
168 IDS_EXTENSION_PROMPT_WARNING_BLUETOOTH_SERIAL)); | |
169 } | |
160 continue; | 170 continue; |
161 } | 171 } |
162 } | 172 } |
163 if (accessibility_read && accessibility_write) { | 173 if (id == PermissionMessage::kAccessibilityFeaturesRead || |
164 if (id == PermissionMessage::kAccessibilityFeaturesRead) { | 174 id == PermissionMessage::kAccessibilityFeaturesModify) { |
165 message_strings.push_back(l10n_util::GetStringUTF16( | 175 if (ContainsBothMessages( |
166 IDS_EXTENSION_PROMPT_WARNING_ACCESSIBILITY_FEATURES_READ_MODIFY)); | 176 messages, |
167 continue; | 177 PermissionMessage::kAccessibilityFeaturesRead, |
168 } else if (id == PermissionMessage::kAccessibilityFeaturesModify) { | 178 PermissionMessage::kAccessibilityFeaturesModify)) { |
169 // The combined message will be pushed above. | 179 if (id == PermissionMessage::kAccessibilityFeaturesRead) { |
180 message_strings.push_back(l10n_util::GetStringUTF16( | |
181 IDS_EXTENSION_PROMPT_WARNING_ACCESSIBILITY_FEATURES_READ_MODIFY)); | |
182 } | |
170 continue; | 183 continue; |
171 } | 184 } |
172 } | 185 } |
173 if (media_galleries_read && | 186 if (id == PermissionMessage::kAudioCapture || |
174 (media_galleries_copy_to || media_galleries_delete)) { | 187 id == PermissionMessage::kVideoCapture) { |
175 if (id == PermissionMessage::kMediaGalleriesAllGalleriesRead) { | 188 if (ContainsBothMessages(messages, |
176 int m_id = media_galleries_copy_to ? | 189 PermissionMessage::kAudioCapture, |
177 IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ_WRITE : | 190 PermissionMessage::kVideoCapture)) { |
178 IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ_DELETE; | 191 if (id == PermissionMessage::kAudioCapture) { |
179 message_strings.push_back(l10n_util::GetStringUTF16(m_id)); | 192 message_strings.push_back(l10n_util::GetStringUTF16( |
180 continue; | 193 IDS_EXTENSION_PROMPT_WARNING_AUDIO_AND_VIDEO_CAPTURE)); |
181 } else if (id == PermissionMessage::kMediaGalleriesAllGalleriesCopyTo || | 194 } |
182 id == PermissionMessage::kMediaGalleriesAllGalleriesDelete) { | |
183 // The combined message will be pushed above. | |
184 continue; | 195 continue; |
185 } | 196 } |
186 } | 197 } |
198 if (id == PermissionMessage::kMediaGalleriesAllGalleriesRead || | |
199 id == PermissionMessage::kMediaGalleriesAllGalleriesCopyTo || | |
200 id == PermissionMessage::kMediaGalleriesAllGalleriesDelete) { | |
not at google - send to devlin
2014/07/07 23:07:38
what about read+copy+delete?
mhm
2014/07/07 23:58:32
The original logic didn't say anything about this
| |
201 if (ContainsBothMessages( | |
202 messages, | |
203 PermissionMessage::kMediaGalleriesAllGalleriesRead, | |
204 PermissionMessage::kMediaGalleriesAllGalleriesCopyTo)) { | |
205 if (id == PermissionMessage::kMediaGalleriesAllGalleriesRead) { | |
206 message_strings.push_back(l10n_util::GetStringUTF16( | |
207 IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ_WRITE)); | |
208 } | |
209 continue; | |
210 } else if (ContainsBothMessages( | |
not at google - send to devlin
2014/07/07 23:07:38
no else after continue
mhm
2014/07/07 23:58:32
Done.
| |
211 messages, | |
212 PermissionMessage::kMediaGalleriesAllGalleriesRead, | |
213 PermissionMessage::kMediaGalleriesAllGalleriesDelete)) { | |
214 if (id == PermissionMessage::kMediaGalleriesAllGalleriesRead) { | |
215 message_strings.push_back(l10n_util::GetStringUTF16( | |
216 IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ_DELETE)); | |
217 } | |
218 continue; | |
219 } | |
220 } | |
187 if (permissions->HasAPIPermission(APIPermission::kSessions) && | 221 if (permissions->HasAPIPermission(APIPermission::kSessions) && |
188 id == PermissionMessage::kTabs) { | 222 id == PermissionMessage::kTabs) { |
189 message_strings.push_back(l10n_util::GetStringUTF16( | 223 message_strings.push_back(l10n_util::GetStringUTF16( |
190 IDS_EXTENSION_PROMPT_WARNING_HISTORY_READ_AND_SESSIONS)); | 224 IDS_EXTENSION_PROMPT_WARNING_HISTORY_READ_AND_SESSIONS)); |
191 continue; | 225 continue; |
192 } | 226 } |
193 if (permissions->HasAPIPermission(APIPermission::kSessions) && | 227 if (permissions->HasAPIPermission(APIPermission::kSessions) && |
194 id == PermissionMessage::kBrowsingHistory) { | 228 id == PermissionMessage::kBrowsingHistory) { |
195 message_strings.push_back(l10n_util::GetStringUTF16( | 229 message_strings.push_back(l10n_util::GetStringUTF16( |
196 IDS_EXTENSION_PROMPT_WARNING_HISTORY_WRITE_AND_SESSIONS)); | 230 IDS_EXTENSION_PROMPT_WARNING_HISTORY_WRITE_AND_SESSIONS)); |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
390 std::set<std::string> old_hosts_set( | 424 std::set<std::string> old_hosts_set( |
391 permission_message_util::GetDistinctHosts(old_list, false, false)); | 425 permission_message_util::GetDistinctHosts(old_list, false, false)); |
392 std::set<std::string> new_hosts_only = | 426 std::set<std::string> new_hosts_only = |
393 base::STLSetDifference<std::set<std::string> >(new_hosts_set, | 427 base::STLSetDifference<std::set<std::string> >(new_hosts_set, |
394 old_hosts_set); | 428 old_hosts_set); |
395 | 429 |
396 return !new_hosts_only.empty(); | 430 return !new_hosts_only.empty(); |
397 } | 431 } |
398 | 432 |
399 } // namespace extensions | 433 } // namespace extensions |
OLD | NEW |