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

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

Issue 2881223002: Create chrome/browser/offline_pages to host browser-related parts of offline_pages whcih (Closed)
Patch Set: modified OWNERS and added DEPS Created 3 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/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
deleted file mode 100644
index 57a3b70246bec5c34bf3008cecb00e95b7af9980..0000000000000000000000000000000000000000
--- a/chrome/browser/android/offline_pages/background_loader_offliner_unittest.cc
+++ /dev/null
@@ -1,649 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/android/offline_pages/background_loader_offliner.h"
-
-#include "base/bind.h"
-#include "base/run_loop.h"
-#include "base/test/histogram_tester.h"
-#include "base/test/scoped_feature_list.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"
-#include "chrome/common/pref_names.h"
-#include "chrome/test/base/testing_profile.h"
-#include "components/content_settings/core/common/pref_names.h"
-#include "components/offline_pages/content/background_loader/background_loader_contents_stub.h"
-#include "components/offline_pages/core/background/offliner.h"
-#include "components/offline_pages/core/background/offliner_policy.h"
-#include "components/offline_pages/core/background/save_page_request.h"
-#include "components/offline_pages/core/offline_page_feature.h"
-#include "components/offline_pages/core/stub_offline_page_model.h"
-#include "components/prefs/pref_service.h"
-#include "content/public/browser/mhtml_extra_parts.h"
-#include "content/public/browser/navigation_handle.h"
-#include "content/public/browser/web_contents.h"
-#include "content/public/test/test_browser_thread_bundle.h"
-#include "content/public/test/web_contents_tester.h"
-#include "net/base/net_errors.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace offline_pages {
-
-namespace {
-
-const int64_t kRequestId = 7;
-const GURL kHttpUrl("http://www.tunafish.com");
-const GURL kFileUrl("file://salmon.png");
-const ClientId kClientId("async_loading", "88");
-const bool kUserRequested = true;
-
-// Mock OfflinePageModel for testing the SavePage calls
-class MockOfflinePageModel : public StubOfflinePageModel {
- public:
- MockOfflinePageModel() : mock_saving_(false), mock_deleting_(false) {}
- ~MockOfflinePageModel() override {}
-
- void SavePage(const SavePageParams& save_page_params,
- std::unique_ptr<OfflinePageArchiver> archiver,
- const SavePageCallback& callback) override {
- mock_saving_ = true;
- save_page_callback_ = callback;
- }
-
- void CompleteSavingAsArchiveCreationFailed() {
- DCHECK(mock_saving_);
- mock_saving_ = false;
- base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE, base::Bind(save_page_callback_,
- SavePageResult::ARCHIVE_CREATION_FAILED, 0));
- }
-
- void CompleteSavingAsSuccess() {
- DCHECK(mock_saving_);
- mock_saving_ = false;
- base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE,
- base::Bind(save_page_callback_, SavePageResult::SUCCESS, 123456));
- }
-
- void CompleteSavingAsAlreadyExists() {
- DCHECK(mock_saving_);
- mock_saving_ = false;
- base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE, base::Bind(save_page_callback_,
- SavePageResult::ALREADY_EXISTS, 123456));
- }
-
- void DeletePagesByOfflineId(const std::vector<int64_t>& offline_ids,
- const DeletePageCallback& callback) override {
- mock_deleting_ = true;
- callback.Run(DeletePageResult::SUCCESS);
- }
-
- bool mock_saving() const { return mock_saving_; }
- bool mock_deleting() const { return mock_deleting_; }
-
- private:
- bool mock_saving_;
- bool mock_deleting_;
- SavePageCallback save_page_callback_;
-
- DISALLOW_COPY_AND_ASSIGN(MockOfflinePageModel);
-};
-
-} // namespace
-
-// A BackgroundLoader that we can run tests on.
-// Overrides the ResetState so we don't actually try to create any web contents.
-// This is a temporary solution to test core BackgroundLoaderOffliner
-// functionality until we straighten out assumptions made by RequestCoordinator
-// so that the ResetState method is no longer needed.
-class TestBackgroundLoaderOffliner : public BackgroundLoaderOffliner {
- public:
- explicit TestBackgroundLoaderOffliner(
- content::BrowserContext* browser_context,
- const OfflinerPolicy* policy,
- OfflinePageModel* offline_page_model);
- ~TestBackgroundLoaderOffliner() override;
- content::WebContentsTester* web_contents_tester() {
- return content::WebContentsTester::For(stub_->web_contents());
- }
-
- content::WebContents* web_contents() { return stub_->web_contents(); }
-
- bool is_loading() { return loader_ && stub_->is_loading(); }
-
- protected:
- void ResetLoader() override;
-
- private:
- background_loader::BackgroundLoaderContentsStub* stub_;
-};
-
-TestBackgroundLoaderOffliner::TestBackgroundLoaderOffliner(
- content::BrowserContext* browser_context,
- const OfflinerPolicy* policy,
- OfflinePageModel* offline_page_model)
- : BackgroundLoaderOffliner(browser_context, policy, offline_page_model) {}
-
-TestBackgroundLoaderOffliner::~TestBackgroundLoaderOffliner() {}
-
-void TestBackgroundLoaderOffliner::ResetLoader() {
- stub_ = new background_loader::BackgroundLoaderContentsStub(browser_context_);
- loader_.reset(stub_);
-}
-
-class BackgroundLoaderOfflinerTest : public testing::Test {
- public:
- BackgroundLoaderOfflinerTest();
- ~BackgroundLoaderOfflinerTest() override;
-
- void SetUp() override;
-
- TestBackgroundLoaderOffliner* offliner() const { return offliner_.get(); }
- Offliner::CompletionCallback const completion_callback() {
- return base::Bind(&BackgroundLoaderOfflinerTest::OnCompletion,
- base::Unretained(this));
- }
- Offliner::ProgressCallback const progress_callback() {
- return base::Bind(&BackgroundLoaderOfflinerTest::OnProgress,
- base::Unretained(this));
- }
- Offliner::CancelCallback const cancel_callback() {
- return base::Bind(&BackgroundLoaderOfflinerTest::OnCancel,
- base::Unretained(this));
- }
- Profile* profile() { return &profile_; }
- bool completion_callback_called() { return completion_callback_called_; }
- Offliner::RequestStatus request_status() { return request_status_; }
- bool cancel_callback_called() { return cancel_callback_called_; }
- bool SaveInProgress() const { return model_->mock_saving(); }
- bool DeleteCalled() const { return model_->mock_deleting(); }
- MockOfflinePageModel* model() const { return model_; }
- const base::HistogramTester& histograms() const { return histogram_tester_; }
- int64_t progress() { return progress_; }
- OfflinerPolicy* policy() const { return policy_.get(); }
-
- void PumpLoop() { base::RunLoop().RunUntilIdle(); }
-
- void CompleteLoading() {
- // Reset snapshot controller.
- std::unique_ptr<SnapshotController> snapshot_controller(
- new SnapshotController(base::ThreadTaskRunnerHandle::Get(),
- offliner_.get(),
- 0L /* DelayAfterDocumentAvailable */,
- 0L /* DelayAfterDocumentOnLoad */,
- false /* DocumentAvailableTriggersSnapshot */));
- offliner_->SetSnapshotControllerForTest(std::move(snapshot_controller));
- // Call complete loading.
- offliner()->DocumentOnLoadCompletedInMainFrame();
- PumpLoop();
- }
-
- private:
- void OnCompletion(const SavePageRequest& request,
- Offliner::RequestStatus status);
- void OnProgress(const SavePageRequest& request, int64_t bytes);
- void OnCancel(const SavePageRequest& request);
- content::TestBrowserThreadBundle thread_bundle_;
- TestingProfile profile_;
- std::unique_ptr<OfflinerPolicy> policy_;
- std::unique_ptr<TestBackgroundLoaderOffliner> offliner_;
- MockOfflinePageModel* model_;
- bool completion_callback_called_;
- bool cancel_callback_called_;
- int64_t progress_;
- Offliner::RequestStatus request_status_;
- base::HistogramTester histogram_tester_;
-
- DISALLOW_COPY_AND_ASSIGN(BackgroundLoaderOfflinerTest);
-};
-
-BackgroundLoaderOfflinerTest::BackgroundLoaderOfflinerTest()
- : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP),
- completion_callback_called_(false),
- cancel_callback_called_(false),
- progress_(0LL),
- request_status_(Offliner::RequestStatus::UNKNOWN) {}
-
-BackgroundLoaderOfflinerTest::~BackgroundLoaderOfflinerTest() {}
-
-void BackgroundLoaderOfflinerTest::SetUp() {
- model_ = new MockOfflinePageModel();
- policy_.reset(new OfflinerPolicy());
- offliner_.reset(
- new TestBackgroundLoaderOffliner(profile(), policy_.get(), model_));
-}
-
-void BackgroundLoaderOfflinerTest::OnCompletion(
- const SavePageRequest& request,
- Offliner::RequestStatus status) {
- DCHECK(!completion_callback_called_); // Expect 1 callback per request.
- completion_callback_called_ = true;
- request_status_ = status;
-}
-
-void BackgroundLoaderOfflinerTest::OnProgress(const SavePageRequest& request,
- int64_t bytes) {
- progress_ = bytes;
-}
-
-void BackgroundLoaderOfflinerTest::OnCancel(const SavePageRequest& request) {
- DCHECK(!cancel_callback_called_);
- cancel_callback_called_ = true;
-}
-
-TEST_F(BackgroundLoaderOfflinerTest,
- LoadAndSaveBlockThirdPartyCookiesForCustomTabs) {
- base::Time creation_time = base::Time::Now();
- ClientId custom_tabs_client_id("custom_tabs", "88");
- SavePageRequest request(kRequestId, kHttpUrl, custom_tabs_client_id,
- creation_time, kUserRequested);
-
- profile()->GetPrefs()->SetBoolean(prefs::kBlockThirdPartyCookies, true);
- EXPECT_FALSE(offliner()->LoadAndSave(request, completion_callback(),
- progress_callback()));
- histograms().ExpectBucketCount(
- "OfflinePages.Background.CctApiDisableStatus",
- static_cast<int>(OfflinePagesCctApiPrerenderAllowedStatus::
- THIRD_PARTY_COOKIES_DISABLED),
- 1);
- histograms().ExpectBucketCount("OfflinePages.Background.CctApiDisableStatus",
- 0 /* PRERENDER_ALLOWED */, 0);
-}
-
-TEST_F(BackgroundLoaderOfflinerTest,
- LoadAndSaveNetworkPredictionDisabledForCustomTabs) {
- base::Time creation_time = base::Time::Now();
- ClientId custom_tabs_client_id("custom_tabs", "88");
- SavePageRequest request(kRequestId, kHttpUrl, custom_tabs_client_id,
- creation_time, kUserRequested);
-
- profile()->GetPrefs()->SetInteger(
- prefs::kNetworkPredictionOptions,
- chrome_browser_net::NETWORK_PREDICTION_NEVER);
- EXPECT_FALSE(offliner()->LoadAndSave(request, completion_callback(),
- progress_callback()));
- histograms().ExpectBucketCount(
- "OfflinePages.Background.CctApiDisableStatus",
- static_cast<int>(OfflinePagesCctApiPrerenderAllowedStatus::
- NETWORK_PREDICTION_DISABLED),
- 1);
- histograms().ExpectBucketCount(
- "OfflinePages.Background.CctApiDisableStatus",
- static_cast<int>(
- OfflinePagesCctApiPrerenderAllowedStatus::PRERENDER_ALLOWED),
- 0);
-}
-
-TEST_F(BackgroundLoaderOfflinerTest, LoadAndSaveStartsLoading) {
- base::Time creation_time = base::Time::Now();
- SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time,
- kUserRequested);
- EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(),
- progress_callback()));
- EXPECT_TRUE(offliner()->is_loading());
- EXPECT_FALSE(SaveInProgress());
- EXPECT_FALSE(completion_callback_called());
- EXPECT_EQ(Offliner::RequestStatus::UNKNOWN, request_status());
-}
-
-TEST_F(BackgroundLoaderOfflinerTest, BytesReportedWillUpdateProgress) {
- base::Time creation_time = base::Time::Now();
- SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time,
- kUserRequested);
- EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(),
- progress_callback()));
- offliner()->OnNetworkBytesChanged(5LL);
- EXPECT_EQ(progress(), 5LL);
- offliner()->OnNetworkBytesChanged(10LL);
- EXPECT_EQ(progress(), 15LL);
-}
-
-TEST_F(BackgroundLoaderOfflinerTest, CompleteLoadingInitiatesSave) {
- base::Time creation_time = base::Time::Now();
- SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time,
- kUserRequested);
- EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(),
- progress_callback()));
- CompleteLoading();
- PumpLoop();
- EXPECT_FALSE(completion_callback_called());
- EXPECT_TRUE(SaveInProgress());
- EXPECT_EQ(Offliner::RequestStatus::UNKNOWN, request_status());
-}
-
-TEST_F(BackgroundLoaderOfflinerTest, CancelWhenLoading) {
- base::Time creation_time = base::Time::Now();
- SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time,
- kUserRequested);
- EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(),
- progress_callback()));
- offliner()->Cancel(cancel_callback());
- PumpLoop();
- offliner()->OnNetworkBytesChanged(15LL);
- EXPECT_TRUE(cancel_callback_called());
- EXPECT_FALSE(offliner()->is_loading()); // Offliner reset.
- EXPECT_EQ(progress(), 0LL); // network bytes not recorded when not busy.
-}
-
-TEST_F(BackgroundLoaderOfflinerTest, CancelWhenLoaded) {
- base::Time creation_time = base::Time::Now();
- SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time,
- kUserRequested);
- EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(),
- progress_callback()));
- CompleteLoading();
- PumpLoop();
- offliner()->Cancel(cancel_callback());
- PumpLoop();
-
- // Subsequent save callback cause no crash.
- model()->CompleteSavingAsArchiveCreationFailed();
- PumpLoop();
- EXPECT_TRUE(cancel_callback_called());
- EXPECT_TRUE(DeleteCalled());
- EXPECT_FALSE(completion_callback_called());
- EXPECT_FALSE(SaveInProgress());
- EXPECT_FALSE(offliner()->is_loading()); // Offliner reset.
-}
-
-TEST_F(BackgroundLoaderOfflinerTest, LoadedButSaveFails) {
- base::Time creation_time = base::Time::Now();
- SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time,
- kUserRequested);
- EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(),
- progress_callback()));
-
- CompleteLoading();
- PumpLoop();
- model()->CompleteSavingAsArchiveCreationFailed();
- PumpLoop();
-
- EXPECT_TRUE(completion_callback_called());
- EXPECT_EQ(Offliner::RequestStatus::SAVE_FAILED, request_status());
- EXPECT_FALSE(offliner()->is_loading());
- EXPECT_FALSE(SaveInProgress());
-}
-
-TEST_F(BackgroundLoaderOfflinerTest, ProgressDoesNotUpdateDuringSave) {
- base::Time creation_time = base::Time::Now();
- SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time,
- kUserRequested);
- EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(),
- progress_callback()));
- offliner()->OnNetworkBytesChanged(10LL);
- CompleteLoading();
- PumpLoop();
- offliner()->OnNetworkBytesChanged(15LL);
- EXPECT_EQ(progress(), 10LL);
-}
-
-TEST_F(BackgroundLoaderOfflinerTest, LoadAndSaveSuccess) {
- base::Time creation_time = base::Time::Now();
- SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time,
- kUserRequested);
- EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(),
- progress_callback()));
-
- CompleteLoading();
- PumpLoop();
- model()->CompleteSavingAsSuccess();
- PumpLoop();
-
- EXPECT_TRUE(completion_callback_called());
- EXPECT_EQ(Offliner::RequestStatus::SAVED, request_status());
- EXPECT_FALSE(offliner()->is_loading());
- EXPECT_FALSE(SaveInProgress());
-}
-
-TEST_F(BackgroundLoaderOfflinerTest, LoadAndSaveAlreadyExists) {
- base::Time creation_time = base::Time::Now();
- SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time,
- kUserRequested);
- EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(),
- progress_callback()));
-
- CompleteLoading();
- PumpLoop();
- model()->CompleteSavingAsAlreadyExists();
- PumpLoop();
-
- EXPECT_TRUE(completion_callback_called());
- EXPECT_EQ(Offliner::RequestStatus::SAVED, request_status());
- EXPECT_FALSE(offliner()->is_loading());
- EXPECT_FALSE(SaveInProgress());
-}
-
-TEST_F(BackgroundLoaderOfflinerTest, FailsOnInvalidURL) {
- base::Time creation_time = base::Time::Now();
- SavePageRequest request(kRequestId, kFileUrl, kClientId, creation_time,
- kUserRequested);
- EXPECT_FALSE(offliner()->LoadAndSave(request, completion_callback(),
- progress_callback()));
-}
-
-TEST_F(BackgroundLoaderOfflinerTest, ReturnsOnRenderCrash) {
- base::Time creation_time = base::Time::Now();
- SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time,
- kUserRequested);
- EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(),
- progress_callback()));
- offliner()->RenderProcessGone(
- base::TerminationStatus::TERMINATION_STATUS_PROCESS_CRASHED);
-
- EXPECT_TRUE(completion_callback_called());
- EXPECT_EQ(Offliner::RequestStatus::LOADING_FAILED_NO_NEXT, request_status());
-}
-
-TEST_F(BackgroundLoaderOfflinerTest, ReturnsOnRenderKilled) {
- base::Time creation_time = base::Time::Now();
- SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time,
- kUserRequested);
- EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(),
- progress_callback()));
- offliner()->RenderProcessGone(
- base::TerminationStatus::TERMINATION_STATUS_PROCESS_WAS_KILLED);
-
- EXPECT_TRUE(completion_callback_called());
- EXPECT_EQ(Offliner::RequestStatus::LOADING_FAILED, request_status());
-}
-
-TEST_F(BackgroundLoaderOfflinerTest, ReturnsOnWebContentsDestroyed) {
- base::Time creation_time = base::Time::Now();
- SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time,
- kUserRequested);
- EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(),
- progress_callback()));
- offliner()->WebContentsDestroyed();
-
- EXPECT_TRUE(completion_callback_called());
- EXPECT_EQ(Offliner::RequestStatus::LOADING_FAILED, request_status());
-}
-
-TEST_F(BackgroundLoaderOfflinerTest, FailsOnErrorPage) {
- base::Time creation_time = base::Time::Now();
- SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time,
- kUserRequested);
- EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(),
- progress_callback()));
- // Create handle with net error code.
- // Called after calling LoadAndSave so we have web_contents to work with.
- std::unique_ptr<content::NavigationHandle> handle(
- content::NavigationHandle::CreateNavigationHandleForTesting(
- kHttpUrl, offliner()->web_contents()->GetMainFrame(), true,
- net::Error::ERR_NAME_NOT_RESOLVED));
- // NavigationHandle destruction will trigger DidFinishNavigation code.
- handle.reset();
- histograms().ExpectBucketCount(
- "OfflinePages.Background.BackgroundLoadingFailedCode.async_loading",
- 105, // ERR_NAME_NOT_RESOLVED
- 1);
- CompleteLoading();
- PumpLoop();
-
- EXPECT_TRUE(completion_callback_called());
- EXPECT_EQ(Offliner::RequestStatus::LOADING_FAILED, request_status());
-}
-
-TEST_F(BackgroundLoaderOfflinerTest, NoNextOnInternetDisconnected) {
- base::Time creation_time = base::Time::Now();
- SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time,
- kUserRequested);
- EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(),
- progress_callback()));
-
- // Create handle with net error code.
- // Called after calling LoadAndSave so we have web_contents to work with.
- std::unique_ptr<content::NavigationHandle> handle(
- content::NavigationHandle::CreateNavigationHandleForTesting(
- kHttpUrl, offliner()->web_contents()->GetMainFrame(), true,
- net::Error::ERR_INTERNET_DISCONNECTED));
- // Call DidFinishNavigation with handle that contains error.
- offliner()->DidFinishNavigation(handle.get());
- // NavigationHandle is always destroyed after finishing navigation.
- handle.reset();
- CompleteLoading();
- PumpLoop();
-
- EXPECT_TRUE(completion_callback_called());
- EXPECT_EQ(Offliner::RequestStatus::LOADING_FAILED_NO_NEXT, 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, completion_callback(),
- progress_callback()));
- // First load
- CompleteLoading();
- // Second load
- CompleteLoading();
- PumpLoop();
- model()->CompleteSavingAsSuccess();
- PumpLoop();
-
- EXPECT_TRUE(completion_callback_called());
- EXPECT_EQ(Offliner::RequestStatus::SAVED, request_status());
- EXPECT_FALSE(offliner()->is_loading());
- EXPECT_FALSE(SaveInProgress());
-}
-
-TEST_F(BackgroundLoaderOfflinerTest, HandleTimeoutWithLowBarStartedTriesMet) {
- base::Time creation_time = base::Time::Now();
- SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time,
- kUserRequested);
- request.set_started_attempt_count(policy()->GetMaxStartedTries() - 1);
- EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(),
- progress_callback()));
- // Guarantees low bar for saving is met.
- offliner()->DocumentAvailableInMainFrame();
- // Timeout
- EXPECT_TRUE(offliner()->HandleTimeout(kRequestId));
- EXPECT_TRUE(SaveInProgress());
- model()->CompleteSavingAsSuccess();
- PumpLoop();
- EXPECT_EQ(Offliner::RequestStatus::SAVED_ON_LAST_RETRY, request_status());
-}
-
-TEST_F(BackgroundLoaderOfflinerTest, HandleTimeoutWithLowBarCompletedTriesMet) {
- base::Time creation_time = base::Time::Now();
- SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time,
- kUserRequested);
- request.set_completed_attempt_count(policy()->GetMaxCompletedTries() - 1);
- EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(),
- progress_callback()));
- // Guarantees low bar for saving is met.
- offliner()->DocumentAvailableInMainFrame();
- // Timeout
- EXPECT_TRUE(offliner()->HandleTimeout(kRequestId));
- EXPECT_TRUE(SaveInProgress());
- model()->CompleteSavingAsSuccess();
- PumpLoop();
- EXPECT_EQ(Offliner::RequestStatus::SAVED_ON_LAST_RETRY, request_status());
-}
-
-TEST_F(BackgroundLoaderOfflinerTest, HandleTimeoutWithNoLowBarStartedTriesMet) {
- base::Time creation_time = base::Time::Now();
- SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time,
- kUserRequested);
- EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(),
- progress_callback()));
- request.set_started_attempt_count(policy()->GetMaxStartedTries() - 1);
- // Timeout
- EXPECT_FALSE(offliner()->HandleTimeout(kRequestId));
- EXPECT_FALSE(SaveInProgress());
-}
-
-TEST_F(BackgroundLoaderOfflinerTest,
- HandleTimeoutWithNoLowBarCompletedTriesMet) {
- base::Time creation_time = base::Time::Now();
- SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time,
- kUserRequested);
- EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(),
- progress_callback()));
- request.set_completed_attempt_count(policy()->GetMaxCompletedTries() - 1);
- // Timeout
- EXPECT_FALSE(offliner()->HandleTimeout(kRequestId));
- EXPECT_FALSE(SaveInProgress());
-}
-
-TEST_F(BackgroundLoaderOfflinerTest, HandleTimeoutWithLowBarNoRetryLimit) {
- base::Time creation_time = base::Time::Now();
- SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time,
- kUserRequested);
- EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(),
- progress_callback()));
- // Sets lowbar.
- offliner()->DocumentAvailableInMainFrame();
- // Timeout
- EXPECT_FALSE(offliner()->HandleTimeout(kRequestId));
- EXPECT_FALSE(SaveInProgress());
-}
-
-TEST_F(BackgroundLoaderOfflinerTest, SignalCollectionDisabled) {
- // Ensure feature flag for Signal collection is off,
- EXPECT_FALSE(offline_pages::IsOfflinePagesLoadSignalCollectingEnabled());
-
- base::Time creation_time = base::Time::Now();
- SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time,
- kUserRequested);
- EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(),
- progress_callback()));
-
- CompleteLoading();
- PumpLoop();
-
- // No extra parts should be added if the flag is off.
- content::MHTMLExtraParts* extra_parts =
- content::MHTMLExtraParts::FromWebContents(offliner()->web_contents());
- EXPECT_EQ(extra_parts->size(), 0);
-}
-
-TEST_F(BackgroundLoaderOfflinerTest, SignalCollectionEnabled) {
- // Ensure feature flag for signal collection is on.
- base::test::ScopedFeatureList scoped_feature_list;
- scoped_feature_list.InitAndEnableFeature(
- kOfflinePagesLoadSignalCollectingFeature);
- EXPECT_TRUE(IsOfflinePagesLoadSignalCollectingEnabled());
-
- base::Time creation_time = base::Time::Now();
- SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time,
- kUserRequested);
- EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(),
- progress_callback()));
-
- CompleteLoading();
- PumpLoop();
-
- // One extra part should be added if the flag is on.
- content::MHTMLExtraParts* extra_parts =
- content::MHTMLExtraParts::FromWebContents(offliner()->web_contents());
- EXPECT_EQ(extra_parts->size(), 1);
-}
-
-} // namespace offline_pages

Powered by Google App Engine
This is Rietveld 408576698