Commit bd66c5d1 authored by Kelvin Jiang's avatar Kelvin Jiang Committed by Commit Bot

[Extensions] Custom manifest keys for invalid host scheme warning

Currently, the install warning message for a host with an invalid scheme
explicitly mentions the "permissions" key even if the host is specified
inside optional_permissions or host_permissions. This CL un-hardcodes
warning's message so it can specify other manifest keys.

Bug: 1136993
Change-Id: I52eb1e00fd6d357742018c2f25f256237cd25483
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2473584
Commit-Queue: Kelvin Jiang <kelvinjiang@chromium.org>
Reviewed-by: default avatarDevlin <rdevlin.cronin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#817744}
parent e9ffc287
...@@ -24,10 +24,11 @@ namespace errors = manifest_errors; ...@@ -24,10 +24,11 @@ namespace errors = manifest_errors;
typedef ChromeManifestTest ChromePermissionManifestTest; typedef ChromeManifestTest ChromePermissionManifestTest;
TEST_F(ChromePermissionManifestTest, ChromeURLPermissionInvalid) { TEST_F(ChromePermissionManifestTest, ChromeURLPermissionInvalid) {
LoadAndExpectWarning("permission_chrome_url_invalid.json", LoadAndExpectWarning(
ErrorUtils::FormatErrorMessage( "permission_chrome_url_invalid.json",
errors::kInvalidPermissionScheme, ErrorUtils::FormatErrorMessage(errors::kInvalidPermissionScheme,
chrome::kChromeUINewTabURL)); manifest_keys::kPermissions,
chrome::kChromeUINewTabURL));
} }
TEST_F(ChromePermissionManifestTest, ChromeUntrustedURLPermissionInvalid) { TEST_F(ChromePermissionManifestTest, ChromeUntrustedURLPermissionInvalid) {
...@@ -71,7 +72,7 @@ TEST_F(ChromePermissionManifestTest, ...@@ -71,7 +72,7 @@ TEST_F(ChromePermissionManifestTest,
LoadAndExpectWarning("permission_chrome_resources_url.json", LoadAndExpectWarning("permission_chrome_resources_url.json",
ErrorUtils::FormatErrorMessage( ErrorUtils::FormatErrorMessage(
errors::kInvalidPermissionScheme, errors::kInvalidPermissionScheme,
"chrome://resources/")); manifest_keys::kPermissions, "chrome://resources/"));
std::string error; std::string error;
LoadExtension(ManifestData("permission_chrome_resources_url.json"), LoadExtension(ManifestData("permission_chrome_resources_url.json"),
&error, &error,
......
...@@ -112,6 +112,16 @@ TEST_F(PermissionsParserTest, OptionalHostPermissionsAllURLs) { ...@@ -112,6 +112,16 @@ TEST_F(PermissionsParserTest, OptionalHostPermissionsAllURLs) {
testing::UnorderedElementsAre("*://*/*")); testing::UnorderedElementsAre("*://*/*"));
} }
TEST_F(PermissionsParserTest, OptionalHostPermissionsInvalidScheme) {
std::vector<std::string> expected_warnings;
expected_warnings.push_back(ErrorUtils::FormatErrorMessage(
manifest_errors::kInvalidPermissionScheme,
manifest_keys::kOptionalPermissions, "chrome://extensions/"));
scoped_refptr<Extension> extension(LoadAndExpectWarnings(
"optional_permissions_invalid_scheme.json", expected_warnings));
}
TEST_F(PermissionsParserTest, HostPermissionsKey) { TEST_F(PermissionsParserTest, HostPermissionsKey) {
std::vector<std::string> expected_warnings; std::vector<std::string> expected_warnings;
expected_warnings.push_back(ErrorUtils::FormatErrorMessage( expected_warnings.push_back(ErrorUtils::FormatErrorMessage(
...@@ -142,6 +152,18 @@ TEST_F(PermissionsParserTest, HostPermissionsKeyInvalidHosts) { ...@@ -142,6 +152,18 @@ TEST_F(PermissionsParserTest, HostPermissionsKeyInvalidHosts) {
"host_permissions_key_invalid_hosts.json", expected_warnings)); "host_permissions_key_invalid_hosts.json", expected_warnings));
} }
TEST_F(PermissionsParserTest, HostPermissionsKeyInvalidScheme) {
std::vector<std::string> expected_warnings;
expected_warnings.push_back(ErrorUtils::FormatErrorMessage(
manifest_errors::kInvalidPermissionScheme,
manifest_keys::kHostPermissions, "chrome://extensions/"));
expected_warnings.push_back(kManifestVersionWarning);
scoped_refptr<Extension> extension(LoadAndExpectWarnings(
"host_permissions_key_invalid_scheme.json", expected_warnings));
}
// Tests that listing a permissions as optional when that permission cannot be // Tests that listing a permissions as optional when that permission cannot be
// optional produces a warning and doesn't add the permission. // optional produces a warning and doesn't add the permission.
TEST_F(PermissionsParserTest, UnsupportedOptionalPermissionWarning) { TEST_F(PermissionsParserTest, UnsupportedOptionalPermissionWarning) {
...@@ -188,8 +210,13 @@ TEST_F(PermissionsParserTest, ChromeFavicon) { ...@@ -188,8 +210,13 @@ TEST_F(PermissionsParserTest, ChromeFavicon) {
}; };
auto has_install_warning = [](const Extension& extension) { auto has_install_warning = [](const Extension& extension) {
const char* permissions_key = extension.manifest_version() > 2
? manifest_keys::kHostPermissions
: manifest_keys::kPermissions;
InstallWarning expected_warning(ErrorUtils::FormatErrorMessage( InstallWarning expected_warning(ErrorUtils::FormatErrorMessage(
manifest_errors::kInvalidPermissionScheme, kFaviconPattern)); manifest_errors::kInvalidPermissionScheme, permissions_key,
kFaviconPattern));
return base::Contains(extension.install_warnings(), expected_warning); return base::Contains(extension.install_warnings(), expected_warning);
}; };
......
...@@ -574,7 +574,7 @@ TEST_F(ExtensionScriptAndCaptureVisibleTest, Permissions) { ...@@ -574,7 +574,7 @@ TEST_F(ExtensionScriptAndCaptureVisibleTest, Permissions) {
EXPECT_FALSE(warnings.empty()); EXPECT_FALSE(warnings.empty());
EXPECT_EQ(ErrorUtils::FormatErrorMessage( EXPECT_EQ(ErrorUtils::FormatErrorMessage(
manifest_errors::kInvalidPermissionScheme, manifest_errors::kInvalidPermissionScheme,
"chrome://*/"), manifest_keys::kPermissions, "chrome://*/"),
warnings[0].message); warnings[0].message);
EXPECT_EQ(DISALLOWED, GetExtensionAccess(extension.get(), settings_url)); EXPECT_EQ(DISALLOWED, GetExtensionAccess(extension.get(), settings_url));
EXPECT_EQ(DISALLOWED, EXPECT_EQ(DISALLOWED,
......
{
"name": "Host permissions with invalid scheme",
"version": "0.1",
"manifest_version": 3,
"description": "Extension with a pattern with an invalid scheme in host_permissions",
"host_permissions": [
"chrome://extensions/"
]
}
{
"name": "Optional host permissions with invalid scheme",
"version": "0.1",
"manifest_version": 2,
"description": "Extension with a pattern with an invalid scheme in optional_permissions",
"optional_permissions": [
"chrome://extensions/"
]
}
...@@ -611,8 +611,7 @@ const char kInvalidPermission[] = ...@@ -611,8 +611,7 @@ const char kInvalidPermission[] =
"Invalid value for 'permissions[*]'."; "Invalid value for 'permissions[*]'.";
const char kInvalidPermissions[] = const char kInvalidPermissions[] =
"Invalid value for 'permissions'."; "Invalid value for 'permissions'.";
const char kInvalidPermissionScheme[] = const char kInvalidPermissionScheme[] = "Invalid scheme for '*[*]'.";
"Invalid scheme for 'permissions[*]'.";
const char kInvalidReplacementAndroidApp[] = const char kInvalidReplacementAndroidApp[] =
"Invalid value for 'replacement_android_app'"; "Invalid value for 'replacement_android_app'";
const char kInvalidReplacementWebApp[] = const char kInvalidReplacementWebApp[] =
......
...@@ -169,7 +169,7 @@ void ParseHostPermissions(Extension* extension, ...@@ -169,7 +169,7 @@ void ParseHostPermissions(Extension* extension,
// below). // below).
extension->AddInstallWarning(InstallWarning( extension->AddInstallWarning(InstallWarning(
ErrorUtils::FormatErrorMessage(errors::kInvalidPermissionScheme, ErrorUtils::FormatErrorMessage(errors::kInvalidPermissionScheme,
permission_str), key, permission_str),
key, permission_str)); key, permission_str));
continue; continue;
} }
......
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