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

Unified Diff: chrome/browser/android/offline_pages/prerendering_offliner_unittest.cc

Issue 2007783002: Adds PrerenderingOffliner implementation for handling Loader callbacks and then performing SavePage… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ploader
Patch Set: Update for petewil comment Created 4 years, 7 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: 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()));
« no previous file with comments | « chrome/browser/android/offline_pages/prerendering_offliner.cc ('k') | components/offline_pages/background/offliner.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698