Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(210)

Side by Side Diff: chrome/browser/permissions/permission_context_base_unittest.cc

Issue 2715643002: Replace all enums with enum classes in permissions code. (Closed)
Patch Set: Rebase Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | chrome/browser/permissions/permission_decision_auto_blocker_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/permissions/permission_decision_auto_blocker_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698