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

Side by Side Diff: chrome/browser/download/download_request_limiter_unittest.cc

Issue 2319733002: PlzNavigate: Fix DownloadRequestLimiterTest.DownloadRequestLimiter_RendererInitiated (Closed)
Patch Set: rebase Created 4 years, 3 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 | content/public/test/test_renderer_host.h » ('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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/download/download_request_limiter.h" 5 #include "chrome/browser/download/download_request_limiter.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/run_loop.h" 9 #include "base/run_loop.h"
10 #include "build/build_config.h" 10 #include "build/build_config.h"
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 } 232 }
233 233
234 void LoadCompleted() { testing_delegate_.LoadCompleted(web_contents()); } 234 void LoadCompleted() { testing_delegate_.LoadCompleted(web_contents()); }
235 235
236 int AskAllowCount() { return testing_delegate_.AllowCount(); } 236 int AskAllowCount() { return testing_delegate_.AllowCount(); }
237 237
238 void UpdateExpectations(TestingAction action) { 238 void UpdateExpectations(TestingAction action) {
239 testing_delegate_.UpdateExpectations(action); 239 testing_delegate_.UpdateExpectations(action);
240 } 240 }
241 241
242 void NavigateAndCommitWithParams(
243 content::NavigationController::LoadURLParams& params) {
244 controller().LoadURLWithParams(params);
245 content::WebContentsTester::For(web_contents())->CommitPendingNavigation();
246 }
247
248 scoped_refptr<DownloadRequestLimiter> download_request_limiter_; 242 scoped_refptr<DownloadRequestLimiter> download_request_limiter_;
249 243
250 // Number of times ContinueDownload was invoked. 244 // Number of times ContinueDownload was invoked.
251 int continue_count_; 245 int continue_count_;
252 246
253 // Number of times CancelDownload was invoked. 247 // Number of times CancelDownload was invoked.
254 int cancel_count_; 248 int cancel_count_;
255 249
256 scoped_refptr<HostContentSettingsMap> content_settings_; 250 scoped_refptr<HostContentSettingsMap> content_settings_;
257 TestingDelegate testing_delegate_; 251 TestingDelegate testing_delegate_;
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 NavigateAndCommit(GURL("http://foo.com/bar")); 351 NavigateAndCommit(GURL("http://foo.com/bar"));
358 LoadCompleted(); 352 LoadCompleted();
359 353
360 // Do one download so we end up in PROMPT. 354 // Do one download so we end up in PROMPT.
361 CanDownload(); 355 CanDownload();
362 ExpectAndResetCounts(1, 0, 0, __LINE__); 356 ExpectAndResetCounts(1, 0, 0, __LINE__);
363 ASSERT_EQ(DownloadRequestLimiter::PROMPT_BEFORE_DOWNLOAD, 357 ASSERT_EQ(DownloadRequestLimiter::PROMPT_BEFORE_DOWNLOAD,
364 download_request_limiter_->GetDownloadStatus(web_contents())); 358 download_request_limiter_->GetDownloadStatus(web_contents()));
365 359
366 // Set up a renderer-initiated navigation to the same host. 360 // Set up a renderer-initiated navigation to the same host.
367 content::NavigationController::LoadURLParams load_params( 361 content::RenderFrameHostTester* rfh_tester =
368 GURL("http://foo.com/bar2")); 362 content::RenderFrameHostTester::For(web_contents()->GetMainFrame());
369 load_params.is_renderer_initiated = true; 363 rfh_tester->NavigateAndCommitRendererInitiated(1, true,
370 load_params.transition_type = ui::PAGE_TRANSITION_GENERATED; 364 GURL("http://foo.com/bar2"));
371 load_params.referrer = content::Referrer();
372 NavigateAndCommitWithParams(load_params);
373 LoadCompleted(); 365 LoadCompleted();
374 366
375 // The state should not be reset. 367 // The state should not be reset.
376 ASSERT_EQ(DownloadRequestLimiter::PROMPT_BEFORE_DOWNLOAD, 368 ASSERT_EQ(DownloadRequestLimiter::PROMPT_BEFORE_DOWNLOAD,
377 download_request_limiter_->GetDownloadStatus(web_contents())); 369 download_request_limiter_->GetDownloadStatus(web_contents()));
378 370
379 // Renderer-initiated nav to a different host shouldn't reset the state. 371 // Renderer-initiated nav to a different host shouldn't reset the state.
380 load_params.url = GURL("http://fooey.com/bar"); 372 rfh_tester->NavigateAndCommitRendererInitiated(2, true,
381 NavigateAndCommitWithParams(load_params); 373 GURL("http://fooey.com/bar"));
382 LoadCompleted(); 374 LoadCompleted();
383 ASSERT_EQ(DownloadRequestLimiter::PROMPT_BEFORE_DOWNLOAD, 375 ASSERT_EQ(DownloadRequestLimiter::PROMPT_BEFORE_DOWNLOAD,
384 download_request_limiter_->GetDownloadStatus(web_contents())); 376 download_request_limiter_->GetDownloadStatus(web_contents()));
385 377
386 // Set up a subframe. Navigations in the subframe shouldn't reset the state. 378 // Set up a subframe. Navigations in the subframe shouldn't reset the state.
387 content::RenderFrameHostTester* rfh_tester =
388 content::RenderFrameHostTester::For(web_contents()->GetMainFrame());
389 content::RenderFrameHost* subframe = rfh_tester->AppendChild("subframe"); 379 content::RenderFrameHost* subframe = rfh_tester->AppendChild("subframe");
390 content::RenderFrameHostTester* subframe_tester = 380 content::RenderFrameHostTester* subframe_tester =
391 content::RenderFrameHostTester::For(subframe); 381 content::RenderFrameHostTester::For(subframe);
392 subframe_tester->SimulateNavigationCommit(GURL("http://foo.com")); 382 subframe_tester->SimulateNavigationCommit(GURL("http://foo.com"));
393 ASSERT_EQ(DownloadRequestLimiter::PROMPT_BEFORE_DOWNLOAD, 383 ASSERT_EQ(DownloadRequestLimiter::PROMPT_BEFORE_DOWNLOAD,
394 download_request_limiter_->GetDownloadStatus(web_contents())); 384 download_request_limiter_->GetDownloadStatus(web_contents()));
395 385
396 subframe_tester->SimulateNavigationCommit(GURL("http://foobargoo.com")); 386 subframe_tester->SimulateNavigationCommit(GURL("http://foobargoo.com"));
397 ASSERT_EQ(DownloadRequestLimiter::PROMPT_BEFORE_DOWNLOAD, 387 ASSERT_EQ(DownloadRequestLimiter::PROMPT_BEFORE_DOWNLOAD,
398 download_request_limiter_->GetDownloadStatus(web_contents())); 388 download_request_limiter_->GetDownloadStatus(web_contents()));
399 389
400 // Set up a blocked state. 390 // Set up a blocked state.
401 UpdateExpectations(CANCEL); 391 UpdateExpectations(CANCEL);
402 CanDownload(); 392 CanDownload();
403 ExpectAndResetCounts(0, 1, 1, __LINE__); 393 ExpectAndResetCounts(0, 1, 1, __LINE__);
404 ASSERT_EQ(DownloadRequestLimiter::DOWNLOADS_NOT_ALLOWED, 394 ASSERT_EQ(DownloadRequestLimiter::DOWNLOADS_NOT_ALLOWED,
405 download_request_limiter_->GetDownloadStatus(web_contents())); 395 download_request_limiter_->GetDownloadStatus(web_contents()));
406 396
407 // The state should not be reset on a renderer-initiated load to either the 397 // The state should not be reset on a renderer-initiated load to either the
408 // same host or a different host, in either the main frame or the subframe. 398 // same host or a different host, in either the main frame or the subframe.
409 load_params.url = GURL("http://fooeybar.com/bar"); 399 rfh_tester->NavigateAndCommitRendererInitiated(
410 NavigateAndCommitWithParams(load_params); 400 3, true, GURL("http://fooeybar.com/bar"));
411 LoadCompleted(); 401 LoadCompleted();
412 ASSERT_EQ(DownloadRequestLimiter::DOWNLOADS_NOT_ALLOWED, 402 ASSERT_EQ(DownloadRequestLimiter::DOWNLOADS_NOT_ALLOWED,
413 download_request_limiter_->GetDownloadStatus(web_contents())); 403 download_request_limiter_->GetDownloadStatus(web_contents()));
414 404
415 load_params.url = GURL("http://foo.com/bar"); 405 rfh_tester->NavigateAndCommitRendererInitiated(4, true,
416 NavigateAndCommitWithParams(load_params); 406 GURL("http://foo.com/bar"));
417 LoadCompleted(); 407 LoadCompleted();
418 ASSERT_EQ(DownloadRequestLimiter::DOWNLOADS_NOT_ALLOWED, 408 ASSERT_EQ(DownloadRequestLimiter::DOWNLOADS_NOT_ALLOWED,
419 download_request_limiter_->GetDownloadStatus(web_contents())); 409 download_request_limiter_->GetDownloadStatus(web_contents()));
420 410
421 rfh_tester = 411 rfh_tester =
422 content::RenderFrameHostTester::For(web_contents()->GetMainFrame()); 412 content::RenderFrameHostTester::For(web_contents()->GetMainFrame());
423 subframe = rfh_tester->AppendChild("subframe"); 413 subframe = rfh_tester->AppendChild("subframe");
424 subframe_tester = content::RenderFrameHostTester::For(subframe); 414 subframe_tester = content::RenderFrameHostTester::For(subframe);
425 subframe_tester->SimulateNavigationCommit(GURL("http://foo.com")); 415 subframe_tester->SimulateNavigationCommit(GURL("http://foo.com"));
426 ASSERT_EQ(DownloadRequestLimiter::DOWNLOADS_NOT_ALLOWED, 416 ASSERT_EQ(DownloadRequestLimiter::DOWNLOADS_NOT_ALLOWED,
(...skipping 17 matching lines...) Expand all
444 download_request_limiter_->GetDownloadStatus(web_contents())); 434 download_request_limiter_->GetDownloadStatus(web_contents()));
445 435
446 UpdateExpectations(ACCEPT); 436 UpdateExpectations(ACCEPT);
447 CanDownload(); 437 CanDownload();
448 ExpectAndResetCounts(1, 0, 1, __LINE__); 438 ExpectAndResetCounts(1, 0, 1, __LINE__);
449 ASSERT_EQ(DownloadRequestLimiter::ALLOW_ALL_DOWNLOADS, 439 ASSERT_EQ(DownloadRequestLimiter::ALLOW_ALL_DOWNLOADS,
450 download_request_limiter_->GetDownloadStatus(web_contents())); 440 download_request_limiter_->GetDownloadStatus(web_contents()));
451 441
452 // The state should not be reset on a pending renderer-initiated load to 442 // The state should not be reset on a pending renderer-initiated load to
453 // the same host. 443 // the same host.
454 load_params.url = GURL("http://foobar.com/bar"); 444 rfh_tester =
455 NavigateAndCommitWithParams(load_params); 445 content::RenderFrameHostTester::For(web_contents()->GetMainFrame());
446 rfh_tester->NavigateAndCommitRendererInitiated(5, true,
447 GURL("http://foobar.com/bar"));
456 LoadCompleted(); 448 LoadCompleted();
457 ASSERT_EQ(DownloadRequestLimiter::ALLOW_ALL_DOWNLOADS, 449 ASSERT_EQ(DownloadRequestLimiter::ALLOW_ALL_DOWNLOADS,
458 download_request_limiter_->GetDownloadStatus(web_contents())); 450 download_request_limiter_->GetDownloadStatus(web_contents()));
459 451
460 // The state should not be reset for a subframe nav to the same host. 452 // The state should not be reset for a subframe nav to the same host.
461 rfh_tester = 453 rfh_tester =
462 content::RenderFrameHostTester::For(web_contents()->GetMainFrame()); 454 content::RenderFrameHostTester::For(web_contents()->GetMainFrame());
463 subframe = rfh_tester->AppendChild("subframe"); 455 subframe = rfh_tester->AppendChild("subframe");
464 subframe_tester = content::RenderFrameHostTester::For(subframe); 456 subframe_tester = content::RenderFrameHostTester::For(subframe);
465 subframe_tester->SimulateNavigationCommit(GURL("http://foobar.com/bar")); 457 subframe_tester->SimulateNavigationCommit(GURL("http://foobar.com/bar"));
466 ASSERT_EQ(DownloadRequestLimiter::ALLOW_ALL_DOWNLOADS, 458 ASSERT_EQ(DownloadRequestLimiter::ALLOW_ALL_DOWNLOADS,
467 download_request_limiter_->GetDownloadStatus(web_contents())); 459 download_request_limiter_->GetDownloadStatus(web_contents()));
468 460
469 subframe_tester->SimulateNavigationCommit(GURL("http://foobarfoo.com/")); 461 subframe_tester->SimulateNavigationCommit(GURL("http://foobarfoo.com/"));
470 ASSERT_EQ(DownloadRequestLimiter::ALLOW_ALL_DOWNLOADS, 462 ASSERT_EQ(DownloadRequestLimiter::ALLOW_ALL_DOWNLOADS,
471 download_request_limiter_->GetDownloadStatus(web_contents())); 463 download_request_limiter_->GetDownloadStatus(web_contents()));
472 464
473 // But a pending load to a different host in the main frame should reset the 465 // But a pending load to a different host in the main frame should reset the
474 // state. 466 // state.
475 load_params.url = GURL("http://foo.com"); 467 rfh_tester->NavigateAndCommitRendererInitiated(6, true,
476 NavigateAndCommitWithParams(load_params); 468 GURL("http://foo.com"));
477 LoadCompleted(); 469 LoadCompleted();
478 ASSERT_EQ(DownloadRequestLimiter::ALLOW_ONE_DOWNLOAD, 470 ASSERT_EQ(DownloadRequestLimiter::ALLOW_ONE_DOWNLOAD,
479 download_request_limiter_->GetDownloadStatus(web_contents())); 471 download_request_limiter_->GetDownloadStatus(web_contents()));
480 } 472 }
481 473
482 TEST_F(DownloadRequestLimiterTest, DownloadRequestLimiter_ResetOnUserGesture) { 474 TEST_F(DownloadRequestLimiterTest, DownloadRequestLimiter_ResetOnUserGesture) {
483 NavigateAndCommit(GURL("http://foo.com/bar")); 475 NavigateAndCommit(GURL("http://foo.com/bar"));
484 LoadCompleted(); 476 LoadCompleted();
485 477
486 // Do one download, which should change to prompt before download. 478 // Do one download, which should change to prompt before download.
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
717 // changing the content setting). 709 // changing the content setting).
718 UpdateContentSettings(web_contents(), CONTENT_SETTING_ASK); 710 UpdateContentSettings(web_contents(), CONTENT_SETTING_ASK);
719 ASSERT_EQ(DownloadRequestLimiter::PROMPT_BEFORE_DOWNLOAD, 711 ASSERT_EQ(DownloadRequestLimiter::PROMPT_BEFORE_DOWNLOAD,
720 download_request_limiter_->GetDownloadStatus(web_contents())); 712 download_request_limiter_->GetDownloadStatus(web_contents()));
721 UpdateExpectations(WAIT); 713 UpdateExpectations(WAIT);
722 CanDownload(); 714 CanDownload();
723 ExpectAndResetCounts(0, 0, 1, __LINE__); 715 ExpectAndResetCounts(0, 0, 1, __LINE__);
724 ASSERT_EQ(DownloadRequestLimiter::PROMPT_BEFORE_DOWNLOAD, 716 ASSERT_EQ(DownloadRequestLimiter::PROMPT_BEFORE_DOWNLOAD,
725 download_request_limiter_->GetDownloadStatus(web_contents())); 717 download_request_limiter_->GetDownloadStatus(web_contents()));
726 } 718 }
OLDNEW
« no previous file with comments | « no previous file | content/public/test/test_renderer_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698