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

Unified Diff: components/offline_pages/core/background/request_coordinator_unittest.cc

Issue 2570433007: [OfflinePages] Adds StartImmediateProcessing() api to RequestCoordinator (Closed)
Patch Set: SetInternalStartProcessingCallbackForTest name Created 4 years 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
« no previous file with comments | « components/offline_pages/core/background/request_coordinator.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/offline_pages/core/background/request_coordinator_unittest.cc
diff --git a/components/offline_pages/core/background/request_coordinator_unittest.cc b/components/offline_pages/core/background/request_coordinator_unittest.cc
index 1c26bef037a9055e4694c8d2253b5bd6a0dc93ab..1114bf69790c30efd8d7442c9bb8dfb22737583e 100644
--- a/components/offline_pages/core/background/request_coordinator_unittest.cc
+++ b/components/offline_pages/core/background/request_coordinator_unittest.cc
@@ -119,10 +119,10 @@ class RequestCoordinatorTest : public testing::Test {
bool is_starting() { return coordinator_->is_starting(); }
- // Empty callback function.
- void ImmediateScheduleCallbackFunction(bool result) {
- immediate_schedule_callback_called_ = true;
- immediate_schedule_callback_result_ = result;
+ // Test processing callback function.
+ void ProcessingCallbackFunction(bool result) {
+ processing_callback_called_ = true;
+ processing_callback_result_ = result;
}
// Callback function which releases a wait for it.
@@ -249,17 +249,17 @@ class RequestCoordinatorTest : public testing::Test {
DeviceConditions device_conditions() { return device_conditions_; }
- base::Callback<void(bool)> immediate_callback() {
- return immediate_callback_;
+ base::Callback<void(bool)> processing_callback() {
+ return processing_callback_;
}
base::Callback<void(bool)> waiting_callback() { return waiting_callback_; }
- bool immediate_schedule_callback_called() const {
- return immediate_schedule_callback_called_;
+ bool processing_callback_called() const {
+ return processing_callback_called_;
}
- bool immediate_schedule_callback_result() const {
- return immediate_schedule_callback_result_;
+ bool processing_callback_result() const {
+ return processing_callback_result_;
}
const base::HistogramTester& histograms() const { return histogram_tester_; }
@@ -275,10 +275,10 @@ class RequestCoordinatorTest : public testing::Test {
OfflinerStub* offliner_;
base::WaitableEvent waiter_;
ObserverStub observer_;
- bool immediate_schedule_callback_called_;
- bool immediate_schedule_callback_result_;
+ bool processing_callback_called_;
+ bool processing_callback_result_;
DeviceConditions device_conditions_;
- base::Callback<void(bool)> immediate_callback_;
+ base::Callback<void(bool)> processing_callback_;
base::Callback<void(bool)> waiting_callback_;
base::HistogramTester histogram_tester_;
};
@@ -290,8 +290,8 @@ RequestCoordinatorTest::RequestCoordinatorTest()
offliner_(nullptr),
waiter_(base::WaitableEvent::ResetPolicy::MANUAL,
base::WaitableEvent::InitialState::NOT_SIGNALED),
- immediate_schedule_callback_called_(false),
- immediate_schedule_callback_result_(false),
+ processing_callback_called_(false),
+ processing_callback_result_(false),
device_conditions_(!kPowerRequired,
kBatteryPercentageHigh,
net::NetworkChangeNotifier::CONNECTION_3G) {}
@@ -314,8 +314,8 @@ void RequestCoordinatorTest::SetUp() {
std::move(scheduler_stub), network_quality_estimator_.get()));
coordinator_->AddObserver(&observer_);
SetNetworkConnected(true);
- immediate_callback_ =
- base::Bind(&RequestCoordinatorTest::ImmediateScheduleCallbackFunction,
+ processing_callback_ =
+ base::Bind(&RequestCoordinatorTest::ProcessingCallbackFunction,
base::Unretained(this));
// Override the normal immediate callback with a wait releasing callback.
waiting_callback_ = base::Bind(
@@ -362,7 +362,7 @@ void RequestCoordinatorTest::SetupForOfflinerDoneCallbackTest(
// Override the processing callback for test visiblity.
base::Callback<void(bool)> callback =
- base::Bind(&RequestCoordinatorTest::ImmediateScheduleCallbackFunction,
+ base::Bind(&RequestCoordinatorTest::ProcessingCallbackFunction,
base::Unretained(this));
coordinator()->SetProcessingCallbackForTest(callback);
@@ -399,10 +399,10 @@ SavePageRequest RequestCoordinatorTest::AddRequest2() {
TEST_F(RequestCoordinatorTest, StartScheduledProcessingWithNoRequests) {
EXPECT_TRUE(coordinator()->StartScheduledProcessing(device_conditions(),
- immediate_callback()));
+ processing_callback()));
PumpLoop();
- EXPECT_TRUE(immediate_schedule_callback_called());
+ EXPECT_TRUE(processing_callback_called());
// Verify queue depth UMA for starting scheduled processing on empty queue.
if (base::SysInfo::IsLowEndDevice()) {
@@ -428,22 +428,90 @@ TEST_F(RequestCoordinatorTest, StartScheduledProcessingWithRequestInProgress) {
// Sending the request to the offliner should make it busy.
EXPECT_TRUE(coordinator()->StartScheduledProcessing(device_conditions(),
- immediate_callback()));
+ processing_callback()));
PumpLoop();
EXPECT_TRUE(is_busy());
// Since the offliner is disabled, this callback should not be called.
- EXPECT_FALSE(immediate_schedule_callback_called());
+ EXPECT_FALSE(processing_callback_called());
- // Now trying to start processing on another request should return false.
+ // Now trying to start processing should return false since already busy.
EXPECT_FALSE(coordinator()->StartScheduledProcessing(device_conditions(),
- immediate_callback()));
+ processing_callback()));
+}
+
+TEST_F(RequestCoordinatorTest, StartImmediateProcessingWithNoRequests) {
+ // Ensure not low-end device so immediate start can happen.
+ SetIsLowEndDeviceForTest(false);
+
+ EXPECT_TRUE(coordinator()->StartImmediateProcessing(device_conditions(),
+ processing_callback()));
+ PumpLoop();
+
+ EXPECT_TRUE(processing_callback_called());
+
+ histograms().ExpectBucketCount("OfflinePages.Background.ImmediateStartStatus",
+ 0 /* STARTED */, 1);
+}
+
+TEST_F(RequestCoordinatorTest, StartImmediateProcessingOnSvelte) {
+ // Set as low-end device to verfiy immediate processing will not start.
+ SetIsLowEndDeviceForTest(true);
+
+ EXPECT_FALSE(coordinator()->StartImmediateProcessing(device_conditions(),
+ processing_callback()));
+ histograms().ExpectBucketCount("OfflinePages.Background.ImmediateStartStatus",
+ 5 /* NOT_STARTED_ON_SVELTE */, 1);
+}
+
+TEST_F(RequestCoordinatorTest, StartImmediateProcessingWhenDisconnected) {
+ // Ensure not low-end device so immediate start can happen.
+ SetIsLowEndDeviceForTest(false);
+
+ DeviceConditions disconnected_conditions(
+ !kPowerRequired, kBatteryPercentageHigh,
+ net::NetworkChangeNotifier::CONNECTION_NONE);
+ EXPECT_FALSE(coordinator()->StartImmediateProcessing(disconnected_conditions,
+ processing_callback()));
+ histograms().ExpectBucketCount("OfflinePages.Background.ImmediateStartStatus",
+ 3 /* NO_CONNECTION */, 1);
+}
+
+TEST_F(RequestCoordinatorTest, StartImmediateProcessingWithRequestInProgress) {
+ // Ensure not low-end device so immediate start can happen.
+ SetIsLowEndDeviceForTest(false);
+
+ // Start processing for this request.
+ EXPECT_NE(coordinator()->SavePageLater(
+ kUrl1, kClientId1, kUserRequested,
+ RequestCoordinator::RequestAvailability::ENABLED_FOR_OFFLINER),
+ 0);
+
+ // Disable the automatic offliner callback.
+ EnableOfflinerCallback(false);
+
+ // Sending the request to the offliner should make it busy.
+ EXPECT_TRUE(coordinator()->StartImmediateProcessing(device_conditions(),
+ processing_callback()));
+ PumpLoop();
+
+ EXPECT_TRUE(is_busy());
+ // Since the offliner is disabled, this callback should not be called.
+ EXPECT_FALSE(processing_callback_called());
+
+ // Now trying to start processing should return false since already busy.
+ EXPECT_FALSE(coordinator()->StartImmediateProcessing(device_conditions(),
+ processing_callback()));
+
+ histograms().ExpectBucketCount("OfflinePages.Background.ImmediateStartStatus",
+ 1 /* BUSY */, 1);
}
TEST_F(RequestCoordinatorTest, SavePageLater) {
// The user-requested request which gets processed by SavePageLater
// would invoke user request callback.
- coordinator()->SetImmediateScheduleCallbackForTest(immediate_callback());
+ coordinator()->SetInternalStartProcessingCallbackForTest(
+ processing_callback());
EXPECT_NE(coordinator()->SavePageLater(
kUrl1, kClientId1, kUserRequested,
@@ -456,7 +524,7 @@ TEST_F(RequestCoordinatorTest, SavePageLater) {
// Wait for callbacks to finish, both request queue and offliner.
PumpLoop();
- EXPECT_TRUE(immediate_schedule_callback_called());
+ EXPECT_TRUE(processing_callback_called());
// Check the request queue is as expected.
EXPECT_EQ(1UL, last_requests().size());
@@ -489,7 +557,8 @@ TEST_F(RequestCoordinatorTest, SavePageLater) {
TEST_F(RequestCoordinatorTest, SavePageLaterFailed) {
// The user-requested request which gets processed by SavePageLater
// would invoke user request callback.
- coordinator()->SetImmediateScheduleCallbackForTest(immediate_callback());
+ coordinator()->SetInternalStartProcessingCallbackForTest(
+ processing_callback());
EXPECT_TRUE(
coordinator()->SavePageLater(
@@ -505,11 +574,11 @@ TEST_F(RequestCoordinatorTest, SavePageLaterFailed) {
// On low-end devices the callback will be called with false since the
// processing started but failed due to svelte devices.
- EXPECT_TRUE(immediate_schedule_callback_called());
+ EXPECT_TRUE(processing_callback_called());
if (base::SysInfo::IsLowEndDevice()) {
- EXPECT_FALSE(immediate_schedule_callback_result());
+ EXPECT_FALSE(processing_callback_result());
} else {
- EXPECT_TRUE(immediate_schedule_callback_result());
+ EXPECT_TRUE(processing_callback_result());
}
// Check the request queue is as expected.
@@ -540,7 +609,7 @@ TEST_F(RequestCoordinatorTest, OfflinerDoneRequestSucceeded) {
// for callbacks.
SendOfflinerDoneCallback(request, Offliner::RequestStatus::SAVED);
PumpLoop();
- EXPECT_TRUE(immediate_schedule_callback_called());
+ EXPECT_TRUE(processing_callback_called());
// Verify the request gets removed from the queue, and wait for callbacks.
coordinator()->queue()->GetRequests(base::Bind(
@@ -575,7 +644,7 @@ TEST_F(RequestCoordinatorTest, OfflinerDoneRequestSucceededButLostNetwork) {
// for callbacks.
SendOfflinerDoneCallback(request, Offliner::RequestStatus::SAVED);
PumpLoop();
- EXPECT_TRUE(immediate_schedule_callback_called());
+ EXPECT_TRUE(processing_callback_called());
// Verify not busy with 2nd request (since no connection).
EXPECT_FALSE(is_busy());
@@ -607,7 +676,7 @@ TEST_F(RequestCoordinatorTest, OfflinerDoneRequestFailed) {
// For retriable failure, processing should continue to 2nd request so
// no scheduler callback yet.
- EXPECT_FALSE(immediate_schedule_callback_called());
+ EXPECT_FALSE(processing_callback_called());
// Busy processing 2nd request.
EXPECT_TRUE(is_busy());
@@ -646,7 +715,7 @@ TEST_F(RequestCoordinatorTest, OfflinerDoneRequestFailedNoRetryFailure) {
// For no retry failure, processing should continue to 2nd request so
// no scheduler callback yet.
- EXPECT_FALSE(immediate_schedule_callback_called());
+ EXPECT_FALSE(processing_callback_called());
// Busy processing 2nd request.
EXPECT_TRUE(is_busy());
@@ -683,7 +752,7 @@ TEST_F(RequestCoordinatorTest, OfflinerDoneRequestFailedNoNextFailure) {
// For no next failure, processing should not continue to 2nd request so
// expect scheduler callback.
- EXPECT_TRUE(immediate_schedule_callback_called());
+ EXPECT_TRUE(processing_callback_called());
// Not busy for NO_NEXT failure.
EXPECT_FALSE(is_busy());
@@ -707,7 +776,7 @@ TEST_F(RequestCoordinatorTest, OfflinerDoneForegroundCancel) {
SendOfflinerDoneCallback(request,
Offliner::RequestStatus::FOREGROUND_CANCELED);
PumpLoop();
- EXPECT_TRUE(immediate_schedule_callback_called());
+ EXPECT_TRUE(processing_callback_called());
// Verify the request is not removed from the queue, and wait for callbacks.
coordinator()->queue()->GetRequests(base::Bind(
@@ -730,7 +799,7 @@ TEST_F(RequestCoordinatorTest, OfflinerDonePrerenderingCancel) {
// for callbacks.
SendOfflinerDoneCallback(request, Offliner::RequestStatus::LOADING_CANCELED);
PumpLoop();
- EXPECT_TRUE(immediate_schedule_callback_called());
+ EXPECT_TRUE(processing_callback_called());
// Verify the request is not removed from the queue, and wait for callbacks.
coordinator()->queue()->GetRequests(base::Bind(
@@ -749,7 +818,7 @@ TEST_F(RequestCoordinatorTest, OfflinerDonePrerenderingCancel) {
// we should make a scheduler entry for a non-user requested item.
TEST_F(RequestCoordinatorTest, RequestNotPickedDisabledItemsRemain) {
coordinator()->StartScheduledProcessing(device_conditions(),
- immediate_callback());
+ processing_callback());
EXPECT_TRUE(is_starting());
// Call RequestNotPicked, simulating a request on the disabled list.
@@ -770,7 +839,7 @@ TEST_F(RequestCoordinatorTest, RequestNotPickedDisabledItemsRemain) {
// we should make a scheduler entry for a non-user requested item.
TEST_F(RequestCoordinatorTest, RequestNotPickedNonUserRequestedItemsRemain) {
coordinator()->StartScheduledProcessing(device_conditions(),
- immediate_callback());
+ processing_callback());
EXPECT_TRUE(is_starting());
// Call RequestNotPicked, and make sure we pick schedule a task for non user
@@ -779,7 +848,7 @@ TEST_F(RequestCoordinatorTest, RequestNotPickedNonUserRequestedItemsRemain) {
PumpLoop();
EXPECT_FALSE(is_starting());
- EXPECT_TRUE(immediate_schedule_callback_called());
+ EXPECT_TRUE(processing_callback_called());
// The scheduler should have been called to schedule the non-user requested
// task.
@@ -833,11 +902,11 @@ TEST_F(RequestCoordinatorTest, StartScheduledProcessingWithLoadingDisabled) {
DisableLoading();
EXPECT_TRUE(coordinator()->StartScheduledProcessing(device_conditions(),
- immediate_callback()));
+ processing_callback()));
// Let the async callbacks in the request coordinator run.
PumpLoop();
- EXPECT_TRUE(immediate_schedule_callback_called());
+ EXPECT_TRUE(processing_callback_called());
EXPECT_FALSE(is_starting());
EXPECT_EQ(Offliner::LOADING_NOT_STARTED, last_offlining_status());
@@ -852,7 +921,7 @@ TEST_F(RequestCoordinatorTest,
PumpLoop();
EXPECT_TRUE(coordinator()->StartScheduledProcessing(device_conditions(),
- immediate_callback()));
+ processing_callback()));
EXPECT_TRUE(is_starting());
// Now, quick, before it can do much (we haven't called PumpLoop), cancel it.
@@ -860,7 +929,7 @@ TEST_F(RequestCoordinatorTest,
// Let the async callbacks in the request coordinator run.
PumpLoop();
- EXPECT_TRUE(immediate_schedule_callback_called());
+ EXPECT_TRUE(processing_callback_called());
EXPECT_FALSE(is_starting());
@@ -884,7 +953,7 @@ TEST_F(RequestCoordinatorTest,
EnableOfflinerCallback(false);
EXPECT_TRUE(coordinator()->StartScheduledProcessing(device_conditions(),
- immediate_callback()));
+ processing_callback()));
EXPECT_TRUE(is_starting());
// Let all the async parts of the start processing pipeline run to completion.
@@ -896,7 +965,7 @@ TEST_F(RequestCoordinatorTest,
observer().Clear();
// Since the offliner is disabled, this callback should not be called.
- EXPECT_FALSE(immediate_schedule_callback_called());
+ EXPECT_FALSE(processing_callback_called());
// Coordinator should now be busy.
EXPECT_TRUE(is_busy());
@@ -935,12 +1004,12 @@ TEST_F(RequestCoordinatorTest, RemoveInflightRequest) {
EnableOfflinerCallback(false);
EXPECT_TRUE(coordinator()->StartScheduledProcessing(device_conditions(),
- immediate_callback()));
+ processing_callback()));
// Let all the async parts of the start processing pipeline run to completion.
PumpLoop();
// Since the offliner is disabled, this callback should not be called.
- EXPECT_FALSE(immediate_schedule_callback_called());
+ EXPECT_FALSE(processing_callback_called());
// Remove the request while it is processing.
std::vector<int64_t> request_ids{kRequestId1};
« no previous file with comments | « components/offline_pages/core/background/request_coordinator.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698