| Index: content/browser/download/download_browsertest.cc | 
| diff --git a/content/browser/download/download_browsertest.cc b/content/browser/download/download_browsertest.cc | 
| index c47637150b5cb9c9c93e59d5017415915ae6f4ac..73a21c408207a271a21ceab8136128c8b34484cc 100644 | 
| --- a/content/browser/download/download_browsertest.cc | 
| +++ b/content/browser/download/download_browsertest.cc | 
| @@ -643,10 +643,10 @@ class DownloadContentTest : public ContentBrowserTest { | 
| } | 
|  | 
| // Start a download and return the item. | 
| -  DownloadItem* StartDownloadAndReturnItem(GURL url) { | 
| +  DownloadItem* StartDownloadAndReturnItem(Shell* shell, GURL url) { | 
| scoped_ptr<DownloadCreateObserver> observer( | 
| -        new DownloadCreateObserver(DownloadManagerForShell(shell()))); | 
| -    shell()->LoadURL(url); | 
| +        new DownloadCreateObserver(DownloadManagerForShell(shell))); | 
| +    shell->LoadURL(url); | 
| return observer->WaitForFinished(); | 
| } | 
|  | 
| @@ -690,6 +690,67 @@ class DownloadContentTest : public ContentBrowserTest { | 
| scoped_ptr<TestShellDownloadManagerDelegate> test_delegate_; | 
| }; | 
|  | 
| +// Parameters for DownloadResumptionContentTest. | 
| +enum class DownloadResumptionTestType { | 
| +  RESUME_WITH_RENDERER,  // Resume() is called while the originating WebContents | 
| +                         // is still alive. | 
| +  RESUME_WITHOUT_RENDERER  // Resume() is called after the originating | 
| +                           // WebContents has been deleted. | 
| +}; | 
| + | 
| +// Parameterized test for download resumption. Tests using this fixure will be | 
| +// run once with RESUME_WITH_RENDERER and once with RESUME_WITHOUT_RENDERER. | 
| +// Use initiator_shell_for_resumption() to retrieve the Shell object that should | 
| +// be used as the originator for the initial download. Prior to calling | 
| +// Resume(), call PrepareToResume() which will cause the originating Shell to be | 
| +// deleted if the test parameter is RESUME_WITHOUT_RENDERER. | 
| +class DownloadResumptionContentTest | 
| +    : public DownloadContentTest, | 
| +      public ::testing::WithParamInterface<DownloadResumptionTestType> { | 
| + public: | 
| +  void SetUpOnMainThread() override { | 
| +    base::CommandLine::ForCurrentProcess()->AppendSwitch( | 
| +        switches::kEnableDownloadResumption); | 
| +    DownloadContentTest::SetUpOnMainThread(); | 
| + | 
| +    if (GetParam() == DownloadResumptionTestType::RESUME_WITHOUT_RENDERER) | 
| +      initiator_shell_for_resumption_ = CreateBrowser(); | 
| +    else | 
| +      initiator_shell_for_resumption_ = shell(); | 
| + | 
| +    ASSERT_EQ(DownloadManagerForShell(shell()), | 
| +              DownloadManagerForShell(initiator_shell_for_resumption())); | 
| +  } | 
| + | 
| +  // Shell to use for initiating a download. Only valid *before* | 
| +  // PrepareToResume() is called. | 
| +  Shell* initiator_shell_for_resumption() const { | 
| +    DCHECK(initiator_shell_for_resumption_); | 
| +    return initiator_shell_for_resumption_; | 
| +  } | 
| + | 
| +  // Should be called once before calling DownloadItem::Resume() on an | 
| +  // interrupted download. This may cause initiator_shell_for_resumption() to | 
| +  // become invalidated. | 
| +  void PrepareToResume() { | 
| +    if (GetParam() == DownloadResumptionTestType::RESUME_WITH_RENDERER) | 
| +      return; | 
| +    DCHECK_NE(initiator_shell_for_resumption(), shell()); | 
| +    DCHECK(initiator_shell_for_resumption()); | 
| +    initiator_shell_for_resumption_->Close(); | 
| +    initiator_shell_for_resumption_ = nullptr; | 
| +  } | 
| + | 
| + private: | 
| +  Shell* initiator_shell_for_resumption_ = nullptr; | 
| +}; | 
| + | 
| +INSTANTIATE_TEST_CASE_P( | 
| +    _, | 
| +    DownloadResumptionContentTest, | 
| +    ::testing::Values(DownloadResumptionTestType::RESUME_WITH_RENDERER, | 
| +                      DownloadResumptionTestType::RESUME_WITHOUT_RENDERER)); | 
| + | 
| }  // namespace | 
|  | 
| IN_PROC_BROWSER_TEST_F(DownloadContentTest, DownloadCancelled) { | 
| @@ -698,7 +759,7 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, DownloadCancelled) { | 
| // Create a download, wait until it's started, and confirm | 
| // we're in the expected state. | 
| DownloadItem* download = StartDownloadAndReturnItem( | 
| -      GURL(net::URLRequestSlowDownloadJob::kUnknownSizeUrl)); | 
| +      shell(), GURL(net::URLRequestSlowDownloadJob::kUnknownSizeUrl)); | 
| ASSERT_EQ(DownloadItem::IN_PROGRESS, download->GetState()); | 
|  | 
| // Cancel the download and wait for download system quiesce. | 
| @@ -719,12 +780,12 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, MultiDownload) { | 
| // Create a download, wait until it's started, and confirm | 
| // we're in the expected state. | 
| DownloadItem* download1 = StartDownloadAndReturnItem( | 
| -      GURL(net::URLRequestSlowDownloadJob::kUnknownSizeUrl)); | 
| +      shell(), GURL(net::URLRequestSlowDownloadJob::kUnknownSizeUrl)); | 
| ASSERT_EQ(DownloadItem::IN_PROGRESS, download1->GetState()); | 
|  | 
| // Start the second download and wait until it's done. | 
| GURL url(net::URLRequestMockHTTPJob::GetMockUrl("download-test.lib")); | 
| -  DownloadItem* download2 = StartDownloadAndReturnItem(url); | 
| +  DownloadItem* download2 = StartDownloadAndReturnItem(shell(), url); | 
| WaitForCompletion(download2); | 
|  | 
| ASSERT_EQ(DownloadItem::IN_PROGRESS, download1->GetState()); | 
| @@ -890,7 +951,7 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, CancelAtRelease) { | 
| IN_PROC_BROWSER_TEST_F(DownloadContentTest, MAYBE_ShutdownInProgress) { | 
| // Create a download that won't complete. | 
| DownloadItem* download = StartDownloadAndReturnItem( | 
| -      GURL(net::URLRequestSlowDownloadJob::kUnknownSizeUrl)); | 
| +      shell(), GURL(net::URLRequestSlowDownloadJob::kUnknownSizeUrl)); | 
|  | 
| EXPECT_EQ(DownloadItem::IN_PROGRESS, download->GetState()); | 
|  | 
| @@ -990,10 +1051,7 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, ShutdownAtRelease) { | 
| } | 
|  | 
| // Test resumption with a response that contains strong validators. | 
| -IN_PROC_BROWSER_TEST_F(DownloadContentTest, Resume_WithStrongValidators) { | 
| -  base::CommandLine::ForCurrentProcess()->AppendSwitch( | 
| -      switches::kEnableDownloadResumption); | 
| - | 
| +IN_PROC_BROWSER_TEST_P(DownloadResumptionContentTest, StrongValidators) { | 
| TestDownloadRequestHandler request_handler; | 
| TestDownloadRequestHandler::Parameters parameters = | 
| TestDownloadRequestHandler::Parameters::WithSingleInterruption(); | 
| @@ -1001,12 +1059,14 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, Resume_WithStrongValidators) { | 
| parameters.injected_errors.front(); | 
| request_handler.StartServing(parameters); | 
|  | 
| -  DownloadItem* download = StartDownloadAndReturnItem(request_handler.url()); | 
| +  DownloadItem* download = StartDownloadAndReturnItem( | 
| +      initiator_shell_for_resumption(), request_handler.url()); | 
| WaitForInterrupt(download); | 
|  | 
| ASSERT_EQ(interruption.offset, download->GetReceivedBytes()); | 
| ASSERT_EQ(parameters.size, download->GetTotalBytes()); | 
|  | 
| +  PrepareToResume(); | 
| download->Resume(); | 
| WaitForCompletion(download); | 
|  | 
| @@ -1049,10 +1109,8 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, Resume_WithStrongValidators) { | 
| // (as opposed to If-Match), the behavior for a precondition failure is also to | 
| // respond with a 200. So this test case covers both validation failure and | 
| // ignoring the range request. | 
| -IN_PROC_BROWSER_TEST_F(DownloadContentTest, | 
| -                       Resume_RestartIfNotPartialResponse) { | 
| -  base::CommandLine::ForCurrentProcess()->AppendSwitch( | 
| -      switches::kEnableDownloadResumption); | 
| +IN_PROC_BROWSER_TEST_P(DownloadResumptionContentTest, | 
| +                       RestartIfNotPartialResponse) { | 
| const int kOriginalPatternGeneratorSeed = 1; | 
| const int kNewPatternGeneratorSeed = 2; | 
|  | 
| @@ -1065,7 +1123,8 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, | 
| TestDownloadRequestHandler request_handler; | 
| request_handler.StartServing(parameters); | 
|  | 
| -  DownloadItem* download = StartDownloadAndReturnItem(request_handler.url()); | 
| +  DownloadItem* download = StartDownloadAndReturnItem( | 
| +      initiator_shell_for_resumption(), request_handler.url()); | 
| WaitForInterrupt(download); | 
|  | 
| ASSERT_EQ(interruption.offset, download->GetReceivedBytes()); | 
| @@ -1076,6 +1135,7 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, | 
| parameters.pattern_generator_seed = kNewPatternGeneratorSeed; | 
| request_handler.StartServing(parameters); | 
|  | 
| +  PrepareToResume(); | 
| download->Resume(); | 
| WaitForCompletion(download); | 
|  | 
| @@ -1113,9 +1173,7 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, | 
| } | 
|  | 
| // Confirm we restart if we don't have a verifier. | 
| -IN_PROC_BROWSER_TEST_F(DownloadContentTest, Resume_RestartIfNoETag) { | 
| -  base::CommandLine::ForCurrentProcess()->AppendSwitch( | 
| -      switches::kEnableDownloadResumption); | 
| +IN_PROC_BROWSER_TEST_P(DownloadResumptionContentTest, RestartIfNoETag) { | 
| const int kOriginalPatternGeneratorSeed = 1; | 
| const int kNewPatternGeneratorSeed = 2; | 
|  | 
| @@ -1127,13 +1185,15 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, Resume_RestartIfNoETag) { | 
|  | 
| TestDownloadRequestHandler request_handler; | 
| request_handler.StartServing(parameters); | 
| -  DownloadItem* download = StartDownloadAndReturnItem(request_handler.url()); | 
| +  DownloadItem* download = StartDownloadAndReturnItem( | 
| +      initiator_shell_for_resumption(), request_handler.url()); | 
| WaitForInterrupt(download); | 
|  | 
| parameters.pattern_generator_seed = kNewPatternGeneratorSeed; | 
| parameters.ClearInjectedErrors(); | 
| request_handler.StartServing(parameters); | 
|  | 
| +  PrepareToResume(); | 
| download->Resume(); | 
| WaitForCompletion(download); | 
|  | 
| @@ -1157,15 +1217,14 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, Resume_RestartIfNoETag) { | 
|  | 
| // Partial file goes missing before the download is resumed. The download should | 
| // restart. | 
| -IN_PROC_BROWSER_TEST_F(DownloadContentTest, Resume_RestartIfNoPartialFile) { | 
| -  base::CommandLine::ForCurrentProcess()->AppendSwitch( | 
| -      switches::kEnableDownloadResumption); | 
| +IN_PROC_BROWSER_TEST_P(DownloadResumptionContentTest, RestartIfNoPartialFile) { | 
| TestDownloadRequestHandler::Parameters parameters = | 
| TestDownloadRequestHandler::Parameters::WithSingleInterruption(); | 
|  | 
| TestDownloadRequestHandler request_handler; | 
| request_handler.StartServing(parameters); | 
| -  DownloadItem* download = StartDownloadAndReturnItem(request_handler.url()); | 
| +  DownloadItem* download = StartDownloadAndReturnItem( | 
| +      initiator_shell_for_resumption(), request_handler.url()); | 
| WaitForInterrupt(download); | 
|  | 
| // Delete the intermediate file. | 
| @@ -1175,6 +1234,7 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, Resume_RestartIfNoPartialFile) { | 
| parameters.ClearInjectedErrors(); | 
| request_handler.StartServing(parameters); | 
|  | 
| +  PrepareToResume(); | 
| download->Resume(); | 
| WaitForCompletion(download); | 
|  | 
| @@ -1185,15 +1245,14 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, Resume_RestartIfNoPartialFile) { | 
| download->GetTargetFilePath())); | 
| } | 
|  | 
| -IN_PROC_BROWSER_TEST_F(DownloadContentTest, Resume_RecoverFromInitFileError) { | 
| -  base::CommandLine::ForCurrentProcess()->AppendSwitch( | 
| -      switches::kEnableDownloadResumption); | 
| +IN_PROC_BROWSER_TEST_P(DownloadResumptionContentTest, | 
| +                       RecoverFromInitFileError) { | 
| TestDownloadRequestHandler request_handler; | 
| request_handler.StartServing(TestDownloadRequestHandler::Parameters()); | 
|  | 
| // Setup the error injector. | 
| -  scoped_refptr<TestFileErrorInjector> injector( | 
| -      TestFileErrorInjector::Create(DownloadManagerForShell(shell()))); | 
| +  scoped_refptr<TestFileErrorInjector> injector(TestFileErrorInjector::Create( | 
| +      DownloadManagerForShell(initiator_shell_for_resumption()))); | 
|  | 
| const TestFileErrorInjector::FileErrorInfo err = { | 
| request_handler.url().spec(), | 
| @@ -1203,7 +1262,8 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, Resume_RecoverFromInitFileError) { | 
| injector->InjectErrors(); | 
|  | 
| // Start and watch for interrupt. | 
| -  DownloadItem* download(StartDownloadAndReturnItem(request_handler.url())); | 
| +  DownloadItem* download(StartDownloadAndReturnItem( | 
| +      initiator_shell_for_resumption(), request_handler.url())); | 
| WaitForInterrupt(download); | 
| ASSERT_EQ(DownloadItem::INTERRUPTED, download->GetState()); | 
| EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE, | 
| @@ -1224,21 +1284,20 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, Resume_RecoverFromInitFileError) { | 
| injector->InjectErrors(); | 
|  | 
| // Resume and watch completion. | 
| +  PrepareToResume(); | 
| download->Resume(); | 
| WaitForCompletion(download); | 
| EXPECT_EQ(download->GetState(), DownloadItem::COMPLETE); | 
| } | 
|  | 
| -IN_PROC_BROWSER_TEST_F(DownloadContentTest, | 
| -                       Resume_RecoverFromIntermediateFileRenameError) { | 
| -  base::CommandLine::ForCurrentProcess()->AppendSwitch( | 
| -      switches::kEnableDownloadResumption); | 
| +IN_PROC_BROWSER_TEST_P(DownloadResumptionContentTest, | 
| +                       RecoverFromIntermediateFileRenameError) { | 
| TestDownloadRequestHandler request_handler; | 
| request_handler.StartServing(TestDownloadRequestHandler::Parameters()); | 
|  | 
| // Setup the error injector. | 
| -  scoped_refptr<TestFileErrorInjector> injector( | 
| -      TestFileErrorInjector::Create(DownloadManagerForShell(shell()))); | 
| +  scoped_refptr<TestFileErrorInjector> injector(TestFileErrorInjector::Create( | 
| +      DownloadManagerForShell(initiator_shell_for_resumption()))); | 
|  | 
| const TestFileErrorInjector::FileErrorInfo err = { | 
| request_handler.url().spec(), | 
| @@ -1248,7 +1307,8 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, | 
| injector->InjectErrors(); | 
|  | 
| // Start and watch for interrupt. | 
| -  DownloadItem* download(StartDownloadAndReturnItem(request_handler.url())); | 
| +  DownloadItem* download(StartDownloadAndReturnItem( | 
| +      initiator_shell_for_resumption(), request_handler.url())); | 
| WaitForInterrupt(download); | 
| ASSERT_EQ(DownloadItem::INTERRUPTED, download->GetState()); | 
| EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE, | 
| @@ -1270,23 +1330,23 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, | 
| injector->ClearErrors(); | 
| injector->InjectErrors(); | 
|  | 
| +  PrepareToResume(); | 
| download->Resume(); | 
| WaitForCompletion(download); | 
| EXPECT_EQ(download->GetState(), DownloadItem::COMPLETE); | 
| } | 
|  | 
| -IN_PROC_BROWSER_TEST_F(DownloadContentTest, | 
| -                       Resume_RecoverFromFinalRenameError) { | 
| -  base::CommandLine::ForCurrentProcess()->AppendSwitch( | 
| -      switches::kEnableDownloadResumption); | 
| +IN_PROC_BROWSER_TEST_P(DownloadResumptionContentTest, | 
| +                       RecoverFromFinalRenameError) { | 
| TestDownloadRequestHandler request_handler; | 
| request_handler.StartServing(TestDownloadRequestHandler::Parameters()); | 
|  | 
| // Setup the error injector. | 
| -  scoped_refptr<TestFileErrorInjector> injector( | 
| -      TestFileErrorInjector::Create(DownloadManagerForShell(shell()))); | 
| +  scoped_refptr<TestFileErrorInjector> injector(TestFileErrorInjector::Create( | 
| +      DownloadManagerForShell(initiator_shell_for_resumption()))); | 
|  | 
| -  DownloadManagerForShell(shell())->RemoveAllDownloads(); | 
| +  DownloadManagerForShell(initiator_shell_for_resumption()) | 
| +      ->RemoveAllDownloads(); | 
| TestFileErrorInjector::FileErrorInfo err = { | 
| request_handler.url().spec(), | 
| TestFileErrorInjector::FILE_OPERATION_RENAME_ANNOTATE, 0, | 
| @@ -1295,7 +1355,8 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, | 
| injector->InjectErrors(); | 
|  | 
| // Start and watch for interrupt. | 
| -  DownloadItem* download(StartDownloadAndReturnItem(request_handler.url())); | 
| +  DownloadItem* download(StartDownloadAndReturnItem( | 
| +      initiator_shell_for_resumption(), request_handler.url())); | 
| WaitForInterrupt(download); | 
| ASSERT_EQ(DownloadItem::INTERRUPTED, download->GetState()); | 
| EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE, | 
| @@ -1315,6 +1376,7 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, | 
| injector->ClearErrors(); | 
| injector->InjectErrors(); | 
|  | 
| +  PrepareToResume(); | 
| download->Resume(); | 
| WaitForCompletion(download); | 
| EXPECT_EQ(download->GetState(), DownloadItem::COMPLETE); | 
| @@ -1322,14 +1384,14 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, | 
|  | 
| // An interrupted download should remove the intermediate file when it is | 
| // cancelled. | 
| -IN_PROC_BROWSER_TEST_F(DownloadContentTest, CancelInterruptedDownload) { | 
| -  base::CommandLine::ForCurrentProcess()->AppendSwitch( | 
| -      switches::kEnableDownloadResumption); | 
| +IN_PROC_BROWSER_TEST_P(DownloadResumptionContentTest, | 
| +                       CancelInterruptedDownload) { | 
| TestDownloadRequestHandler request_handler; | 
| request_handler.StartServing( | 
| TestDownloadRequestHandler::Parameters::WithSingleInterruption()); | 
|  | 
| -  DownloadItem* download = StartDownloadAndReturnItem(request_handler.url()); | 
| +  DownloadItem* download = StartDownloadAndReturnItem( | 
| +      initiator_shell_for_resumption(), request_handler.url()); | 
| WaitForInterrupt(download); | 
|  | 
| base::FilePath intermediate_path = download->GetFullPath(); | 
| @@ -1345,14 +1407,14 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, CancelInterruptedDownload) { | 
| EXPECT_TRUE(download->GetFullPath().empty()); | 
| } | 
|  | 
| -IN_PROC_BROWSER_TEST_F(DownloadContentTest, RemoveInterruptedDownload) { | 
| -  base::CommandLine::ForCurrentProcess()->AppendSwitch( | 
| -      switches::kEnableDownloadResumption); | 
| +IN_PROC_BROWSER_TEST_P(DownloadResumptionContentTest, | 
| +                       RemoveInterruptedDownload) { | 
| TestDownloadRequestHandler request_handler; | 
| request_handler.StartServing( | 
| TestDownloadRequestHandler::Parameters::WithSingleInterruption()); | 
|  | 
| -  DownloadItem* download = StartDownloadAndReturnItem(request_handler.url()); | 
| +  DownloadItem* download = StartDownloadAndReturnItem( | 
| +      initiator_shell_for_resumption(), request_handler.url()); | 
| WaitForInterrupt(download); | 
|  | 
| base::FilePath intermediate_path = download->GetFullPath(); | 
| @@ -1374,7 +1436,8 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, RemoveCompletedDownload) { | 
| request_handler.StartServing(TestDownloadRequestHandler::Parameters()); | 
| scoped_ptr<DownloadTestObserver> completion_observer( | 
| CreateWaiter(shell(), 1)); | 
| -  DownloadItem* download(StartDownloadAndReturnItem(request_handler.url())); | 
| +  DownloadItem* download( | 
| +      StartDownloadAndReturnItem(shell(), request_handler.url())); | 
| completion_observer->WaitForFinished(); | 
|  | 
| // The target path should exist. | 
| @@ -1388,15 +1451,14 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, RemoveCompletedDownload) { | 
| EXPECT_TRUE(base::PathExists(target_path)); | 
| } | 
|  | 
| -IN_PROC_BROWSER_TEST_F(DownloadContentTest, RemoveResumingDownload) { | 
| -  base::CommandLine::ForCurrentProcess()->AppendSwitch( | 
| -      switches::kEnableDownloadResumption); | 
| +IN_PROC_BROWSER_TEST_P(DownloadResumptionContentTest, RemoveResumingDownload) { | 
| TestDownloadRequestHandler::Parameters parameters = | 
| TestDownloadRequestHandler::Parameters::WithSingleInterruption(); | 
| TestDownloadRequestHandler request_handler; | 
| request_handler.StartServing(parameters); | 
|  | 
| -  DownloadItem* download = StartDownloadAndReturnItem(request_handler.url()); | 
| +  DownloadItem* download = StartDownloadAndReturnItem( | 
| +      initiator_shell_for_resumption(), request_handler.url()); | 
| WaitForInterrupt(download); | 
|  | 
| base::FilePath intermediate_path(download->GetFullPath()); | 
| @@ -1405,13 +1467,15 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, RemoveResumingDownload) { | 
|  | 
| // Resume and remove download. We expect only a single OnDownloadCreated() | 
| // call, and that's for the second download created below. | 
| -  MockDownloadManagerObserver dm_observer(DownloadManagerForShell(shell())); | 
| +  MockDownloadManagerObserver dm_observer( | 
| +      DownloadManagerForShell(initiator_shell_for_resumption())); | 
| EXPECT_CALL(dm_observer, OnDownloadCreated(_,_)).Times(1); | 
|  | 
| TestRequestStartHandler request_start_handler; | 
| parameters.on_start_handler = request_start_handler.GetOnStartHandler(); | 
| request_handler.StartServing(parameters); | 
|  | 
| +  PrepareToResume(); | 
| download->Resume(); | 
| request_start_handler.WaitForCallback(); | 
|  | 
| @@ -1439,15 +1503,14 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, RemoveResumingDownload) { | 
| EXPECT_TRUE(EnsureNoPendingDownloads()); | 
| } | 
|  | 
| -IN_PROC_BROWSER_TEST_F(DownloadContentTest, CancelResumingDownload) { | 
| -  base::CommandLine::ForCurrentProcess()->AppendSwitch( | 
| -      switches::kEnableDownloadResumption); | 
| +IN_PROC_BROWSER_TEST_P(DownloadResumptionContentTest, CancelResumingDownload) { | 
| TestDownloadRequestHandler::Parameters parameters = | 
| TestDownloadRequestHandler::Parameters::WithSingleInterruption(); | 
| TestDownloadRequestHandler request_handler; | 
| request_handler.StartServing(parameters); | 
|  | 
| -  DownloadItem* download = StartDownloadAndReturnItem(request_handler.url()); | 
| +  DownloadItem* download = StartDownloadAndReturnItem( | 
| +      initiator_shell_for_resumption(), request_handler.url()); | 
| WaitForInterrupt(download); | 
|  | 
| base::FilePath intermediate_path(download->GetFullPath()); | 
| @@ -1456,13 +1519,15 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, CancelResumingDownload) { | 
|  | 
| // Resume and remove download. We expect only a single OnDownloadCreated() | 
| // call, and that's for the second download created below. | 
| -  MockDownloadManagerObserver dm_observer(DownloadManagerForShell(shell())); | 
| +  MockDownloadManagerObserver dm_observer( | 
| +      DownloadManagerForShell(initiator_shell_for_resumption())); | 
| EXPECT_CALL(dm_observer, OnDownloadCreated(_,_)).Times(1); | 
|  | 
| TestRequestStartHandler request_start_handler; | 
| parameters.on_start_handler = request_start_handler.GetOnStartHandler(); | 
| request_handler.StartServing(parameters); | 
|  | 
| +  PrepareToResume(); | 
| download->Resume(); | 
| request_start_handler.WaitForCallback(); | 
|  | 
|  |