Chromium Code Reviews| Index: chrome/common/extensions/permissions/permissions_data_unittest.cc |
| diff --git a/chrome/common/extensions/permissions/permissions_data_unittest.cc b/chrome/common/extensions/permissions/permissions_data_unittest.cc |
| index 3f926790cc657ddc1eebfe0ed953ba9f787409e1..1c1bef26e46c0321008331ad6777aef366545e5e 100644 |
| --- a/chrome/common/extensions/permissions/permissions_data_unittest.cc |
| +++ b/chrome/common/extensions/permissions/permissions_data_unittest.cc |
| @@ -15,6 +15,7 @@ |
| #include "chrome/common/extensions/extension_test_util.h" |
| #include "components/crx_file/id_util.h" |
| #include "content/public/common/socket_permission_request.h" |
| +#include "extensions/common/constants.h" |
| #include "extensions/common/error_utils.h" |
| #include "extensions/common/extension.h" |
| #include "extensions/common/extension_builder.h" |
| @@ -77,7 +78,8 @@ scoped_refptr<const Extension> GetExtensionWithHostPermission( |
| // Checks that urls are properly restricted for the given extension. |
| void CheckRestrictedUrls(const Extension* extension, |
| - bool block_chrome_urls) { |
| + bool block_chrome_urls, |
| + bool block_google_urls) { |
| // We log the name so we know _which_ extension failed here. |
| const std::string& name = extension->name(); |
| const GURL chrome_settings_url("chrome://settings/"); |
| @@ -108,11 +110,16 @@ void CheckRestrictedUrls(const Extension* extension, |
| else |
| EXPECT_TRUE(error.empty()) << name; |
| - // Google should never be a restricted url. |
| + // Google shouldn't be restricted unless a runtime host restriction is applied |
| + // by policy. |
| error.clear(); |
| - EXPECT_FALSE(PermissionsData::IsRestrictedUrl( |
| - google_url, extension, &error)) << name; |
| - EXPECT_TRUE(error.empty()) << name; |
| + EXPECT_EQ(block_google_urls, |
| + PermissionsData::IsRestrictedUrl(google_url, extension, &error)) |
| + << name; |
| + if (block_google_urls) |
| + EXPECT_EQ(extension_misc::kPolicyBlockedScripting, error) << name; |
| + else |
| + EXPECT_TRUE(error.empty()) << name; |
| // We should always be able to access our own extension pages. |
| error.clear(); |
| @@ -224,11 +231,13 @@ TEST(PermissionsDataTest, EffectiveHostPermissions) { |
| extension->permissions_data()->UpdateTabSpecificPermissions( |
| 1, PermissionSet(APIPermissionSet(), ManifestPermissionSet(), new_hosts, |
| URLPatternSet())); |
| - EXPECT_TRUE(extension->permissions_data()->GetEffectiveHostPermissions(). |
| - MatchesURL(tab_url)); |
| + EXPECT_TRUE( |
|
nrpeter
2017/04/05 23:13:26
I ran git cl format, and this happened....
Do yo
Devlin
2017/04/07 00:40:27
nah, git cl format changes are fine, as long as th
nrpeter
2017/04/12 23:35:45
Done.
|
| + extension->permissions_data()->GetEffectiveHostPermissions().MatchesURL( |
| + tab_url)); |
| extension->permissions_data()->ClearTabSpecificPermissions(1); |
| - EXPECT_FALSE(extension->permissions_data()->GetEffectiveHostPermissions(). |
| - MatchesURL(tab_url)); |
| + EXPECT_FALSE( |
| + extension->permissions_data()->GetEffectiveHostPermissions().MatchesURL( |
| + tab_url)); |
| } |
| TEST(PermissionsDataTest, SocketPermissions) { |
| @@ -236,8 +245,8 @@ TEST(PermissionsDataTest, SocketPermissions) { |
| std::string error; |
| extension = LoadManifest("socket_permissions", "empty.json"); |
| - EXPECT_FALSE(CheckSocketPermission(extension, |
| - SocketPermissionRequest::TCP_CONNECT, "www.example.com", 80)); |
| + EXPECT_FALSE(CheckSocketPermission( |
| + extension, SocketPermissionRequest::TCP_CONNECT, "www.example.com", 80)); |
|
nrpeter
2017/04/05 23:13:27
Ditto
nrpeter
2017/04/12 23:35:45
Done.
|
| extension = LoadManifestUnchecked("socket_permissions", |
| "socket1.json", |
| @@ -251,19 +260,18 @@ TEST(PermissionsDataTest, SocketPermissions) { |
| EXPECT_EQ(expected_error_msg_header, error); |
| extension = LoadManifest("socket_permissions", "socket2.json"); |
| - EXPECT_TRUE(CheckSocketPermission(extension, |
| - SocketPermissionRequest::TCP_CONNECT, "www.example.com", 80)); |
| + EXPECT_TRUE(CheckSocketPermission( |
| + extension, SocketPermissionRequest::TCP_CONNECT, "www.example.com", 80)); |
| EXPECT_FALSE(CheckSocketPermission( |
| - extension, SocketPermissionRequest::UDP_BIND, "", 80)); |
| + extension, SocketPermissionRequest::UDP_BIND, "", 80)); |
| EXPECT_TRUE(CheckSocketPermission( |
| - extension, SocketPermissionRequest::UDP_BIND, "", 8888)); |
| + extension, SocketPermissionRequest::UDP_BIND, "", 8888)); |
| EXPECT_FALSE(CheckSocketPermission( |
| - extension, SocketPermissionRequest::UDP_SEND_TO, "example.com", 1900)); |
| - EXPECT_TRUE(CheckSocketPermission( |
| - extension, |
| - SocketPermissionRequest::UDP_SEND_TO, |
| - "239.255.255.250", 1900)); |
| + extension, SocketPermissionRequest::UDP_SEND_TO, "example.com", 1900)); |
| + EXPECT_TRUE(CheckSocketPermission(extension, |
| + SocketPermissionRequest::UDP_SEND_TO, |
| + "239.255.255.250", 1900)); |
|
nrpeter
2017/04/05 23:13:27
Ditto
nrpeter
2017/04/12 23:35:45
Done.
|
| } |
| TEST(PermissionsDataTest, IsRestrictedUrl) { |
| @@ -271,20 +279,41 @@ TEST(PermissionsDataTest, IsRestrictedUrl) { |
| GetExtensionWithHostPermission("normal_extension", |
| kAllHostsPermission, |
| Manifest::INTERNAL); |
| - // Chrome urls should be blocked for normal extensions. |
| - CheckRestrictedUrls(extension.get(), true); |
| + // Chrome urls should be blocked for normal extensions, but not Google. |
| + CheckRestrictedUrls(extension.get(), true, false); |
| + |
| + scoped_refptr<const Extension> policy_extension = |
|
Devlin
2017/04/07 00:40:27
Let's make new tests for this. Unit tests are che
nrpeter
2017/04/12 23:35:44
Moved out of IsRestrictedUrl to this is no longer
|
| + GetExtensionWithHostPermission("policy_host_restriction_extension", |
| + kAllHostsPermission, Manifest::INTERNAL); |
| + URLPatternSet blocked; |
| + URLPatternSet allowed; |
| + blocked.AddPattern( |
| + URLPattern(URLPattern::SCHEME_ALL, "https://*.google.com/*")); |
| + policy_extension->permissions_data()->SetPolicyHostRestrictions(blocked, |
| + allowed); |
| + // Chrome urls should be blocked & Google urls should be blocked by policy. |
| + CheckRestrictedUrls(policy_extension.get(), true, true); |
| scoped_refptr<const Extension> component = |
| GetExtensionWithHostPermission("component", |
| kAllHostsPermission, |
| Manifest::COMPONENT); |
| // Chrome urls should be accessible by component extensions. |
| - CheckRestrictedUrls(component.get(), false); |
| + CheckRestrictedUrls(component.get(), false, false); |
| + |
| + scoped_refptr<const Extension> policy_component = |
| + GetExtensionWithHostPermission("component", kAllHostsPermission, |
| + Manifest::COMPONENT); |
| + // Chrome urls should be accessible by component extensions & Google urls |
| + // should be blocked by policy. |
| + policy_component->permissions_data()->SetPolicyHostRestrictions(blocked, |
| + allowed); |
| + CheckRestrictedUrls(policy_component.get(), false, true); |
| base::CommandLine::ForCurrentProcess()->AppendSwitch( |
| switches::kExtensionsOnChromeURLs); |
| // Enabling the switch should allow all extensions to access chrome urls. |
| - CheckRestrictedUrls(extension.get(), false); |
| + CheckRestrictedUrls(extension.get(), false, false); |
| } |
| TEST(PermissionsDataTest, GetPermissionMessages_ManyAPIPermissions) { |
| @@ -381,6 +410,7 @@ class ExtensionScriptAndCaptureVisibleTest : public testing::Test { |
| : http_url("http://www.google.com"), |
| http_url_with_path("http://www.google.com/index.html"), |
| https_url("https://www.google.com"), |
| + https_url_diff_subdomain("https://example.google.com"), |
| file_url("file:///foo/bar"), |
| favicon_url("chrome://favicon/http://www.google.com"), |
| extension_url("chrome-extension://" + |
| @@ -391,6 +421,7 @@ class ExtensionScriptAndCaptureVisibleTest : public testing::Test { |
| urls_.insert(http_url); |
| urls_.insert(http_url_with_path); |
| urls_.insert(https_url); |
| + urls_.insert(https_url_diff_subdomain); |
| urls_.insert(file_url); |
| urls_.insert(favicon_url); |
| urls_.insert(extension_url); |
| @@ -476,6 +507,7 @@ class ExtensionScriptAndCaptureVisibleTest : public testing::Test { |
| const GURL http_url; |
| const GURL http_url_with_path; |
| const GURL https_url; |
| + const GURL https_url_diff_subdomain; |
| const GURL file_url; |
| // We should allow host permission but not scripting permission for favicon |
| @@ -592,8 +624,8 @@ TEST_F(ExtensionScriptAndCaptureVisibleTest, PermissionsWithChromeURLsEnabled) { |
| scoped_refptr<Extension> extension; |
| // Test <all_urls> for regular extensions. |
| - extension = LoadManifestStrict("script_and_capture", |
| - "extension_regular_all.json"); |
| + extension = |
| + LoadManifestStrict("script_and_capture", "extension_regular_all.json"); |
|
nrpeter
2017/04/05 23:13:27
Ditto
nrpeter
2017/04/12 23:35:44
Done.
|
| EXPECT_TRUE(Allowed(extension.get(), http_url)); |
| EXPECT_TRUE(Allowed(extension.get(), https_url)); |
| EXPECT_TRUE(CaptureOnly(extension.get(), file_url)); |
| @@ -616,8 +648,8 @@ TEST_F(ExtensionScriptAndCaptureVisibleTest, PermissionsWithChromeURLsEnabled) { |
| EXPECT_TRUE(permissions_data->HasHostPermission(favicon_url)); |
| // Test * for scheme, which implies just the http/https schemes. |
| - extension = LoadManifestStrict("script_and_capture", |
| - "extension_wildcard.json"); |
| + extension = |
| + LoadManifestStrict("script_and_capture", "extension_wildcard.json"); |
| EXPECT_TRUE(ScriptOnly(extension.get(), http_url)); |
| EXPECT_TRUE(ScriptOnly(extension.get(), https_url)); |
| EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
| @@ -645,21 +677,21 @@ TEST_F(ExtensionScriptAndCaptureVisibleTest, PermissionsWithChromeURLsEnabled) { |
| // Having chrome://favicon/* should not give you chrome://* |
| extension = LoadManifestStrict("script_and_capture", |
| - "extension_chrome_favicon_wildcard.json"); |
| + "extension_chrome_favicon_wildcard.json"); |
| EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
| EXPECT_TRUE(ScriptOnly(extension.get(), favicon_url)); |
| EXPECT_TRUE(Blocked(extension.get(), about_url)); |
| EXPECT_TRUE(extension->permissions_data()->HasHostPermission(favicon_url)); |
| // Having http://favicon should not give you chrome://favicon |
| - extension = LoadManifestStrict("script_and_capture", |
| - "extension_http_favicon.json"); |
| + extension = |
| + LoadManifestStrict("script_and_capture", "extension_http_favicon.json"); |
| EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
| EXPECT_TRUE(Blocked(extension.get(), favicon_url)); |
| // Component extensions with <all_urls> should get everything. |
| extension = LoadManifest("script_and_capture", "extension_component_all.json", |
| - Manifest::COMPONENT, Extension::NO_FLAGS); |
| + Manifest::COMPONENT, Extension::NO_FLAGS); |
| EXPECT_TRUE(Allowed(extension.get(), http_url)); |
| EXPECT_TRUE(Allowed(extension.get(), https_url)); |
| EXPECT_TRUE(Allowed(extension.get(), settings_url)); |
| @@ -668,9 +700,9 @@ TEST_F(ExtensionScriptAndCaptureVisibleTest, PermissionsWithChromeURLsEnabled) { |
| EXPECT_TRUE(extension->permissions_data()->HasHostPermission(favicon_url)); |
| // Component extensions should only get access to what they ask for. |
| - extension = LoadManifest("script_and_capture", |
| - "extension_component_google.json", Manifest::COMPONENT, |
| - Extension::NO_FLAGS); |
| + extension = |
| + LoadManifest("script_and_capture", "extension_component_google.json", |
| + Manifest::COMPONENT, Extension::NO_FLAGS); |
| EXPECT_TRUE(ScriptOnly(extension.get(), http_url)); |
| EXPECT_TRUE(Blocked(extension.get(), https_url)); |
| EXPECT_TRUE(Blocked(extension.get(), file_url)); |
| @@ -769,4 +801,178 @@ TEST_F(ExtensionScriptAndCaptureVisibleTest, TabSpecific) { |
| EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 2)); |
| } |
| +TEST_F(ExtensionScriptAndCaptureVisibleTest, PolicyHostRestrictionsSwap) { |
| + // Makes sure when an extension gets an individual policy for host |
| + // restrictions it overrides the default policy. Also tests transitioning back |
| + // to the default policy when an individual policy is removed. |
| + URLPatternSet default_blocked; |
| + URLPatternSet default_allowed; |
| + default_blocked.AddPattern( |
| + URLPattern(URLPattern::SCHEME_ALL, "https://*.google.com/*")); |
| + default_allowed.AddPattern( |
| + URLPattern(URLPattern::SCHEME_ALL, "https://example.google.com/*")); |
| + |
| + // Test <all_urls> for regular extensions. |
| + scoped_refptr<Extension> extension = |
| + LoadManifestStrict("script_and_capture", "extension_regular_all.json"); |
| + extension->permissions_data()->SetDefaultPolicyHostRestrictions( |
| + default_blocked, default_allowed); |
| + |
| + // Default policy example.google.com OK, any other google subdomain blocked. |
| + EXPECT_TRUE(CaptureOnly(extension.get(), https_url)); |
|
Devlin
2017/04/07 00:40:26
These variables (https_url, https_url_diff_subdoma
nrpeter
2017/04/12 23:35:45
Done.
|
| + EXPECT_TRUE(Allowed(extension.get(), https_url_diff_subdomain)); |
| + |
| + URLPatternSet blocked; |
| + blocked.AddPattern( |
| + URLPattern(URLPattern::SCHEME_ALL, "https://example.google.com/*")); |
| + URLPatternSet allowed; |
| + extension->permissions_data()->SetPolicyHostRestrictions(blocked, allowed); |
| + // Individual poilcy example.google.com BLOCKED. |
|
Devlin
2017/04/07 00:40:27
typo: policy
nrpeter
2017/04/12 23:35:45
Done.
nrpeter
2017/04/12 23:35:45
Done.
|
| + EXPECT_TRUE(Allowed(extension.get(), https_url)); |
| + EXPECT_TRUE(CaptureOnly(extension.get(), https_url_diff_subdomain)); |
| + |
| + // Individual policy example.google.com OK, other google subdomains blocked. |
| + // Tests that URL is allowed if same URL in blocked and allowed. |
|
Devlin
2017/04/07 00:40:27
Use proper grammar in comments, e.g. "Tests that a
nrpeter
2017/04/12 23:35:45
Done.
|
| + blocked.AddPattern( |
| + URLPattern(URLPattern::SCHEME_ALL, "https://*.google.com/*")); |
| + allowed.AddPattern( |
| + URLPattern(URLPattern::SCHEME_ALL, "https://example.google.com/*")); |
| + extension->permissions_data()->SetPolicyHostRestrictions(blocked, allowed); |
| + EXPECT_TRUE(CaptureOnly(extension.get(), https_url)); |
| + EXPECT_TRUE(Allowed(extension.get(), https_url_diff_subdomain)); |
| + |
| + // Clear Individual plan. |
| + blocked.ClearPatterns(); |
| + allowed.ClearPatterns(); |
| + extension->permissions_data()->SetPolicyHostRestrictions(blocked, allowed); |
| + EXPECT_TRUE(Allowed(extension.get(), https_url)); |
| + EXPECT_TRUE(Allowed(extension.get(), https_url_diff_subdomain)); |
| + |
| + // Flip back to using default policy for this extension. |
| + extension->permissions_data()->SetUsesDefaultHostRestrictions(); |
| + |
| + // Default policy example.google.com OK, any other google subdomain blocked. |
| + EXPECT_TRUE(CaptureOnly(extension.get(), https_url)); |
| + EXPECT_TRUE(Allowed(extension.get(), https_url_diff_subdomain)); |
| +} |
| + |
| +TEST_F(ExtensionScriptAndCaptureVisibleTest, PolicyHostRestrictions) { |
| + URLPatternSet default_blocked; |
| + URLPatternSet default_allowed; |
| + default_blocked.AddPattern( |
| + URLPattern(URLPattern::SCHEME_ALL, "https://*.google.com/*")); |
| + default_allowed.AddPattern( |
| + URLPattern(URLPattern::SCHEME_ALL, "https://example.google.com/*")); |
| + |
| + // Test <all_urls> for regular extensions. |
| + scoped_refptr<Extension> extension = |
| + LoadManifestStrict("script_and_capture", "extension_regular_all.json"); |
| + extension->permissions_data()->SetDefaultPolicyHostRestrictions( |
| + default_blocked, default_allowed); |
| + |
| + EXPECT_TRUE(Allowed(extension.get(), http_url)); |
| + EXPECT_TRUE(CaptureOnly(extension.get(), https_url)); |
| + EXPECT_TRUE(Allowed(extension.get(), https_url_diff_subdomain)); |
| + EXPECT_TRUE(CaptureOnly(extension.get(), file_url)); |
| + EXPECT_TRUE(CaptureOnly(extension.get(), settings_url)); |
| + EXPECT_TRUE(CaptureOnly(extension.get(), favicon_url)); |
| + EXPECT_TRUE(CaptureOnly(extension.get(), about_url)); |
| + EXPECT_TRUE(CaptureOnly(extension.get(), extension_url)); |
| + |
| + // Test access to iframed content. |
| + GURL within_extension_url = extension->GetResourceURL("page.html"); |
| + EXPECT_TRUE(AllowedScript(extension.get(), http_url)); |
| + EXPECT_TRUE(AllowedScript(extension.get(), http_url_with_path)); |
| + EXPECT_TRUE(AllowedScript(extension.get(), https_url_diff_subdomain)); |
| + EXPECT_TRUE(BlockedScript(extension.get(), https_url)); |
| + EXPECT_TRUE(BlockedScript(extension.get(), within_extension_url)); |
| + EXPECT_TRUE(BlockedScript(extension.get(), extension_url)); |
| + |
| + EXPECT_FALSE(extension->permissions_data()->HasHostPermission(settings_url)); |
| + EXPECT_FALSE(extension->permissions_data()->HasHostPermission(about_url)); |
| + EXPECT_TRUE(extension->permissions_data()->HasHostPermission(favicon_url)); |
| + |
| + // Test * for scheme, which implies just the http/https schemes. |
| + extension = |
| + LoadManifestStrict("script_and_capture", "extension_wildcard.json"); |
| + extension->permissions_data()->SetDefaultPolicyHostRestrictions( |
| + default_blocked, default_allowed); |
| + EXPECT_TRUE(ScriptOnly(extension.get(), http_url)); |
| + EXPECT_TRUE(ScriptOnly(extension.get(), https_url_diff_subdomain)); |
| + EXPECT_TRUE(Blocked(extension.get(), https_url)); |
| + EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
| + EXPECT_TRUE(Blocked(extension.get(), about_url)); |
| + EXPECT_TRUE(Blocked(extension.get(), file_url)); |
| + EXPECT_TRUE(Blocked(extension.get(), favicon_url)); |
| + extension = |
| + LoadManifest("script_and_capture", "extension_wildcard_settings.json"); |
| + extension->permissions_data()->SetDefaultPolicyHostRestrictions( |
| + default_blocked, default_allowed); |
| + EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
| + |
| + // Having chrome://*/ should not work for regular extensions. Note that |
| + // for favicon access, we require the explicit pattern chrome://favicon/*. |
| + std::string error; |
| + extension = LoadManifestUnchecked( |
| + "script_and_capture", "extension_wildcard_chrome.json", |
| + Manifest::INTERNAL, Extension::NO_FLAGS, &error); |
| + extension->permissions_data()->SetDefaultPolicyHostRestrictions( |
| + default_blocked, default_allowed); |
| + std::vector<InstallWarning> warnings = extension->install_warnings(); |
| + EXPECT_FALSE(warnings.empty()); |
| + EXPECT_EQ(ErrorUtils::FormatErrorMessage( |
| + manifest_errors::kInvalidPermissionScheme, "chrome://*/"), |
| + warnings[0].message); |
| + EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
| + EXPECT_TRUE(Blocked(extension.get(), favicon_url)); |
| + EXPECT_TRUE(Blocked(extension.get(), about_url)); |
| + |
| + // Having chrome://favicon/* should not give you chrome://* |
|
Devlin
2017/04/07 00:40:27
A lot of this test seems duplicative. Can we eith
nrpeter
2017/04/12 23:35:45
Good point, all the tests after the component test
|
| + extension = LoadManifestStrict("script_and_capture", |
| + "extension_chrome_favicon_wildcard.json"); |
| + extension->permissions_data()->SetDefaultPolicyHostRestrictions( |
| + default_blocked, default_allowed); |
| + EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
| + EXPECT_TRUE(Blocked(extension.get(), favicon_url)); |
| + EXPECT_TRUE(Blocked(extension.get(), about_url)); |
| + EXPECT_TRUE(extension->permissions_data()->HasHostPermission(favicon_url)); |
| + |
| + // Having http://favicon should not give you chrome://favicon |
| + extension = |
| + LoadManifestStrict("script_and_capture", "extension_http_favicon.json"); |
| + extension->permissions_data()->SetDefaultPolicyHostRestrictions( |
| + default_blocked, default_allowed); |
| + EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
| + EXPECT_TRUE(Blocked(extension.get(), favicon_url)); |
| + |
| + // Component extensions with <all_urls> should get everything. |
| + extension = LoadManifest("script_and_capture", "extension_component_all.json", |
| + Manifest::COMPONENT, Extension::NO_FLAGS); |
| + extension->permissions_data()->SetDefaultPolicyHostRestrictions( |
| + default_blocked, default_allowed); |
| + EXPECT_TRUE(Allowed(extension.get(), http_url)); |
| + EXPECT_TRUE(CaptureOnly(extension.get(), https_url)); |
| + EXPECT_TRUE(Allowed(extension.get(), https_url_diff_subdomain)); |
| + EXPECT_TRUE(Allowed(extension.get(), settings_url)); |
| + EXPECT_TRUE(Allowed(extension.get(), about_url)); |
| + EXPECT_TRUE(Allowed(extension.get(), favicon_url)); |
| + EXPECT_TRUE(extension->permissions_data()->HasHostPermission(favicon_url)); |
| + |
| + // Component extensions should only get access to what they ask for. |
| + extension = |
| + LoadManifest("script_and_capture", "extension_component_google.json", |
| + Manifest::COMPONENT, Extension::NO_FLAGS); |
| + extension->permissions_data()->SetDefaultPolicyHostRestrictions( |
| + default_blocked, default_allowed); |
| + EXPECT_TRUE(ScriptOnly(extension.get(), http_url)); |
| + EXPECT_TRUE(Blocked(extension.get(), https_url)); |
| + EXPECT_TRUE(Blocked(extension.get(), https_url_diff_subdomain)); |
| + EXPECT_TRUE(Blocked(extension.get(), file_url)); |
| + EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
| + EXPECT_TRUE(Blocked(extension.get(), favicon_url)); |
| + EXPECT_TRUE(Blocked(extension.get(), about_url)); |
| + EXPECT_TRUE(Blocked(extension.get(), extension_url)); |
| + EXPECT_FALSE(extension->permissions_data()->HasHostPermission(settings_url)); |
| +} |
| + |
| } // namespace extensions |