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

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

Issue 2767373002: Implement GetJobResponse and merge JobData into DataManager. (Closed)
Patch Set: Removed typedef and added DISALLOW_COPY_AND_ASSIGN Created 3 years, 9 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_job_controller_unittest.cc
diff --git a/content/browser/background_fetch/background_fetch_job_controller_unittest.cc b/content/browser/background_fetch/background_fetch_job_controller_unittest.cc
index 9478fe824d5474da4a1f086ed3a10a9dc41b9cf8..22959816189334849c265623cc715a0492d0bbf5 100644
--- a/content/browser/background_fetch/background_fetch_job_controller_unittest.cc
+++ b/content/browser/background_fetch/background_fetch_job_controller_unittest.cc
@@ -9,6 +9,7 @@
#include "base/bind_helpers.h"
#include "base/callback_helpers.h"
+#include "base/files/file_path.h"
#include "base/guid.h"
#include "base/memory/ptr_util.h"
#include "base/run_loop.h"
@@ -23,6 +24,8 @@
#include "content/public/test/test_browser_thread_bundle.h"
#include "testing/gtest/include/gtest/gtest.h"
+namespace content {
+
namespace {
const char kOrigin[] = "https://example.com/";
@@ -30,11 +33,10 @@ const char kJobGuid[] = "TestRequestGuid";
constexpr int64_t kServiceWorkerRegistrationId = 9001;
const char kTestUrl[] = "http://www.example.com/example.html";
const char kTag[] = "testTag";
+const base::FilePath::CharType kFileName[] = FILE_PATH_LITERAL("path/file.txt");
} // namespace
-namespace content {
-
// Use the basic MockDownloadManager, but override it so that it implements the
// functionality that the JobController requires.
class MockDownloadManagerWithCallback : public MockDownloadManager {
@@ -73,10 +75,72 @@ class MockDownloadManagerWithCallback : public MockDownloadManager {
std::vector<std::unique_ptr<FakeDownloadItem>> download_items_;
};
+class FakeBackgroundFetchDataManager : public BackgroundFetchDataManager {
+ public:
+ FakeBackgroundFetchDataManager(BrowserContext* browser_context)
+ : BackgroundFetchDataManager(browser_context) {}
+ ~FakeBackgroundFetchDataManager() = default;
+
+ void set_is_complete(bool is_complete) { is_complete_ = is_complete; }
+
+ void set_next_request(BackgroundFetchRequestInfo* request) {
+ next_request_ = request;
+ }
+
+ bool UpdateRequestState(const std::string& job_guid,
+ const std::string& request_guid,
+ DownloadItem::DownloadState state,
+ DownloadInterruptReason interrupt_reason) override {
+ if (state == DownloadItem::DownloadState::COMPLETE ||
+ state == DownloadItem::DownloadState::CANCELLED) {
+ if (!next_request_)
+ is_complete_ = true;
+ }
+ current_request_->set_state(state);
+ current_request_->set_interrupt_reason(interrupt_reason);
+ return next_request_;
+ }
+
+ void UpdateRequestDownloadGuid(const std::string& job_guid,
+ const std::string& request_guid,
+ const std::string& download_guid) override {
+ current_request_->set_download_guid(download_guid);
+ }
+
+ void UpdateRequestStorageState(const std::string& job_guid,
+ const std::string& request_guid,
+ const base::FilePath& file_path,
+ int64_t received_bytes) override {
+ current_request_->set_file_path(file_path);
+ current_request_->set_received_bytes(received_bytes);
+ }
+
+ const BackgroundFetchRequestInfo& GetNextBackgroundFetchRequestInfo(
+ const std::string& job_guid) override {
+ current_request_ = next_request_;
+ next_request_ = nullptr;
+ return *current_request_;
+ }
+
+ bool HasRequestsRemaining(const std::string& job_guid) const override {
+ return next_request_;
+ }
+ bool IsComplete(const std::string& job_guid) const override {
+ return is_complete_;
+ }
+
+ private:
+ bool is_complete_ = false;
+ BackgroundFetchRequestInfo* current_request_ = nullptr;
+ BackgroundFetchRequestInfo* next_request_ = nullptr;
+};
+
class BackgroundFetchJobControllerTest : public ::testing::Test {
public:
BackgroundFetchJobControllerTest()
- : download_manager_(new MockDownloadManagerWithCallback()) {}
+ : data_manager_(base::MakeUnique<FakeBackgroundFetchDataManager>(
+ &browser_context_)),
+ download_manager_(new MockDownloadManagerWithCallback()) {}
~BackgroundFetchJobControllerTest() override = default;
void SetUp() override {
@@ -88,12 +152,11 @@ class BackgroundFetchJobControllerTest : public ::testing::Test {
void TearDown() override { job_controller_->Shutdown(); }
- void InitializeJobController(
- std::unique_ptr<BackgroundFetchJobData> job_data) {
+ void InitializeJobController() {
job_controller_ = base::MakeUnique<BackgroundFetchJobController>(
kJobGuid, &browser_context_,
BrowserContext::GetDefaultStoragePartition(&browser_context_),
- std::move(job_data),
+ data_manager_.get(),
base::BindOnce(&BackgroundFetchJobControllerTest::DidCompleteJob,
base::Unretained(this)));
}
@@ -125,10 +188,15 @@ class BackgroundFetchJobControllerTest : public ::testing::Test {
bool did_complete_job() const { return did_complete_job_; }
+ FakeBackgroundFetchDataManager* data_manager() const {
+ return data_manager_.get();
+ }
+
private:
bool did_complete_job_ = false;
TestBrowserThreadBundle thread_bundle_;
TestBrowserContext browser_context_;
+ std::unique_ptr<FakeBackgroundFetchDataManager> data_manager_;
std::unique_ptr<BackgroundFetchJobController> job_controller_;
MockDownloadManagerWithCallback* download_manager_;
};
@@ -137,14 +205,9 @@ TEST_F(BackgroundFetchJobControllerTest, SingleRequestJob) {
BackgroundFetchJobInfo job_info(kTag, url::Origin(GURL(kOrigin)),
kServiceWorkerRegistrationId);
BackgroundFetchRequestInfo request_info(GURL(kTestUrl), kJobGuid);
- std::vector<BackgroundFetchRequestInfo> request_infos{request_info};
-
- // Get a JobData to give to the JobController. The JobController then gets
- // the BackgroundFetchRequestInfos from the JobData.
- std::unique_ptr<BackgroundFetchJobData> owned_job_data =
- base::MakeUnique<BackgroundFetchJobData>(request_infos);
- BackgroundFetchJobData* job_data = owned_job_data.get();
- InitializeJobController(std::move(owned_job_data));
+ request_info.set_state(DownloadItem::DownloadState::IN_PROGRESS);
+ data_manager()->set_next_request(&request_info);
+ InitializeJobController();
EXPECT_CALL(*(download_manager()),
DownloadUrlMock(::testing::Pointee(::testing::Property(
@@ -153,22 +216,22 @@ TEST_F(BackgroundFetchJobControllerTest, SingleRequestJob) {
StartProcessing();
- // Get one of the pending downloads from the download manager.
+ // Get the pending download from the download manager.
auto& download_items = download_manager()->download_items();
ASSERT_EQ(1U, download_items.size());
FakeDownloadItem* item = download_items[0].get();
// Update the observer with no actual change.
ItemObserver()->OnDownloadUpdated(item);
- EXPECT_FALSE(job_data->IsComplete());
+ EXPECT_EQ(DownloadItem::DownloadState::IN_PROGRESS, request_info.state());
EXPECT_FALSE(did_complete_job());
// Update the item to be completed then update the observer. The JobController
// should update the JobData that the request is complete.
item->SetState(DownloadItem::DownloadState::COMPLETE);
ItemObserver()->OnDownloadUpdated(item);
- EXPECT_TRUE(job_data->IsComplete());
+ EXPECT_EQ(DownloadItem::DownloadState::COMPLETE, request_info.state());
EXPECT_TRUE(did_complete_job());
}
@@ -179,13 +242,8 @@ TEST_F(BackgroundFetchJobControllerTest, MultipleRequestJob) {
for (int i = 0; i < 10; i++) {
request_infos.emplace_back(GURL(kTestUrl), base::IntToString(i));
}
-
- // Get a JobData to give to the JobController. The JobController then gets
- // the BackgroundFetchRequestInfos from the JobData.
- std::unique_ptr<BackgroundFetchJobData> owned_job_data =
- base::MakeUnique<BackgroundFetchJobData>(request_infos);
- BackgroundFetchJobData* job_data = owned_job_data.get();
- InitializeJobController(std::move(owned_job_data));
+ data_manager()->set_next_request(&request_infos[0]);
+ InitializeJobController();
EXPECT_CALL(*(download_manager()),
DownloadUrlMock(::testing::Pointee(::testing::Property(
@@ -201,18 +259,21 @@ TEST_F(BackgroundFetchJobControllerTest, MultipleRequestJob) {
// Update the observer with no actual change.
ItemObserver()->OnDownloadUpdated(item);
- EXPECT_FALSE(job_data->IsComplete());
+ EXPECT_EQ(DownloadItem::DownloadState::IN_PROGRESS, request_infos[0].state());
ASSERT_EQ(1U, download_items.size());
for (size_t i = 0; i < 9; i++) {
+ // Update the FakeDataManager with the results we expect.
+ if (i < 9)
+ data_manager()->set_next_request(&request_infos[i + 1]);
+
// Update the next item to be completed then update the observer.
ASSERT_EQ(i + 1, download_items.size());
item = download_items[i].get();
item->SetState(DownloadItem::DownloadState::COMPLETE);
ItemObserver()->OnDownloadUpdated(item);
- EXPECT_FALSE(job_data->IsComplete());
+ EXPECT_EQ(DownloadItem::DownloadState::COMPLETE, request_infos[i].state());
}
- EXPECT_FALSE(job_data->HasRequestsRemaining());
EXPECT_FALSE(did_complete_job());
// Finally, update the last request to be complete. The JobController should
@@ -221,9 +282,41 @@ TEST_F(BackgroundFetchJobControllerTest, MultipleRequestJob) {
item = download_items[9].get();
item->SetState(DownloadItem::DownloadState::COMPLETE);
ItemObserver()->OnDownloadUpdated(item);
- EXPECT_TRUE(job_data->IsComplete());
EXPECT_TRUE(did_complete_job());
}
+TEST_F(BackgroundFetchJobControllerTest, UpdateStorageState) {
+ BackgroundFetchJobInfo job_info(kTag, url::Origin(GURL(kOrigin)),
+ kServiceWorkerRegistrationId);
+ BackgroundFetchRequestInfo request_info(GURL(kTestUrl), kJobGuid);
+ request_info.set_state(DownloadItem::DownloadState::IN_PROGRESS);
+ data_manager()->set_next_request(&request_info);
+ InitializeJobController();
+
+ EXPECT_CALL(*(download_manager()),
+ DownloadUrlMock(::testing::Pointee(::testing::Property(
+ &DownloadUrlParameters::url, GURL(kTestUrl)))))
+ .Times(1);
+
+ StartProcessing();
+
+ // Get the pending download from the download manager.
+ auto& download_items = download_manager()->download_items();
+ ASSERT_EQ(1U, download_items.size());
+ FakeDownloadItem* item = download_items[0].get();
+
+ item->SetTargetFilePath(base::FilePath(kFileName));
+ item->SetReceivedBytes(123);
+ item->SetState(DownloadItem::DownloadState::COMPLETE);
+
+ // Trigger the observer. The JobController should update the JobData that the
+ // request is complete and should fill in storage state.
+ ItemObserver()->OnDownloadUpdated(item);
+
+ EXPECT_EQ(123, request_info.received_bytes());
+ EXPECT_TRUE(data_manager()->IsComplete(kJobGuid));
+ EXPECT_TRUE(did_complete_job());
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698