Index: chrome/browser/permissions/permission_context_base_unittest.cc |
diff --git a/chrome/browser/permissions/permission_context_base_unittest.cc b/chrome/browser/permissions/permission_context_base_unittest.cc |
index e73f6c259bf3a18674bad6935dfdd2be91433843..7e09f909dd4ebdade53b5c46aaaaef0b860acfa2 100644 |
--- a/chrome/browser/permissions/permission_context_base_unittest.cc |
+++ b/chrome/browser/permissions/permission_context_base_unittest.cc |
@@ -167,8 +167,9 @@ class TestPermissionContext : public PermissionContextBase { |
} |
} |
- // Permission request will need to be responded to, so pass a callback to be |
- // run once the request has completed and the decision has been made. |
+ // Set the callback to run if the permission is being responded to in the |
+ // test. This is left empty where no response is needed, such as in parallel |
+ // requests, permissions blacklisting, invalid origin, and killswitch. |
void SetRespondPermissionCallback(base::Closure callback) { |
respond_permission_ = callback; |
} |
@@ -359,6 +360,19 @@ class PermissionContextBaseTests : public ChromeRenderViewHostTestHarness { |
TestPermissionContext permission_context(profile(), permission_type, |
content_settings_type); |
+ const PermissionRequestID id( |
+ web_contents()->GetRenderProcessHost()->GetID(), |
+ web_contents()->GetMainFrame()->GetRoutingID(), -1); |
+ |
+ permission_context.SetRespondPermissionCallback( |
+ base::Bind(&PermissionContextBaseTests::RespondToPermission, |
+ base::Unretained(this), &permission_context, id, url, false, |
+ CONTENT_SETTING_ASK)); |
+ |
+ permission_context.RequestPermission( |
+ web_contents(), id, url, true /* user_gesture */, |
+ base::Bind(&TestPermissionContext::TrackPermissionDecision, |
+ base::Unretained(&permission_context))); |
EXPECT_EQ(CONTENT_SETTING_BLOCK, |
permission_context.GetPermissionStatus(url, url)); |
@@ -488,7 +502,6 @@ class PermissionContextBaseTests : public ChromeRenderViewHostTestHarness { |
TestPermissionContext permission_context( |
profile(), content::PermissionType::MIDI_SYSEX, |
CONTENT_SETTINGS_TYPE_MIDI_SYSEX); |
- |
EXPECT_EQ(CONTENT_SETTING_BLOCK, |
permission_context.GetPermissionStatus(url, url)); |
variations::testing::ClearAllVariationParams(); |
@@ -629,29 +642,40 @@ class PermissionContextBaseTests : public ChromeRenderViewHostTestHarness { |
scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager> db_manager, |
const GURL& url, |
int timeout, |
- ContentSetting response) { |
+ ContentSetting expected_permission_status) { |
NavigateAndCommit(url); |
base::test::ScopedFeatureList scoped_feature_list; |
scoped_feature_list.InitAndEnableFeature(features::kPermissionsBlacklist); |
TestPermissionContext permission_context(profile(), permission_type, |
content_settings_type); |
- permission_context.SetSafeBrowsingDatabaseManagerAndTimeoutForTest( |
- db_manager, timeout); |
+ PermissionDecisionAutoBlocker::GetForProfile(profile()) |
+ ->SetSafeBrowsingDatabaseManagerAndTimeoutForTesting(db_manager, |
+ timeout); |
const PermissionRequestID id( |
web_contents()->GetRenderProcessHost()->GetID(), |
web_contents()->GetMainFrame()->GetRoutingID(), -1); |
- // The response callback needs to be set here to test a response being made |
- // in the case of a site not being blacklisted or a safe browsing timeout. |
- permission_context.SetRespondPermissionCallback(base::Bind( |
- &PermissionContextBaseTests::RespondToPermission, |
- base::Unretained(this), &permission_context, id, url, false, response)); |
+ |
+ // A response only needs to be made to the permission request if we do not |
+ // expect he permission to be blacklisted, therefore set the response |
+ // callback. |
+ if (expected_permission_status == CONTENT_SETTING_ALLOW) { |
+ permission_context.SetRespondPermissionCallback( |
+ base::Bind(&PermissionContextBaseTests::RespondToPermission, |
+ base::Unretained(this), &permission_context, id, url, |
+ true /* persist */, expected_permission_status)); |
+ } |
+ |
permission_context.RequestPermission( |
web_contents(), id, url, true /* user_gesture */, |
base::Bind(&TestPermissionContext::TrackPermissionDecision, |
base::Unretained(&permission_context))); |
+ EXPECT_EQ(expected_permission_status, |
+ permission_context.GetPermissionStatus(url, url)); |
- ASSERT_EQ(1u, permission_context.decisions().size()); |
- EXPECT_EQ(response, permission_context.decisions()[0]); |
+ if (expected_permission_status == CONTENT_SETTING_ALLOW) { |
+ ASSERT_EQ(1u, permission_context.decisions().size()); |
+ EXPECT_EQ(expected_permission_status, permission_context.decisions()[0]); |
+ } |
} |
private: |
@@ -815,45 +839,22 @@ TEST_F(PermissionContextBaseTests, TestPermissionsBlacklistingBlocked) { |
scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager = |
new MockSafeBrowsingDatabaseManager(true /* perform_callback */); |
const GURL url("https://www.example.com"); |
- std::set<std::string> blacklisted_permissions{ |
- PermissionUtil::GetPermissionString( |
- content::PermissionType::GEOLOCATION)}; |
+ std::set<std::string> blacklisted_permissions{"GEOLOCATION"}; |
db_manager->BlacklistUrlPermissions(url, blacklisted_permissions); |
TestPermissionsBlacklisting(content::PermissionType::GEOLOCATION, |
CONTENT_SETTINGS_TYPE_GEOLOCATION, db_manager, |
url, 2000 /* timeout */, CONTENT_SETTING_BLOCK); |
} |
-// Tests that a URL with a blacklisted permission is permitted to request a |
-// non-blacklisted permission. |
+// Tests that a URL that is blacklisted for one permission can still request |
+// another and grant another. |
TEST_F(PermissionContextBaseTests, TestPermissionsBlacklistingAllowed) { |
scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager = |
new MockSafeBrowsingDatabaseManager(true /* perform_callback */); |
const GURL url("https://www.example.com"); |
- std::set<std::string> blacklisted_permissions{ |
- PermissionUtil::GetPermissionString( |
- content::PermissionType::GEOLOCATION)}; |
+ std::set<std::string> blacklisted_permissions{"GEOLOCATION"}; |
db_manager->BlacklistUrlPermissions(url, blacklisted_permissions); |
- TestPermissionsBlacklisting( |
- content::PermissionType::GEOLOCATION, CONTENT_SETTINGS_TYPE_GEOLOCATION, |
- db_manager, url, 2000 /* timeout in ms */, CONTENT_SETTING_BLOCK); |
TestPermissionsBlacklisting(content::PermissionType::NOTIFICATIONS, |
CONTENT_SETTINGS_TYPE_NOTIFICATIONS, db_manager, |
- url, 2000 /* timeout in ms */, |
- CONTENT_SETTING_ALLOW); |
-} |
- |
-// Tests that a URL with a blacklisted permisison is permitted to request that |
-// permission if Safe Browsing has timed out. |
-TEST_F(PermissionContextBaseTests, TestSafeBrowsingTimeout) { |
- scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager = |
- new MockSafeBrowsingDatabaseManager(false /* perform_callback */); |
- const GURL url("https://www.example.com"); |
- std::set<std::string> blacklisted_permissions{ |
- PermissionUtil::GetPermissionString( |
- content::PermissionType::GEOLOCATION)}; |
- db_manager->BlacklistUrlPermissions(url, blacklisted_permissions); |
- TestPermissionsBlacklisting(content::PermissionType::GEOLOCATION, |
- CONTENT_SETTINGS_TYPE_GEOLOCATION, db_manager, |
- url, 0 /* timeout in ms */, CONTENT_SETTING_ASK); |
+ url, 2000 /* timeout */, CONTENT_SETTING_ALLOW); |
} |