Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5729)

Unified Diff: chrome/common/extensions/permissions/chrome_permission_message_provider.cc

Issue 236113002: Suppress tabs permission warning if there is already a browsingHistory warning. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix tests Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/common/extensions/permissions/permission_set_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/common/extensions/permissions/chrome_permission_message_provider.cc
diff --git a/chrome/common/extensions/permissions/chrome_permission_message_provider.cc b/chrome/common/extensions/permissions/chrome_permission_message_provider.cc
index f0c415d5f79b70d1c8f4d86d16a28c3d99da7408..f3e51a0b5826b19490559821dd362a1f8d754d2f 100644
--- a/chrome/common/extensions/permissions/chrome_permission_message_provider.cc
+++ b/chrome/common/extensions/permissions/chrome_permission_message_provider.cc
@@ -21,6 +21,8 @@ namespace extensions {
namespace {
+typedef std::set<PermissionMessage> PermissionMsgSet;
+
bool ShouldWarnAllHosts(const PermissionSet* permissions) {
if (permissions->HasEffectiveAccessToAllHosts())
return true;
@@ -62,17 +64,28 @@ bool ShouldWarnAllHosts(const PermissionSet* permissions) {
return false;
}
-PermissionMessages::iterator FindMessageByID(PermissionMessages& messages,
- int id) {
- for (PermissionMessages::iterator it = messages.begin();
+template<typename T>
+typename T::iterator FindMessageByID(T& messages, int id) {
+ for (typename T::iterator it = messages.begin();
it != messages.end(); ++it) {
if (it->id() == id)
return it;
}
-
return messages.end();
}
+template<typename T>
+void SuppressMessage(T& messages,
+ int suppressing_message,
+ int suppressed_message) {
+ typename T::iterator suppressed = FindMessageByID(messages,
+ suppressed_message);
+ if (suppressed != messages.end() &&
+ FindMessageByID(messages, suppressing_message) != messages.end()) {
+ messages.erase(suppressed);
+ }
+}
+
} // namespace
ChromePermissionMessageProvider::ChromePermissionMessageProvider() {
@@ -94,26 +107,24 @@ PermissionMessages ChromePermissionMessageProvider::GetPermissionMessages(
return messages;
}
- std::set<PermissionMessage> host_msgs =
+ PermissionMsgSet host_msgs =
GetHostPermissionMessages(permissions, extension_type);
- std::set<PermissionMessage> api_msgs = GetAPIPermissionMessages(permissions);
- std::set<PermissionMessage> manifest_permission_msgs =
+ PermissionMsgSet api_msgs = GetAPIPermissionMessages(permissions);
+ PermissionMsgSet manifest_permission_msgs =
GetManifestPermissionMessages(permissions);
messages.insert(messages.end(), host_msgs.begin(), host_msgs.end());
messages.insert(messages.end(), api_msgs.begin(), api_msgs.end());
messages.insert(messages.end(), manifest_permission_msgs.begin(),
manifest_permission_msgs.end());
- // Special hack: bookmarks permission message supersedes override bookmarks UI
- // permission message if both permissions are specified.
- PermissionMessages::iterator override_bookmarks_ui =
- FindMessageByID(messages, PermissionMessage::kOverrideBookmarksUI);
- if (override_bookmarks_ui != messages.end() &&
- FindMessageByID(messages, PermissionMessage::kBookmarks) !=
- messages.end()) {
- messages.erase(override_bookmarks_ui);
- }
-
+ // Some warnings are more generic and/or powerful and superseed other
+ // warnings. In that case, suppress the superseeded warning.
+ SuppressMessage(messages,
+ PermissionMessage::kBookmarks,
+ PermissionMessage::kOverrideBookmarksUI);
+ SuppressMessage(messages,
+ PermissionMessage::kBrowsingHistory,
+ PermissionMessage::kTabs);
return messages;
}
@@ -231,7 +242,7 @@ bool ChromePermissionMessageProvider::IsPrivilegeIncrease(
std::set<PermissionMessage>
ChromePermissionMessageProvider::GetAPIPermissionMessages(
const PermissionSet* permissions) const {
- std::set<PermissionMessage> messages;
+ PermissionMsgSet messages;
for (APIPermissionSet::const_iterator permission_it =
permissions->apis().begin();
permission_it != permissions->apis().end(); ++permission_it) {
@@ -245,18 +256,12 @@ ChromePermissionMessageProvider::GetAPIPermissionMessages(
// kFileSystemDirectory and and kFileSystemWrite as the write directory
// message implies the other two.
// TODO(sammc): Remove this. See http://crbug.com/284849.
- std::set<PermissionMessage>::iterator write_directory_message =
- messages.find(PermissionMessage(
- PermissionMessage::kFileSystemWriteDirectory, base::string16()));
- if (write_directory_message != messages.end()) {
- messages.erase(
- PermissionMessage(PermissionMessage::kFileSystemWrite,
- base::string16()));
- messages.erase(
- PermissionMessage(PermissionMessage::kFileSystemDirectory,
- base::string16()));
- }
-
+ SuppressMessage(messages,
+ PermissionMessage::kFileSystemWriteDirectory,
+ PermissionMessage::kFileSystemWrite);
+ SuppressMessage(messages,
+ PermissionMessage::kFileSystemWriteDirectory,
+ PermissionMessage::kFileSystemDirectory);
// A special hack: The warning message for declarativeWebRequest
// permissions speaks about blocking parts of pages, which is a
// subset of what the "<all_urls>" access allows. Therefore we
@@ -267,14 +272,13 @@ ChromePermissionMessageProvider::GetAPIPermissionMessages(
PermissionMessage(
PermissionMessage::kDeclarativeWebRequest, base::string16()));
}
-
return messages;
}
std::set<PermissionMessage>
ChromePermissionMessageProvider::GetManifestPermissionMessages(
const PermissionSet* permissions) const {
- std::set<PermissionMessage> messages;
+ PermissionMsgSet messages;
for (ManifestPermissionSet::const_iterator permission_it =
permissions->manifest_permissions().begin();
permission_it != permissions->manifest_permissions().end();
@@ -291,7 +295,7 @@ std::set<PermissionMessage>
ChromePermissionMessageProvider::GetHostPermissionMessages(
const PermissionSet* permissions,
Manifest::Type extension_type) const {
- std::set<PermissionMessage> messages;
+ PermissionMsgSet messages;
// Since platform apps always use isolated storage, they can't (silently)
// access user data on other domains, so there's no need to prompt.
// Note: this must remain consistent with IsHostPrivilegeIncrease.
@@ -322,7 +326,6 @@ bool ChromePermissionMessageProvider::IsAPIPrivilegeIncrease(
if (new_permissions == NULL)
return false;
- typedef std::set<PermissionMessage> PermissionMsgSet;
PermissionMsgSet old_warnings = GetAPIPermissionMessages(old_permissions);
PermissionMsgSet new_warnings = GetAPIPermissionMessages(new_permissions);
PermissionMsgSet delta_warnings =
@@ -352,7 +355,6 @@ bool ChromePermissionMessageProvider::IsManifestPermissionPrivilegeIncrease(
if (new_permissions == NULL)
return false;
- typedef std::set<PermissionMessage> PermissionMsgSet;
PermissionMsgSet old_warnings =
GetManifestPermissionMessages(old_permissions);
PermissionMsgSet new_warnings =
« no previous file with comments | « no previous file | chrome/common/extensions/permissions/permission_set_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698