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 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 |