| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/permissions/permission_context_base.h" | 5 #include "chrome/browser/permissions/permission_context_base.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 #include <set> | 8 #include <set> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 #include "chrome/common/chrome_switches.h" | 30 #include "chrome/common/chrome_switches.h" |
| 31 #include "chrome/test/base/chrome_render_view_host_test_harness.h" | 31 #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
| 32 #include "chrome/test/base/testing_profile.h" | 32 #include "chrome/test/base/testing_profile.h" |
| 33 #include "components/content_settings/core/browser/host_content_settings_map.h" | 33 #include "components/content_settings/core/browser/host_content_settings_map.h" |
| 34 #include "components/content_settings/core/common/content_settings.h" | 34 #include "components/content_settings/core/common/content_settings.h" |
| 35 #include "components/content_settings/core/common/content_settings_types.h" | 35 #include "components/content_settings/core/common/content_settings_types.h" |
| 36 #include "components/safe_browsing_db/database_manager.h" | 36 #include "components/safe_browsing_db/database_manager.h" |
| 37 #include "components/safe_browsing_db/test_database_manager.h" | 37 #include "components/safe_browsing_db/test_database_manager.h" |
| 38 #include "components/variations/variations_associated_data.h" | 38 #include "components/variations/variations_associated_data.h" |
| 39 #include "content/public/browser/browser_thread.h" | 39 #include "content/public/browser/browser_thread.h" |
| 40 #include "content/public/browser/permission_type.h" | |
| 41 #include "content/public/browser/render_frame_host.h" | 40 #include "content/public/browser/render_frame_host.h" |
| 42 #include "content/public/browser/web_contents.h" | 41 #include "content/public/browser/web_contents.h" |
| 43 #include "content/public/test/mock_render_process_host.h" | 42 #include "content/public/test/mock_render_process_host.h" |
| 44 #include "testing/gtest/include/gtest/gtest.h" | 43 #include "testing/gtest/include/gtest/gtest.h" |
| 45 | 44 |
| 46 #if !defined(OS_ANDROID) | 45 #if !defined(OS_ANDROID) |
| 47 #include "chrome/browser/permissions/permission_request_manager.h" | 46 #include "chrome/browser/permissions/permission_request_manager.h" |
| 48 #endif | 47 #endif |
| 49 | 48 |
| 50 const char* const kPermissionsKillSwitchFieldStudy = | 49 const char* const kPermissionsKillSwitchFieldStudy = |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 std::map<GURL, std::set<std::string>> permissions_blacklist_; | 95 std::map<GURL, std::set<std::string>> permissions_blacklist_; |
| 97 | 96 |
| 98 DISALLOW_COPY_AND_ASSIGN(MockSafeBrowsingDatabaseManager); | 97 DISALLOW_COPY_AND_ASSIGN(MockSafeBrowsingDatabaseManager); |
| 99 }; | 98 }; |
| 100 | 99 |
| 101 } // namespace | 100 } // namespace |
| 102 | 101 |
| 103 class TestPermissionContext : public PermissionContextBase { | 102 class TestPermissionContext : public PermissionContextBase { |
| 104 public: | 103 public: |
| 105 TestPermissionContext(Profile* profile, | 104 TestPermissionContext(Profile* profile, |
| 106 const content::PermissionType permission_type, | |
| 107 const ContentSettingsType content_settings_type) | 105 const ContentSettingsType content_settings_type) |
| 108 : PermissionContextBase(profile, permission_type, content_settings_type), | 106 : PermissionContextBase(profile, content_settings_type), |
| 109 tab_context_updated_(false) {} | 107 tab_context_updated_(false) {} |
| 110 | 108 |
| 111 ~TestPermissionContext() override {} | 109 ~TestPermissionContext() override {} |
| 112 | 110 |
| 113 #if defined(OS_ANDROID) | 111 #if defined(OS_ANDROID) |
| 114 PermissionQueueController* GetInfoBarController() { | 112 PermissionQueueController* GetInfoBarController() { |
| 115 return GetQueueController(); | 113 return GetQueueController(); |
| 116 } | 114 } |
| 117 #endif | 115 #endif |
| 118 | 116 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 129 if (quit_closure_) { | 127 if (quit_closure_) { |
| 130 quit_closure_.Run(); | 128 quit_closure_.Run(); |
| 131 quit_closure_.Reset(); | 129 quit_closure_.Reset(); |
| 132 } | 130 } |
| 133 } | 131 } |
| 134 | 132 |
| 135 ContentSetting GetContentSettingFromMap(const GURL& url_a, | 133 ContentSetting GetContentSettingFromMap(const GURL& url_a, |
| 136 const GURL& url_b) { | 134 const GURL& url_b) { |
| 137 auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); | 135 auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); |
| 138 return map->GetContentSetting(url_a.GetOrigin(), url_b.GetOrigin(), | 136 return map->GetContentSetting(url_a.GetOrigin(), url_b.GetOrigin(), |
| 139 content_settings_type(), std::string()); | 137 content_settings_storage_type(), |
| 138 std::string()); |
| 140 } | 139 } |
| 141 | 140 |
| 142 void RequestPermission(content::WebContents* web_contents, | 141 void RequestPermission(content::WebContents* web_contents, |
| 143 const PermissionRequestID& id, | 142 const PermissionRequestID& id, |
| 144 const GURL& requesting_frame, | 143 const GURL& requesting_frame, |
| 145 bool user_gesture, | 144 bool user_gesture, |
| 146 const BrowserPermissionCallback& callback) override { | 145 const BrowserPermissionCallback& callback) override { |
| 147 base::RunLoop run_loop; | 146 base::RunLoop run_loop; |
| 148 quit_closure_ = run_loop.QuitClosure(); | 147 quit_closure_ = run_loop.QuitClosure(); |
| 149 PermissionContextBase::RequestPermission(web_contents, id, requesting_frame, | 148 PermissionContextBase::RequestPermission(web_contents, id, requesting_frame, |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 196 // Callback for responding to a permission once the request has been completed | 195 // Callback for responding to a permission once the request has been completed |
| 197 // (valid URL, kill switch disabled, not blacklisted) | 196 // (valid URL, kill switch disabled, not blacklisted) |
| 198 base::Closure respond_permission_; | 197 base::Closure respond_permission_; |
| 199 DISALLOW_COPY_AND_ASSIGN(TestPermissionContext); | 198 DISALLOW_COPY_AND_ASSIGN(TestPermissionContext); |
| 200 }; | 199 }; |
| 201 | 200 |
| 202 class TestKillSwitchPermissionContext : public TestPermissionContext { | 201 class TestKillSwitchPermissionContext : public TestPermissionContext { |
| 203 public: | 202 public: |
| 204 TestKillSwitchPermissionContext( | 203 TestKillSwitchPermissionContext( |
| 205 Profile* profile, | 204 Profile* profile, |
| 206 const content::PermissionType permission_type, | |
| 207 const ContentSettingsType content_settings_type) | 205 const ContentSettingsType content_settings_type) |
| 208 : TestPermissionContext(profile, permission_type, content_settings_type), | 206 : TestPermissionContext(profile, content_settings_type), |
| 209 field_trial_list_(base::MakeUnique<base::FieldTrialList>( | 207 field_trial_list_(base::MakeUnique<base::FieldTrialList>( |
| 210 base::MakeUnique<base::MockEntropyProvider>())) {} | 208 base::MakeUnique<base::MockEntropyProvider>())) {} |
| 211 | 209 |
| 212 void ResetFieldTrialList() { | 210 void ResetFieldTrialList() { |
| 213 // Destroy the existing FieldTrialList before creating a new one to avoid | 211 // Destroy the existing FieldTrialList before creating a new one to avoid |
| 214 // a DCHECK. | 212 // a DCHECK. |
| 215 field_trial_list_.reset(); | 213 field_trial_list_.reset(); |
| 216 field_trial_list_ = base::MakeUnique<base::FieldTrialList>( | 214 field_trial_list_ = base::MakeUnique<base::FieldTrialList>( |
| 217 base::MakeUnique<base::MockEntropyProvider>()); | 215 base::MakeUnique<base::MockEntropyProvider>()); |
| 218 variations::testing::ClearAllVariationParams(); | 216 variations::testing::ClearAllVariationParams(); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 259 break; | 257 break; |
| 260 case CONTENT_SETTING_ASK: | 258 case CONTENT_SETTING_ASK: |
| 261 manager->Closing(); | 259 manager->Closing(); |
| 262 break; | 260 break; |
| 263 default: | 261 default: |
| 264 NOTREACHED(); | 262 NOTREACHED(); |
| 265 } | 263 } |
| 266 #endif | 264 #endif |
| 267 } | 265 } |
| 268 | 266 |
| 269 void TestAskAndDecide_TestContent(content::PermissionType permission, | 267 void TestAskAndDecide_TestContent(ContentSettingsType content_settings_type, |
| 270 ContentSettingsType content_settings_type, | |
| 271 ContentSetting decision, | 268 ContentSetting decision, |
| 272 bool persist) { | 269 bool persist) { |
| 273 TestPermissionContext permission_context(profile(), permission, | 270 TestPermissionContext permission_context(profile(), content_settings_type); |
| 274 content_settings_type); | |
| 275 GURL url("https://www.google.com"); | 271 GURL url("https://www.google.com"); |
| 276 NavigateAndCommit(url); | 272 NavigateAndCommit(url); |
| 277 base::HistogramTester histograms; | 273 base::HistogramTester histograms; |
| 278 | 274 |
| 279 const PermissionRequestID id( | 275 const PermissionRequestID id( |
| 280 web_contents()->GetRenderProcessHost()->GetID(), | 276 web_contents()->GetRenderProcessHost()->GetID(), |
| 281 web_contents()->GetMainFrame()->GetRoutingID(), | 277 web_contents()->GetMainFrame()->GetRoutingID(), |
| 282 -1); | 278 -1); |
| 283 permission_context.SetRespondPermissionCallback( | 279 permission_context.SetRespondPermissionCallback( |
| 284 base::Bind(&PermissionContextBaseTests::RespondToPermission, | 280 base::Bind(&PermissionContextBaseTests::RespondToPermission, |
| (...skipping 12 matching lines...) Expand all Loading... |
| 297 if (decision == CONTENT_SETTING_ALLOW) | 293 if (decision == CONTENT_SETTING_ALLOW) |
| 298 decision_string = "Accepted"; | 294 decision_string = "Accepted"; |
| 299 else if (decision == CONTENT_SETTING_BLOCK) | 295 else if (decision == CONTENT_SETTING_BLOCK) |
| 300 decision_string = "Denied"; | 296 decision_string = "Denied"; |
| 301 else if (decision == CONTENT_SETTING_ASK) | 297 else if (decision == CONTENT_SETTING_ASK) |
| 302 decision_string = "Dismissed"; | 298 decision_string = "Dismissed"; |
| 303 | 299 |
| 304 if (decision_string.size()) { | 300 if (decision_string.size()) { |
| 305 histograms.ExpectUniqueSample( | 301 histograms.ExpectUniqueSample( |
| 306 "Permissions.Prompt." + decision_string + ".PriorDismissCount." + | 302 "Permissions.Prompt." + decision_string + ".PriorDismissCount." + |
| 307 PermissionUtil::GetPermissionString(permission), | 303 PermissionUtil::GetPermissionString(content_settings_type), |
| 308 0, 1); | 304 0, 1); |
| 309 histograms.ExpectUniqueSample( | 305 histograms.ExpectUniqueSample( |
| 310 "Permissions.Prompt." + decision_string + ".PriorIgnoreCount." + | 306 "Permissions.Prompt." + decision_string + ".PriorIgnoreCount." + |
| 311 PermissionUtil::GetPermissionString(permission), | 307 PermissionUtil::GetPermissionString(content_settings_type), |
| 312 0, 1); | 308 0, 1); |
| 313 } | 309 } |
| 314 | 310 |
| 315 if (persist) { | 311 if (persist) { |
| 316 EXPECT_EQ(decision, | 312 EXPECT_EQ(decision, |
| 317 permission_context.GetContentSettingFromMap(url, url)); | 313 permission_context.GetContentSettingFromMap(url, url)); |
| 318 } else { | 314 } else { |
| 319 EXPECT_EQ(CONTENT_SETTING_ASK, | 315 EXPECT_EQ(CONTENT_SETTING_ASK, |
| 320 permission_context.GetContentSettingFromMap(url, url)); | 316 permission_context.GetContentSettingFromMap(url, url)); |
| 321 } | 317 } |
| 322 } | 318 } |
| 323 | 319 |
| 324 void DismissMultipleTimesAndExpectBlock( | 320 void DismissMultipleTimesAndExpectBlock( |
| 325 const GURL& url, | 321 const GURL& url, |
| 326 content::PermissionType permission_type, | |
| 327 ContentSettingsType content_settings_type, | 322 ContentSettingsType content_settings_type, |
| 328 uint32_t iterations) { | 323 uint32_t iterations) { |
| 329 base::HistogramTester histograms; | 324 base::HistogramTester histograms; |
| 330 | 325 |
| 331 // Dismiss |iterations| times. The final dismiss should change the decision | 326 // Dismiss |iterations| times. The final dismiss should change the decision |
| 332 // from dismiss to block, and hence change the persisted content setting. | 327 // from dismiss to block, and hence change the persisted content setting. |
| 333 for (uint32_t i = 0; i < iterations; ++i) { | 328 for (uint32_t i = 0; i < iterations; ++i) { |
| 334 ContentSetting expected = | 329 ContentSetting expected = |
| 335 (i < 2) ? CONTENT_SETTING_ASK : CONTENT_SETTING_BLOCK; | 330 (i < 2) ? CONTENT_SETTING_ASK : CONTENT_SETTING_BLOCK; |
| 336 TestPermissionContext permission_context( | 331 TestPermissionContext permission_context(profile(), |
| 337 profile(), permission_type, content_settings_type); | 332 content_settings_type); |
| 338 const PermissionRequestID id( | 333 const PermissionRequestID id( |
| 339 web_contents()->GetRenderProcessHost()->GetID(), | 334 web_contents()->GetRenderProcessHost()->GetID(), |
| 340 web_contents()->GetMainFrame()->GetRoutingID(), i); | 335 web_contents()->GetMainFrame()->GetRoutingID(), i); |
| 341 | 336 |
| 342 permission_context.SetRespondPermissionCallback( | 337 permission_context.SetRespondPermissionCallback( |
| 343 base::Bind(&PermissionContextBaseTests::RespondToPermission, | 338 base::Bind(&PermissionContextBaseTests::RespondToPermission, |
| 344 base::Unretained(this), &permission_context, id, url, | 339 base::Unretained(this), &permission_context, id, url, |
| 345 false, CONTENT_SETTING_ASK)); | 340 false, CONTENT_SETTING_ASK)); |
| 346 | 341 |
| 347 permission_context.RequestPermission( | 342 permission_context.RequestPermission( |
| 348 web_contents(), id, url, true /* user_gesture */, | 343 web_contents(), id, url, true /* user_gesture */, |
| 349 base::Bind(&TestPermissionContext::TrackPermissionDecision, | 344 base::Bind(&TestPermissionContext::TrackPermissionDecision, |
| 350 base::Unretained(&permission_context))); | 345 base::Unretained(&permission_context))); |
| 351 histograms.ExpectTotalCount( | 346 histograms.ExpectTotalCount( |
| 352 "Permissions.Prompt.Dismissed.PriorDismissCount." + | 347 "Permissions.Prompt.Dismissed.PriorDismissCount." + |
| 353 PermissionUtil::GetPermissionString(permission_type), | 348 PermissionUtil::GetPermissionString(content_settings_type), |
| 354 i + 1); | 349 i + 1); |
| 355 histograms.ExpectBucketCount( | 350 histograms.ExpectBucketCount( |
| 356 "Permissions.Prompt.Dismissed.PriorDismissCount." + | 351 "Permissions.Prompt.Dismissed.PriorDismissCount." + |
| 357 PermissionUtil::GetPermissionString(permission_type), | 352 PermissionUtil::GetPermissionString(content_settings_type), |
| 358 i, 1); | 353 i, 1); |
| 359 ASSERT_EQ(1u, permission_context.decisions().size()); | 354 ASSERT_EQ(1u, permission_context.decisions().size()); |
| 360 EXPECT_EQ(expected, permission_context.decisions()[0]); | 355 EXPECT_EQ(expected, permission_context.decisions()[0]); |
| 361 EXPECT_TRUE(permission_context.tab_context_updated()); | 356 EXPECT_TRUE(permission_context.tab_context_updated()); |
| 362 EXPECT_EQ(expected, permission_context.GetPermissionStatus(url, url)); | 357 EXPECT_EQ(expected, permission_context.GetPermissionStatus(url, url)); |
| 363 } | 358 } |
| 364 | 359 |
| 365 TestPermissionContext permission_context(profile(), permission_type, | 360 TestPermissionContext permission_context(profile(), content_settings_type); |
| 366 content_settings_type); | |
| 367 const PermissionRequestID id( | 361 const PermissionRequestID id( |
| 368 web_contents()->GetRenderProcessHost()->GetID(), | 362 web_contents()->GetRenderProcessHost()->GetID(), |
| 369 web_contents()->GetMainFrame()->GetRoutingID(), -1); | 363 web_contents()->GetMainFrame()->GetRoutingID(), -1); |
| 370 | 364 |
| 371 permission_context.SetRespondPermissionCallback( | 365 permission_context.SetRespondPermissionCallback( |
| 372 base::Bind(&PermissionContextBaseTests::RespondToPermission, | 366 base::Bind(&PermissionContextBaseTests::RespondToPermission, |
| 373 base::Unretained(this), &permission_context, id, url, false, | 367 base::Unretained(this), &permission_context, id, url, false, |
| 374 CONTENT_SETTING_ASK)); | 368 CONTENT_SETTING_ASK)); |
| 375 | 369 |
| 376 permission_context.RequestPermission( | 370 permission_context.RequestPermission( |
| 377 web_contents(), id, url, true /* user_gesture */, | 371 web_contents(), id, url, true /* user_gesture */, |
| 378 base::Bind(&TestPermissionContext::TrackPermissionDecision, | 372 base::Bind(&TestPermissionContext::TrackPermissionDecision, |
| 379 base::Unretained(&permission_context))); | 373 base::Unretained(&permission_context))); |
| 380 | 374 |
| 381 EXPECT_EQ(CONTENT_SETTING_BLOCK, | 375 EXPECT_EQ(CONTENT_SETTING_BLOCK, |
| 382 permission_context.GetPermissionStatus(url, url)); | 376 permission_context.GetPermissionStatus(url, url)); |
| 383 } | 377 } |
| 384 | 378 |
| 385 void TestBlockOnSeveralDismissals_TestContent() { | 379 void TestBlockOnSeveralDismissals_TestContent() { |
| 386 GURL url("https://www.google.com"); | 380 GURL url("https://www.google.com"); |
| 387 NavigateAndCommit(url); | 381 NavigateAndCommit(url); |
| 388 base::HistogramTester histograms; | 382 base::HistogramTester histograms; |
| 389 | 383 |
| 390 // First, ensure that > 3 dismissals behaves correctly. | 384 // First, ensure that > 3 dismissals behaves correctly. |
| 391 for (uint32_t i = 0; i < 4; ++i) { | 385 for (uint32_t i = 0; i < 4; ++i) { |
| 392 TestPermissionContext permission_context( | 386 TestPermissionContext permission_context( |
| 393 profile(), content::PermissionType::GEOLOCATION, | 387 profile(), CONTENT_SETTINGS_TYPE_GEOLOCATION); |
| 394 CONTENT_SETTINGS_TYPE_GEOLOCATION); | |
| 395 | 388 |
| 396 const PermissionRequestID id( | 389 const PermissionRequestID id( |
| 397 web_contents()->GetRenderProcessHost()->GetID(), | 390 web_contents()->GetRenderProcessHost()->GetID(), |
| 398 web_contents()->GetMainFrame()->GetRoutingID(), i); | 391 web_contents()->GetMainFrame()->GetRoutingID(), i); |
| 399 | 392 |
| 400 permission_context.SetRespondPermissionCallback( | 393 permission_context.SetRespondPermissionCallback( |
| 401 base::Bind(&PermissionContextBaseTests::RespondToPermission, | 394 base::Bind(&PermissionContextBaseTests::RespondToPermission, |
| 402 base::Unretained(this), &permission_context, id, url, | 395 base::Unretained(this), &permission_context, id, url, |
| 403 false, CONTENT_SETTING_ASK)); | 396 false, CONTENT_SETTING_ASK)); |
| 404 permission_context.RequestPermission( | 397 permission_context.RequestPermission( |
| (...skipping 19 matching lines...) Expand all Loading... |
| 424 CONTENT_SETTINGS_TYPE_PERMISSION_AUTOBLOCKER_DATA); | 417 CONTENT_SETTINGS_TYPE_PERMISSION_AUTOBLOCKER_DATA); |
| 425 | 418 |
| 426 base::test::ScopedFeatureList feature_list; | 419 base::test::ScopedFeatureList feature_list; |
| 427 feature_list.InitAndEnableFeature(features::kBlockPromptsIfDismissedOften); | 420 feature_list.InitAndEnableFeature(features::kBlockPromptsIfDismissedOften); |
| 428 | 421 |
| 429 EXPECT_TRUE( | 422 EXPECT_TRUE( |
| 430 base::FeatureList::IsEnabled(features::kBlockPromptsIfDismissedOften)); | 423 base::FeatureList::IsEnabled(features::kBlockPromptsIfDismissedOften)); |
| 431 | 424 |
| 432 // Sanity check independence per permission type by checking two of them. | 425 // Sanity check independence per permission type by checking two of them. |
| 433 DismissMultipleTimesAndExpectBlock(url, | 426 DismissMultipleTimesAndExpectBlock(url, |
| 434 content::PermissionType::GEOLOCATION, | |
| 435 CONTENT_SETTINGS_TYPE_GEOLOCATION, 3); | 427 CONTENT_SETTINGS_TYPE_GEOLOCATION, 3); |
| 436 DismissMultipleTimesAndExpectBlock(url, | 428 DismissMultipleTimesAndExpectBlock(url, |
| 437 content::PermissionType::NOTIFICATIONS, | |
| 438 CONTENT_SETTINGS_TYPE_NOTIFICATIONS, 3); | 429 CONTENT_SETTINGS_TYPE_NOTIFICATIONS, 3); |
| 439 } | 430 } |
| 440 | 431 |
| 441 void TestVariationBlockOnSeveralDismissals_TestContent() { | 432 void TestVariationBlockOnSeveralDismissals_TestContent() { |
| 442 GURL url("https://www.google.com"); | 433 GURL url("https://www.google.com"); |
| 443 NavigateAndCommit(url); | 434 NavigateAndCommit(url); |
| 444 base::HistogramTester histograms; | 435 base::HistogramTester histograms; |
| 445 | 436 |
| 446 // Set up the custom parameter and custom value. | 437 // Set up the custom parameter and custom value. |
| 447 base::FieldTrialList field_trials(nullptr); | 438 base::FieldTrialList field_trials(nullptr); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 467 | 458 |
| 468 { | 459 { |
| 469 std::map<std::string, std::string> actual_params; | 460 std::map<std::string, std::string> actual_params; |
| 470 EXPECT_TRUE(variations::GetVariationParamsByFeature( | 461 EXPECT_TRUE(variations::GetVariationParamsByFeature( |
| 471 features::kBlockPromptsIfDismissedOften, &actual_params)); | 462 features::kBlockPromptsIfDismissedOften, &actual_params)); |
| 472 EXPECT_EQ(params, actual_params); | 463 EXPECT_EQ(params, actual_params); |
| 473 } | 464 } |
| 474 | 465 |
| 475 for (uint32_t i = 0; i < 5; ++i) { | 466 for (uint32_t i = 0; i < 5; ++i) { |
| 476 TestPermissionContext permission_context( | 467 TestPermissionContext permission_context( |
| 477 profile(), content::PermissionType::MIDI_SYSEX, | 468 profile(), CONTENT_SETTINGS_TYPE_MIDI_SYSEX); |
| 478 CONTENT_SETTINGS_TYPE_MIDI_SYSEX); | |
| 479 | 469 |
| 480 ContentSetting expected = | 470 ContentSetting expected = |
| 481 (i < 4) ? CONTENT_SETTING_ASK : CONTENT_SETTING_BLOCK; | 471 (i < 4) ? CONTENT_SETTING_ASK : CONTENT_SETTING_BLOCK; |
| 482 const PermissionRequestID id( | 472 const PermissionRequestID id( |
| 483 web_contents()->GetRenderProcessHost()->GetID(), | 473 web_contents()->GetRenderProcessHost()->GetID(), |
| 484 web_contents()->GetMainFrame()->GetRoutingID(), i); | 474 web_contents()->GetMainFrame()->GetRoutingID(), i); |
| 485 permission_context.SetRespondPermissionCallback( | 475 permission_context.SetRespondPermissionCallback( |
| 486 base::Bind(&PermissionContextBaseTests::RespondToPermission, | 476 base::Bind(&PermissionContextBaseTests::RespondToPermission, |
| 487 base::Unretained(this), &permission_context, id, url, | 477 base::Unretained(this), &permission_context, id, url, |
| 488 false, CONTENT_SETTING_ASK)); | 478 false, CONTENT_SETTING_ASK)); |
| 489 permission_context.RequestPermission( | 479 permission_context.RequestPermission( |
| 490 web_contents(), id, url, true /* user_gesture */, | 480 web_contents(), id, url, true /* user_gesture */, |
| 491 base::Bind(&TestPermissionContext::TrackPermissionDecision, | 481 base::Bind(&TestPermissionContext::TrackPermissionDecision, |
| 492 base::Unretained(&permission_context))); | 482 base::Unretained(&permission_context))); |
| 493 | 483 |
| 494 EXPECT_EQ(1u, permission_context.decisions().size()); | 484 EXPECT_EQ(1u, permission_context.decisions().size()); |
| 495 ASSERT_EQ(expected, permission_context.decisions()[0]); | 485 ASSERT_EQ(expected, permission_context.decisions()[0]); |
| 496 EXPECT_TRUE(permission_context.tab_context_updated()); | 486 EXPECT_TRUE(permission_context.tab_context_updated()); |
| 497 EXPECT_EQ(expected, permission_context.GetPermissionStatus(url, url)); | 487 EXPECT_EQ(expected, permission_context.GetPermissionStatus(url, url)); |
| 498 | 488 |
| 499 histograms.ExpectTotalCount( | 489 histograms.ExpectTotalCount( |
| 500 "Permissions.Prompt.Dismissed.PriorDismissCount.MidiSysEx", i + 1); | 490 "Permissions.Prompt.Dismissed.PriorDismissCount.MidiSysEx", i + 1); |
| 501 histograms.ExpectBucketCount( | 491 histograms.ExpectBucketCount( |
| 502 "Permissions.Prompt.Dismissed.PriorDismissCount.MidiSysEx", i, 1); | 492 "Permissions.Prompt.Dismissed.PriorDismissCount.MidiSysEx", i, 1); |
| 503 } | 493 } |
| 504 | 494 |
| 505 // Ensure that we finish in the block state. | 495 // Ensure that we finish in the block state. |
| 506 TestPermissionContext permission_context( | 496 TestPermissionContext permission_context(profile(), |
| 507 profile(), content::PermissionType::MIDI_SYSEX, | 497 CONTENT_SETTINGS_TYPE_MIDI_SYSEX); |
| 508 CONTENT_SETTINGS_TYPE_MIDI_SYSEX); | |
| 509 EXPECT_EQ(CONTENT_SETTING_BLOCK, | 498 EXPECT_EQ(CONTENT_SETTING_BLOCK, |
| 510 permission_context.GetPermissionStatus(url, url)); | 499 permission_context.GetPermissionStatus(url, url)); |
| 511 variations::testing::ClearAllVariationParams(); | 500 variations::testing::ClearAllVariationParams(); |
| 512 } | 501 } |
| 513 | 502 |
| 514 void TestRequestPermissionInvalidUrl( | 503 void TestRequestPermissionInvalidUrl( |
| 515 content::PermissionType permission_type, | |
| 516 ContentSettingsType content_settings_type) { | 504 ContentSettingsType content_settings_type) { |
| 517 TestPermissionContext permission_context(profile(), permission_type, | 505 TestPermissionContext permission_context(profile(), content_settings_type); |
| 518 content_settings_type); | |
| 519 GURL url; | 506 GURL url; |
| 520 ASSERT_FALSE(url.is_valid()); | 507 ASSERT_FALSE(url.is_valid()); |
| 521 NavigateAndCommit(url); | 508 NavigateAndCommit(url); |
| 522 | 509 |
| 523 const PermissionRequestID id( | 510 const PermissionRequestID id( |
| 524 web_contents()->GetRenderProcessHost()->GetID(), | 511 web_contents()->GetRenderProcessHost()->GetID(), |
| 525 web_contents()->GetMainFrame()->GetRoutingID(), | 512 web_contents()->GetMainFrame()->GetRoutingID(), |
| 526 -1); | 513 -1); |
| 527 permission_context.RequestPermission( | 514 permission_context.RequestPermission( |
| 528 web_contents(), | 515 web_contents(), |
| 529 id, url, true /* user_gesture */, | 516 id, url, true /* user_gesture */, |
| 530 base::Bind(&TestPermissionContext::TrackPermissionDecision, | 517 base::Bind(&TestPermissionContext::TrackPermissionDecision, |
| 531 base::Unretained(&permission_context))); | 518 base::Unretained(&permission_context))); |
| 532 | 519 |
| 533 ASSERT_EQ(1u, permission_context.decisions().size()); | 520 ASSERT_EQ(1u, permission_context.decisions().size()); |
| 534 EXPECT_EQ(CONTENT_SETTING_BLOCK, permission_context.decisions()[0]); | 521 EXPECT_EQ(CONTENT_SETTING_BLOCK, permission_context.decisions()[0]); |
| 535 EXPECT_TRUE(permission_context.tab_context_updated()); | 522 EXPECT_TRUE(permission_context.tab_context_updated()); |
| 536 EXPECT_EQ(CONTENT_SETTING_ASK, | 523 EXPECT_EQ(CONTENT_SETTING_ASK, |
| 537 permission_context.GetContentSettingFromMap(url, url)); | 524 permission_context.GetContentSettingFromMap(url, url)); |
| 538 } | 525 } |
| 539 | 526 |
| 540 void TestGrantAndRevoke_TestContent(content::PermissionType permission_type, | 527 void TestGrantAndRevoke_TestContent(ContentSettingsType content_settings_type, |
| 541 ContentSettingsType content_settings_type, | |
| 542 ContentSetting expected_default) { | 528 ContentSetting expected_default) { |
| 543 TestPermissionContext permission_context(profile(), permission_type, | 529 TestPermissionContext permission_context(profile(), content_settings_type); |
| 544 content_settings_type); | |
| 545 GURL url("https://www.google.com"); | 530 GURL url("https://www.google.com"); |
| 546 NavigateAndCommit(url); | 531 NavigateAndCommit(url); |
| 547 | 532 |
| 548 const PermissionRequestID id( | 533 const PermissionRequestID id( |
| 549 web_contents()->GetRenderProcessHost()->GetID(), | 534 web_contents()->GetRenderProcessHost()->GetID(), |
| 550 web_contents()->GetMainFrame()->GetRoutingID(), | 535 web_contents()->GetMainFrame()->GetRoutingID(), |
| 551 -1); | 536 -1); |
| 552 permission_context.SetRespondPermissionCallback( | 537 permission_context.SetRespondPermissionCallback( |
| 553 base::Bind(&PermissionContextBaseTests::RespondToPermission, | 538 base::Bind(&PermissionContextBaseTests::RespondToPermission, |
| 554 base::Unretained(this), &permission_context, id, url, true, | 539 base::Unretained(this), &permission_context, id, url, true, |
| (...skipping 15 matching lines...) Expand all Loading... |
| 570 permission_context.ResetPermission(url.GetOrigin(), url.GetOrigin()); | 555 permission_context.ResetPermission(url.GetOrigin(), url.GetOrigin()); |
| 571 ContentSetting setting_after_reset = | 556 ContentSetting setting_after_reset = |
| 572 permission_context.GetContentSettingFromMap(url, url); | 557 permission_context.GetContentSettingFromMap(url, url); |
| 573 ContentSetting default_setting = | 558 ContentSetting default_setting = |
| 574 HostContentSettingsMapFactory::GetForProfile(profile()) | 559 HostContentSettingsMapFactory::GetForProfile(profile()) |
| 575 ->GetDefaultContentSetting(content_settings_type, nullptr); | 560 ->GetDefaultContentSetting(content_settings_type, nullptr); |
| 576 EXPECT_EQ(default_setting, setting_after_reset); | 561 EXPECT_EQ(default_setting, setting_after_reset); |
| 577 } | 562 } |
| 578 | 563 |
| 579 void TestGlobalPermissionsKillSwitch( | 564 void TestGlobalPermissionsKillSwitch( |
| 580 content::PermissionType permission_type, | |
| 581 ContentSettingsType content_settings_type) { | 565 ContentSettingsType content_settings_type) { |
| 582 TestKillSwitchPermissionContext permission_context( | 566 TestKillSwitchPermissionContext permission_context(profile(), |
| 583 profile(), permission_type, content_settings_type); | 567 content_settings_type); |
| 584 permission_context.ResetFieldTrialList(); | 568 permission_context.ResetFieldTrialList(); |
| 585 | 569 |
| 586 EXPECT_FALSE(permission_context.IsPermissionKillSwitchOn()); | 570 EXPECT_FALSE(permission_context.IsPermissionKillSwitchOn()); |
| 587 std::map<std::string, std::string> params; | 571 std::map<std::string, std::string> params; |
| 588 params[PermissionUtil::GetPermissionString(permission_type)] = | 572 params[PermissionUtil::GetPermissionString(content_settings_type)] = |
| 589 kPermissionsKillSwitchBlockedValue; | 573 kPermissionsKillSwitchBlockedValue; |
| 590 variations::AssociateVariationParams( | 574 variations::AssociateVariationParams( |
| 591 kPermissionsKillSwitchFieldStudy, kPermissionsKillSwitchTestGroup, | 575 kPermissionsKillSwitchFieldStudy, kPermissionsKillSwitchTestGroup, |
| 592 params); | 576 params); |
| 593 base::FieldTrialList::CreateFieldTrial(kPermissionsKillSwitchFieldStudy, | 577 base::FieldTrialList::CreateFieldTrial(kPermissionsKillSwitchFieldStudy, |
| 594 kPermissionsKillSwitchTestGroup); | 578 kPermissionsKillSwitchTestGroup); |
| 595 EXPECT_TRUE(permission_context.IsPermissionKillSwitchOn()); | 579 EXPECT_TRUE(permission_context.IsPermissionKillSwitchOn()); |
| 596 } | 580 } |
| 597 | 581 |
| 598 // Don't call this more than once in the same test, as it persists data to | 582 // Don't call this more than once in the same test, as it persists data to |
| 599 // HostContentSettingsMap. | 583 // HostContentSettingsMap. |
| 600 void TestParallelRequests(ContentSetting response) { | 584 void TestParallelRequests(ContentSetting response) { |
| 601 TestPermissionContext permission_context( | 585 TestPermissionContext permission_context( |
| 602 profile(), content::PermissionType::NOTIFICATIONS, | 586 profile(), CONTENT_SETTINGS_TYPE_NOTIFICATIONS); |
| 603 CONTENT_SETTINGS_TYPE_NOTIFICATIONS); | |
| 604 GURL url("http://www.google.com"); | 587 GURL url("http://www.google.com"); |
| 605 NavigateAndCommit(url); | 588 NavigateAndCommit(url); |
| 606 | 589 |
| 607 const PermissionRequestID id0( | 590 const PermissionRequestID id0( |
| 608 web_contents()->GetRenderProcessHost()->GetID(), | 591 web_contents()->GetRenderProcessHost()->GetID(), |
| 609 web_contents()->GetMainFrame()->GetRoutingID(), 0); | 592 web_contents()->GetMainFrame()->GetRoutingID(), 0); |
| 610 const PermissionRequestID id1( | 593 const PermissionRequestID id1( |
| 611 web_contents()->GetRenderProcessHost()->GetID(), | 594 web_contents()->GetRenderProcessHost()->GetID(), |
| 612 web_contents()->GetMainFrame()->GetRoutingID(), 1); | 595 web_contents()->GetMainFrame()->GetRoutingID(), 1); |
| 613 | 596 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 634 | 617 |
| 635 ASSERT_EQ(2u, permission_context.decisions().size()); | 618 ASSERT_EQ(2u, permission_context.decisions().size()); |
| 636 EXPECT_EQ(response, permission_context.decisions()[0]); | 619 EXPECT_EQ(response, permission_context.decisions()[0]); |
| 637 EXPECT_EQ(response, permission_context.decisions()[1]); | 620 EXPECT_EQ(response, permission_context.decisions()[1]); |
| 638 EXPECT_TRUE(permission_context.tab_context_updated()); | 621 EXPECT_TRUE(permission_context.tab_context_updated()); |
| 639 | 622 |
| 640 EXPECT_EQ(response, permission_context.GetContentSettingFromMap(url, url)); | 623 EXPECT_EQ(response, permission_context.GetContentSettingFromMap(url, url)); |
| 641 } | 624 } |
| 642 | 625 |
| 643 void TestPermissionsBlacklisting( | 626 void TestPermissionsBlacklisting( |
| 644 content::PermissionType permission_type, | |
| 645 ContentSettingsType content_settings_type, | 627 ContentSettingsType content_settings_type, |
| 646 scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager> db_manager, | 628 scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager> db_manager, |
| 647 const GURL& url, | 629 const GURL& url, |
| 648 int timeout, | 630 int timeout, |
| 649 ContentSetting expected_permission_status) { | 631 ContentSetting expected_permission_status) { |
| 650 NavigateAndCommit(url); | 632 NavigateAndCommit(url); |
| 651 base::test::ScopedFeatureList scoped_feature_list; | 633 base::test::ScopedFeatureList scoped_feature_list; |
| 652 scoped_feature_list.InitAndEnableFeature(features::kPermissionsBlacklist); | 634 scoped_feature_list.InitAndEnableFeature(features::kPermissionsBlacklist); |
| 653 TestPermissionContext permission_context(profile(), permission_type, | 635 TestPermissionContext permission_context(profile(), content_settings_type); |
| 654 content_settings_type); | |
| 655 PermissionDecisionAutoBlocker::GetForProfile(profile()) | 636 PermissionDecisionAutoBlocker::GetForProfile(profile()) |
| 656 ->SetSafeBrowsingDatabaseManagerAndTimeoutForTesting(db_manager, | 637 ->SetSafeBrowsingDatabaseManagerAndTimeoutForTesting(db_manager, |
| 657 timeout); | 638 timeout); |
| 658 const PermissionRequestID id( | 639 const PermissionRequestID id( |
| 659 web_contents()->GetRenderProcessHost()->GetID(), | 640 web_contents()->GetRenderProcessHost()->GetID(), |
| 660 web_contents()->GetMainFrame()->GetRoutingID(), -1); | 641 web_contents()->GetMainFrame()->GetRoutingID(), -1); |
| 661 | 642 |
| 662 // A response only needs to be made to the permission request if we do not | 643 // A response only needs to be made to the permission request if we do not |
| 663 // expect he permission to be blacklisted, therefore set the response | 644 // expect he permission to be blacklisted, therefore set the response |
| 664 // callback. | 645 // callback. |
| (...skipping 27 matching lines...) Expand all Loading... |
| 692 PermissionRequestManager::CreateForWebContents(web_contents()); | 673 PermissionRequestManager::CreateForWebContents(web_contents()); |
| 693 #endif | 674 #endif |
| 694 } | 675 } |
| 695 | 676 |
| 696 DISALLOW_COPY_AND_ASSIGN(PermissionContextBaseTests); | 677 DISALLOW_COPY_AND_ASSIGN(PermissionContextBaseTests); |
| 697 }; | 678 }; |
| 698 | 679 |
| 699 // Simulates clicking Accept. The permission should be granted and | 680 // Simulates clicking Accept. The permission should be granted and |
| 700 // saved for future use. | 681 // saved for future use. |
| 701 TEST_F(PermissionContextBaseTests, TestAskAndGrantPersist) { | 682 TEST_F(PermissionContextBaseTests, TestAskAndGrantPersist) { |
| 702 TestAskAndDecide_TestContent(content::PermissionType::NOTIFICATIONS, | 683 TestAskAndDecide_TestContent(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, |
| 703 CONTENT_SETTINGS_TYPE_NOTIFICATIONS, | |
| 704 CONTENT_SETTING_ALLOW, true); | 684 CONTENT_SETTING_ALLOW, true); |
| 705 } | 685 } |
| 706 | 686 |
| 707 // Simulates clicking Accept. The permission should be granted, but not | 687 // Simulates clicking Accept. The permission should be granted, but not |
| 708 // persisted. | 688 // persisted. |
| 709 TEST_F(PermissionContextBaseTests, TestAskAndGrantNoPersist) { | 689 TEST_F(PermissionContextBaseTests, TestAskAndGrantNoPersist) { |
| 710 TestAskAndDecide_TestContent(content::PermissionType::NOTIFICATIONS, | 690 TestAskAndDecide_TestContent(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, |
| 711 CONTENT_SETTINGS_TYPE_NOTIFICATIONS, | |
| 712 CONTENT_SETTING_ALLOW, false); | 691 CONTENT_SETTING_ALLOW, false); |
| 713 } | 692 } |
| 714 | 693 |
| 715 // Simulates clicking Block. The permission should be denied and | 694 // Simulates clicking Block. The permission should be denied and |
| 716 // saved for future use. | 695 // saved for future use. |
| 717 TEST_F(PermissionContextBaseTests, TestAskAndBlockPersist) { | 696 TEST_F(PermissionContextBaseTests, TestAskAndBlockPersist) { |
| 718 TestAskAndDecide_TestContent(content::PermissionType::GEOLOCATION, | 697 TestAskAndDecide_TestContent(CONTENT_SETTINGS_TYPE_GEOLOCATION, |
| 719 CONTENT_SETTINGS_TYPE_GEOLOCATION, | |
| 720 CONTENT_SETTING_BLOCK, true); | 698 CONTENT_SETTING_BLOCK, true); |
| 721 } | 699 } |
| 722 | 700 |
| 723 // Simulates clicking Block. The permission should be denied, but not persisted. | 701 // Simulates clicking Block. The permission should be denied, but not persisted. |
| 724 TEST_F(PermissionContextBaseTests, TestAskAndBlockNoPersist) { | 702 TEST_F(PermissionContextBaseTests, TestAskAndBlockNoPersist) { |
| 725 TestAskAndDecide_TestContent(content::PermissionType::GEOLOCATION, | 703 TestAskAndDecide_TestContent(CONTENT_SETTINGS_TYPE_GEOLOCATION, |
| 726 CONTENT_SETTINGS_TYPE_GEOLOCATION, | |
| 727 CONTENT_SETTING_BLOCK, false); | 704 CONTENT_SETTING_BLOCK, false); |
| 728 } | 705 } |
| 729 | 706 |
| 730 // Simulates clicking Dismiss (X) in the infobar/bubble. | 707 // Simulates clicking Dismiss (X) in the infobar/bubble. |
| 731 // The permission should be denied but not saved for future use. | 708 // The permission should be denied but not saved for future use. |
| 732 TEST_F(PermissionContextBaseTests, TestAskAndDismiss) { | 709 TEST_F(PermissionContextBaseTests, TestAskAndDismiss) { |
| 733 TestAskAndDecide_TestContent(content::PermissionType::MIDI_SYSEX, | 710 TestAskAndDecide_TestContent(CONTENT_SETTINGS_TYPE_MIDI_SYSEX, |
| 734 CONTENT_SETTINGS_TYPE_MIDI_SYSEX, | |
| 735 CONTENT_SETTING_ASK, false); | 711 CONTENT_SETTING_ASK, false); |
| 736 } | 712 } |
| 737 | 713 |
| 738 // Simulates clicking Dismiss (X) in the infobar/bubble with the block on too | 714 // Simulates clicking Dismiss (X) in the infobar/bubble with the block on too |
| 739 // many dismissals feature active. The permission should be blocked after | 715 // many dismissals feature active. The permission should be blocked after |
| 740 // several dismissals. | 716 // several dismissals. |
| 741 TEST_F(PermissionContextBaseTests, TestDismissUntilBlocked) { | 717 TEST_F(PermissionContextBaseTests, TestDismissUntilBlocked) { |
| 742 TestBlockOnSeveralDismissals_TestContent(); | 718 TestBlockOnSeveralDismissals_TestContent(); |
| 743 } | 719 } |
| 744 | 720 |
| 745 // Test setting a custom number of dismissals before block via variations. | 721 // Test setting a custom number of dismissals before block via variations. |
| 746 TEST_F(PermissionContextBaseTests, TestDismissVariations) { | 722 TEST_F(PermissionContextBaseTests, TestDismissVariations) { |
| 747 TestVariationBlockOnSeveralDismissals_TestContent(); | 723 TestVariationBlockOnSeveralDismissals_TestContent(); |
| 748 } | 724 } |
| 749 | 725 |
| 750 // Simulates non-valid requesting URL. | 726 // Simulates non-valid requesting URL. |
| 751 // The permission should be denied but not saved for future use. | 727 // The permission should be denied but not saved for future use. |
| 752 TEST_F(PermissionContextBaseTests, TestNonValidRequestingUrl) { | 728 TEST_F(PermissionContextBaseTests, TestNonValidRequestingUrl) { |
| 753 TestRequestPermissionInvalidUrl(content::PermissionType::GEOLOCATION, | 729 TestRequestPermissionInvalidUrl(CONTENT_SETTINGS_TYPE_GEOLOCATION); |
| 754 CONTENT_SETTINGS_TYPE_GEOLOCATION); | 730 TestRequestPermissionInvalidUrl(CONTENT_SETTINGS_TYPE_NOTIFICATIONS); |
| 755 TestRequestPermissionInvalidUrl(content::PermissionType::NOTIFICATIONS, | 731 TestRequestPermissionInvalidUrl(CONTENT_SETTINGS_TYPE_MIDI_SYSEX); |
| 756 CONTENT_SETTINGS_TYPE_NOTIFICATIONS); | |
| 757 TestRequestPermissionInvalidUrl(content::PermissionType::MIDI_SYSEX, | |
| 758 CONTENT_SETTINGS_TYPE_MIDI_SYSEX); | |
| 759 TestRequestPermissionInvalidUrl(content::PermissionType::PUSH_MESSAGING, | |
| 760 CONTENT_SETTINGS_TYPE_NOTIFICATIONS); | |
| 761 #if defined(OS_ANDROID) || defined(OS_CHROMEOS) | 732 #if defined(OS_ANDROID) || defined(OS_CHROMEOS) |
| 762 TestRequestPermissionInvalidUrl( | 733 TestRequestPermissionInvalidUrl( |
| 763 content::PermissionType::PROTECTED_MEDIA_IDENTIFIER, | |
| 764 CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER); | 734 CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER); |
| 765 #endif | 735 #endif |
| 766 } | 736 } |
| 767 | 737 |
| 768 #if defined(OS_ANDROID) | 738 #if defined(OS_ANDROID) |
| 769 // This test is specific to Android because other platforms use bubbles. | 739 // This test is specific to Android because other platforms use bubbles. |
| 770 TEST_F(PermissionContextBaseTests, TestGrantAndRevokeWithInfobars) { | 740 TEST_F(PermissionContextBaseTests, TestGrantAndRevokeWithInfobars) { |
| 771 TestGrantAndRevoke_TestContent(content::PermissionType::GEOLOCATION, | 741 TestGrantAndRevoke_TestContent(CONTENT_SETTINGS_TYPE_GEOLOCATION, |
| 772 CONTENT_SETTINGS_TYPE_GEOLOCATION, | |
| 773 CONTENT_SETTING_ASK); | 742 CONTENT_SETTING_ASK); |
| 774 TestGrantAndRevoke_TestContent(content::PermissionType::MIDI_SYSEX, | 743 TestGrantAndRevoke_TestContent(CONTENT_SETTINGS_TYPE_MIDI_SYSEX, |
| 775 CONTENT_SETTINGS_TYPE_MIDI_SYSEX, | |
| 776 CONTENT_SETTING_ASK); | 744 CONTENT_SETTING_ASK); |
| 777 TestGrantAndRevoke_TestContent( | 745 TestGrantAndRevoke_TestContent( |
| 778 content::PermissionType::PROTECTED_MEDIA_IDENTIFIER, | |
| 779 CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER, CONTENT_SETTING_ASK); | 746 CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER, CONTENT_SETTING_ASK); |
| 780 // TODO(timvolodine): currently no test for | 747 // TODO(timvolodine): currently no test for |
| 781 // CONTENT_SETTINGS_TYPE_NOTIFICATIONS because notification permissions work | 748 // CONTENT_SETTINGS_TYPE_NOTIFICATIONS because notification permissions work |
| 782 // differently with infobars as compared to bubbles (crbug.com/453784). | 749 // differently with infobars as compared to bubbles (crbug.com/453784). |
| 783 } | 750 } |
| 784 #endif | 751 #endif |
| 785 | 752 |
| 786 #if !defined(OS_ANDROID) | 753 #if !defined(OS_ANDROID) |
| 787 // Simulates granting and revoking of permissions using permission bubbles. | 754 // Simulates granting and revoking of permissions using permission bubbles. |
| 788 // This test shouldn't run on mobile because mobile platforms use infobars. | 755 // This test shouldn't run on mobile because mobile platforms use infobars. |
| 789 TEST_F(PermissionContextBaseTests, TestGrantAndRevokeWithBubbles) { | 756 TEST_F(PermissionContextBaseTests, TestGrantAndRevokeWithBubbles) { |
| 790 TestGrantAndRevoke_TestContent(content::PermissionType::GEOLOCATION, | 757 TestGrantAndRevoke_TestContent(CONTENT_SETTINGS_TYPE_GEOLOCATION, |
| 791 CONTENT_SETTINGS_TYPE_GEOLOCATION, | |
| 792 CONTENT_SETTING_ASK); | 758 CONTENT_SETTING_ASK); |
| 793 TestGrantAndRevoke_TestContent(content::PermissionType::NOTIFICATIONS, | 759 TestGrantAndRevoke_TestContent(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, |
| 794 CONTENT_SETTINGS_TYPE_NOTIFICATIONS, | |
| 795 CONTENT_SETTING_ASK); | 760 CONTENT_SETTING_ASK); |
| 796 TestGrantAndRevoke_TestContent(content::PermissionType::MIDI_SYSEX, | 761 TestGrantAndRevoke_TestContent(CONTENT_SETTINGS_TYPE_MIDI_SYSEX, |
| 797 CONTENT_SETTINGS_TYPE_MIDI_SYSEX, | |
| 798 CONTENT_SETTING_ASK); | |
| 799 TestGrantAndRevoke_TestContent(content::PermissionType::PUSH_MESSAGING, | |
| 800 CONTENT_SETTINGS_TYPE_NOTIFICATIONS, | |
| 801 CONTENT_SETTING_ASK); | 762 CONTENT_SETTING_ASK); |
| 802 } | 763 } |
| 803 #endif | 764 #endif |
| 804 | 765 |
| 805 // Tests the global kill switch by enabling/disabling the Field Trials. | 766 // Tests the global kill switch by enabling/disabling the Field Trials. |
| 806 TEST_F(PermissionContextBaseTests, TestGlobalKillSwitch) { | 767 TEST_F(PermissionContextBaseTests, TestGlobalKillSwitch) { |
| 807 TestGlobalPermissionsKillSwitch(content::PermissionType::GEOLOCATION, | 768 TestGlobalPermissionsKillSwitch(CONTENT_SETTINGS_TYPE_GEOLOCATION); |
| 808 CONTENT_SETTINGS_TYPE_GEOLOCATION); | 769 TestGlobalPermissionsKillSwitch(CONTENT_SETTINGS_TYPE_NOTIFICATIONS); |
| 809 TestGlobalPermissionsKillSwitch(content::PermissionType::NOTIFICATIONS, | 770 TestGlobalPermissionsKillSwitch(CONTENT_SETTINGS_TYPE_MIDI_SYSEX); |
| 810 CONTENT_SETTINGS_TYPE_NOTIFICATIONS); | 771 TestGlobalPermissionsKillSwitch(CONTENT_SETTINGS_TYPE_PUSH_MESSAGING); |
| 811 TestGlobalPermissionsKillSwitch(content::PermissionType::MIDI_SYSEX, | 772 TestGlobalPermissionsKillSwitch(CONTENT_SETTINGS_TYPE_DURABLE_STORAGE); |
| 812 CONTENT_SETTINGS_TYPE_MIDI_SYSEX); | |
| 813 TestGlobalPermissionsKillSwitch(content::PermissionType::PUSH_MESSAGING, | |
| 814 CONTENT_SETTINGS_TYPE_NOTIFICATIONS); | |
| 815 TestGlobalPermissionsKillSwitch(content::PermissionType::DURABLE_STORAGE, | |
| 816 CONTENT_SETTINGS_TYPE_DURABLE_STORAGE); | |
| 817 #if defined(OS_ANDROID) || defined(OS_CHROMEOS) | 773 #if defined(OS_ANDROID) || defined(OS_CHROMEOS) |
| 818 TestGlobalPermissionsKillSwitch( | 774 TestGlobalPermissionsKillSwitch( |
| 819 content::PermissionType::PROTECTED_MEDIA_IDENTIFIER, | |
| 820 CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER); | 775 CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER); |
| 821 #endif | 776 #endif |
| 822 TestGlobalPermissionsKillSwitch(content::PermissionType::AUDIO_CAPTURE, | 777 TestGlobalPermissionsKillSwitch(CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC); |
| 823 CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC); | 778 TestGlobalPermissionsKillSwitch(CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA); |
| 824 TestGlobalPermissionsKillSwitch(content::PermissionType::VIDEO_CAPTURE, | |
| 825 CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA); | |
| 826 } | 779 } |
| 827 | 780 |
| 828 TEST_F(PermissionContextBaseTests, TestParallelRequestsAllowed) { | 781 TEST_F(PermissionContextBaseTests, TestParallelRequestsAllowed) { |
| 829 TestParallelRequests(CONTENT_SETTING_ALLOW); | 782 TestParallelRequests(CONTENT_SETTING_ALLOW); |
| 830 } | 783 } |
| 831 | 784 |
| 832 TEST_F(PermissionContextBaseTests, TestParallelRequestsBlocked) { | 785 TEST_F(PermissionContextBaseTests, TestParallelRequestsBlocked) { |
| 833 TestParallelRequests(CONTENT_SETTING_BLOCK); | 786 TestParallelRequests(CONTENT_SETTING_BLOCK); |
| 834 } | 787 } |
| 835 | 788 |
| 836 TEST_F(PermissionContextBaseTests, TestParallelRequestsDismissed) { | 789 TEST_F(PermissionContextBaseTests, TestParallelRequestsDismissed) { |
| 837 TestParallelRequests(CONTENT_SETTING_ASK); | 790 TestParallelRequests(CONTENT_SETTING_ASK); |
| 838 } | 791 } |
| 839 | 792 |
| 840 // Tests a blacklisted (URL, permission) pair has had its permission request | 793 // Tests a blacklisted (URL, permission) pair has had its permission request |
| 841 // blocked. | 794 // blocked. |
| 842 TEST_F(PermissionContextBaseTests, TestPermissionsBlacklistingBlocked) { | 795 TEST_F(PermissionContextBaseTests, TestPermissionsBlacklistingBlocked) { |
| 843 scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager = | 796 scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager = |
| 844 new MockSafeBrowsingDatabaseManager(true /* perform_callback */); | 797 new MockSafeBrowsingDatabaseManager(true /* perform_callback */); |
| 845 const GURL url("https://www.example.com"); | 798 const GURL url("https://www.example.com"); |
| 846 std::set<std::string> blacklisted_permissions{"GEOLOCATION"}; | 799 std::set<std::string> blacklisted_permissions{"GEOLOCATION"}; |
| 847 db_manager->BlacklistUrlPermissions(url, blacklisted_permissions); | 800 db_manager->BlacklistUrlPermissions(url, blacklisted_permissions); |
| 848 TestPermissionsBlacklisting(content::PermissionType::GEOLOCATION, | 801 TestPermissionsBlacklisting(CONTENT_SETTINGS_TYPE_GEOLOCATION, db_manager, |
| 849 CONTENT_SETTINGS_TYPE_GEOLOCATION, db_manager, | |
| 850 url, 2000 /* timeout */, CONTENT_SETTING_BLOCK); | 802 url, 2000 /* timeout */, CONTENT_SETTING_BLOCK); |
| 851 } | 803 } |
| 852 | 804 |
| 853 // Tests that a URL that is blacklisted for one permission can still request | 805 // Tests that a URL that is blacklisted for one permission can still request |
| 854 // another and grant another. | 806 // another and grant another. |
| 855 TEST_F(PermissionContextBaseTests, TestPermissionsBlacklistingAllowed) { | 807 TEST_F(PermissionContextBaseTests, TestPermissionsBlacklistingAllowed) { |
| 856 scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager = | 808 scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager = |
| 857 new MockSafeBrowsingDatabaseManager(true /* perform_callback */); | 809 new MockSafeBrowsingDatabaseManager(true /* perform_callback */); |
| 858 const GURL url("https://www.example.com"); | 810 const GURL url("https://www.example.com"); |
| 859 std::set<std::string> blacklisted_permissions{"GEOLOCATION"}; | 811 std::set<std::string> blacklisted_permissions{"GEOLOCATION"}; |
| 860 db_manager->BlacklistUrlPermissions(url, blacklisted_permissions); | 812 db_manager->BlacklistUrlPermissions(url, blacklisted_permissions); |
| 861 TestPermissionsBlacklisting(content::PermissionType::NOTIFICATIONS, | 813 TestPermissionsBlacklisting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, db_manager, |
| 862 CONTENT_SETTINGS_TYPE_NOTIFICATIONS, db_manager, | |
| 863 url, 2000 /* timeout */, CONTENT_SETTING_ALLOW); | 814 url, 2000 /* timeout */, CONTENT_SETTING_ALLOW); |
| 864 } | 815 } |
| OLD | NEW |