| Index: content/browser/background_fetch/background_fetch_context.cc
 | 
| diff --git a/content/browser/background_fetch/background_fetch_context.cc b/content/browser/background_fetch/background_fetch_context.cc
 | 
| index 2fde2c68454d1fabccfca1805a53360911a1802a..256eb5a460c629275cb80ebc341f5dd906706ad0 100644
 | 
| --- a/content/browser/background_fetch/background_fetch_context.cc
 | 
| +++ b/content/browser/background_fetch/background_fetch_context.cc
 | 
| @@ -8,7 +8,6 @@
 | 
|  #include "content/browser/background_fetch/background_fetch_request_info.h"
 | 
|  #include "content/browser/service_worker/service_worker_context_wrapper.h"
 | 
|  #include "content/public/browser/browser_context.h"
 | 
| -#include "content/public/browser/browser_thread.h"
 | 
|  #include "content/public/browser/download_manager.h"
 | 
|  #include "content/public/browser/storage_partition.h"
 | 
|  
 | 
| @@ -18,8 +17,9 @@ BackgroundFetchContext::BackgroundFetchContext(
 | 
|      BrowserContext* browser_context,
 | 
|      StoragePartition* storage_partition,
 | 
|      const scoped_refptr<ServiceWorkerContextWrapper>& service_worker_context)
 | 
| -    : service_worker_context_(service_worker_context),
 | 
| -      background_fetch_job_controller_(browser_context, storage_partition),
 | 
| +    : browser_context_(browser_context),
 | 
| +      storage_partition_(storage_partition),
 | 
| +      service_worker_context_(service_worker_context),
 | 
|        background_fetch_data_manager_(this) {
 | 
|    DCHECK_CURRENTLY_ON(BrowserThread::UI);
 | 
|    // TODO(harkness): BackgroundFetchContext should have
 | 
| @@ -39,18 +39,39 @@ void BackgroundFetchContext::Init() {
 | 
|  
 | 
|  void BackgroundFetchContext::Shutdown() {
 | 
|    DCHECK_CURRENTLY_ON(BrowserThread::UI);
 | 
| +
 | 
| +  BrowserThread::PostTask(
 | 
| +      BrowserThread::IO, FROM_HERE,
 | 
| +      base::Bind(&BackgroundFetchContext::ShutdownOnIO, this));
 | 
| +}
 | 
| +
 | 
| +void BackgroundFetchContext::ShutdownOnIO() {
 | 
| +  DCHECK_CURRENTLY_ON(BrowserThread::IO);
 | 
| +
 | 
| +  // Call Shutdown on all pending job controllers to give them a chance to flush
 | 
| +  // any status to the DataManager.
 | 
| +  for (auto& job : job_map_)
 | 
| +    job.second->Shutdown();
 | 
|  }
 | 
|  
 | 
|  void BackgroundFetchContext::CreateRequest(
 | 
|      const BackgroundFetchJobInfo& job_info,
 | 
|      std::vector<BackgroundFetchRequestInfo>& request_infos) {
 | 
| +  DCHECK_CURRENTLY_ON(BrowserThread::IO);
 | 
|    DCHECK_GE(1U, request_infos.size());
 | 
| +
 | 
|    // Inform the data manager about the new download.
 | 
| -  BackgroundFetchJobData* job_data =
 | 
| +  std::unique_ptr<BackgroundFetchJobData> job_data =
 | 
|        background_fetch_data_manager_.CreateRequest(job_info, request_infos);
 | 
| +
 | 
|    // If job_data is null, the DataManager will have logged an error.
 | 
| -  if (job_data)
 | 
| -    background_fetch_job_controller_.ProcessJob(job_info.guid(), job_data);
 | 
| +  if (job_data) {
 | 
| +    // Create a controller which drives the processing of the job. It will use
 | 
| +    // the JobData to get information about individual requests for the job.
 | 
| +    job_map_[job_info.guid()] = base::MakeUnique<BackgroundFetchJobController>(
 | 
| +        job_info.guid(), browser_context_, storage_partition_,
 | 
| +        std::move(job_data));
 | 
| +  }
 | 
|  }
 | 
|  
 | 
|  }  // namespace content
 | 
| 
 |