Index: chrome/browser/extensions/permissions_updater_unittest.cc |
diff --git a/chrome/browser/extensions/permissions_updater_unittest.cc b/chrome/browser/extensions/permissions_updater_unittest.cc |
index 67e31dfbeeb6e1a477644933fc19d72c2a125f43..fd1460635f16d99bd6b6c77ef11359578db642b1 100644 |
--- a/chrome/browser/extensions/permissions_updater_unittest.cc |
+++ b/chrome/browser/extensions/permissions_updater_unittest.cc |
@@ -271,6 +271,15 @@ TEST_F(PermissionsUpdaterTest, RevokingPermissions) { |
APIPermissionSet(), ManifestPermissionSet(), set, URLPatternSet()); |
}; |
+ auto can_access_page = |
+ [](scoped_refptr<const extensions::Extension> extension, |
+ const GURL& document_url) -> bool { |
+ PermissionsData::AccessType access = |
+ extension.get()->permissions_data()->GetPageAccess( |
+ extension.get(), document_url, -1, nullptr); |
+ return access == PermissionsData::ACCESS_ALLOWED; |
+ }; |
+ |
{ |
// Test revoking optional permissions. |
ListBuilder optional_permissions; |
@@ -346,6 +355,7 @@ TEST_F(PermissionsUpdaterTest, RevokingPermissions) { |
// By default, all-hosts was withheld, so the extension shouldn't have |
// access to any site (like foo.com). |
const GURL kOrigin("http://foo.com"); |
+ |
EXPECT_FALSE(extension->permissions_data() |
->active_permissions() |
.HasExplicitAccessToOrigin(kOrigin)); |
@@ -381,6 +391,103 @@ TEST_F(PermissionsUpdaterTest, RevokingPermissions) { |
.HasExplicitAccessToOrigin(kOrigin)); |
EXPECT_TRUE(updater.GetRevokablePermissions(extension.get())->IsEmpty()); |
} |
+ |
+ { |
+ // Make sure policy restriction updates update permission data. |
+ URLPatternSet default_policy_blocked_hosts; |
+ URLPatternSet default_policy_allowed_hosts; |
+ URLPatternSet policy_blocked_hosts; |
+ URLPatternSet policy_allowed_hosts; |
+ ListBuilder optional_permissions; |
+ ListBuilder required_permissions; |
+ required_permissions.Append("tabs").Append("http://*/*"); |
+ scoped_refptr<const Extension> extension = |
+ CreateExtensionWithOptionalPermissions(optional_permissions.Build(), |
+ required_permissions.Build(), |
+ "ExtensionSettings"); |
+ AddPattern(&default_policy_blocked_hosts, "http://*.google.com/*"); |
+ PermissionsUpdater updater(profile()); |
+ updater.InitializePermissions(extension.get()); |
+ extension->permissions_data()->SetDefaultPolicyHostRestrictions( |
+ default_policy_blocked_hosts, default_policy_allowed_hosts); |
+ |
+ // By default, all subdomains of google.com should be blocked. |
+ const GURL kOrigin("http://foo.com"); |
+ const GURL kGoogle("http://www.google.com"); |
+ const GURL kExampleGoogle("http://example.google.com"); |
+ EXPECT_TRUE( |
+ extension->permissions_data()->UsesDefaultPolicyHostRestrictions()); |
+ EXPECT_TRUE(can_access_page(extension, kOrigin)); |
+ EXPECT_FALSE(can_access_page(extension, kGoogle)); |
+ EXPECT_FALSE(can_access_page(extension, kExampleGoogle)); |
+ |
+ AddPattern(&default_policy_allowed_hosts, "http://example.google.com/*"); |
+ // Give the extension access to example.google.com. Now the |
+ // example.google.com should not be a runtime blocked host. |
+ updater.SetDefaultPolicyHostRestrictions(default_policy_blocked_hosts, |
+ default_policy_allowed_hosts); |
+ |
+ EXPECT_TRUE( |
+ extension->permissions_data()->UsesDefaultPolicyHostRestrictions()); |
+ EXPECT_TRUE(can_access_page(extension, kOrigin)); |
+ EXPECT_FALSE(can_access_page(extension, kGoogle)); |
+ EXPECT_TRUE(can_access_page(extension, kExampleGoogle)); |
+ |
+ // Revoke extension access to foo.com. Now, foo.com should be a runtime |
+ // blocked host. |
+ AddPattern(&default_policy_blocked_hosts, "*://*.foo.com/"); |
+ updater.SetDefaultPolicyHostRestrictions(default_policy_blocked_hosts, |
+ default_policy_allowed_hosts); |
+ EXPECT_TRUE( |
+ extension->permissions_data()->UsesDefaultPolicyHostRestrictions()); |
+ EXPECT_FALSE(can_access_page(extension, kOrigin)); |
+ EXPECT_FALSE(can_access_page(extension, kGoogle)); |
+ EXPECT_TRUE(can_access_page(extension, kExampleGoogle)); |
+ |
+ // Remove foo.com from blocked hosts. The extension should no longer have |
+ // be a runtime blocked host. |
+ default_policy_blocked_hosts.ClearPatterns(); |
+ AddPattern(&default_policy_blocked_hosts, "*://*.foo.com/"); |
+ updater.SetDefaultPolicyHostRestrictions(default_policy_blocked_hosts, |
+ default_policy_allowed_hosts); |
+ EXPECT_TRUE( |
+ extension->permissions_data()->UsesDefaultPolicyHostRestrictions()); |
+ EXPECT_FALSE(can_access_page(extension, kOrigin)); |
+ EXPECT_TRUE(can_access_page(extension, kGoogle)); |
+ EXPECT_TRUE(can_access_page(extension, kExampleGoogle)); |
+ |
+ // Set an empty individual policy, should not affect default policy. |
+ updater.SetPolicyHostRestrictions(extension.get(), policy_blocked_hosts, |
+ policy_allowed_hosts); |
+ EXPECT_FALSE( |
+ extension->permissions_data()->UsesDefaultPolicyHostRestrictions()); |
+ EXPECT_TRUE(can_access_page(extension, kOrigin)); |
+ EXPECT_TRUE(can_access_page(extension, kGoogle)); |
+ EXPECT_TRUE(can_access_page(extension, kExampleGoogle)); |
+ |
+ // Block google.com for the Individual scope. |
+ // Whitelist example.google.com for the Indiviaul scope. |
+ // Leave google.com and example.google.com off both the whitelist and |
+ // blacklist for Default scope. |
+ AddPattern(&policy_blocked_hosts, "*://*.google.com/*"); |
+ AddPattern(&policy_allowed_hosts, "*://example.google.com/*"); |
+ updater.SetPolicyHostRestrictions(extension.get(), policy_blocked_hosts, |
+ policy_allowed_hosts); |
+ EXPECT_FALSE( |
+ extension->permissions_data()->UsesDefaultPolicyHostRestrictions()); |
+ EXPECT_TRUE(can_access_page(extension, kOrigin)); |
+ EXPECT_FALSE(can_access_page(extension, kGoogle)); |
+ EXPECT_TRUE(can_access_page(extension, kExampleGoogle)); |
+ |
+ // Switch back to default scope for extension. |
+ updater.SetUsesDefaultHostRestrictions(extension.get()); |
+ EXPECT_TRUE( |
+ extension->permissions_data()->UsesDefaultPolicyHostRestrictions()); |
+ default_policy_blocked_hosts.ClearPatterns(); |
+ default_policy_allowed_hosts.ClearPatterns(); |
+ updater.SetDefaultPolicyHostRestrictions(default_policy_blocked_hosts, |
+ default_policy_allowed_hosts); |
+ } |
} |
// Test that the permissions updater delegate works - in this test it removes |