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 CombineMessage(T& messages, int first_message, int second_message) { | |
meacer
2014/07/03 01:04:11
This needs a better name. Maybe ContainsMessages?
mhm
2014/07/07 21:19:38
Done.
| |
49 typename T::iterator first = FindMessageByID(messages, first_message); | |
50 typename T::iterator second = FindMessageByID(messages, second_message); | |
51 if (first != messages.end() && second != messages.end()) { | |
meacer
2014/07/03 01:04:11
Cleaner:
return first != messages.end() && second
mhm
2014/07/07 21:19:38
Done.
| |
52 return true; | |
53 } | |
54 return false; | |
55 } | |
56 | |
47 } // namespace | 57 } // namespace |
48 | 58 |
49 ChromePermissionMessageProvider::ChromePermissionMessageProvider() { | 59 ChromePermissionMessageProvider::ChromePermissionMessageProvider() { |
50 } | 60 } |
51 | 61 |
52 ChromePermissionMessageProvider::~ChromePermissionMessageProvider() { | 62 ChromePermissionMessageProvider::~ChromePermissionMessageProvider() { |
53 } | 63 } |
54 | 64 |
55 PermissionMessages ChromePermissionMessageProvider::GetPermissionMessages( | 65 PermissionMessages ChromePermissionMessageProvider::GetPermissionMessages( |
56 const PermissionSet* permissions, | 66 const PermissionSet* permissions, |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
104 return messages; | 114 return messages; |
105 } | 115 } |
106 | 116 |
107 std::vector<base::string16> ChromePermissionMessageProvider::GetWarningMessages( | 117 std::vector<base::string16> ChromePermissionMessageProvider::GetWarningMessages( |
108 const PermissionSet* permissions, | 118 const PermissionSet* permissions, |
109 Manifest::Type extension_type) const { | 119 Manifest::Type extension_type) const { |
110 std::vector<base::string16> message_strings; | 120 std::vector<base::string16> message_strings; |
111 PermissionMessages messages = | 121 PermissionMessages messages = |
112 GetPermissionMessages(permissions, extension_type); | 122 GetPermissionMessages(permissions, extension_type); |
113 | 123 |
114 bool audio_capture = false; | 124 // Warning for Hid always include warning for USB and/or Bluetooth |
115 bool video_capture = false; | 125 // access permission. |
116 bool media_galleries_read = false; | 126 SuppressMessage(messages, |
117 bool media_galleries_copy_to = false; | 127 PermissionMessage::kHid, |
118 bool media_galleries_delete = false; | 128 PermissionMessage::kUsb); |
119 bool accessibility_read = false; | 129 SuppressMessage(messages, |
120 bool accessibility_write = false; | 130 PermissionMessage::kBluetooth, |
121 for (PermissionMessages::const_iterator i = messages.begin(); | 131 PermissionMessage::kBluetoothDevices); |
122 i != messages.end(); ++i) { | 132 SuppressMessage(messages, |
123 switch (i->id()) { | 133 PermissionMessage::kHid, |
124 case PermissionMessage::kAudioCapture: | 134 PermissionMessage::kBluetooth); |
125 audio_capture = true; | 135 |
126 break; | 136 // Replace USB and Bluetooth with HID. |
127 case PermissionMessage::kVideoCapture: | 137 if (CombineMessage( |
128 video_capture = true; | 138 messages, PermissionMessage::kUsb, PermissionMessage::kBluetooth)) { |
meacer
2014/07/03 01:04:11
As I mentioned on the previous comment on IDS_EXTE
mhm
2014/07/07 21:19:38
Done.
| |
129 break; | 139 messages.push_back(PermissionMessage( |
130 case PermissionMessage::kMediaGalleriesAllGalleriesRead: | 140 PermissionMessage::kHid, |
131 media_galleries_read = true; | 141 l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_HID))); |
132 break; | 142 messages.erase(FindMessageByID(messages, PermissionMessage::kUsb)); |
133 case PermissionMessage::kMediaGalleriesAllGalleriesCopyTo: | 143 messages.erase(FindMessageByID(messages, PermissionMessage::kBluetooth)); |
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 } | 144 } |
149 | 145 |
146 bool media_galleries_read_copy_to = | |
meacer
2014/07/03 01:04:11
I would just put these inside the if condition whe
mhm
2014/07/07 21:19:38
Done.
| |
147 CombineMessage(messages, | |
148 PermissionMessage::kMediaGalleriesAllGalleriesRead, | |
149 PermissionMessage::kMediaGalleriesAllGalleriesCopyTo); | |
150 bool media_galleries_read_delete = | |
meacer
2014/07/03 01:04:11
Same as media_galleries_copy_to
mhm
2014/07/07 21:19:38
Done.
| |
151 CombineMessage(messages, | |
152 PermissionMessage::kMediaGalleriesAllGalleriesRead, | |
153 PermissionMessage::kMediaGalleriesAllGalleriesDelete); | |
150 for (PermissionMessages::const_iterator i = messages.begin(); | 154 for (PermissionMessages::const_iterator i = messages.begin(); |
151 i != messages.end(); ++i) { | 155 i != messages.end(); ++i) { |
152 int id = i->id(); | 156 int id = i->id(); |
153 if (audio_capture && video_capture) { | 157 if ((id == PermissionMessage::kHid || id == PermissionMessage::kSerial) && |
158 CombineMessage( | |
159 messages, PermissionMessage::kHid, PermissionMessage::kSerial)) { | |
160 if (id == PermissionMessage::kHid) { | |
161 message_strings.push_back( | |
162 l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_DEVICES)); | |
163 } | |
164 continue; | |
165 } | |
166 if ((id == PermissionMessage::kUsb || id == PermissionMessage::kSerial) && | |
167 CombineMessage( | |
168 messages, PermissionMessage::kUsb, PermissionMessage::kSerial)) { | |
169 if (id == PermissionMessage::kUsb) { | |
meacer
2014/07/03 01:04:11
This seems cleaner:
if (id == kUsb && ContainsMes
mhm
2014/07/07 21:19:38
The issue is that we also need to have a continue
| |
170 message_strings.push_back( | |
171 l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_USB_SERIAL)); | |
172 } | |
173 continue; | |
174 } | |
175 if ((id == PermissionMessage::kBluetooth || | |
176 id == PermissionMessage::kSerial) && | |
177 CombineMessage(messages, | |
178 PermissionMessage::kBluetooth, | |
179 PermissionMessage::kSerial)) { | |
180 if (id == PermissionMessage::kBluetooth) { | |
meacer
2014/07/03 01:04:11
Same as above, you could just check for kBluetooth
mhm
2014/07/07 21:19:39
Done.
| |
181 message_strings.push_back(l10n_util::GetStringUTF16( | |
182 IDS_EXTENSION_PROMPT_WARNING_BLUETOOTH_SERIAL)); | |
183 } | |
184 continue; | |
185 } | |
186 if ((id == PermissionMessage::kAccessibilityFeaturesRead || | |
187 id == PermissionMessage::kAccessibilityFeaturesModify) && | |
188 CombineMessage(messages, | |
189 PermissionMessage::kAccessibilityFeaturesRead, | |
190 PermissionMessage::kAccessibilityFeaturesModify)) { | |
191 if (id == PermissionMessage::kAccessibilityFeaturesRead) { | |
192 message_strings.push_back(l10n_util::GetStringUTF16( | |
193 IDS_EXTENSION_PROMPT_WARNING_ACCESSIBILITY_FEATURES_READ_MODIFY)); | |
meacer
2014/07/03 01:04:11
Same:
if (id == Read && CombineMessage(messages,
mhm
2014/07/07 21:19:38
Done.
| |
194 } | |
195 continue; | |
196 } | |
197 if ((id == PermissionMessage::kAudioCapture || | |
198 id == PermissionMessage::kVideoCapture) && | |
199 CombineMessage(messages, | |
200 PermissionMessage::kAudioCapture, | |
201 PermissionMessage::kVideoCapture)) { | |
154 if (id == PermissionMessage::kAudioCapture) { | 202 if (id == PermissionMessage::kAudioCapture) { |
meacer
2014/07/03 01:04:11
Ditto.
mhm
2014/07/07 21:19:38
Done.
| |
155 message_strings.push_back(l10n_util::GetStringUTF16( | 203 message_strings.push_back(l10n_util::GetStringUTF16( |
156 IDS_EXTENSION_PROMPT_WARNING_AUDIO_AND_VIDEO_CAPTURE)); | 204 IDS_EXTENSION_PROMPT_WARNING_AUDIO_AND_VIDEO_CAPTURE)); |
157 continue; | |
158 } else if (id == PermissionMessage::kVideoCapture) { | |
159 // The combined message will be pushed above. | |
160 continue; | |
161 } | 205 } |
206 continue; | |
162 } | 207 } |
163 if (accessibility_read && accessibility_write) { | 208 if ((id == PermissionMessage::kMediaGalleriesAllGalleriesRead || |
164 if (id == PermissionMessage::kAccessibilityFeaturesRead) { | 209 id == PermissionMessage::kMediaGalleriesAllGalleriesCopyTo || |
165 message_strings.push_back(l10n_util::GetStringUTF16( | 210 id == PermissionMessage::kMediaGalleriesAllGalleriesDelete) && |
166 IDS_EXTENSION_PROMPT_WARNING_ACCESSIBILITY_FEATURES_READ_MODIFY)); | 211 (media_galleries_read_delete || media_galleries_read_copy_to)) { |
167 continue; | 212 if (id == PermissionMessage::kMediaGalleriesAllGalleriesRead) { |
meacer
2014/07/03 01:04:11
Looks like this is always false, right?
id can on
meacer
2014/07/03 01:09:59
Never mind, my comment is wrong.
mhm
2014/07/07 21:19:39
Done.
| |
168 } else if (id == PermissionMessage::kAccessibilityFeaturesModify) { | 213 if (media_galleries_read_copy_to) { |
169 // The combined message will be pushed above. | 214 message_strings.push_back(l10n_util::GetStringUTF16( |
170 continue; | 215 IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ_WRITE)); |
216 } else { | |
217 message_strings.push_back(l10n_util::GetStringUTF16( | |
218 IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ_DELETE)); | |
219 } | |
171 } | 220 } |
172 } | 221 continue; |
173 if (media_galleries_read && | |
174 (media_galleries_copy_to || media_galleries_delete)) { | |
175 if (id == PermissionMessage::kMediaGalleriesAllGalleriesRead) { | |
176 int m_id = media_galleries_copy_to ? | |
177 IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ_WRITE : | |
178 IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ_DELETE; | |
179 message_strings.push_back(l10n_util::GetStringUTF16(m_id)); | |
180 continue; | |
181 } else if (id == PermissionMessage::kMediaGalleriesAllGalleriesCopyTo || | |
182 id == PermissionMessage::kMediaGalleriesAllGalleriesDelete) { | |
183 // The combined message will be pushed above. | |
184 continue; | |
185 } | |
186 } | 222 } |
187 if (permissions->HasAPIPermission(APIPermission::kSessions) && | 223 if (permissions->HasAPIPermission(APIPermission::kSessions) && |
188 id == PermissionMessage::kTabs) { | 224 id == PermissionMessage::kTabs) { |
189 message_strings.push_back(l10n_util::GetStringUTF16( | 225 message_strings.push_back(l10n_util::GetStringUTF16( |
190 IDS_EXTENSION_PROMPT_WARNING_HISTORY_READ_AND_SESSIONS)); | 226 IDS_EXTENSION_PROMPT_WARNING_HISTORY_READ_AND_SESSIONS)); |
191 continue; | 227 continue; |
192 } | 228 } |
193 if (permissions->HasAPIPermission(APIPermission::kSessions) && | 229 if (permissions->HasAPIPermission(APIPermission::kSessions) && |
194 id == PermissionMessage::kBrowsingHistory) { | 230 id == PermissionMessage::kBrowsingHistory) { |
195 message_strings.push_back(l10n_util::GetStringUTF16( | 231 message_strings.push_back(l10n_util::GetStringUTF16( |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
390 std::set<std::string> old_hosts_set( | 426 std::set<std::string> old_hosts_set( |
391 permission_message_util::GetDistinctHosts(old_list, false, false)); | 427 permission_message_util::GetDistinctHosts(old_list, false, false)); |
392 std::set<std::string> new_hosts_only = | 428 std::set<std::string> new_hosts_only = |
393 base::STLSetDifference<std::set<std::string> >(new_hosts_set, | 429 base::STLSetDifference<std::set<std::string> >(new_hosts_set, |
394 old_hosts_set); | 430 old_hosts_set); |
395 | 431 |
396 return !new_hosts_only.empty(); | 432 return !new_hosts_only.empty(); |
397 } | 433 } |
398 | 434 |
399 } // namespace extensions | 435 } // namespace extensions |
OLD | NEW |