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

Unified Diff: content/browser/background_fetch/background_fetch_context.cc

Issue 2724783002: Make the BackgroundFetchJobController a per-job object (Closed)
Patch Set: Created 3 years, 10 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 side-by-side diff with in-line comments
Download patch
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..ce0b6e5e385b3a6d3aaf4a1820b38ceb91e5ff4c 100644
--- a/content/browser/background_fetch/background_fetch_context.cc
+++ b/content/browser/background_fetch/background_fetch_context.cc
@@ -18,8 +18,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 +40,38 @@ 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.
Peter Beverloo 2017/03/08 14:27:04 That does mean that such flushing must be synchron
harkness 2017/03/09 13:33:25 Yes, it will either mean that or that we do the fl
Peter Beverloo 2017/03/09 15:18:57 Not flushing means potential data loss, that's not
harkness 2017/03/09 18:35:31 As discussed in person, we should be able to avoid
+ 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 =
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_, job_data);
+ }
}
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698