Chromium Code Reviews| 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 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 321 content::PermissionType permission_type, | 321 content::PermissionType permission_type, |
| 322 ContentSettingsType content_settings_type, | 322 ContentSettingsType content_settings_type, |
| 323 uint32_t iterations) { | 323 uint32_t iterations) { |
| 324 base::HistogramTester histograms; | 324 base::HistogramTester histograms; |
| 325 | 325 |
| 326 // Dismiss |iterations| times. The final dismiss should change the decision | 326 // Dismiss |iterations| times. The final dismiss should change the decision |
| 327 // from dismiss to block, and hence change the persisted content setting. | 327 // from dismiss to block, and hence change the persisted content setting. |
| 328 for (uint32_t i = 0; i < iterations; ++i) { | 328 for (uint32_t i = 0; i < iterations; ++i) { |
| 329 TestPermissionContext permission_context( | 329 TestPermissionContext permission_context( |
| 330 profile(), permission_type, content_settings_type); | 330 profile(), permission_type, content_settings_type); |
| 331 ContentSetting expected = | |
| 332 (i < (iterations - 1)) ? CONTENT_SETTING_ASK : CONTENT_SETTING_BLOCK; | |
| 333 | |
| 334 const PermissionRequestID id( | 331 const PermissionRequestID id( |
| 335 web_contents()->GetRenderProcessHost()->GetID(), | 332 web_contents()->GetRenderProcessHost()->GetID(), |
| 336 web_contents()->GetMainFrame()->GetRoutingID(), i); | 333 web_contents()->GetMainFrame()->GetRoutingID(), i); |
| 337 | 334 |
| 338 permission_context.SetRespondPermissionCallback( | 335 permission_context.SetRespondPermissionCallback( |
| 339 base::Bind(&PermissionContextBaseTests::RespondToPermission, | 336 base::Bind(&PermissionContextBaseTests::RespondToPermission, |
| 340 base::Unretained(this), &permission_context, id, url, | 337 base::Unretained(this), &permission_context, id, url, |
| 341 false, CONTENT_SETTING_ASK)); | 338 false, CONTENT_SETTING_ASK)); |
| 342 | 339 |
| 343 permission_context.RequestPermission( | 340 permission_context.RequestPermission( |
| 344 web_contents(), id, url, true /* user_gesture */, | 341 web_contents(), id, url, true /* user_gesture */, |
| 345 base::Bind(&TestPermissionContext::TrackPermissionDecision, | 342 base::Bind(&TestPermissionContext::TrackPermissionDecision, |
| 346 base::Unretained(&permission_context))); | 343 base::Unretained(&permission_context))); |
| 347 histograms.ExpectTotalCount( | 344 histograms.ExpectTotalCount( |
| 348 "Permissions.Prompt.Dismissed.PriorDismissCount." + | 345 "Permissions.Prompt.Dismissed.PriorDismissCount." + |
| 349 PermissionUtil::GetPermissionString(permission_type), | 346 PermissionUtil::GetPermissionString(permission_type), |
| 350 i + 1); | 347 i + 1); |
| 351 histograms.ExpectBucketCount( | 348 histograms.ExpectBucketCount( |
| 352 "Permissions.Prompt.Dismissed.PriorDismissCount." + | 349 "Permissions.Prompt.Dismissed.PriorDismissCount." + |
| 353 PermissionUtil::GetPermissionString(permission_type), | 350 PermissionUtil::GetPermissionString(permission_type), |
| 354 i, 1); | 351 i, 1); |
| 355 | |
| 356 ASSERT_EQ(1u, permission_context.decisions().size()); | 352 ASSERT_EQ(1u, permission_context.decisions().size()); |
| 357 EXPECT_EQ(expected, permission_context.decisions()[0]); | 353 EXPECT_EQ(CONTENT_SETTING_ASK, permission_context.decisions()[0]); |
| 358 EXPECT_TRUE(permission_context.tab_context_updated()); | 354 EXPECT_TRUE(permission_context.tab_context_updated()); |
| 359 EXPECT_EQ(expected, | 355 EXPECT_EQ(CONTENT_SETTING_ASK, |
| 360 permission_context.GetContentSettingFromMap(url, url)); | 356 permission_context.GetPermissionStatus(url, url)); |
| 361 } | 357 } |
| 362 | 358 |
| 363 // Ensure that we finish in the block state. | 359 TestPermissionContext permission_context(profile(), permission_type, |
| 364 TestPermissionContext permission_context( | 360 content_settings_type); |
| 365 profile(), permission_type, content_settings_type); | 361 const PermissionRequestID id( |
| 362 web_contents()->GetRenderProcessHost()->GetID(), | |
| 363 web_contents()->GetMainFrame()->GetRoutingID(), -1); | |
| 364 | |
| 365 permission_context.SetRespondPermissionCallback( | |
| 366 base::Bind(&PermissionContextBaseTests::RespondToPermission, | |
| 367 base::Unretained(this), &permission_context, id, url, false, | |
| 368 CONTENT_SETTING_ASK)); | |
|
raymes
2017/01/18 03:15:20
It looks like it takes one additional request to b
meredithl
2017/01/18 08:28:15
The embargo status wasn't set until the next permi
| |
| 369 | |
| 370 permission_context.RequestPermission( | |
| 371 web_contents(), id, url, true /* user_gesture */, | |
| 372 base::Bind(&TestPermissionContext::TrackPermissionDecision, | |
| 373 base::Unretained(&permission_context))); | |
| 374 | |
| 366 EXPECT_EQ(CONTENT_SETTING_BLOCK, | 375 EXPECT_EQ(CONTENT_SETTING_BLOCK, |
| 367 permission_context.GetContentSettingFromMap(url, url)); | 376 permission_context.GetPermissionStatus(url, url)); |
| 368 } | 377 } |
| 369 | 378 |
| 370 void TestBlockOnSeveralDismissals_TestContent() { | 379 void TestBlockOnSeveralDismissals_TestContent() { |
| 371 GURL url("https://www.google.com"); | 380 GURL url("https://www.google.com"); |
| 372 NavigateAndCommit(url); | 381 NavigateAndCommit(url); |
| 373 base::HistogramTester histograms; | 382 base::HistogramTester histograms; |
| 374 | 383 |
| 375 // First, ensure that > 3 dismissals behaves correctly. | 384 // First, ensure that > 3 dismissals behaves correctly. |
| 376 for (uint32_t i = 0; i < 4; ++i) { | 385 for (uint32_t i = 0; i < 4; ++i) { |
| 377 TestPermissionContext permission_context( | 386 TestPermissionContext permission_context( |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 454 std::map<std::string, std::string> actual_params; | 463 std::map<std::string, std::string> actual_params; |
| 455 EXPECT_TRUE(variations::GetVariationParamsByFeature( | 464 EXPECT_TRUE(variations::GetVariationParamsByFeature( |
| 456 features::kBlockPromptsIfDismissedOften, &actual_params)); | 465 features::kBlockPromptsIfDismissedOften, &actual_params)); |
| 457 EXPECT_EQ(params, actual_params); | 466 EXPECT_EQ(params, actual_params); |
| 458 } | 467 } |
| 459 | 468 |
| 460 for (uint32_t i = 0; i < 5; ++i) { | 469 for (uint32_t i = 0; i < 5; ++i) { |
| 461 TestPermissionContext permission_context( | 470 TestPermissionContext permission_context( |
| 462 profile(), content::PermissionType::MIDI_SYSEX, | 471 profile(), content::PermissionType::MIDI_SYSEX, |
| 463 CONTENT_SETTINGS_TYPE_MIDI_SYSEX); | 472 CONTENT_SETTINGS_TYPE_MIDI_SYSEX); |
| 464 | |
| 465 ContentSetting expected = | |
| 466 (i < 4) ? CONTENT_SETTING_ASK : CONTENT_SETTING_BLOCK; | |
| 467 const PermissionRequestID id( | 473 const PermissionRequestID id( |
| 468 web_contents()->GetRenderProcessHost()->GetID(), | 474 web_contents()->GetRenderProcessHost()->GetID(), |
| 469 web_contents()->GetMainFrame()->GetRoutingID(), i); | 475 web_contents()->GetMainFrame()->GetRoutingID(), i); |
| 470 permission_context.SetRespondPermissionCallback( | 476 permission_context.SetRespondPermissionCallback( |
| 471 base::Bind(&PermissionContextBaseTests::RespondToPermission, | 477 base::Bind(&PermissionContextBaseTests::RespondToPermission, |
| 472 base::Unretained(this), &permission_context, id, url, | 478 base::Unretained(this), &permission_context, id, url, |
| 473 false, CONTENT_SETTING_ASK)); | 479 false, CONTENT_SETTING_ASK)); |
| 474 permission_context.RequestPermission( | 480 permission_context.RequestPermission( |
| 475 web_contents(), id, url, true /* user_gesture */, | 481 web_contents(), id, url, true /* user_gesture */, |
| 476 base::Bind(&TestPermissionContext::TrackPermissionDecision, | 482 base::Bind(&TestPermissionContext::TrackPermissionDecision, |
| 477 base::Unretained(&permission_context))); | 483 base::Unretained(&permission_context))); |
| 478 | 484 |
| 479 EXPECT_EQ(1u, permission_context.decisions().size()); | 485 EXPECT_EQ(1u, permission_context.decisions().size()); |
| 480 ASSERT_EQ(expected, permission_context.decisions()[0]); | 486 ASSERT_EQ(CONTENT_SETTING_ASK, permission_context.decisions()[0]); |
| 481 EXPECT_TRUE(permission_context.tab_context_updated()); | 487 EXPECT_TRUE(permission_context.tab_context_updated()); |
| 482 EXPECT_EQ(expected, | 488 EXPECT_EQ(CONTENT_SETTING_ASK, |
| 483 permission_context.GetContentSettingFromMap(url, url)); | 489 permission_context.GetContentSettingFromMap(url, url)); |
| 484 | 490 |
| 485 histograms.ExpectTotalCount( | 491 histograms.ExpectTotalCount( |
| 486 "Permissions.Prompt.Dismissed.PriorDismissCount.MidiSysEx", i + 1); | 492 "Permissions.Prompt.Dismissed.PriorDismissCount.MidiSysEx", i + 1); |
| 487 histograms.ExpectBucketCount( | 493 histograms.ExpectBucketCount( |
| 488 "Permissions.Prompt.Dismissed.PriorDismissCount.MidiSysEx", i, 1); | 494 "Permissions.Prompt.Dismissed.PriorDismissCount.MidiSysEx", i, 1); |
| 489 } | 495 } |
| 490 | 496 |
| 491 // Ensure that we finish in the block state. | 497 // Ensure that we finish in the block state. |
| 492 TestPermissionContext permission_context( | 498 TestPermissionContext permission_context( |
| 493 profile(), content::PermissionType::MIDI_SYSEX, | 499 profile(), content::PermissionType::MIDI_SYSEX, |
| 494 CONTENT_SETTINGS_TYPE_MIDI_SYSEX); | 500 CONTENT_SETTINGS_TYPE_MIDI_SYSEX); |
| 501 | |
| 502 const PermissionRequestID id( | |
| 503 web_contents()->GetRenderProcessHost()->GetID(), | |
| 504 web_contents()->GetMainFrame()->GetRoutingID(), -1); | |
| 505 | |
| 506 permission_context.SetRespondPermissionCallback( | |
| 507 base::Bind(&PermissionContextBaseTests::RespondToPermission, | |
| 508 base::Unretained(this), &permission_context, id, url, false, | |
| 509 CONTENT_SETTING_ASK)); | |
| 510 | |
| 511 permission_context.RequestPermission( | |
| 512 web_contents(), id, url, true /* user_gesture */, | |
| 513 base::Bind(&TestPermissionContext::TrackPermissionDecision, | |
| 514 base::Unretained(&permission_context))); | |
|
raymes
2017/01/18 03:15:20
Same here
meredithl
2017/01/18 08:28:15
Done.
| |
| 515 | |
| 495 EXPECT_EQ(CONTENT_SETTING_BLOCK, | 516 EXPECT_EQ(CONTENT_SETTING_BLOCK, |
| 496 permission_context.GetContentSettingFromMap(url, url)); | 517 permission_context.GetPermissionStatus(url, url)); |
| 497 variations::testing::ClearAllVariationParams(); | 518 variations::testing::ClearAllVariationParams(); |
| 498 } | 519 } |
| 499 | 520 |
| 500 void TestRequestPermissionInvalidUrl( | 521 void TestRequestPermissionInvalidUrl( |
| 501 content::PermissionType permission_type, | 522 content::PermissionType permission_type, |
| 502 ContentSettingsType content_settings_type) { | 523 ContentSettingsType content_settings_type) { |
| 503 TestPermissionContext permission_context(profile(), permission_type, | 524 TestPermissionContext permission_context(profile(), permission_type, |
| 504 content_settings_type); | 525 content_settings_type); |
| 505 GURL url; | 526 GURL url; |
| 506 ASSERT_FALSE(url.is_valid()); | 527 ASSERT_FALSE(url.is_valid()); |
| (...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 853 new MockSafeBrowsingDatabaseManager(false /* perform_callback */); | 874 new MockSafeBrowsingDatabaseManager(false /* perform_callback */); |
| 854 const GURL url("https://www.example.com"); | 875 const GURL url("https://www.example.com"); |
| 855 std::set<std::string> blacklisted_permissions{ | 876 std::set<std::string> blacklisted_permissions{ |
| 856 PermissionUtil::GetPermissionString( | 877 PermissionUtil::GetPermissionString( |
| 857 content::PermissionType::GEOLOCATION)}; | 878 content::PermissionType::GEOLOCATION)}; |
| 858 db_manager->BlacklistUrlPermissions(url, blacklisted_permissions); | 879 db_manager->BlacklistUrlPermissions(url, blacklisted_permissions); |
| 859 TestPermissionsBlacklisting(content::PermissionType::GEOLOCATION, | 880 TestPermissionsBlacklisting(content::PermissionType::GEOLOCATION, |
| 860 CONTENT_SETTINGS_TYPE_GEOLOCATION, db_manager, | 881 CONTENT_SETTINGS_TYPE_GEOLOCATION, db_manager, |
| 861 url, 0 /* timeout in ms */, CONTENT_SETTING_ASK); | 882 url, 0 /* timeout in ms */, CONTENT_SETTING_ASK); |
| 862 } | 883 } |
| OLD | NEW |