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 template <typename T> | |
48 bool ContainBothMessages(T& messages, int first_message, int second_message) { | |
meacer
2014/07/07 21:57:32
Does this actually need to be templatized? Looks l
meacer
2014/07/07 21:57:32
Also, ContainBothMessages -> ContainsBothMessages
mhm
2014/07/07 22:33:09
No it doesn't. I just followed the SuppressMessage
mhm
2014/07/07 22:33:09
Done.
| |
49 return FindMessageByID(messages, first_message) != messages.end() && | |
50 FindMessageByID(messages, second_message) != messages.end(); | |
51 } | |
52 | |
47 } // namespace | 53 } // namespace |
48 | 54 |
49 ChromePermissionMessageProvider::ChromePermissionMessageProvider() { | 55 ChromePermissionMessageProvider::ChromePermissionMessageProvider() { |
50 } | 56 } |
51 | 57 |
52 ChromePermissionMessageProvider::~ChromePermissionMessageProvider() { | 58 ChromePermissionMessageProvider::~ChromePermissionMessageProvider() { |
53 } | 59 } |
54 | 60 |
55 PermissionMessages ChromePermissionMessageProvider::GetPermissionMessages( | 61 PermissionMessages ChromePermissionMessageProvider::GetPermissionMessages( |
56 const PermissionSet* permissions, | 62 const PermissionSet* permissions, |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
104 return messages; | 110 return messages; |
105 } | 111 } |
106 | 112 |
107 std::vector<base::string16> ChromePermissionMessageProvider::GetWarningMessages( | 113 std::vector<base::string16> ChromePermissionMessageProvider::GetWarningMessages( |
108 const PermissionSet* permissions, | 114 const PermissionSet* permissions, |
109 Manifest::Type extension_type) const { | 115 Manifest::Type extension_type) const { |
110 std::vector<base::string16> message_strings; | 116 std::vector<base::string16> message_strings; |
111 PermissionMessages messages = | 117 PermissionMessages messages = |
112 GetPermissionMessages(permissions, extension_type); | 118 GetPermissionMessages(permissions, extension_type); |
113 | 119 |
114 bool audio_capture = false; | 120 SuppressMessage(messages, |
115 bool video_capture = false; | 121 PermissionMessage::kBluetooth, |
116 bool media_galleries_read = false; | 122 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 | 123 |
150 for (PermissionMessages::const_iterator i = messages.begin(); | 124 for (PermissionMessages::const_iterator i = messages.begin(); |
151 i != messages.end(); ++i) { | 125 i != messages.end(); ++i) { |
152 int id = i->id(); | 126 int id = i->id(); |
153 if (audio_capture && video_capture) { | 127 if (id == PermissionMessage::kUsb || id == PermissionMessage::kBluetooth || |
154 if (id == PermissionMessage::kAudioCapture) { | 128 id == PermissionMessage::kSerial) { |
155 message_strings.push_back(l10n_util::GetStringUTF16( | 129 // Access to USB, Bluetooth and Serial |
156 IDS_EXTENSION_PROMPT_WARNING_AUDIO_AND_VIDEO_CAPTURE)); | 130 if (ContainBothMessages(messages, |
131 PermissionMessage::kUsb, | |
132 PermissionMessage::kBluetooth) && | |
133 ContainBothMessages( | |
134 messages, PermissionMessage::kUsb, PermissionMessage::kSerial)) { | |
meacer
2014/07/07 21:57:32
nit: I think it'll look better if you format this
mhm
2014/07/07 22:33:09
This was done with auto formatting "git cl format"
| |
135 if (id == PermissionMessage::kUsb) { | |
136 message_strings.push_back(l10n_util::GetStringUTF16( | |
137 IDS_EXTENSION_PROMPT_WARNING_ALL_DEVICES)); | |
138 } | |
157 continue; | 139 continue; |
158 } else if (id == PermissionMessage::kVideoCapture) { | 140 } |
159 // The combined message will be pushed above. | 141 // Access to USB and Bluetooth |
142 if (ContainBothMessages(messages, | |
143 PermissionMessage::kUsb, | |
144 PermissionMessage::kBluetooth)) { | |
145 if (id == PermissionMessage::kUsb) { | |
meacer
2014/07/07 21:57:31
You might want to test this logic with multiple "u
mhm
2014/07/07 22:33:09
Done.
| |
146 message_strings.push_back(l10n_util::GetStringUTF16( | |
147 IDS_EXTENSION_PROMPT_WARNING_USB_BLUETOOTH)); | |
148 } | |
149 continue; | |
150 } | |
151 // Access to USB and Serial | |
152 if (ContainBothMessages( | |
153 messages, PermissionMessage::kUsb, PermissionMessage::kSerial)) { | |
154 if (id == PermissionMessage::kUsb) { | |
155 message_strings.push_back(l10n_util::GetStringUTF16( | |
156 IDS_EXTENSION_PROMPT_WARNING_USB_SERIAL)); | |
157 } | |
158 continue; | |
159 } | |
160 // Access to Bluetooth and Serial | |
161 if (ContainBothMessages(messages, | |
162 PermissionMessage::kBluetooth, | |
163 PermissionMessage::kSerial)) { | |
164 if (id == PermissionMessage::kBluetooth) { | |
165 message_strings.push_back(l10n_util::GetStringUTF16( | |
166 IDS_EXTENSION_PROMPT_WARNING_BLUETOOTH_SERIAL)); | |
167 } | |
160 continue; | 168 continue; |
161 } | 169 } |
162 } | 170 } |
163 if (accessibility_read && accessibility_write) { | 171 if (id == PermissionMessage::kAccessibilityFeaturesRead || |
164 if (id == PermissionMessage::kAccessibilityFeaturesRead) { | 172 id == PermissionMessage::kAccessibilityFeaturesModify) { |
165 message_strings.push_back(l10n_util::GetStringUTF16( | 173 if (ContainBothMessages( |
166 IDS_EXTENSION_PROMPT_WARNING_ACCESSIBILITY_FEATURES_READ_MODIFY)); | 174 messages, |
167 continue; | 175 PermissionMessage::kAccessibilityFeaturesRead, |
168 } else if (id == PermissionMessage::kAccessibilityFeaturesModify) { | 176 PermissionMessage::kAccessibilityFeaturesModify)) { |
169 // The combined message will be pushed above. | 177 if (id == PermissionMessage::kAccessibilityFeaturesRead) { |
178 message_strings.push_back(l10n_util::GetStringUTF16( | |
179 IDS_EXTENSION_PROMPT_WARNING_ACCESSIBILITY_FEATURES_READ_MODIFY)); | |
180 } | |
170 continue; | 181 continue; |
171 } | 182 } |
172 } | 183 } |
173 if (media_galleries_read && | 184 if (id == PermissionMessage::kAudioCapture || |
174 (media_galleries_copy_to || media_galleries_delete)) { | 185 id == PermissionMessage::kVideoCapture) { |
175 if (id == PermissionMessage::kMediaGalleriesAllGalleriesRead) { | 186 if (ContainBothMessages(messages, |
176 int m_id = media_galleries_copy_to ? | 187 PermissionMessage::kAudioCapture, |
177 IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ_WRITE : | 188 PermissionMessage::kVideoCapture)) { |
178 IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ_DELETE; | 189 if (id == PermissionMessage::kAudioCapture) { |
179 message_strings.push_back(l10n_util::GetStringUTF16(m_id)); | 190 message_strings.push_back(l10n_util::GetStringUTF16( |
180 continue; | 191 IDS_EXTENSION_PROMPT_WARNING_AUDIO_AND_VIDEO_CAPTURE)); |
181 } else if (id == PermissionMessage::kMediaGalleriesAllGalleriesCopyTo || | 192 } |
182 id == PermissionMessage::kMediaGalleriesAllGalleriesDelete) { | |
183 // The combined message will be pushed above. | |
184 continue; | 193 continue; |
185 } | 194 } |
186 } | 195 } |
196 if (id == PermissionMessage::kMediaGalleriesAllGalleriesRead || | |
197 id == PermissionMessage::kMediaGalleriesAllGalleriesCopyTo || | |
198 id == PermissionMessage::kMediaGalleriesAllGalleriesDelete) { | |
199 if (ContainBothMessages( | |
200 messages, | |
201 PermissionMessage::kMediaGalleriesAllGalleriesRead, | |
202 PermissionMessage::kMediaGalleriesAllGalleriesCopyTo)) { | |
203 if (id == PermissionMessage::kMediaGalleriesAllGalleriesRead) { | |
204 message_strings.push_back(l10n_util::GetStringUTF16( | |
205 IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ_WRITE)); | |
206 } | |
207 continue; | |
208 } else if (ContainBothMessages( | |
209 messages, | |
210 PermissionMessage::kMediaGalleriesAllGalleriesRead, | |
211 PermissionMessage::kMediaGalleriesAllGalleriesDelete)) { | |
212 if (id == PermissionMessage::kMediaGalleriesAllGalleriesRead) { | |
213 message_strings.push_back(l10n_util::GetStringUTF16( | |
214 IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ_DELETE)); | |
215 } | |
216 continue; | |
217 } | |
218 } | |
187 if (permissions->HasAPIPermission(APIPermission::kSessions) && | 219 if (permissions->HasAPIPermission(APIPermission::kSessions) && |
188 id == PermissionMessage::kTabs) { | 220 id == PermissionMessage::kTabs) { |
189 message_strings.push_back(l10n_util::GetStringUTF16( | 221 message_strings.push_back(l10n_util::GetStringUTF16( |
190 IDS_EXTENSION_PROMPT_WARNING_HISTORY_READ_AND_SESSIONS)); | 222 IDS_EXTENSION_PROMPT_WARNING_HISTORY_READ_AND_SESSIONS)); |
191 continue; | 223 continue; |
192 } | 224 } |
193 if (permissions->HasAPIPermission(APIPermission::kSessions) && | 225 if (permissions->HasAPIPermission(APIPermission::kSessions) && |
194 id == PermissionMessage::kBrowsingHistory) { | 226 id == PermissionMessage::kBrowsingHistory) { |
195 message_strings.push_back(l10n_util::GetStringUTF16( | 227 message_strings.push_back(l10n_util::GetStringUTF16( |
196 IDS_EXTENSION_PROMPT_WARNING_HISTORY_WRITE_AND_SESSIONS)); | 228 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( | 422 std::set<std::string> old_hosts_set( |
391 permission_message_util::GetDistinctHosts(old_list, false, false)); | 423 permission_message_util::GetDistinctHosts(old_list, false, false)); |
392 std::set<std::string> new_hosts_only = | 424 std::set<std::string> new_hosts_only = |
393 base::STLSetDifference<std::set<std::string> >(new_hosts_set, | 425 base::STLSetDifference<std::set<std::string> >(new_hosts_set, |
394 old_hosts_set); | 426 old_hosts_set); |
395 | 427 |
396 return !new_hosts_only.empty(); | 428 return !new_hosts_only.empty(); |
397 } | 429 } |
398 | 430 |
399 } // namespace extensions | 431 } // namespace extensions |
OLD | NEW |