Commit 5b72723e authored by jstritar@chromium.org's avatar jstritar@chromium.org

Do not display warnings for file:/// extension permissions.

BUG=none
TEST=ExtensionPermissionSetTest.GetDistinctHostsForDisplay

Review URL: http://codereview.chromium.org/7582017

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@95817 0039d316-1c4b-4281-b951-d872f2087c98
parent c07bb9e0
......@@ -16,6 +16,7 @@
#include "chrome/common/extensions/extension_l10n_util.h"
#include "chrome/common/extensions/url_pattern.h"
#include "chrome/common/extensions/url_pattern_set.h"
#include "content/common/url_constants.h"
#include "grit/generated_resources.h"
#include "net/base/registry_controlled_domain.h"
#include "ui/base/l10n/l10n_util.h"
......@@ -517,7 +518,7 @@ std::set<std::string> ExtensionPermissionSet::GetAPIsAsStrings() const {
std::set<std::string>
ExtensionPermissionSet::GetDistinctHostsForDisplay() const {
return GetDistinctHosts(effective_hosts_, true);
return GetDistinctHosts(effective_hosts_, true, true);
}
ExtensionPermissionMessages
......@@ -687,7 +688,9 @@ bool ExtensionPermissionSet::HasLessPrivilegesThan(
// static
std::set<std::string> ExtensionPermissionSet::GetDistinctHosts(
const URLPatternSet& host_patterns, bool include_rcd) {
const URLPatternSet& host_patterns,
bool include_rcd,
bool exclude_file_scheme) {
// Use a vector to preserve order (also faster than a map on small sets).
// Each item is a host split into two parts: host without RCDs and
// current best RCD.
......@@ -695,6 +698,9 @@ std::set<std::string> ExtensionPermissionSet::GetDistinctHosts(
HostVector hosts_best_rcd;
for (URLPatternSet::const_iterator i = host_patterns.begin();
i != host_patterns.end(); ++i) {
if (exclude_file_scheme && i->scheme() == chrome::kFileScheme)
continue;
std::string host = i->host();
// Add the subdomain wildcard back to the host, if necessary.
......@@ -824,8 +830,8 @@ bool ExtensionPermissionSet::HasLessHostPrivilegesThan(
// TODO(jstritar): This is overly conservative with respect to subdomains.
// For example, going from *.google.com to www.google.com will be
// considered an elevation, even though it is not (http://crbug.com/65337).
std::set<std::string> new_hosts_set = GetDistinctHosts(new_list, false);
std::set<std::string> old_hosts_set = GetDistinctHosts(old_list, false);
std::set<std::string> new_hosts_set(GetDistinctHosts(new_list, false, false));
std::set<std::string> old_hosts_set(GetDistinctHosts(old_list, false, false));
std::set<std::string> new_hosts_only;
std::set_difference(new_hosts_set.begin(), new_hosts_set.end(),
......
......@@ -380,7 +380,9 @@ class ExtensionPermissionSet
friend class base::RefCountedThreadSafe<ExtensionPermissionSet>;
static std::set<std::string> GetDistinctHosts(
const URLPatternSet& host_patterns, bool include_rcd);
const URLPatternSet& host_patterns,
bool include_rcd,
bool exclude_file_scheme);
// Initializes the set based on |extension|'s manifest data.
void InitImplicitExtensionPermissions(const Extension* extension);
......
......@@ -872,6 +872,21 @@ TEST(ExtensionPermissionSetTest, GetDistinctHostsForDisplay) {
empty_perms, explicit_hosts, scriptable_hosts);
EXPECT_EQ(expected, perm_set->GetDistinctHostsForDisplay());
}
{
// We don't display warnings for file URLs because they are off by default.
SCOPED_TRACE("file urls");
explicit_hosts.ClearPatterns();
scriptable_hosts.ClearPatterns();
expected.clear();
explicit_hosts.AddPattern(
URLPattern(URLPattern::SCHEME_FILE, "file:///*"));
perm_set = new ExtensionPermissionSet(
empty_perms, explicit_hosts, scriptable_hosts);
EXPECT_EQ(expected, perm_set->GetDistinctHostsForDisplay());
}
}
TEST(ExtensionPermissionSetTest, GetDistinctHostsForDisplay_ComIsBestRcd) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment