Commit a859ef1c authored by meacer's avatar meacer Committed by Commit bot

Add a separate warning message for topSites permission.

The current warning is the generic "Read your browsing history"
warning. The new warning for topSites will be suppressed by
read only and read/write history warnings, and all hosts warning.

BUG=404334

Review URL: https://codereview.chromium.org/482953003

Cr-Commit-Position: refs/heads/master@{#292545}
parent d6f1e09b
......@@ -4316,6 +4316,9 @@ Make sure you do not expose any sensitive information.
<message name="IDS_EXTENSION_PROMPT_WARNING_MANAGEMENT" desc="Permisson string for access to extension management.">
Manage your apps, extensions, and themes
</message>
<message name="IDS_EXTENSION_PROMPT_WARNING_TOPSITES" desc="Permission string for access to the list of most frequently visited websites.">
Read a list of your most frequently visited websites
</message>
<message name="IDS_EXTENSION_PROMPT_WARNING_HISTORY_READ" desc="Permission string for access to browsing history.">
Read your browsing history
</message>
......
......@@ -151,7 +151,7 @@ std::vector<APIPermissionInfo*> ChromeAPIPermissions::GetAllPermissions()
{APIPermission::kTab, "tabs", APIPermissionInfo::kFlagNone,
IDS_EXTENSION_PROMPT_WARNING_HISTORY_READ, PermissionMessage::kTabs},
{APIPermission::kTopSites, "topSites", APIPermissionInfo::kFlagNone,
IDS_EXTENSION_PROMPT_WARNING_HISTORY_READ, PermissionMessage::kTabs},
IDS_EXTENSION_PROMPT_WARNING_TOPSITES, PermissionMessage::kTopSites},
{APIPermission::kTts, "tts", 0, APIPermissionInfo::kFlagCannotBeOptional},
{APIPermission::kTtsEngine, "ttsEngine",
APIPermissionInfo::kFlagCannotBeOptional,
......
......@@ -81,6 +81,14 @@ ChromePermissionMessageProvider::~ChromePermissionMessageProvider() {
PermissionMessages ChromePermissionMessageProvider::GetPermissionMessages(
const PermissionSet* permissions,
Manifest::Type extension_type) const {
PermissionMessages messages;
if (permissions->HasEffectiveFullAccess()) {
messages.push_back(PermissionMessage(
PermissionMessage::kFullAccess,
l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_FULL_ACCESS)));
return messages;
}
// Some warnings are more generic and/or powerful and superseed other
// warnings. In that case, the first message suppresses the second one.
std::multimap<PermissionMessage::ID, PermissionMessage::ID> kSuppressList;
......@@ -94,6 +102,9 @@ PermissionMessages ChromePermissionMessageProvider::GetPermissionMessages(
// History already allows tabs access.
kSuppressList.insert(
{PermissionMessage::kBrowsingHistory, PermissionMessage::kTabs});
// History already allows access the list of most frequently visited sites.
kSuppressList.insert(
{PermissionMessage::kBrowsingHistory, PermissionMessage::kTopSites});
// A special hack: If kFileSystemWriteDirectory would be displayed, hide
// kFileSystemDirectory as the write directory message implies it.
// TODO(sammc): Remove this. See http://crbug.com/284849.
......@@ -102,20 +113,17 @@ PermissionMessages ChromePermissionMessageProvider::GetPermissionMessages(
// Full access already allows DeclarativeWebRequest.
kSuppressList.insert({PermissionMessage::kHostsAll,
PermissionMessage::kDeclarativeWebRequest});
// Full access implies reading the list of most frequently visited sites.
kSuppressList.insert(
{PermissionMessage::kHostsAll, PermissionMessage::kTopSites});
// Full access already covers tabs access.
kSuppressList.insert(
{PermissionMessage::kHostsAll, PermissionMessage::kTabs});
// Tabs already allows reading favicons.
kSuppressList.insert({PermissionMessage::kTabs, PermissionMessage::kFavicon});
PermissionMessages messages;
if (permissions->HasEffectiveFullAccess()) {
messages.push_back(PermissionMessage(
PermissionMessage::kFullAccess,
l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_FULL_ACCESS)));
return messages;
}
// Tabs already allows reading the list of most frequently visited sites.
kSuppressList.insert(
{PermissionMessage::kTabs, PermissionMessage::kTopSites});
PermissionMsgSet host_msgs =
GetHostPermissionMessages(permissions, extension_type);
......
......@@ -824,6 +824,7 @@ TEST(PermissionsTest, HiddenFileSystemPermissionMessages) {
TEST(PermissionsTest, SuppressedPermissionMessages) {
{
// Tabs warning suppresses favicon warning.
APIPermissionSet api_permissions;
api_permissions.insert(APIPermission::kTab);
URLPatternSet hosts;
......@@ -839,6 +840,7 @@ TEST(PermissionsTest, SuppressedPermissionMessages) {
EXPECT_EQ(PermissionMessage::kTabs, messages[0].id());
}
{
// History warning suppresses favicon warning.
APIPermissionSet api_permissions;
api_permissions.insert(APIPermission::kHistory);
URLPatternSet hosts;
......@@ -854,6 +856,7 @@ TEST(PermissionsTest, SuppressedPermissionMessages) {
EXPECT_EQ(PermissionMessage::kBrowsingHistory, messages[0].id());
}
{
// All sites warning suppresses tabs warning.
APIPermissionSet api_permissions;
URLPatternSet hosts;
hosts.AddPattern(URLPattern(URLPattern::SCHEME_CHROMEUI, "*://*/*"));
......@@ -867,6 +870,21 @@ TEST(PermissionsTest, SuppressedPermissionMessages) {
EXPECT_EQ(PermissionMessage::kHostsAll, messages[0].id());
}
{
// All sites warning suppresses topSites warning.
APIPermissionSet api_permissions;
URLPatternSet hosts;
hosts.AddPattern(URLPattern(URLPattern::SCHEME_CHROMEUI, "*://*/*"));
api_permissions.insert(APIPermission::kTopSites);
scoped_refptr<PermissionSet> permissions(new PermissionSet(
api_permissions, ManifestPermissionSet(), hosts, URLPatternSet()));
PermissionMessages messages =
PermissionMessageProvider::Get()->GetPermissionMessages(
permissions, Manifest::TYPE_EXTENSION);
EXPECT_EQ(1u, messages.size());
EXPECT_EQ(PermissionMessage::kHostsAll, messages[0].id());
}
{
// All sites warning suppresses declarativeWebRequest warning.
APIPermissionSet api_permissions;
URLPatternSet hosts;
hosts.AddPattern(URLPattern(URLPattern::SCHEME_CHROMEUI, "*://*/*"));
......@@ -880,6 +898,7 @@ TEST(PermissionsTest, SuppressedPermissionMessages) {
EXPECT_EQ(PermissionMessage::kHostsAll, messages[0].id());
}
{
// BrowsingHistory warning suppresses all history read/write warnings.
APIPermissionSet api_permissions;
api_permissions.insert(APIPermission::kHistory);
api_permissions.insert(APIPermission::kTab);
......@@ -896,6 +915,7 @@ TEST(PermissionsTest, SuppressedPermissionMessages) {
EXPECT_EQ(PermissionMessage::kBrowsingHistory, messages[0].id());
}
{
// Tabs warning suppresses all read-only history warnings.
APIPermissionSet api_permissions;
api_permissions.insert(APIPermission::kTab);
api_permissions.insert(APIPermission::kTopSites);
......
......@@ -88,6 +88,7 @@ class PermissionMessage {
kIdentityEmail,
kExperienceSamplingPrivate,
kCopresence,
kTopSites,
kEnumBoundary,
};
COMPILE_ASSERT(PermissionMessage::kNone > PermissionMessage::kUnknown,
......
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