| 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 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 310 } | 310 } |
| 311 | 311 |
| 312 if (persist) { | 312 if (persist) { |
| 313 EXPECT_EQ(decision, | 313 EXPECT_EQ(decision, |
| 314 permission_context.GetContentSettingFromMap(url, url)); | 314 permission_context.GetContentSettingFromMap(url, url)); |
| 315 } else { | 315 } else { |
| 316 EXPECT_EQ(CONTENT_SETTING_ASK, | 316 EXPECT_EQ(CONTENT_SETTING_ASK, |
| 317 permission_context.GetContentSettingFromMap(url, url)); | 317 permission_context.GetContentSettingFromMap(url, url)); |
| 318 } | 318 } |
| 319 | 319 |
| 320 histograms.ExpectUniqueSample( |
| 321 "Permissions.AutoBlocker.EmbargoPromptSuppression", |
| 322 PermissionEmbargoStatus::NOT_EMBARGOED, 1); |
| 320 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoStatus", | 323 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoStatus", |
| 321 PermissionEmbargoStatus::NOT_EMBARGOED, 1); | 324 PermissionEmbargoStatus::NOT_EMBARGOED, 1); |
| 322 } | 325 } |
| 323 | 326 |
| 324 void DismissMultipleTimesAndExpectBlock( | 327 void DismissMultipleTimesAndExpectBlock( |
| 325 const GURL& url, | 328 const GURL& url, |
| 326 ContentSettingsType content_settings_type, | 329 ContentSettingsType content_settings_type, |
| 327 uint32_t iterations) { | 330 uint32_t iterations) { |
| 328 base::HistogramTester histograms; | 331 base::HistogramTester histograms; |
| 329 | 332 |
| 330 // Dismiss |iterations| times. The final dismiss should change the decision | 333 // Dismiss |iterations| times. The final dismiss should change the decision |
| 331 // from dismiss to block, and hence change the persisted content setting. | 334 // from dismiss to block, and hence change the persisted content setting. |
| 332 for (uint32_t i = 0; i < iterations; ++i) { | 335 for (uint32_t i = 0; i < iterations; ++i) { |
| 333 ContentSetting expected = | |
| 334 (i < 2) ? CONTENT_SETTING_ASK : CONTENT_SETTING_BLOCK; | |
| 335 TestPermissionContext permission_context(profile(), | 336 TestPermissionContext permission_context(profile(), |
| 336 content_settings_type); | 337 content_settings_type); |
| 337 const PermissionRequestID id( | 338 const PermissionRequestID id( |
| 338 web_contents()->GetRenderProcessHost()->GetID(), | 339 web_contents()->GetRenderProcessHost()->GetID(), |
| 339 web_contents()->GetMainFrame()->GetRoutingID(), i); | 340 web_contents()->GetMainFrame()->GetRoutingID(), i); |
| 340 | 341 |
| 341 permission_context.SetRespondPermissionCallback( | 342 permission_context.SetRespondPermissionCallback( |
| 342 base::Bind(&PermissionContextBaseTests::RespondToPermission, | 343 base::Bind(&PermissionContextBaseTests::RespondToPermission, |
| 343 base::Unretained(this), &permission_context, id, url, | 344 base::Unretained(this), &permission_context, id, url, |
| 344 false, CONTENT_SETTING_ASK)); | 345 false, CONTENT_SETTING_ASK)); |
| 345 | 346 |
| 346 permission_context.RequestPermission( | 347 permission_context.RequestPermission( |
| 347 web_contents(), id, url, true /* user_gesture */, | 348 web_contents(), id, url, true /* user_gesture */, |
| 348 base::Bind(&TestPermissionContext::TrackPermissionDecision, | 349 base::Bind(&TestPermissionContext::TrackPermissionDecision, |
| 349 base::Unretained(&permission_context))); | 350 base::Unretained(&permission_context))); |
| 350 histograms.ExpectTotalCount( | 351 histograms.ExpectTotalCount( |
| 351 "Permissions.Prompt.Dismissed.PriorDismissCount." + | 352 "Permissions.Prompt.Dismissed.PriorDismissCount." + |
| 352 PermissionUtil::GetPermissionString(content_settings_type), | 353 PermissionUtil::GetPermissionString(content_settings_type), |
| 353 i + 1); | 354 i + 1); |
| 354 histograms.ExpectBucketCount( | 355 histograms.ExpectBucketCount( |
| 355 "Permissions.Prompt.Dismissed.PriorDismissCount." + | 356 "Permissions.Prompt.Dismissed.PriorDismissCount." + |
| 356 PermissionUtil::GetPermissionString(content_settings_type), | 357 PermissionUtil::GetPermissionString(content_settings_type), |
| 357 i, 1); | 358 i, 1); |
| 359 |
| 360 // On Android, repeatedly requesting and deciding permissions has the side |
| 361 // effect of overcounting any metrics recorded in the PermissionInfoBarDelegate |
| 362 // destructor. This is because we directly call |
| 363 // PermissionQueueController::OnPermissionSet without setting the action_taken |
| 364 // bit in PermissionInfoBarDelegate. When PermissionQueueController is deleted |
| 365 // all OS_ANDROID ifdefs in this test can be removed. |
| 366 #if !defined(OS_ANDROID) |
| 358 histograms.ExpectTotalCount("Permissions.AutoBlocker.EmbargoStatus", | 367 histograms.ExpectTotalCount("Permissions.AutoBlocker.EmbargoStatus", |
| 359 i + 1); | 368 i + 1); |
| 369 #endif |
| 370 |
| 371 PermissionResult result = |
| 372 permission_context.GetPermissionStatus(url, url); |
| 373 |
| 374 histograms.ExpectUniqueSample( |
| 375 "Permissions.AutoBlocker.EmbargoPromptSuppression", |
| 376 PermissionEmbargoStatus::NOT_EMBARGOED, i + 1); |
| 360 if (i < 2) { | 377 if (i < 2) { |
| 378 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source); |
| 379 EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting); |
| 380 #if !defined(OS_ANDROID) |
| 361 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoStatus", | 381 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoStatus", |
| 362 PermissionEmbargoStatus::NOT_EMBARGOED, | 382 PermissionEmbargoStatus::NOT_EMBARGOED, |
| 363 i + 1); | 383 i + 1); |
| 384 #endif |
| 364 } else { | 385 } else { |
| 386 EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source); |
| 387 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); |
| 388 #if !defined(OS_ANDROID) |
| 365 histograms.ExpectBucketCount( | 389 histograms.ExpectBucketCount( |
| 366 "Permissions.AutoBlocker.EmbargoStatus", | 390 "Permissions.AutoBlocker.EmbargoStatus", |
| 367 PermissionEmbargoStatus::REPEATED_DISMISSALS, 1); | 391 PermissionEmbargoStatus::REPEATED_DISMISSALS, 1); |
| 392 #endif |
| 368 } | 393 } |
| 369 | 394 |
| 370 ASSERT_EQ(1u, permission_context.decisions().size()); | 395 ASSERT_EQ(1u, permission_context.decisions().size()); |
| 371 EXPECT_EQ(CONTENT_SETTING_ASK, permission_context.decisions()[0]); | 396 EXPECT_EQ(CONTENT_SETTING_ASK, permission_context.decisions()[0]); |
| 372 EXPECT_TRUE(permission_context.tab_context_updated()); | 397 EXPECT_TRUE(permission_context.tab_context_updated()); |
| 373 PermissionResult result = | |
| 374 permission_context.GetPermissionStatus(url, url); | |
| 375 EXPECT_EQ(expected, result.content_setting); | |
| 376 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source); | |
| 377 } | 398 } |
| 378 | 399 |
| 379 TestPermissionContext permission_context(profile(), content_settings_type); | 400 TestPermissionContext permission_context(profile(), content_settings_type); |
| 380 const PermissionRequestID id( | 401 const PermissionRequestID id( |
| 381 web_contents()->GetRenderProcessHost()->GetID(), | 402 web_contents()->GetRenderProcessHost()->GetID(), |
| 382 web_contents()->GetMainFrame()->GetRoutingID(), -1); | 403 web_contents()->GetMainFrame()->GetRoutingID(), -1); |
| 383 | 404 |
| 384 permission_context.SetRespondPermissionCallback( | 405 permission_context.SetRespondPermissionCallback( |
| 385 base::Bind(&PermissionContextBaseTests::RespondToPermission, | 406 base::Bind(&PermissionContextBaseTests::RespondToPermission, |
| 386 base::Unretained(this), &permission_context, id, url, false, | 407 base::Unretained(this), &permission_context, id, url, false, |
| 387 CONTENT_SETTING_ASK)); | 408 CONTENT_SETTING_ASK)); |
| 388 | 409 |
| 389 permission_context.RequestPermission( | 410 permission_context.RequestPermission( |
| 390 web_contents(), id, url, true /* user_gesture */, | 411 web_contents(), id, url, true /* user_gesture */, |
| 391 base::Bind(&TestPermissionContext::TrackPermissionDecision, | 412 base::Bind(&TestPermissionContext::TrackPermissionDecision, |
| 392 base::Unretained(&permission_context))); | 413 base::Unretained(&permission_context))); |
| 393 | 414 |
| 394 PermissionResult result = permission_context.GetPermissionStatus(url, url); | 415 PermissionResult result = permission_context.GetPermissionStatus(url, url); |
| 395 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); | 416 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); |
| 396 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source); | 417 EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source); |
| 418 histograms.ExpectBucketCount( |
| 419 "Permissions.AutoBlocker.EmbargoPromptSuppression", |
| 420 PermissionEmbargoStatus::REPEATED_DISMISSALS, 1); |
| 397 } | 421 } |
| 398 | 422 |
| 399 void TestBlockOnSeveralDismissals_TestContent() { | 423 void TestBlockOnSeveralDismissals_TestContent() { |
| 400 GURL url("https://www.google.com"); | 424 GURL url("https://www.google.com"); |
| 401 NavigateAndCommit(url); | 425 NavigateAndCommit(url); |
| 402 base::HistogramTester histograms; | 426 base::HistogramTester histograms; |
| 403 | 427 |
| 404 // First, ensure that > 3 dismissals behaves correctly. | 428 // First, ensure that > 3 dismissals behaves correctly. |
| 405 for (uint32_t i = 0; i < 4; ++i) { | 429 for (uint32_t i = 0; i < 4; ++i) { |
| 406 TestPermissionContext permission_context( | 430 TestPermissionContext permission_context( |
| 407 profile(), CONTENT_SETTINGS_TYPE_GEOLOCATION); | 431 profile(), CONTENT_SETTINGS_TYPE_GEOLOCATION); |
| 408 | 432 |
| 409 const PermissionRequestID id( | 433 const PermissionRequestID id( |
| 410 web_contents()->GetRenderProcessHost()->GetID(), | 434 web_contents()->GetRenderProcessHost()->GetID(), |
| 411 web_contents()->GetMainFrame()->GetRoutingID(), i); | 435 web_contents()->GetMainFrame()->GetRoutingID(), i); |
| 412 | 436 |
| 413 permission_context.SetRespondPermissionCallback( | 437 permission_context.SetRespondPermissionCallback( |
| 414 base::Bind(&PermissionContextBaseTests::RespondToPermission, | 438 base::Bind(&PermissionContextBaseTests::RespondToPermission, |
| 415 base::Unretained(this), &permission_context, id, url, | 439 base::Unretained(this), &permission_context, id, url, |
| 416 false, CONTENT_SETTING_ASK)); | 440 false, CONTENT_SETTING_ASK)); |
| 417 permission_context.RequestPermission( | 441 permission_context.RequestPermission( |
| 418 web_contents(), id, url, true /* user_gesture */, | 442 web_contents(), id, url, true /* user_gesture */, |
| 419 base::Bind(&TestPermissionContext::TrackPermissionDecision, | 443 base::Bind(&TestPermissionContext::TrackPermissionDecision, |
| 420 base::Unretained(&permission_context))); | 444 base::Unretained(&permission_context))); |
| 421 histograms.ExpectTotalCount( | 445 histograms.ExpectTotalCount( |
| 422 "Permissions.Prompt.Dismissed.PriorDismissCount.Geolocation", | 446 "Permissions.Prompt.Dismissed.PriorDismissCount.Geolocation", |
| 423 i + 1); | 447 i + 1); |
| 424 histograms.ExpectBucketCount( | 448 histograms.ExpectBucketCount( |
| 425 "Permissions.Prompt.Dismissed.PriorDismissCount.Geolocation", i, 1); | 449 "Permissions.Prompt.Dismissed.PriorDismissCount.Geolocation", i, 1); |
| 450 histograms.ExpectUniqueSample( |
| 451 "Permissions.AutoBlocker.EmbargoPromptSuppression", |
| 452 PermissionEmbargoStatus::NOT_EMBARGOED, i + 1); |
| 453 |
| 454 // On Android, repeatedly requesting and deciding permissions has the side |
| 455 // effect of overcounting any metrics recorded in the PermissionInfoBarDelegate |
| 456 // destructor. This is because we directly call |
| 457 // PermissionQueueController::OnPermissionSet without setting the action_taken |
| 458 // bit in PermissionInfoBarDelegate. When PermissionQueueController is deleted |
| 459 // all OS_ANDROID ifdefs in this test can be removed. |
| 460 #if !defined(OS_ANDROID) |
| 426 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoStatus", | 461 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoStatus", |
| 427 PermissionEmbargoStatus::NOT_EMBARGOED, | 462 PermissionEmbargoStatus::NOT_EMBARGOED, |
| 428 i + 1); | 463 i + 1); |
| 464 #endif |
| 429 | 465 |
| 430 ASSERT_EQ(1u, permission_context.decisions().size()); | 466 ASSERT_EQ(1u, permission_context.decisions().size()); |
| 431 EXPECT_EQ(CONTENT_SETTING_ASK, permission_context.decisions()[0]); | 467 EXPECT_EQ(CONTENT_SETTING_ASK, permission_context.decisions()[0]); |
| 432 EXPECT_TRUE(permission_context.tab_context_updated()); | 468 EXPECT_TRUE(permission_context.tab_context_updated()); |
| 433 EXPECT_EQ(CONTENT_SETTING_ASK, | 469 EXPECT_EQ(CONTENT_SETTING_ASK, |
| 434 permission_context.GetContentSettingFromMap(url, url)); | 470 permission_context.GetContentSettingFromMap(url, url)); |
| 435 } | 471 } |
| 436 | 472 |
| 437 // Flush the dismissal counts. Enable the block on too many dismissals | 473 // Flush the dismissal counts. Enable the block on too many dismissals |
| 438 // feature, which is disabled by default. | 474 // feature, which is disabled by default. |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 484 std::map<std::string, std::string> actual_params; | 520 std::map<std::string, std::string> actual_params; |
| 485 EXPECT_TRUE(variations::GetVariationParamsByFeature( | 521 EXPECT_TRUE(variations::GetVariationParamsByFeature( |
| 486 features::kBlockPromptsIfDismissedOften, &actual_params)); | 522 features::kBlockPromptsIfDismissedOften, &actual_params)); |
| 487 EXPECT_EQ(params, actual_params); | 523 EXPECT_EQ(params, actual_params); |
| 488 } | 524 } |
| 489 | 525 |
| 490 for (uint32_t i = 0; i < 5; ++i) { | 526 for (uint32_t i = 0; i < 5; ++i) { |
| 491 TestPermissionContext permission_context( | 527 TestPermissionContext permission_context( |
| 492 profile(), CONTENT_SETTINGS_TYPE_MIDI_SYSEX); | 528 profile(), CONTENT_SETTINGS_TYPE_MIDI_SYSEX); |
| 493 | 529 |
| 494 ContentSetting expected = | |
| 495 (i < 4) ? CONTENT_SETTING_ASK : CONTENT_SETTING_BLOCK; | |
| 496 const PermissionRequestID id( | 530 const PermissionRequestID id( |
| 497 web_contents()->GetRenderProcessHost()->GetID(), | 531 web_contents()->GetRenderProcessHost()->GetID(), |
| 498 web_contents()->GetMainFrame()->GetRoutingID(), i); | 532 web_contents()->GetMainFrame()->GetRoutingID(), i); |
| 499 permission_context.SetRespondPermissionCallback( | 533 permission_context.SetRespondPermissionCallback( |
| 500 base::Bind(&PermissionContextBaseTests::RespondToPermission, | 534 base::Bind(&PermissionContextBaseTests::RespondToPermission, |
| 501 base::Unretained(this), &permission_context, id, url, | 535 base::Unretained(this), &permission_context, id, url, |
| 502 false, CONTENT_SETTING_ASK)); | 536 false, CONTENT_SETTING_ASK)); |
| 503 permission_context.RequestPermission( | 537 permission_context.RequestPermission( |
| 504 web_contents(), id, url, true /* user_gesture */, | 538 web_contents(), id, url, true /* user_gesture */, |
| 505 base::Bind(&TestPermissionContext::TrackPermissionDecision, | 539 base::Bind(&TestPermissionContext::TrackPermissionDecision, |
| 506 base::Unretained(&permission_context))); | 540 base::Unretained(&permission_context))); |
| 507 | 541 |
| 508 EXPECT_EQ(1u, permission_context.decisions().size()); | 542 EXPECT_EQ(1u, permission_context.decisions().size()); |
| 509 ASSERT_EQ(CONTENT_SETTING_ASK, permission_context.decisions()[0]); | 543 ASSERT_EQ(CONTENT_SETTING_ASK, permission_context.decisions()[0]); |
| 510 EXPECT_TRUE(permission_context.tab_context_updated()); | 544 EXPECT_TRUE(permission_context.tab_context_updated()); |
| 511 PermissionResult result = | 545 PermissionResult result = |
| 512 permission_context.GetPermissionStatus(url, url); | 546 permission_context.GetPermissionStatus(url, url); |
| 513 EXPECT_EQ(expected, result.content_setting); | |
| 514 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source); | |
| 515 | 547 |
| 516 histograms.ExpectTotalCount( | 548 histograms.ExpectTotalCount( |
| 517 "Permissions.Prompt.Dismissed.PriorDismissCount.MidiSysEx", i + 1); | 549 "Permissions.Prompt.Dismissed.PriorDismissCount.MidiSysEx", i + 1); |
| 518 histograms.ExpectBucketCount( | 550 histograms.ExpectBucketCount( |
| 519 "Permissions.Prompt.Dismissed.PriorDismissCount.MidiSysEx", i, 1); | 551 "Permissions.Prompt.Dismissed.PriorDismissCount.MidiSysEx", i, 1); |
| 552 histograms.ExpectUniqueSample( |
| 553 "Permissions.AutoBlocker.EmbargoPromptSuppression", |
| 554 PermissionEmbargoStatus::NOT_EMBARGOED, i + 1); |
| 520 | 555 |
| 556 // On Android, repeatedly requesting and deciding permissions has the side |
| 557 // effect of overcounting any metrics recorded in the PermissionInfoBarDelegate |
| 558 // destructor. This is because we directly call |
| 559 // PermissionQueueController::OnPermissionSet without setting the action_taken |
| 560 // bit in PermissionInfoBarDelegate. When PermissionQueueController is deleted |
| 561 // all OS_ANDROID ifdefs in this test can be removed. |
| 562 #if !defined(OS_ANDROID) |
| 521 histograms.ExpectTotalCount("Permissions.AutoBlocker.EmbargoStatus", | 563 histograms.ExpectTotalCount("Permissions.AutoBlocker.EmbargoStatus", |
| 522 i + 1); | 564 i + 1); |
| 565 #endif |
| 523 if (i < 4) { | 566 if (i < 4) { |
| 567 EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting); |
| 568 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source); |
| 569 #if !defined(OS_ANDROID) |
| 524 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoStatus", | 570 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoStatus", |
| 525 PermissionEmbargoStatus::NOT_EMBARGOED, | 571 PermissionEmbargoStatus::NOT_EMBARGOED, |
| 526 i + 1); | 572 i + 1); |
| 573 #endif |
| 527 } else { | 574 } else { |
| 575 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); |
| 576 EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source); |
| 577 #if !defined(OS_ANDROID) |
| 528 histograms.ExpectBucketCount( | 578 histograms.ExpectBucketCount( |
| 529 "Permissions.AutoBlocker.EmbargoStatus", | 579 "Permissions.AutoBlocker.EmbargoStatus", |
| 530 PermissionEmbargoStatus::REPEATED_DISMISSALS, 1); | 580 PermissionEmbargoStatus::REPEATED_DISMISSALS, 1); |
| 581 #endif |
| 531 } | 582 } |
| 532 } | 583 } |
| 533 | 584 |
| 534 // Ensure that we finish in the block state. | 585 // Ensure that we finish in the block state. |
| 535 TestPermissionContext permission_context(profile(), | 586 TestPermissionContext permission_context(profile(), |
| 536 CONTENT_SETTINGS_TYPE_MIDI_SYSEX); | 587 CONTENT_SETTINGS_TYPE_MIDI_SYSEX); |
| 537 PermissionResult result = permission_context.GetPermissionStatus(url, url); | 588 PermissionResult result = permission_context.GetPermissionStatus(url, url); |
| 538 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); | 589 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); |
| 539 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source); | 590 EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source); |
| 540 | |
| 541 variations::testing::ClearAllVariationParams(); | 591 variations::testing::ClearAllVariationParams(); |
| 542 } | 592 } |
| 543 | 593 |
| 544 void TestRequestPermissionInvalidUrl( | 594 void TestRequestPermissionInvalidUrl( |
| 545 ContentSettingsType content_settings_type) { | 595 ContentSettingsType content_settings_type) { |
| 596 base::HistogramTester histograms; |
| 546 TestPermissionContext permission_context(profile(), content_settings_type); | 597 TestPermissionContext permission_context(profile(), content_settings_type); |
| 547 GURL url; | 598 GURL url; |
| 548 ASSERT_FALSE(url.is_valid()); | 599 ASSERT_FALSE(url.is_valid()); |
| 549 NavigateAndCommit(url); | 600 NavigateAndCommit(url); |
| 550 | 601 |
| 551 const PermissionRequestID id( | 602 const PermissionRequestID id( |
| 552 web_contents()->GetRenderProcessHost()->GetID(), | 603 web_contents()->GetRenderProcessHost()->GetID(), |
| 553 web_contents()->GetMainFrame()->GetRoutingID(), | 604 web_contents()->GetMainFrame()->GetRoutingID(), |
| 554 -1); | 605 -1); |
| 555 permission_context.RequestPermission( | 606 permission_context.RequestPermission( |
| 556 web_contents(), | 607 web_contents(), |
| 557 id, url, true /* user_gesture */, | 608 id, url, true /* user_gesture */, |
| 558 base::Bind(&TestPermissionContext::TrackPermissionDecision, | 609 base::Bind(&TestPermissionContext::TrackPermissionDecision, |
| 559 base::Unretained(&permission_context))); | 610 base::Unretained(&permission_context))); |
| 560 | 611 |
| 561 ASSERT_EQ(1u, permission_context.decisions().size()); | 612 ASSERT_EQ(1u, permission_context.decisions().size()); |
| 562 EXPECT_EQ(CONTENT_SETTING_BLOCK, permission_context.decisions()[0]); | 613 EXPECT_EQ(CONTENT_SETTING_BLOCK, permission_context.decisions()[0]); |
| 563 EXPECT_TRUE(permission_context.tab_context_updated()); | 614 EXPECT_TRUE(permission_context.tab_context_updated()); |
| 564 EXPECT_EQ(CONTENT_SETTING_ASK, | 615 EXPECT_EQ(CONTENT_SETTING_ASK, |
| 565 permission_context.GetContentSettingFromMap(url, url)); | 616 permission_context.GetContentSettingFromMap(url, url)); |
| 617 histograms.ExpectTotalCount( |
| 618 "Permissions.AutoBlocker.EmbargoPromptSuppression", 0); |
| 566 } | 619 } |
| 567 | 620 |
| 568 void TestGrantAndRevoke_TestContent(ContentSettingsType content_settings_type, | 621 void TestGrantAndRevoke_TestContent(ContentSettingsType content_settings_type, |
| 569 ContentSetting expected_default) { | 622 ContentSetting expected_default) { |
| 570 TestPermissionContext permission_context(profile(), content_settings_type); | 623 TestPermissionContext permission_context(profile(), content_settings_type); |
| 571 GURL url("https://www.google.com"); | 624 GURL url("https://www.google.com"); |
| 572 NavigateAndCommit(url); | 625 NavigateAndCommit(url); |
| 573 | 626 |
| 574 const PermissionRequestID id( | 627 const PermissionRequestID id( |
| 575 web_contents()->GetRenderProcessHost()->GetID(), | 628 web_contents()->GetRenderProcessHost()->GetID(), |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 677 scoped_feature_list.InitAndEnableFeature(features::kPermissionsBlacklist); | 730 scoped_feature_list.InitAndEnableFeature(features::kPermissionsBlacklist); |
| 678 TestPermissionContext permission_context(profile(), content_settings_type); | 731 TestPermissionContext permission_context(profile(), content_settings_type); |
| 679 PermissionDecisionAutoBlocker::GetForProfile(profile()) | 732 PermissionDecisionAutoBlocker::GetForProfile(profile()) |
| 680 ->SetSafeBrowsingDatabaseManagerAndTimeoutForTesting(db_manager, | 733 ->SetSafeBrowsingDatabaseManagerAndTimeoutForTesting(db_manager, |
| 681 timeout); | 734 timeout); |
| 682 const PermissionRequestID id( | 735 const PermissionRequestID id( |
| 683 web_contents()->GetRenderProcessHost()->GetID(), | 736 web_contents()->GetRenderProcessHost()->GetID(), |
| 684 web_contents()->GetMainFrame()->GetRoutingID(), -1); | 737 web_contents()->GetMainFrame()->GetRoutingID(), -1); |
| 685 | 738 |
| 686 // A response only needs to be made to the permission request if we do not | 739 // A response only needs to be made to the permission request if we do not |
| 687 // expect he permission to be blacklisted, therefore set the response | 740 // expect the permission to be blacklisted. |
| 688 // callback. | |
| 689 if (expected_permission_status == CONTENT_SETTING_ALLOW) { | 741 if (expected_permission_status == CONTENT_SETTING_ALLOW) { |
| 690 permission_context.SetRespondPermissionCallback( | 742 permission_context.SetRespondPermissionCallback( |
| 691 base::Bind(&PermissionContextBaseTests::RespondToPermission, | 743 base::Bind(&PermissionContextBaseTests::RespondToPermission, |
| 692 base::Unretained(this), &permission_context, id, url, | 744 base::Unretained(this), &permission_context, id, url, |
| 693 true /* persist */, expected_permission_status)); | 745 true /* persist */, expected_permission_status)); |
| 694 } | 746 } |
| 695 | 747 |
| 696 permission_context.RequestPermission( | 748 permission_context.RequestPermission( |
| 697 web_contents(), id, url, true /* user_gesture */, | 749 web_contents(), id, url, true /* user_gesture */, |
| 698 base::Bind(&TestPermissionContext::TrackPermissionDecision, | 750 base::Bind(&TestPermissionContext::TrackPermissionDecision, |
| 699 base::Unretained(&permission_context))); | 751 base::Unretained(&permission_context))); |
| 700 PermissionResult result = permission_context.GetPermissionStatus(url, url); | 752 PermissionResult result = permission_context.GetPermissionStatus(url, url); |
| 701 EXPECT_EQ(expected_permission_status, result.content_setting); | 753 EXPECT_EQ(expected_permission_status, result.content_setting); |
| 702 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source); | |
| 703 | 754 |
| 704 if (expected_permission_status == CONTENT_SETTING_ALLOW) { | 755 if (expected_permission_status == CONTENT_SETTING_ALLOW) { |
| 705 ASSERT_EQ(1u, permission_context.decisions().size()); | 756 ASSERT_EQ(1u, permission_context.decisions().size()); |
| 706 EXPECT_EQ(expected_permission_status, permission_context.decisions()[0]); | 757 EXPECT_EQ(expected_permission_status, permission_context.decisions()[0]); |
| 758 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source); |
| 759 } else { |
| 760 EXPECT_EQ(PermissionStatusSource::SAFE_BROWSING_BLACKLIST, result.source); |
| 707 } | 761 } |
| 762 histograms.ExpectUniqueSample( |
| 763 "Permissions.AutoBlocker.EmbargoPromptSuppression", |
| 764 expected_embargo_reason, 1); |
| 708 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoStatus", | 765 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoStatus", |
| 709 expected_embargo_reason, 1); | 766 expected_embargo_reason, 1); |
| 710 } | 767 } |
| 711 | 768 |
| 712 private: | 769 private: |
| 713 // ChromeRenderViewHostTestHarness: | 770 // ChromeRenderViewHostTestHarness: |
| 714 void SetUp() override { | 771 void SetUp() override { |
| 715 ChromeRenderViewHostTestHarness::SetUp(); | 772 ChromeRenderViewHostTestHarness::SetUp(); |
| 716 #if defined(OS_ANDROID) | 773 #if defined(OS_ANDROID) |
| 717 InfoBarService::CreateForWebContents(web_contents()); | 774 InfoBarService::CreateForWebContents(web_contents()); |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 856 TEST_F(PermissionContextBaseTests, TestPermissionsBlacklistingAllowed) { | 913 TEST_F(PermissionContextBaseTests, TestPermissionsBlacklistingAllowed) { |
| 857 scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager = | 914 scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager = |
| 858 new MockSafeBrowsingDatabaseManager(true /* perform_callback */); | 915 new MockSafeBrowsingDatabaseManager(true /* perform_callback */); |
| 859 const GURL url("https://www.example.com"); | 916 const GURL url("https://www.example.com"); |
| 860 std::set<std::string> blacklisted_permissions{"GEOLOCATION"}; | 917 std::set<std::string> blacklisted_permissions{"GEOLOCATION"}; |
| 861 db_manager->BlacklistUrlPermissions(url, blacklisted_permissions); | 918 db_manager->BlacklistUrlPermissions(url, blacklisted_permissions); |
| 862 TestPermissionsBlacklisting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, db_manager, | 919 TestPermissionsBlacklisting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, db_manager, |
| 863 url, 2000 /* timeout */, CONTENT_SETTING_ALLOW, | 920 url, 2000 /* timeout */, CONTENT_SETTING_ALLOW, |
| 864 PermissionEmbargoStatus::NOT_EMBARGOED); | 921 PermissionEmbargoStatus::NOT_EMBARGOED); |
| 865 } | 922 } |
| OLD | NEW |