OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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 "content/browser/background_fetch/background_fetch_job_controller.h" | 5 #include "content/browser/background_fetch/background_fetch_job_controller.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/guid.h" |
10 #include "base/memory/ptr_util.h" | 11 #include "base/memory/ptr_util.h" |
11 #include "content/browser/background_fetch/background_fetch_data_manager.h" | 12 #include "content/browser/background_fetch/background_fetch_data_manager.h" |
12 #include "content/browser/background_fetch/background_fetch_request_info.h" | 13 #include "content/browser/background_fetch/background_fetch_request_info.h" |
13 #include "content/public/browser/browser_context.h" | 14 #include "content/public/browser/browser_context.h" |
14 #include "content/public/browser/browser_thread.h" | 15 #include "content/public/browser/browser_thread.h" |
15 #include "content/public/browser/download_manager.h" | 16 #include "content/public/browser/download_manager.h" |
16 #include "content/public/browser/storage_partition.h" | 17 #include "content/public/browser/storage_partition.h" |
17 | 18 |
18 namespace content { | 19 namespace content { |
19 | 20 |
20 BackgroundFetchJobController::BackgroundFetchJobController( | 21 BackgroundFetchJobController::BackgroundFetchJobController( |
21 const std::string& job_guid, | 22 const BackgroundFetchRegistrationId& registration_id, |
22 BrowserContext* browser_context, | 23 BrowserContext* browser_context, |
23 StoragePartition* storage_partition, | 24 StoragePartition* storage_partition, |
24 BackgroundFetchDataManager* data_manager, | 25 BackgroundFetchDataManager* data_manager, |
25 base::OnceClosure completed_closure) | 26 CompletedCallback completed_callback) |
26 : job_guid_(job_guid), | 27 : registration_id_(registration_id), |
| 28 job_guid_(base::GenerateGUID()), |
27 browser_context_(browser_context), | 29 browser_context_(browser_context), |
28 storage_partition_(storage_partition), | 30 storage_partition_(storage_partition), |
29 data_manager_(data_manager), | 31 data_manager_(data_manager), |
30 completed_closure_(std::move(completed_closure)), | 32 completed_callback_(std::move(completed_callback)), |
31 weak_ptr_factory_(this) {} | 33 weak_ptr_factory_(this) {} |
32 | 34 |
33 BackgroundFetchJobController::~BackgroundFetchJobController() = default; | 35 BackgroundFetchJobController::~BackgroundFetchJobController() = default; |
34 | 36 |
35 void BackgroundFetchJobController::Shutdown() { | 37 void BackgroundFetchJobController::Shutdown() { |
36 DownloadManager* manager = | 38 DownloadManager* manager = |
37 BrowserContext::GetDownloadManager(browser_context_); | 39 BrowserContext::GetDownloadManager(browser_context_); |
38 // For any downloads in progress, remove the observer. | 40 // For any downloads in progress, remove the observer. |
39 for (auto& guid_map_entry : download_guid_map_) { | 41 for (auto& guid_map_entry : download_guid_map_) { |
40 DownloadItem* item = manager->GetDownloadByGuid(guid_map_entry.first); | 42 DownloadItem* item = manager->GetDownloadByGuid(guid_map_entry.first); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 item->GetReceivedBytes()); | 94 item->GetReceivedBytes()); |
93 // Fall through. | 95 // Fall through. |
94 case DownloadItem::DownloadState::CANCELLED: | 96 case DownloadItem::DownloadState::CANCELLED: |
95 // TODO(harkness): Tell the notification service to update the download | 97 // TODO(harkness): Tell the notification service to update the download |
96 // notification. | 98 // notification. |
97 | 99 |
98 if (requests_remaining) { | 100 if (requests_remaining) { |
99 ProcessRequest( | 101 ProcessRequest( |
100 data_manager_->GetNextBackgroundFetchRequestInfo(job_guid_)); | 102 data_manager_->GetNextBackgroundFetchRequestInfo(job_guid_)); |
101 } else if (data_manager_->IsComplete(job_guid_)) { | 103 } else if (data_manager_->IsComplete(job_guid_)) { |
102 std::move(completed_closure_).Run(); | 104 std::move(completed_callback_).Run(registration_id_); |
103 } | 105 } |
104 break; | 106 break; |
105 case DownloadItem::DownloadState::INTERRUPTED: | 107 case DownloadItem::DownloadState::INTERRUPTED: |
106 // TODO(harkness): Just update the notification that it is paused. | 108 // TODO(harkness): Just update the notification that it is paused. |
107 break; | 109 break; |
108 case DownloadItem::DownloadState::IN_PROGRESS: | 110 case DownloadItem::DownloadState::IN_PROGRESS: |
109 // TODO(harkness): If the download was previously paused, this should now | 111 // TODO(harkness): If the download was previously paused, this should now |
110 // unpause the notification. | 112 // unpause the notification. |
111 break; | 113 break; |
112 case DownloadItem::DownloadState::MAX_DOWNLOAD_STATE: | 114 case DownloadItem::DownloadState::MAX_DOWNLOAD_STATE: |
(...skipping 18 matching lines...) Expand all Loading... |
131 fetch_request.url(), storage_partition_->GetURLRequestContext())); | 133 fetch_request.url(), storage_partition_->GetURLRequestContext())); |
132 params->set_callback( | 134 params->set_callback( |
133 base::Bind(&BackgroundFetchJobController::DownloadStarted, | 135 base::Bind(&BackgroundFetchJobController::DownloadStarted, |
134 weak_ptr_factory_.GetWeakPtr(), fetch_request.guid())); | 136 weak_ptr_factory_.GetWeakPtr(), fetch_request.guid())); |
135 | 137 |
136 BrowserContext::GetDownloadManager(browser_context_) | 138 BrowserContext::GetDownloadManager(browser_context_) |
137 ->DownloadUrl(std::move(params)); | 139 ->DownloadUrl(std::move(params)); |
138 } | 140 } |
139 | 141 |
140 } // namespace content | 142 } // namespace content |
OLD | NEW |