Index: content/browser/background_fetch/background_fetch_data_manager_unittest.cc |
diff --git a/content/browser/background_fetch/background_fetch_data_manager_unittest.cc b/content/browser/background_fetch/background_fetch_data_manager_unittest.cc |
index 25486426585507754f70f8332e60a2c0f1d3889d..155bea3bc70f96f0bd42d3c5ddec8a62c4e20342 100644 |
--- a/content/browser/background_fetch/background_fetch_data_manager_unittest.cc |
+++ b/content/browser/background_fetch/background_fetch_data_manager_unittest.cc |
@@ -9,11 +9,13 @@ |
#include <vector> |
#include "base/bind_helpers.h" |
+#include "base/callback_helpers.h" |
#include "base/memory/ptr_util.h" |
#include "base/run_loop.h" |
#include "content/browser/background_fetch/background_fetch_job_info.h" |
#include "content/browser/background_fetch/background_fetch_job_response_data.h" |
#include "content/browser/background_fetch/background_fetch_request_info.h" |
+#include "content/common/service_worker/service_worker_types.h" |
#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/download_interrupt_reasons.h" |
#include "content/public/browser/download_item.h" |
@@ -55,18 +57,87 @@ class BackgroundFetchDataManagerTest : public ::testing::Test { |
std::move(request_infos)); |
} |
+ void GetResponse() { |
+ base::RunLoop run_loop; |
+ BackgroundFetchResponseCompleteCallback callback = |
+ base::Bind(&BackgroundFetchDataManagerTest::DidGetResponse, |
+ base::Unretained(this), run_loop.QuitClosure()); |
+ BrowserThread::PostTask( |
+ BrowserThread::IO, FROM_HERE, |
+ base::Bind(&BackgroundFetchDataManager::GetJobResponse, |
+ base::Unretained(background_fetch_data_manager()), job_guid_, |
+ base::Bind(&BackgroundFetchDataManagerTest::DidGetResponse, |
+ base::Unretained(this), run_loop.QuitClosure()))); |
+ run_loop.Run(); |
+ } |
+ |
+ void DidGetResponse(base::Closure closure, |
+ std::vector<ServiceWorkerResponse> responses, |
+ std::vector<std::unique_ptr<BlobHandle>> blobs) { |
+ responses_ = std::move(responses); |
+ blobs_ = std::move(blobs); |
+ BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, closure); |
+ } |
+ |
const std::string& job_guid() const { return job_guid_; } |
BackgroundFetchDataManager* background_fetch_data_manager() { |
return background_fetch_data_manager_.get(); |
} |
+ const std::vector<ServiceWorkerResponse>& responses() const { |
+ return responses_; |
+ } |
+ const std::vector<std::unique_ptr<BlobHandle>>& blobs() const { |
+ return blobs_; |
+ } |
+ |
private: |
std::string job_guid_; |
TestBrowserContext browser_context_; |
std::unique_ptr<BackgroundFetchDataManager> background_fetch_data_manager_; |
TestBrowserThreadBundle thread_bundle_; |
+ std::vector<ServiceWorkerResponse> responses_; |
+ std::vector<std::unique_ptr<BlobHandle>> blobs_; |
}; |
+TEST_F(BackgroundFetchDataManagerTest, CompleteJob) { |
+ CreateRequests(10); |
+ BackgroundFetchDataManager* data_manager = background_fetch_data_manager(); |
+ std::vector<std::string> request_guids; |
+ |
+ // Get all of the fetch requests from the BackgroundFetchDataManager. |
+ for (int i = 0; i < 10; i++) { |
+ EXPECT_FALSE(data_manager->IsComplete(job_guid())); |
+ ASSERT_TRUE(data_manager->HasRequestsRemaining(job_guid())); |
+ const BackgroundFetchRequestInfo& request_info = |
+ data_manager->GetNextBackgroundFetchRequestInfo(job_guid()); |
+ request_guids.push_back(request_info.guid()); |
+ EXPECT_EQ(request_info.tag(), kTag); |
+ EXPECT_EQ(request_info.state(), |
+ DownloadItem::DownloadState::MAX_DOWNLOAD_STATE); |
+ EXPECT_EQ(request_info.interrupt_reason(), |
+ DownloadInterruptReason::DOWNLOAD_INTERRUPT_REASON_NONE); |
+ } |
+ |
+ // At this point, all the fetches have been started, but none finished. |
+ EXPECT_FALSE(data_manager->HasRequestsRemaining(job_guid())); |
+ |
+ // Complete all of the fetch requests. |
+ for (int i = 0; i < 10; i++) { |
+ EXPECT_FALSE(data_manager->IsComplete(job_guid())); |
+ EXPECT_FALSE(data_manager->UpdateRequestState( |
+ job_guid(), request_guids[i], DownloadItem::DownloadState::COMPLETE, |
+ DownloadInterruptReason::DOWNLOAD_INTERRUPT_REASON_NONE)); |
+ } |
+ |
+ // All requests are complete now. |
+ EXPECT_TRUE(data_manager->IsComplete(job_guid())); |
+ GetResponse(); |
+ |
+ EXPECT_EQ(10U, responses().size()); |
+ EXPECT_EQ(10U, blobs().size()); |
+} |
+ |
TEST_F(BackgroundFetchDataManagerTest, OutOfOrderCompletion) { |
CreateRequests(10); |
BackgroundFetchDataManager* data_manager = background_fetch_data_manager(); |