Chromium Code Reviews| 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 |