| Index: chrome/browser/android/offline_pages/prerendering_offliner_unittest.cc
|
| diff --git a/chrome/browser/android/offline_pages/prerendering_offliner_unittest.cc b/chrome/browser/android/offline_pages/prerendering_offliner_unittest.cc
|
| index 71f66b6c277ebd73af90c9c51f9ba2d4057a7671..45267eddc5a7e63e4424ffb594d9047ae4ddf0f0 100644
|
| --- a/chrome/browser/android/offline_pages/prerendering_offliner_unittest.cc
|
| +++ b/chrome/browser/android/offline_pages/prerendering_offliner_unittest.cc
|
| @@ -7,6 +7,8 @@
|
| #include <memory>
|
|
|
| #include "base/bind.h"
|
| +#include "base/run_loop.h"
|
| +#include "base/threading/thread_task_runner_handle.h"
|
| #include "chrome/browser/android/offline_pages/prerendering_loader.h"
|
| #include "components/offline_pages/background/offliner.h"
|
| #include "components/offline_pages/background/save_page_request.h"
|
| @@ -18,7 +20,6 @@ namespace offline_pages {
|
| namespace {
|
| const int64_t kRequestId = 7;
|
| const GURL kHttpUrl("http://tunafish.com");
|
| -const GURL kFileUrl("file://sailfish.png");
|
| const ClientId kClientId("AsyncLoading", "88");
|
|
|
| // Mock Loader for testing the Offliner calls.
|
| @@ -32,6 +33,7 @@ class MockPrerenderingLoader : public PrerenderingLoader {
|
|
|
| bool LoadPage(const GURL& url, const LoadPageCallback& callback) override {
|
| mock_loading_ = true;
|
| + load_page_callback_ = callback;
|
| return mock_loading_;
|
| }
|
|
|
| @@ -42,15 +44,32 @@ class MockPrerenderingLoader : public PrerenderingLoader {
|
| bool IsIdle() override { return !mock_loading_ && !mock_loaded_; }
|
| bool IsLoaded() override { return mock_loaded_; }
|
|
|
| + void CallbackForLoadFailed() {
|
| + DCHECK(mock_loading_);
|
| + mock_loading_ = false;
|
| + mock_loaded_ = false;
|
| + base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(load_page_callback_, Offliner::RequestStatus::FAILED,
|
| + nullptr /* web_contents */));
|
| + }
|
| +
|
| bool mock_loading() const { return mock_loading_; }
|
| + bool mock_loaded() const { return mock_loaded_; }
|
| + const LoadPageCallback& load_page_callback() { return load_page_callback_; }
|
|
|
| private:
|
| bool mock_loading_;
|
| bool mock_loaded_;
|
| + LoadPageCallback load_page_callback_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(MockPrerenderingLoader);
|
| };
|
|
|
| +void PumpLoop() {
|
| + base::RunLoop().RunUntilIdle();
|
| +}
|
| +
|
| } // namespace
|
|
|
| class PrerenderingOfflinerTest : public testing::Test {
|
| @@ -67,7 +86,10 @@ class PrerenderingOfflinerTest : public testing::Test {
|
| }
|
|
|
| bool loading() const { return loader_->mock_loading(); }
|
| - Offliner::RequestStatus completion_status() { return completion_status_; }
|
| + bool loaded() const { return loader_->mock_loaded(); }
|
| + MockPrerenderingLoader* loader() { return loader_; }
|
| + bool callback_called() { return callback_called_; }
|
| + Offliner::RequestStatus request_status() { return request_status_; }
|
|
|
| private:
|
| void OnCompletion(const SavePageRequest& request,
|
| @@ -77,13 +99,16 @@ class PrerenderingOfflinerTest : public testing::Test {
|
| std::unique_ptr<PrerenderingOffliner> offliner_;
|
| // Not owned.
|
| MockPrerenderingLoader* loader_;
|
| - Offliner::RequestStatus completion_status_;
|
| + bool callback_called_;
|
| + Offliner::RequestStatus request_status_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(PrerenderingOfflinerTest);
|
| };
|
|
|
| PrerenderingOfflinerTest::PrerenderingOfflinerTest()
|
| - : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) {}
|
| + : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP),
|
| + callback_called_(false),
|
| + request_status_(Offliner::RequestStatus::UNKNOWN) {}
|
|
|
| PrerenderingOfflinerTest::~PrerenderingOfflinerTest() {}
|
|
|
| @@ -97,27 +122,27 @@ void PrerenderingOfflinerTest::SetUp() {
|
|
|
| void PrerenderingOfflinerTest::OnCompletion(const SavePageRequest& request,
|
| Offliner::RequestStatus status) {
|
| - completion_status_ = status;
|
| + DCHECK(!callback_called_); // Only expect single callback per request.
|
| + callback_called_ = true;
|
| + request_status_ = status;
|
| }
|
|
|
| -// Tests initiate loading.
|
| -TEST_F(PrerenderingOfflinerTest, LoadAndSaveBadUrl) {
|
| - base::Time creation_time = base::Time::Now();
|
| - SavePageRequest request(kRequestId, kFileUrl, kClientId, creation_time);
|
| - EXPECT_FALSE(offliner()->LoadAndSave(request, callback()));
|
| - EXPECT_FALSE(loading());
|
| -}
|
| -
|
| -// Tests initiate loading.
|
| -TEST_F(PrerenderingOfflinerTest, LoadAndSaveStartsLoading) {
|
| +TEST_F(PrerenderingOfflinerTest, LoadAndSaveLoadStartedButFails) {
|
| base::Time creation_time = base::Time::Now();
|
| SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time);
|
| EXPECT_TRUE(offliner()->LoadAndSave(request, callback()));
|
| EXPECT_TRUE(loading());
|
| + EXPECT_EQ(Offliner::RequestStatus::UNKNOWN, request_status());
|
| +
|
| + loader()->CallbackForLoadFailed();
|
| + PumpLoop();
|
| + EXPECT_TRUE(callback_called());
|
| + EXPECT_EQ(Offliner::RequestStatus::FAILED, request_status());
|
| + EXPECT_FALSE(loading());
|
| + EXPECT_FALSE(loaded());
|
| }
|
|
|
| -// Tests cancels loading.
|
| -TEST_F(PrerenderingOfflinerTest, CancelLoading) {
|
| +TEST_F(PrerenderingOfflinerTest, CancelWhenLoading) {
|
| base::Time creation_time = base::Time::Now();
|
| SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time);
|
| EXPECT_TRUE(offliner()->LoadAndSave(request, callback()));
|
|
|