Index: chrome/browser/android/offline_pages/background_loader_offliner_unittest.cc |
diff --git a/chrome/browser/android/offline_pages/background_loader_offliner_unittest.cc b/chrome/browser/android/offline_pages/background_loader_offliner_unittest.cc |
index b526e2160c67a21ee8c2c875e8504b88050a04a5..4018ad481a6aa6e0fc26cff7abada67826c04dac 100644 |
--- a/chrome/browser/android/offline_pages/background_loader_offliner_unittest.cc |
+++ b/chrome/browser/android/offline_pages/background_loader_offliner_unittest.cc |
@@ -7,6 +7,7 @@ |
#include "base/bind.h" |
#include "base/run_loop.h" |
#include "base/test/histogram_tester.h" |
+#include "base/test/scoped_mock_time_message_loop_task_runner.h" |
#include "base/threading/thread_task_runner_handle.h" |
#include "chrome/browser/android/offline_pages/offliner_helper.h" |
#include "chrome/browser/net/prediction_options.h" |
@@ -73,9 +74,6 @@ class MockOfflinePageModel : public StubOfflinePageModel { |
DISALLOW_COPY_AND_ASSIGN(MockOfflinePageModel); |
}; |
-void PumpLoop() { |
- base::RunLoop().RunUntilIdle(); |
-} |
} // namespace |
// A BackgroundLoader that we can run tests on. |
@@ -145,6 +143,8 @@ class BackgroundLoaderOfflinerTest : public testing::Test { |
offliner()->web_contents_tester()->TestSetIsLoading(true); |
} |
+ void PumpLoop() { base::RunLoop().RunUntilIdle(); } |
+ |
private: |
void OnCompletion(const SavePageRequest& request, |
Offliner::RequestStatus status); |
@@ -169,6 +169,7 @@ BackgroundLoaderOfflinerTest::~BackgroundLoaderOfflinerTest() {} |
void BackgroundLoaderOfflinerTest::SetUp() { |
model_ = new MockOfflinePageModel(); |
offliner_.reset(new TestBackgroundLoaderOffliner(profile(), nullptr, model_)); |
+ offliner_->SetPageDelayForTest(0L); |
} |
void BackgroundLoaderOfflinerTest::OnCompletion( |
@@ -368,4 +369,23 @@ TEST_F(BackgroundLoaderOfflinerTest, FailsOnErrorPage) { |
EXPECT_EQ(Offliner::RequestStatus::LOADING_FAILED_NO_RETRY, request_status()); |
} |
+TEST_F(BackgroundLoaderOfflinerTest, OnlySavesOnceOnMultipleLoads) { |
+ base::Time creation_time = base::Time::Now(); |
+ SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time, |
+ kUserRequested); |
+ EXPECT_TRUE(offliner()->LoadAndSave(request, callback())); |
+ // First load |
+ CompleteLoading(); |
+ // Second load |
+ offliner()->DidStopLoading(); |
+ PumpLoop(); |
+ model()->CompleteSavingAsSuccess(); |
+ PumpLoop(); |
+ |
+ EXPECT_TRUE(completion_callback_called()); |
+ EXPECT_EQ(Offliner::RequestStatus::SAVED, request_status()); |
+ EXPECT_FALSE(offliner()->is_loading()); |
+ EXPECT_FALSE(SaveInProgress()); |
+} |
+ |
} // namespace offline_pages |