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 |