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