| 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 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 178 respond_permission_ = callback; | 178 respond_permission_ = callback; |
| 179 } | 179 } |
| 180 | 180 |
| 181 protected: | 181 protected: |
| 182 void UpdateTabContext(const PermissionRequestID& id, | 182 void UpdateTabContext(const PermissionRequestID& id, |
| 183 const GURL& requesting_origin, | 183 const GURL& requesting_origin, |
| 184 bool allowed) override { | 184 bool allowed) override { |
| 185 tab_context_updated_ = true; | 185 tab_context_updated_ = true; |
| 186 } | 186 } |
| 187 | 187 |
| 188 bool IsRestrictedToSecureOrigins() const override { | 188 bool IsRestrictedToSecureOrigins() const override { return false; } |
| 189 return false; | |
| 190 } | |
| 191 | 189 |
| 192 private: | 190 private: |
| 193 std::vector<ContentSetting> decisions_; | 191 std::vector<ContentSetting> decisions_; |
| 194 bool tab_context_updated_; | 192 bool tab_context_updated_; |
| 195 base::Closure quit_closure_; | 193 base::Closure quit_closure_; |
| 196 // Callback for responding to a permission once the request has been completed | 194 // Callback for responding to a permission once the request has been completed |
| 197 // (valid URL, kill switch disabled, not blacklisted) | 195 // (valid URL, kill switch disabled, not blacklisted) |
| 198 base::Closure respond_permission_; | 196 base::Closure respond_permission_; |
| 199 DISALLOW_COPY_AND_ASSIGN(TestPermissionContext); | 197 DISALLOW_COPY_AND_ASSIGN(TestPermissionContext); |
| 200 }; | 198 }; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 231 // Accept or dismiss the permission bubble or infobar. | 229 // Accept or dismiss the permission bubble or infobar. |
| 232 void RespondToPermission(TestPermissionContext* context, | 230 void RespondToPermission(TestPermissionContext* context, |
| 233 const PermissionRequestID& id, | 231 const PermissionRequestID& id, |
| 234 const GURL& url, | 232 const GURL& url, |
| 235 bool persist, | 233 bool persist, |
| 236 ContentSetting response) { | 234 ContentSetting response) { |
| 237 DCHECK(response == CONTENT_SETTING_ALLOW || | 235 DCHECK(response == CONTENT_SETTING_ALLOW || |
| 238 response == CONTENT_SETTING_BLOCK || | 236 response == CONTENT_SETTING_BLOCK || |
| 239 response == CONTENT_SETTING_ASK); | 237 response == CONTENT_SETTING_ASK); |
| 240 #if defined(OS_ANDROID) | 238 #if defined(OS_ANDROID) |
| 241 PermissionAction decision = DISMISSED; | 239 PermissionAction decision = PermissionAction::DISMISSED; |
| 242 if (response == CONTENT_SETTING_ALLOW) | 240 if (response == CONTENT_SETTING_ALLOW) |
| 243 decision = GRANTED; | 241 decision = PermissionAction::GRANTED; |
| 244 else if (response == CONTENT_SETTING_BLOCK) | 242 else if (response == CONTENT_SETTING_BLOCK) |
| 245 decision = DENIED; | 243 decision = PermissionAction::DENIED; |
| 246 context->GetInfoBarController()->OnPermissionSet( | 244 context->GetInfoBarController()->OnPermissionSet( |
| 247 id, url, url, false /* user_gesture */, persist, decision); | 245 id, url, url, false /* user_gesture */, persist, decision); |
| 248 #else | 246 #else |
| 249 PermissionRequestManager* manager = | 247 PermissionRequestManager* manager = |
| 250 PermissionRequestManager::FromWebContents(web_contents()); | 248 PermissionRequestManager::FromWebContents(web_contents()); |
| 251 manager->TogglePersist(persist); | 249 manager->TogglePersist(persist); |
| 252 switch (response) { | 250 switch (response) { |
| 253 case CONTENT_SETTING_ALLOW: | 251 case CONTENT_SETTING_ALLOW: |
| 254 manager->Accept(); | 252 manager->Accept(); |
| 255 break; | 253 break; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 268 void TestAskAndDecide_TestContent(ContentSettingsType content_settings_type, | 266 void TestAskAndDecide_TestContent(ContentSettingsType content_settings_type, |
| 269 ContentSetting decision, | 267 ContentSetting decision, |
| 270 bool persist) { | 268 bool persist) { |
| 271 TestPermissionContext permission_context(profile(), content_settings_type); | 269 TestPermissionContext permission_context(profile(), content_settings_type); |
| 272 GURL url("https://www.google.com"); | 270 GURL url("https://www.google.com"); |
| 273 NavigateAndCommit(url); | 271 NavigateAndCommit(url); |
| 274 base::HistogramTester histograms; | 272 base::HistogramTester histograms; |
| 275 | 273 |
| 276 const PermissionRequestID id( | 274 const PermissionRequestID id( |
| 277 web_contents()->GetRenderProcessHost()->GetID(), | 275 web_contents()->GetRenderProcessHost()->GetID(), |
| 278 web_contents()->GetMainFrame()->GetRoutingID(), | 276 web_contents()->GetMainFrame()->GetRoutingID(), -1); |
| 279 -1); | |
| 280 permission_context.SetRespondPermissionCallback( | 277 permission_context.SetRespondPermissionCallback( |
| 281 base::Bind(&PermissionContextBaseTests::RespondToPermission, | 278 base::Bind(&PermissionContextBaseTests::RespondToPermission, |
| 282 base::Unretained(this), &permission_context, id, url, | 279 base::Unretained(this), &permission_context, id, url, |
| 283 persist, decision)); | 280 persist, decision)); |
| 284 permission_context.RequestPermission( | 281 permission_context.RequestPermission( |
| 285 web_contents(), | 282 web_contents(), id, url, true /* user_gesture */, |
| 286 id, url, true /* user_gesture */, | |
| 287 base::Bind(&TestPermissionContext::TrackPermissionDecision, | 283 base::Bind(&TestPermissionContext::TrackPermissionDecision, |
| 288 base::Unretained(&permission_context))); | 284 base::Unretained(&permission_context))); |
| 289 ASSERT_EQ(1u, permission_context.decisions().size()); | 285 ASSERT_EQ(1u, permission_context.decisions().size()); |
| 290 EXPECT_EQ(decision, permission_context.decisions()[0]); | 286 EXPECT_EQ(decision, permission_context.decisions()[0]); |
| 291 EXPECT_TRUE(permission_context.tab_context_updated()); | 287 EXPECT_TRUE(permission_context.tab_context_updated()); |
| 292 | 288 |
| 293 std::string decision_string; | 289 std::string decision_string; |
| 294 if (decision == CONTENT_SETTING_ALLOW) | 290 if (decision == CONTENT_SETTING_ALLOW) |
| 295 decision_string = "Accepted"; | 291 decision_string = "Accepted"; |
| 296 else if (decision == CONTENT_SETTING_BLOCK) | 292 else if (decision == CONTENT_SETTING_BLOCK) |
| (...skipping 15 matching lines...) Expand all Loading... |
| 312 if (persist) { | 308 if (persist) { |
| 313 EXPECT_EQ(decision, | 309 EXPECT_EQ(decision, |
| 314 permission_context.GetContentSettingFromMap(url, url)); | 310 permission_context.GetContentSettingFromMap(url, url)); |
| 315 } else { | 311 } else { |
| 316 EXPECT_EQ(CONTENT_SETTING_ASK, | 312 EXPECT_EQ(CONTENT_SETTING_ASK, |
| 317 permission_context.GetContentSettingFromMap(url, url)); | 313 permission_context.GetContentSettingFromMap(url, url)); |
| 318 } | 314 } |
| 319 | 315 |
| 320 histograms.ExpectUniqueSample( | 316 histograms.ExpectUniqueSample( |
| 321 "Permissions.AutoBlocker.EmbargoPromptSuppression", | 317 "Permissions.AutoBlocker.EmbargoPromptSuppression", |
| 322 PermissionEmbargoStatus::NOT_EMBARGOED, 1); | 318 static_cast<int>(PermissionEmbargoStatus::NOT_EMBARGOED), 1); |
| 323 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoStatus", | 319 histograms.ExpectUniqueSample( |
| 324 PermissionEmbargoStatus::NOT_EMBARGOED, 1); | 320 "Permissions.AutoBlocker.EmbargoStatus", |
| 321 static_cast<int>(PermissionEmbargoStatus::NOT_EMBARGOED), 1); |
| 325 } | 322 } |
| 326 | 323 |
| 327 void DismissMultipleTimesAndExpectBlock( | 324 void DismissMultipleTimesAndExpectBlock( |
| 328 const GURL& url, | 325 const GURL& url, |
| 329 ContentSettingsType content_settings_type, | 326 ContentSettingsType content_settings_type, |
| 330 uint32_t iterations) { | 327 uint32_t iterations) { |
| 331 base::HistogramTester histograms; | 328 base::HistogramTester histograms; |
| 332 | 329 |
| 333 // Dismiss |iterations| times. The final dismiss should change the decision | 330 // Dismiss |iterations| times. The final dismiss should change the decision |
| 334 // from dismiss to block, and hence change the persisted content setting. | 331 // from dismiss to block, and hence change the persisted content setting. |
| 335 for (uint32_t i = 0; i < iterations; ++i) { | 332 for (uint32_t i = 0; i < iterations; ++i) { |
| 336 TestPermissionContext permission_context(profile(), | 333 TestPermissionContext permission_context(profile(), |
| 337 content_settings_type); | 334 content_settings_type); |
| 338 const PermissionRequestID id( | 335 const PermissionRequestID id( |
| 339 web_contents()->GetRenderProcessHost()->GetID(), | 336 web_contents()->GetRenderProcessHost()->GetID(), |
| 340 web_contents()->GetMainFrame()->GetRoutingID(), i); | 337 web_contents()->GetMainFrame()->GetRoutingID(), i); |
| 341 | 338 |
| 342 permission_context.SetRespondPermissionCallback( | 339 permission_context.SetRespondPermissionCallback( |
| 343 base::Bind(&PermissionContextBaseTests::RespondToPermission, | 340 base::Bind(&PermissionContextBaseTests::RespondToPermission, |
| 344 base::Unretained(this), &permission_context, id, url, | 341 base::Unretained(this), &permission_context, id, url, |
| 345 false, CONTENT_SETTING_ASK)); | 342 false, CONTENT_SETTING_ASK)); |
| 346 | 343 |
| 347 permission_context.RequestPermission( | 344 permission_context.RequestPermission( |
| 348 web_contents(), id, url, true /* user_gesture */, | 345 web_contents(), id, url, true /* user_gesture */, |
| 349 base::Bind(&TestPermissionContext::TrackPermissionDecision, | 346 base::Bind(&TestPermissionContext::TrackPermissionDecision, |
| 350 base::Unretained(&permission_context))); | 347 base::Unretained(&permission_context))); |
| 351 histograms.ExpectTotalCount( | 348 histograms.ExpectTotalCount( |
| 352 "Permissions.Prompt.Dismissed.PriorDismissCount." + | 349 "Permissions.Prompt.Dismissed.PriorDismissCount." + |
| 353 PermissionUtil::GetPermissionString(content_settings_type), | 350 PermissionUtil::GetPermissionString(content_settings_type), |
| 354 i + 1); | 351 i + 1); |
| 355 histograms.ExpectBucketCount( | 352 histograms.ExpectBucketCount( |
| 356 "Permissions.Prompt.Dismissed.PriorDismissCount." + | 353 "Permissions.Prompt.Dismissed.PriorDismissCount." + |
| 357 PermissionUtil::GetPermissionString(content_settings_type), | 354 PermissionUtil::GetPermissionString(content_settings_type), |
| 358 i, 1); | 355 i, 1); |
| 359 | 356 |
| 360 // On Android, repeatedly requesting and deciding permissions has the side | 357 // On Android, repeatedly requesting and deciding permissions has the side |
| 361 // effect of overcounting any metrics recorded in the PermissionInfoBarDelegate | 358 // effect of overcounting any metrics recorded in the PermissionInfoBarDelegate |
| 362 // destructor. This is because we directly call | 359 // destructor. This is because we directly call |
| 363 // PermissionQueueController::OnPermissionSet without setting the action_taken | 360 // PermissionQueueController::OnPermissionSet without setting the action_taken |
| 364 // bit in PermissionInfoBarDelegate. When PermissionQueueController is deleted | 361 // bit in PermissionInfoBarDelegate. When PermissionQueueController is deleted |
| 365 // all OS_ANDROID ifdefs in this test can be removed. | 362 // all OS_ANDROID ifdefs in this test can be removed. |
| 366 #if !defined(OS_ANDROID) | 363 #if !defined(OS_ANDROID) |
| 367 histograms.ExpectTotalCount("Permissions.AutoBlocker.EmbargoStatus", | 364 histograms.ExpectTotalCount("Permissions.AutoBlocker.EmbargoStatus", |
| 368 i + 1); | 365 i + 1); |
| 369 #endif | 366 #endif |
| 370 | 367 |
| 371 PermissionResult result = | 368 PermissionResult result = |
| 372 permission_context.GetPermissionStatus(url, url); | 369 permission_context.GetPermissionStatus(url, url); |
| 373 | 370 |
| 374 histograms.ExpectUniqueSample( | 371 histograms.ExpectUniqueSample( |
| 375 "Permissions.AutoBlocker.EmbargoPromptSuppression", | 372 "Permissions.AutoBlocker.EmbargoPromptSuppression", |
| 376 PermissionEmbargoStatus::NOT_EMBARGOED, i + 1); | 373 static_cast<int>(PermissionEmbargoStatus::NOT_EMBARGOED), i + 1); |
| 377 if (i < 2) { | 374 if (i < 2) { |
| 378 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source); | 375 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source); |
| 379 EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting); | 376 EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting); |
| 380 #if !defined(OS_ANDROID) | 377 #if !defined(OS_ANDROID) |
| 381 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoStatus", | 378 histograms.ExpectUniqueSample( |
| 382 PermissionEmbargoStatus::NOT_EMBARGOED, | 379 "Permissions.AutoBlocker.EmbargoStatus", |
| 383 i + 1); | 380 static_cast<int>(PermissionEmbargoStatus::NOT_EMBARGOED), i + 1); |
| 384 #endif | 381 #endif |
| 385 } else { | 382 } else { |
| 386 EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source); | 383 EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source); |
| 387 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); | 384 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); |
| 388 #if !defined(OS_ANDROID) | 385 #if !defined(OS_ANDROID) |
| 389 histograms.ExpectBucketCount( | 386 histograms.ExpectBucketCount( |
| 390 "Permissions.AutoBlocker.EmbargoStatus", | 387 "Permissions.AutoBlocker.EmbargoStatus", |
| 391 PermissionEmbargoStatus::REPEATED_DISMISSALS, 1); | 388 static_cast<int>(PermissionEmbargoStatus::REPEATED_DISMISSALS), 1); |
| 392 #endif | 389 #endif |
| 393 } | 390 } |
| 394 | 391 |
| 395 ASSERT_EQ(1u, permission_context.decisions().size()); | 392 ASSERT_EQ(1u, permission_context.decisions().size()); |
| 396 EXPECT_EQ(CONTENT_SETTING_ASK, permission_context.decisions()[0]); | 393 EXPECT_EQ(CONTENT_SETTING_ASK, permission_context.decisions()[0]); |
| 397 EXPECT_TRUE(permission_context.tab_context_updated()); | 394 EXPECT_TRUE(permission_context.tab_context_updated()); |
| 398 } | 395 } |
| 399 | 396 |
| 400 TestPermissionContext permission_context(profile(), content_settings_type); | 397 TestPermissionContext permission_context(profile(), content_settings_type); |
| 401 const PermissionRequestID id( | 398 const PermissionRequestID id( |
| 402 web_contents()->GetRenderProcessHost()->GetID(), | 399 web_contents()->GetRenderProcessHost()->GetID(), |
| 403 web_contents()->GetMainFrame()->GetRoutingID(), -1); | 400 web_contents()->GetMainFrame()->GetRoutingID(), -1); |
| 404 | 401 |
| 405 permission_context.SetRespondPermissionCallback( | 402 permission_context.SetRespondPermissionCallback( |
| 406 base::Bind(&PermissionContextBaseTests::RespondToPermission, | 403 base::Bind(&PermissionContextBaseTests::RespondToPermission, |
| 407 base::Unretained(this), &permission_context, id, url, false, | 404 base::Unretained(this), &permission_context, id, url, false, |
| 408 CONTENT_SETTING_ASK)); | 405 CONTENT_SETTING_ASK)); |
| 409 | 406 |
| 410 permission_context.RequestPermission( | 407 permission_context.RequestPermission( |
| 411 web_contents(), id, url, true /* user_gesture */, | 408 web_contents(), id, url, true /* user_gesture */, |
| 412 base::Bind(&TestPermissionContext::TrackPermissionDecision, | 409 base::Bind(&TestPermissionContext::TrackPermissionDecision, |
| 413 base::Unretained(&permission_context))); | 410 base::Unretained(&permission_context))); |
| 414 | 411 |
| 415 PermissionResult result = permission_context.GetPermissionStatus(url, url); | 412 PermissionResult result = permission_context.GetPermissionStatus(url, url); |
| 416 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); | 413 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); |
| 417 EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source); | 414 EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source); |
| 418 histograms.ExpectBucketCount( | 415 histograms.ExpectBucketCount( |
| 419 "Permissions.AutoBlocker.EmbargoPromptSuppression", | 416 "Permissions.AutoBlocker.EmbargoPromptSuppression", |
| 420 PermissionEmbargoStatus::REPEATED_DISMISSALS, 1); | 417 static_cast<int>(PermissionEmbargoStatus::REPEATED_DISMISSALS), 1); |
| 421 } | 418 } |
| 422 | 419 |
| 423 void TestBlockOnSeveralDismissals_TestContent() { | 420 void TestBlockOnSeveralDismissals_TestContent() { |
| 424 GURL url("https://www.google.com"); | 421 GURL url("https://www.google.com"); |
| 425 NavigateAndCommit(url); | 422 NavigateAndCommit(url); |
| 426 base::HistogramTester histograms; | 423 base::HistogramTester histograms; |
| 427 | 424 |
| 428 // First, ensure that > 3 dismissals behaves correctly. | 425 // First, ensure that > 3 dismissals behaves correctly. |
| 429 for (uint32_t i = 0; i < 4; ++i) { | 426 for (uint32_t i = 0; i < 4; ++i) { |
| 430 TestPermissionContext permission_context( | 427 TestPermissionContext permission_context( |
| 431 profile(), CONTENT_SETTINGS_TYPE_GEOLOCATION); | 428 profile(), CONTENT_SETTINGS_TYPE_GEOLOCATION); |
| 432 | 429 |
| 433 const PermissionRequestID id( | 430 const PermissionRequestID id( |
| 434 web_contents()->GetRenderProcessHost()->GetID(), | 431 web_contents()->GetRenderProcessHost()->GetID(), |
| 435 web_contents()->GetMainFrame()->GetRoutingID(), i); | 432 web_contents()->GetMainFrame()->GetRoutingID(), i); |
| 436 | 433 |
| 437 permission_context.SetRespondPermissionCallback( | 434 permission_context.SetRespondPermissionCallback( |
| 438 base::Bind(&PermissionContextBaseTests::RespondToPermission, | 435 base::Bind(&PermissionContextBaseTests::RespondToPermission, |
| 439 base::Unretained(this), &permission_context, id, url, | 436 base::Unretained(this), &permission_context, id, url, |
| 440 false, CONTENT_SETTING_ASK)); | 437 false, CONTENT_SETTING_ASK)); |
| 441 permission_context.RequestPermission( | 438 permission_context.RequestPermission( |
| 442 web_contents(), id, url, true /* user_gesture */, | 439 web_contents(), id, url, true /* user_gesture */, |
| 443 base::Bind(&TestPermissionContext::TrackPermissionDecision, | 440 base::Bind(&TestPermissionContext::TrackPermissionDecision, |
| 444 base::Unretained(&permission_context))); | 441 base::Unretained(&permission_context))); |
| 445 histograms.ExpectTotalCount( | 442 histograms.ExpectTotalCount( |
| 446 "Permissions.Prompt.Dismissed.PriorDismissCount.Geolocation", | 443 "Permissions.Prompt.Dismissed.PriorDismissCount.Geolocation", i + 1); |
| 447 i + 1); | |
| 448 histograms.ExpectBucketCount( | 444 histograms.ExpectBucketCount( |
| 449 "Permissions.Prompt.Dismissed.PriorDismissCount.Geolocation", i, 1); | 445 "Permissions.Prompt.Dismissed.PriorDismissCount.Geolocation", i, 1); |
| 450 histograms.ExpectUniqueSample( | 446 histograms.ExpectUniqueSample( |
| 451 "Permissions.AutoBlocker.EmbargoPromptSuppression", | 447 "Permissions.AutoBlocker.EmbargoPromptSuppression", |
| 452 PermissionEmbargoStatus::NOT_EMBARGOED, i + 1); | 448 static_cast<int>(PermissionEmbargoStatus::NOT_EMBARGOED), i + 1); |
| 453 | 449 |
| 454 // On Android, repeatedly requesting and deciding permissions has the side | 450 // On Android, repeatedly requesting and deciding permissions has the side |
| 455 // effect of overcounting any metrics recorded in the PermissionInfoBarDelegate | 451 // effect of overcounting any metrics recorded in the PermissionInfoBarDelegate |
| 456 // destructor. This is because we directly call | 452 // destructor. This is because we directly call |
| 457 // PermissionQueueController::OnPermissionSet without setting the action_taken | 453 // PermissionQueueController::OnPermissionSet without setting the action_taken |
| 458 // bit in PermissionInfoBarDelegate. When PermissionQueueController is deleted | 454 // bit in PermissionInfoBarDelegate. When PermissionQueueController is deleted |
| 459 // all OS_ANDROID ifdefs in this test can be removed. | 455 // all OS_ANDROID ifdefs in this test can be removed. |
| 460 #if !defined(OS_ANDROID) | 456 #if !defined(OS_ANDROID) |
| 461 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoStatus", | 457 histograms.ExpectUniqueSample( |
| 462 PermissionEmbargoStatus::NOT_EMBARGOED, | 458 "Permissions.AutoBlocker.EmbargoStatus", |
| 463 i + 1); | 459 static_cast<int>(PermissionEmbargoStatus::NOT_EMBARGOED), i + 1); |
| 464 #endif | 460 #endif |
| 465 | 461 |
| 466 ASSERT_EQ(1u, permission_context.decisions().size()); | 462 ASSERT_EQ(1u, permission_context.decisions().size()); |
| 467 EXPECT_EQ(CONTENT_SETTING_ASK, permission_context.decisions()[0]); | 463 EXPECT_EQ(CONTENT_SETTING_ASK, permission_context.decisions()[0]); |
| 468 EXPECT_TRUE(permission_context.tab_context_updated()); | 464 EXPECT_TRUE(permission_context.tab_context_updated()); |
| 469 EXPECT_EQ(CONTENT_SETTING_ASK, | 465 EXPECT_EQ(CONTENT_SETTING_ASK, |
| 470 permission_context.GetContentSettingFromMap(url, url)); | 466 permission_context.GetContentSettingFromMap(url, url)); |
| 471 } | 467 } |
| 472 | 468 |
| 473 // Flush the dismissal counts. Enable the block on too many dismissals | 469 // Flush the dismissal counts. Enable the block on too many dismissals |
| 474 // feature, which is disabled by default. | 470 // feature, which is disabled by default. |
| 475 auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); | 471 auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); |
| 476 map->ClearSettingsForOneType( | 472 map->ClearSettingsForOneType( |
| 477 CONTENT_SETTINGS_TYPE_PERMISSION_AUTOBLOCKER_DATA); | 473 CONTENT_SETTINGS_TYPE_PERMISSION_AUTOBLOCKER_DATA); |
| 478 | 474 |
| 479 base::test::ScopedFeatureList feature_list; | 475 base::test::ScopedFeatureList feature_list; |
| 480 feature_list.InitAndEnableFeature(features::kBlockPromptsIfDismissedOften); | 476 feature_list.InitAndEnableFeature(features::kBlockPromptsIfDismissedOften); |
| 481 | 477 |
| 482 EXPECT_TRUE( | 478 EXPECT_TRUE( |
| 483 base::FeatureList::IsEnabled(features::kBlockPromptsIfDismissedOften)); | 479 base::FeatureList::IsEnabled(features::kBlockPromptsIfDismissedOften)); |
| 484 | 480 |
| 485 // Sanity check independence per permission type by checking two of them. | 481 // Sanity check independence per permission type by checking two of them. |
| 486 DismissMultipleTimesAndExpectBlock(url, | 482 DismissMultipleTimesAndExpectBlock(url, CONTENT_SETTINGS_TYPE_GEOLOCATION, |
| 487 CONTENT_SETTINGS_TYPE_GEOLOCATION, 3); | 483 3); |
| 488 DismissMultipleTimesAndExpectBlock(url, | 484 DismissMultipleTimesAndExpectBlock(url, CONTENT_SETTINGS_TYPE_NOTIFICATIONS, |
| 489 CONTENT_SETTINGS_TYPE_NOTIFICATIONS, 3); | 485 3); |
| 490 } | 486 } |
| 491 | 487 |
| 492 void TestVariationBlockOnSeveralDismissals_TestContent() { | 488 void TestVariationBlockOnSeveralDismissals_TestContent() { |
| 493 GURL url("https://www.google.com"); | 489 GURL url("https://www.google.com"); |
| 494 NavigateAndCommit(url); | 490 NavigateAndCommit(url); |
| 495 base::HistogramTester histograms; | 491 base::HistogramTester histograms; |
| 496 | 492 |
| 497 // Set up the custom parameter and custom value. | 493 // Set up the custom parameter and custom value. |
| 498 base::FieldTrialList field_trials(nullptr); | 494 base::FieldTrialList field_trials(nullptr); |
| 499 base::FieldTrial* trial = base::FieldTrialList::CreateFieldTrial( | 495 base::FieldTrial* trial = base::FieldTrialList::CreateFieldTrial( |
| 500 kPromptTrialName, kPromptGroupName); | 496 kPromptTrialName, kPromptGroupName); |
| 501 std::map<std::string, std::string> params; | 497 std::map<std::string, std::string> params; |
| 502 params[PermissionDecisionAutoBlocker::kPromptDismissCountKey] = "5"; | 498 params[PermissionDecisionAutoBlocker::kPromptDismissCountKey] = "5"; |
| 503 ASSERT_TRUE(variations::AssociateVariationParams( | 499 ASSERT_TRUE(variations::AssociateVariationParams(kPromptTrialName, |
| 504 kPromptTrialName, kPromptGroupName, params)); | 500 kPromptGroupName, params)); |
| 505 | 501 |
| 506 std::unique_ptr<base::FeatureList> feature_list = | 502 std::unique_ptr<base::FeatureList> feature_list = |
| 507 base::MakeUnique<base::FeatureList>(); | 503 base::MakeUnique<base::FeatureList>(); |
| 508 feature_list->RegisterFieldTrialOverride( | 504 feature_list->RegisterFieldTrialOverride( |
| 509 features::kBlockPromptsIfDismissedOften.name, | 505 features::kBlockPromptsIfDismissedOften.name, |
| 510 base::FeatureList::OVERRIDE_ENABLE_FEATURE, trial); | 506 base::FeatureList::OVERRIDE_ENABLE_FEATURE, trial); |
| 511 | 507 |
| 512 base::test::ScopedFeatureList scoped_feature_list; | 508 base::test::ScopedFeatureList scoped_feature_list; |
| 513 scoped_feature_list.InitWithFeatureList(std::move(feature_list)); | 509 scoped_feature_list.InitWithFeatureList(std::move(feature_list)); |
| 514 | 510 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 544 EXPECT_TRUE(permission_context.tab_context_updated()); | 540 EXPECT_TRUE(permission_context.tab_context_updated()); |
| 545 PermissionResult result = | 541 PermissionResult result = |
| 546 permission_context.GetPermissionStatus(url, url); | 542 permission_context.GetPermissionStatus(url, url); |
| 547 | 543 |
| 548 histograms.ExpectTotalCount( | 544 histograms.ExpectTotalCount( |
| 549 "Permissions.Prompt.Dismissed.PriorDismissCount.MidiSysEx", i + 1); | 545 "Permissions.Prompt.Dismissed.PriorDismissCount.MidiSysEx", i + 1); |
| 550 histograms.ExpectBucketCount( | 546 histograms.ExpectBucketCount( |
| 551 "Permissions.Prompt.Dismissed.PriorDismissCount.MidiSysEx", i, 1); | 547 "Permissions.Prompt.Dismissed.PriorDismissCount.MidiSysEx", i, 1); |
| 552 histograms.ExpectUniqueSample( | 548 histograms.ExpectUniqueSample( |
| 553 "Permissions.AutoBlocker.EmbargoPromptSuppression", | 549 "Permissions.AutoBlocker.EmbargoPromptSuppression", |
| 554 PermissionEmbargoStatus::NOT_EMBARGOED, i + 1); | 550 static_cast<int>(PermissionEmbargoStatus::NOT_EMBARGOED), i + 1); |
| 555 | 551 |
| 556 // On Android, repeatedly requesting and deciding permissions has the side | 552 // On Android, repeatedly requesting and deciding permissions has the side |
| 557 // effect of overcounting any metrics recorded in the PermissionInfoBarDelegate | 553 // effect of overcounting any metrics recorded in the PermissionInfoBarDelegate |
| 558 // destructor. This is because we directly call | 554 // destructor. This is because we directly call |
| 559 // PermissionQueueController::OnPermissionSet without setting the action_taken | 555 // PermissionQueueController::OnPermissionSet without setting the action_taken |
| 560 // bit in PermissionInfoBarDelegate. When PermissionQueueController is deleted | 556 // bit in PermissionInfoBarDelegate. When PermissionQueueController is deleted |
| 561 // all OS_ANDROID ifdefs in this test can be removed. | 557 // all OS_ANDROID ifdefs in this test can be removed. |
| 562 #if !defined(OS_ANDROID) | 558 #if !defined(OS_ANDROID) |
| 563 histograms.ExpectTotalCount("Permissions.AutoBlocker.EmbargoStatus", | 559 histograms.ExpectTotalCount("Permissions.AutoBlocker.EmbargoStatus", |
| 564 i + 1); | 560 i + 1); |
| 565 #endif | 561 #endif |
| 566 if (i < 4) { | 562 if (i < 4) { |
| 567 EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting); | 563 EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting); |
| 568 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source); | 564 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source); |
| 569 #if !defined(OS_ANDROID) | 565 #if !defined(OS_ANDROID) |
| 570 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoStatus", | 566 histograms.ExpectUniqueSample( |
| 571 PermissionEmbargoStatus::NOT_EMBARGOED, | 567 "Permissions.AutoBlocker.EmbargoStatus", |
| 572 i + 1); | 568 static_cast<int>(PermissionEmbargoStatus::NOT_EMBARGOED), i + 1); |
| 573 #endif | 569 #endif |
| 574 } else { | 570 } else { |
| 575 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); | 571 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); |
| 576 EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source); | 572 EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source); |
| 577 #if !defined(OS_ANDROID) | 573 #if !defined(OS_ANDROID) |
| 578 histograms.ExpectBucketCount( | 574 histograms.ExpectBucketCount( |
| 579 "Permissions.AutoBlocker.EmbargoStatus", | 575 "Permissions.AutoBlocker.EmbargoStatus", |
| 580 PermissionEmbargoStatus::REPEATED_DISMISSALS, 1); | 576 static_cast<int>(PermissionEmbargoStatus::REPEATED_DISMISSALS), 1); |
| 581 #endif | 577 #endif |
| 582 } | 578 } |
| 583 } | 579 } |
| 584 | 580 |
| 585 // Ensure that we finish in the block state. | 581 // Ensure that we finish in the block state. |
| 586 TestPermissionContext permission_context(profile(), | 582 TestPermissionContext permission_context(profile(), |
| 587 CONTENT_SETTINGS_TYPE_MIDI_SYSEX); | 583 CONTENT_SETTINGS_TYPE_MIDI_SYSEX); |
| 588 PermissionResult result = permission_context.GetPermissionStatus(url, url); | 584 PermissionResult result = permission_context.GetPermissionStatus(url, url); |
| 589 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); | 585 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); |
| 590 EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source); | 586 EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source); |
| 591 variations::testing::ClearAllVariationParams(); | 587 variations::testing::ClearAllVariationParams(); |
| 592 } | 588 } |
| 593 | 589 |
| 594 void TestRequestPermissionInvalidUrl( | 590 void TestRequestPermissionInvalidUrl( |
| 595 ContentSettingsType content_settings_type) { | 591 ContentSettingsType content_settings_type) { |
| 596 base::HistogramTester histograms; | 592 base::HistogramTester histograms; |
| 597 TestPermissionContext permission_context(profile(), content_settings_type); | 593 TestPermissionContext permission_context(profile(), content_settings_type); |
| 598 GURL url; | 594 GURL url; |
| 599 ASSERT_FALSE(url.is_valid()); | 595 ASSERT_FALSE(url.is_valid()); |
| 600 NavigateAndCommit(url); | 596 NavigateAndCommit(url); |
| 601 | 597 |
| 602 const PermissionRequestID id( | 598 const PermissionRequestID id( |
| 603 web_contents()->GetRenderProcessHost()->GetID(), | 599 web_contents()->GetRenderProcessHost()->GetID(), |
| 604 web_contents()->GetMainFrame()->GetRoutingID(), | 600 web_contents()->GetMainFrame()->GetRoutingID(), -1); |
| 605 -1); | |
| 606 permission_context.RequestPermission( | 601 permission_context.RequestPermission( |
| 607 web_contents(), | 602 web_contents(), id, url, true /* user_gesture */, |
| 608 id, url, true /* user_gesture */, | |
| 609 base::Bind(&TestPermissionContext::TrackPermissionDecision, | 603 base::Bind(&TestPermissionContext::TrackPermissionDecision, |
| 610 base::Unretained(&permission_context))); | 604 base::Unretained(&permission_context))); |
| 611 | 605 |
| 612 ASSERT_EQ(1u, permission_context.decisions().size()); | 606 ASSERT_EQ(1u, permission_context.decisions().size()); |
| 613 EXPECT_EQ(CONTENT_SETTING_BLOCK, permission_context.decisions()[0]); | 607 EXPECT_EQ(CONTENT_SETTING_BLOCK, permission_context.decisions()[0]); |
| 614 EXPECT_TRUE(permission_context.tab_context_updated()); | 608 EXPECT_TRUE(permission_context.tab_context_updated()); |
| 615 EXPECT_EQ(CONTENT_SETTING_ASK, | 609 EXPECT_EQ(CONTENT_SETTING_ASK, |
| 616 permission_context.GetContentSettingFromMap(url, url)); | 610 permission_context.GetContentSettingFromMap(url, url)); |
| 617 histograms.ExpectTotalCount( | 611 histograms.ExpectTotalCount( |
| 618 "Permissions.AutoBlocker.EmbargoPromptSuppression", 0); | 612 "Permissions.AutoBlocker.EmbargoPromptSuppression", 0); |
| 619 } | 613 } |
| 620 | 614 |
| 621 void TestGrantAndRevoke_TestContent(ContentSettingsType content_settings_type, | 615 void TestGrantAndRevoke_TestContent(ContentSettingsType content_settings_type, |
| 622 ContentSetting expected_default) { | 616 ContentSetting expected_default) { |
| 623 TestPermissionContext permission_context(profile(), content_settings_type); | 617 TestPermissionContext permission_context(profile(), content_settings_type); |
| 624 GURL url("https://www.google.com"); | 618 GURL url("https://www.google.com"); |
| 625 NavigateAndCommit(url); | 619 NavigateAndCommit(url); |
| 626 | 620 |
| 627 const PermissionRequestID id( | 621 const PermissionRequestID id( |
| 628 web_contents()->GetRenderProcessHost()->GetID(), | 622 web_contents()->GetRenderProcessHost()->GetID(), |
| 629 web_contents()->GetMainFrame()->GetRoutingID(), | 623 web_contents()->GetMainFrame()->GetRoutingID(), -1); |
| 630 -1); | |
| 631 permission_context.SetRespondPermissionCallback( | 624 permission_context.SetRespondPermissionCallback( |
| 632 base::Bind(&PermissionContextBaseTests::RespondToPermission, | 625 base::Bind(&PermissionContextBaseTests::RespondToPermission, |
| 633 base::Unretained(this), &permission_context, id, url, true, | 626 base::Unretained(this), &permission_context, id, url, true, |
| 634 CONTENT_SETTING_ALLOW)); | 627 CONTENT_SETTING_ALLOW)); |
| 635 | 628 |
| 636 permission_context.RequestPermission( | 629 permission_context.RequestPermission( |
| 637 web_contents(), | 630 web_contents(), id, url, true /* user_gesture */, |
| 638 id, url, true /* user_gesture */, | |
| 639 base::Bind(&TestPermissionContext::TrackPermissionDecision, | 631 base::Bind(&TestPermissionContext::TrackPermissionDecision, |
| 640 base::Unretained(&permission_context))); | 632 base::Unretained(&permission_context))); |
| 641 | 633 |
| 642 ASSERT_EQ(1u, permission_context.decisions().size()); | 634 ASSERT_EQ(1u, permission_context.decisions().size()); |
| 643 EXPECT_EQ(CONTENT_SETTING_ALLOW, permission_context.decisions()[0]); | 635 EXPECT_EQ(CONTENT_SETTING_ALLOW, permission_context.decisions()[0]); |
| 644 EXPECT_TRUE(permission_context.tab_context_updated()); | 636 EXPECT_TRUE(permission_context.tab_context_updated()); |
| 645 EXPECT_EQ(CONTENT_SETTING_ALLOW, | 637 EXPECT_EQ(CONTENT_SETTING_ALLOW, |
| 646 permission_context.GetContentSettingFromMap(url, url)); | 638 permission_context.GetContentSettingFromMap(url, url)); |
| 647 | 639 |
| 648 // Try to reset permission. | 640 // Try to reset permission. |
| 649 permission_context.ResetPermission(url.GetOrigin(), url.GetOrigin()); | 641 permission_context.ResetPermission(url.GetOrigin(), url.GetOrigin()); |
| 650 ContentSetting setting_after_reset = | 642 ContentSetting setting_after_reset = |
| 651 permission_context.GetContentSettingFromMap(url, url); | 643 permission_context.GetContentSettingFromMap(url, url); |
| 652 ContentSetting default_setting = | 644 ContentSetting default_setting = |
| 653 HostContentSettingsMapFactory::GetForProfile(profile()) | 645 HostContentSettingsMapFactory::GetForProfile(profile()) |
| 654 ->GetDefaultContentSetting(content_settings_type, nullptr); | 646 ->GetDefaultContentSetting(content_settings_type, nullptr); |
| 655 EXPECT_EQ(default_setting, setting_after_reset); | 647 EXPECT_EQ(default_setting, setting_after_reset); |
| 656 } | 648 } |
| 657 | 649 |
| 658 void TestGlobalPermissionsKillSwitch( | 650 void TestGlobalPermissionsKillSwitch( |
| 659 ContentSettingsType content_settings_type) { | 651 ContentSettingsType content_settings_type) { |
| 660 TestKillSwitchPermissionContext permission_context(profile(), | 652 TestKillSwitchPermissionContext permission_context(profile(), |
| 661 content_settings_type); | 653 content_settings_type); |
| 662 permission_context.ResetFieldTrialList(); | 654 permission_context.ResetFieldTrialList(); |
| 663 | 655 |
| 664 EXPECT_FALSE(permission_context.IsPermissionKillSwitchOn()); | 656 EXPECT_FALSE(permission_context.IsPermissionKillSwitchOn()); |
| 665 std::map<std::string, std::string> params; | 657 std::map<std::string, std::string> params; |
| 666 params[PermissionUtil::GetPermissionString(content_settings_type)] = | 658 params[PermissionUtil::GetPermissionString(content_settings_type)] = |
| 667 kPermissionsKillSwitchBlockedValue; | 659 kPermissionsKillSwitchBlockedValue; |
| 668 variations::AssociateVariationParams( | 660 variations::AssociateVariationParams(kPermissionsKillSwitchFieldStudy, |
| 669 kPermissionsKillSwitchFieldStudy, kPermissionsKillSwitchTestGroup, | 661 kPermissionsKillSwitchTestGroup, |
| 670 params); | 662 params); |
| 671 base::FieldTrialList::CreateFieldTrial(kPermissionsKillSwitchFieldStudy, | 663 base::FieldTrialList::CreateFieldTrial(kPermissionsKillSwitchFieldStudy, |
| 672 kPermissionsKillSwitchTestGroup); | 664 kPermissionsKillSwitchTestGroup); |
| 673 EXPECT_TRUE(permission_context.IsPermissionKillSwitchOn()); | 665 EXPECT_TRUE(permission_context.IsPermissionKillSwitchOn()); |
| 674 } | 666 } |
| 675 | 667 |
| 676 // Don't call this more than once in the same test, as it persists data to | 668 // Don't call this more than once in the same test, as it persists data to |
| 677 // HostContentSettingsMap. | 669 // HostContentSettingsMap. |
| 678 void TestParallelRequests(ContentSetting response) { | 670 void TestParallelRequests(ContentSetting response) { |
| 679 TestPermissionContext permission_context( | 671 TestPermissionContext permission_context( |
| 680 profile(), CONTENT_SETTINGS_TYPE_NOTIFICATIONS); | 672 profile(), CONTENT_SETTINGS_TYPE_NOTIFICATIONS); |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 754 | 746 |
| 755 if (expected_permission_status == CONTENT_SETTING_ALLOW) { | 747 if (expected_permission_status == CONTENT_SETTING_ALLOW) { |
| 756 ASSERT_EQ(1u, permission_context.decisions().size()); | 748 ASSERT_EQ(1u, permission_context.decisions().size()); |
| 757 EXPECT_EQ(expected_permission_status, permission_context.decisions()[0]); | 749 EXPECT_EQ(expected_permission_status, permission_context.decisions()[0]); |
| 758 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source); | 750 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source); |
| 759 } else { | 751 } else { |
| 760 EXPECT_EQ(PermissionStatusSource::SAFE_BROWSING_BLACKLIST, result.source); | 752 EXPECT_EQ(PermissionStatusSource::SAFE_BROWSING_BLACKLIST, result.source); |
| 761 } | 753 } |
| 762 histograms.ExpectUniqueSample( | 754 histograms.ExpectUniqueSample( |
| 763 "Permissions.AutoBlocker.EmbargoPromptSuppression", | 755 "Permissions.AutoBlocker.EmbargoPromptSuppression", |
| 764 expected_embargo_reason, 1); | 756 static_cast<int>(expected_embargo_reason), 1); |
| 765 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoStatus", | 757 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoStatus", |
| 766 expected_embargo_reason, 1); | 758 static_cast<int>(expected_embargo_reason), 1); |
| 767 } | 759 } |
| 768 | 760 |
| 769 private: | 761 private: |
| 770 // ChromeRenderViewHostTestHarness: | 762 // ChromeRenderViewHostTestHarness: |
| 771 void SetUp() override { | 763 void SetUp() override { |
| 772 ChromeRenderViewHostTestHarness::SetUp(); | 764 ChromeRenderViewHostTestHarness::SetUp(); |
| 773 #if defined(OS_ANDROID) | 765 #if defined(OS_ANDROID) |
| 774 InfoBarService::CreateForWebContents(web_contents()); | 766 InfoBarService::CreateForWebContents(web_contents()); |
| 775 #else | 767 #else |
| 776 PermissionRequestManager::CreateForWebContents(web_contents()); | 768 PermissionRequestManager::CreateForWebContents(web_contents()); |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 896 | 888 |
| 897 // Tests a blacklisted (URL, permission) pair has had its permission request | 889 // Tests a blacklisted (URL, permission) pair has had its permission request |
| 898 // blocked. | 890 // blocked. |
| 899 TEST_F(PermissionContextBaseTests, TestPermissionsBlacklistingBlocked) { | 891 TEST_F(PermissionContextBaseTests, TestPermissionsBlacklistingBlocked) { |
| 900 scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager = | 892 scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager = |
| 901 new MockSafeBrowsingDatabaseManager(true /* perform_callback */); | 893 new MockSafeBrowsingDatabaseManager(true /* perform_callback */); |
| 902 const GURL url("https://www.example.com"); | 894 const GURL url("https://www.example.com"); |
| 903 std::set<std::string> blacklisted_permissions{"GEOLOCATION"}; | 895 std::set<std::string> blacklisted_permissions{"GEOLOCATION"}; |
| 904 db_manager->BlacklistUrlPermissions(url, blacklisted_permissions); | 896 db_manager->BlacklistUrlPermissions(url, blacklisted_permissions); |
| 905 TestPermissionsBlacklisting( | 897 TestPermissionsBlacklisting( |
| 906 CONTENT_SETTINGS_TYPE_GEOLOCATION, | 898 CONTENT_SETTINGS_TYPE_GEOLOCATION, db_manager, url, 2000 /* timeout */, |
| 907 db_manager, url, 2000 /* timeout */, CONTENT_SETTING_BLOCK, | 899 CONTENT_SETTING_BLOCK, PermissionEmbargoStatus::PERMISSIONS_BLACKLISTING); |
| 908 PermissionEmbargoStatus::PERMISSIONS_BLACKLISTING); | |
| 909 } | 900 } |
| 910 | 901 |
| 911 // Tests that a URL that is blacklisted for one permission can still request | 902 // Tests that a URL that is blacklisted for one permission can still request |
| 912 // another and grant another. | 903 // another and grant another. |
| 913 TEST_F(PermissionContextBaseTests, TestPermissionsBlacklistingAllowed) { | 904 TEST_F(PermissionContextBaseTests, TestPermissionsBlacklistingAllowed) { |
| 914 scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager = | 905 scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager = |
| 915 new MockSafeBrowsingDatabaseManager(true /* perform_callback */); | 906 new MockSafeBrowsingDatabaseManager(true /* perform_callback */); |
| 916 const GURL url("https://www.example.com"); | 907 const GURL url("https://www.example.com"); |
| 917 std::set<std::string> blacklisted_permissions{"GEOLOCATION"}; | 908 std::set<std::string> blacklisted_permissions{"GEOLOCATION"}; |
| 918 db_manager->BlacklistUrlPermissions(url, blacklisted_permissions); | 909 db_manager->BlacklistUrlPermissions(url, blacklisted_permissions); |
| 919 TestPermissionsBlacklisting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, db_manager, | 910 TestPermissionsBlacklisting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, db_manager, |
| 920 url, 2000 /* timeout */, CONTENT_SETTING_ALLOW, | 911 url, 2000 /* timeout */, CONTENT_SETTING_ALLOW, |
| 921 PermissionEmbargoStatus::NOT_EMBARGOED); | 912 PermissionEmbargoStatus::NOT_EMBARGOED); |
| 922 } | 913 } |
| OLD | NEW |