| Index: chrome/browser/android/offline_pages/recent_tab_helper_unittest.cc
|
| diff --git a/chrome/browser/android/offline_pages/recent_tab_helper_unittest.cc b/chrome/browser/android/offline_pages/recent_tab_helper_unittest.cc
|
| index c9626478f5cdfd0a4854ed755e20cc60122392c0..eb27eb829280c7816444934b476ebaa6fece35b9 100644
|
| --- a/chrome/browser/android/offline_pages/recent_tab_helper_unittest.cc
|
| +++ b/chrome/browser/android/offline_pages/recent_tab_helper_unittest.cc
|
| @@ -4,12 +4,13 @@
|
|
|
| #include "chrome/browser/android/offline_pages/recent_tab_helper.h"
|
|
|
| +#include <memory>
|
| +
|
| #include "base/memory/ptr_util.h"
|
| -#include "base/run_loop.h"
|
| #include "base/strings/string16.h"
|
| #include "base/strings/string_number_conversions.h"
|
| #include "base/test/scoped_feature_list.h"
|
| -#include "base/test/test_mock_time_task_runner.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/offline_page_model_factory.h"
|
| #include "chrome/browser/android/offline_pages/request_coordinator_factory.h"
|
| @@ -43,14 +44,12 @@ class TestDelegate: public RecentTabHelper::Delegate {
|
|
|
| explicit TestDelegate(
|
| OfflinePageTestArchiver::Observer* observer,
|
| - scoped_refptr<base::SingleThreadTaskRunner> task_runner,
|
| int tab_id,
|
| bool tab_id_result);
|
| ~TestDelegate() override {}
|
|
|
| std::unique_ptr<OfflinePageArchiver> CreatePageArchiver(
|
| content::WebContents* web_contents) override;
|
| - scoped_refptr<base::SingleThreadTaskRunner> GetTaskRunner() override;
|
| // There is no expectations that tab_id is always present.
|
| bool GetTabId(content::WebContents* web_contents, int* tab_id) override;
|
| bool IsLowEndDevice() override { return is_low_end_device_; }
|
| @@ -66,7 +65,6 @@ class TestDelegate: public RecentTabHelper::Delegate {
|
|
|
| private:
|
| OfflinePageTestArchiver::Observer* observer_; // observer owns this.
|
| - scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
|
| int tab_id_;
|
| bool tab_id_result_;
|
|
|
| @@ -87,13 +85,14 @@ class RecentTabHelperTest
|
| ~RecentTabHelperTest() override {}
|
|
|
| void SetUp() override;
|
| + void TearDown() override;
|
| const std::vector<OfflinePageItem>& GetAllPages();
|
|
|
| void FailLoad(const GURL& url);
|
|
|
| - // Runs default thread.
|
| + // Runs main thread.
|
| void RunUntilIdle();
|
| - // Moves forward the snapshot controller's task runner.
|
| + // Advances main thread time to trigger the snapshot controller's timeouts.
|
| void FastForwardSnapshotController();
|
|
|
| // Navigates to the URL and commit as if it has been typed in the address bar.
|
| @@ -121,10 +120,6 @@ class RecentTabHelperTest
|
| return nullptr;
|
| }
|
|
|
| - scoped_refptr<base::TestMockTimeTaskRunner>& task_runner() {
|
| - return task_runner_;
|
| - }
|
| -
|
| size_t page_added_count() { return page_added_count_; }
|
| size_t model_removed_count() { return model_removed_count_; }
|
|
|
| @@ -155,9 +150,15 @@ class RecentTabHelperTest
|
| size_t model_removed_count_;
|
| std::vector<OfflinePageItem> all_pages_;
|
| bool all_pages_needs_updating_;
|
| - scoped_refptr<base::TestMockTimeTaskRunner> task_runner_;
|
| base::test::ScopedFeatureList scoped_feature_list_;
|
|
|
| + // Mocks the RenderViewHostTestHarness' main thread runner. Needs to be delay
|
| + // initialized in SetUp() -- can't be a simple member -- since
|
| + // RenderViewHostTestHarness only initializes its main thread environment in
|
| + // its SetUp() :(.
|
| + std::unique_ptr<base::ScopedMockTimeMessageLoopTaskRunner>
|
| + mocked_main_runner_;
|
| +
|
| base::WeakPtrFactory<RecentTabHelperTest> weak_ptr_factory_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(RecentTabHelperTest);
|
| @@ -165,11 +166,9 @@ class RecentTabHelperTest
|
|
|
| TestDelegate::TestDelegate(
|
| OfflinePageTestArchiver::Observer* observer,
|
| - scoped_refptr<base::SingleThreadTaskRunner> task_runner,
|
| int tab_id,
|
| bool tab_id_result)
|
| : observer_(observer),
|
| - task_runner_(task_runner),
|
| tab_id_(tab_id),
|
| tab_id_result_(tab_id_result) {
|
| }
|
| @@ -183,10 +182,7 @@ std::unique_ptr<OfflinePageArchiver> TestDelegate::CreatePageArchiver(
|
| return std::move(archiver);
|
| }
|
|
|
| -scoped_refptr<base::SingleThreadTaskRunner> TestDelegate::GetTaskRunner() {
|
| - return task_runner_;
|
| -}
|
| - // There is no expectations that tab_id is always present.
|
| +// There is no expectations that tab_id is always present.
|
| bool TestDelegate::GetTabId(content::WebContents* web_contents, int* tab_id) {
|
| *tab_id = tab_id_;
|
| return tab_id_result_;
|
| @@ -199,12 +195,14 @@ RecentTabHelperTest::RecentTabHelperTest()
|
| page_added_count_(0),
|
| model_removed_count_(0),
|
| all_pages_needs_updating_(true),
|
| - task_runner_(new base::TestMockTimeTaskRunner),
|
| weak_ptr_factory_(this) {}
|
|
|
| void RecentTabHelperTest::SetUp() {
|
| ChromeRenderViewHostTestHarness::SetUp();
|
|
|
| + mocked_main_runner_ =
|
| + base::MakeUnique<base::ScopedMockTimeMessageLoopTaskRunner>();
|
| +
|
| scoped_feature_list_.InitAndEnableFeature(kOffliningRecentPagesFeature);
|
| // Sets up the factories for testing.
|
| OfflinePageModelFactory::GetInstance()->SetTestingFactoryAndUse(
|
| @@ -218,7 +216,7 @@ void RecentTabHelperTest::SetUp() {
|
| recent_tab_helper_ = RecentTabHelper::FromWebContents(web_contents());
|
|
|
| std::unique_ptr<TestDelegate> test_delegate(
|
| - new TestDelegate(this, task_runner(), kTabId, true));
|
| + new TestDelegate(this, kTabId, true));
|
| default_test_delegate_ = test_delegate.get();
|
| recent_tab_helper_->SetDelegate(std::move(test_delegate));
|
|
|
| @@ -226,6 +224,11 @@ void RecentTabHelperTest::SetUp() {
|
| model_->AddObserver(this);
|
| }
|
|
|
| +void RecentTabHelperTest::TearDown() {
|
| + mocked_main_runner_.reset();
|
| + ChromeRenderViewHostTestHarness::TearDown();
|
| +}
|
| +
|
| void RecentTabHelperTest::FailLoad(const GURL& url) {
|
| controller().LoadURL(url, content::Referrer(), ui::PAGE_TRANSITION_TYPED,
|
| std::string());
|
| @@ -252,12 +255,12 @@ void RecentTabHelperTest::OnGetAllPagesDone(
|
| }
|
|
|
| void RecentTabHelperTest::RunUntilIdle() {
|
| - base::RunLoop().RunUntilIdle();
|
| + (*mocked_main_runner_)->RunUntilIdle();
|
| }
|
|
|
| void RecentTabHelperTest::FastForwardSnapshotController() {
|
| - const size_t kLongDelayMs = 100*1000;
|
| - task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(kLongDelayMs));
|
| + constexpr base::TimeDelta kLongDelay = base::TimeDelta::FromSeconds(100);
|
| + (*mocked_main_runner_)->FastForwardBy(kLongDelay);
|
| }
|
|
|
| void RecentTabHelperTest::NavigateAndCommitTyped(const GURL& url) {
|
| @@ -289,7 +292,6 @@ TEST_F(RecentTabHelperTest, LastNCaptureAfterLoad) {
|
| recent_tab_helper()->DocumentOnLoadCompletedInMainFrame();
|
| // Move the snapshot controller's time forward so it gets past timeouts.
|
| FastForwardSnapshotController();
|
| - RunUntilIdle();
|
| EXPECT_TRUE(model()->is_loaded());
|
| EXPECT_EQ(0U, page_added_count());
|
| ASSERT_EQ(0U, GetAllPages().size());
|
| @@ -319,7 +321,6 @@ TEST_F(RecentTabHelperTest, NoLastNCaptureIfTabHiddenTooEarlyInPageLoad) {
|
| recent_tab_helper()->DocumentOnLoadCompletedInMainFrame();
|
| // Move the snapshot controller's time forward so it gets past timeouts.
|
| FastForwardSnapshotController();
|
| - RunUntilIdle();
|
| EXPECT_EQ(0U, page_added_count());
|
| ASSERT_EQ(0U, GetAllPages().size());
|
| }
|
| @@ -328,8 +329,8 @@ TEST_F(RecentTabHelperTest, NoLastNCaptureIfTabHiddenTooEarlyInPageLoad) {
|
| // ignored from both last_n and downloads.
|
| TEST_F(RecentTabHelperTest, NoTabIdNoCapture) {
|
| // Create delegate that returns 'false' as TabId retrieval result.
|
| - recent_tab_helper()->SetDelegate(base::MakeUnique<TestDelegate>(
|
| - this, task_runner(), kTabId, false));
|
| + recent_tab_helper()->SetDelegate(
|
| + base::MakeUnique<TestDelegate>(this, kTabId, false));
|
|
|
| NavigateAndCommit(kTestPageUrl);
|
| recent_tab_helper()->DocumentOnLoadCompletedInMainFrame();
|
| @@ -375,7 +376,6 @@ TEST_F(RecentTabHelperTest, TwoCapturesSamePageLoad) {
|
| // Set page loading state to the 1st snapshot-able stage. No capture so far.
|
| recent_tab_helper()->DocumentAvailableInMainFrame();
|
| FastForwardSnapshotController();
|
| - RunUntilIdle();
|
| EXPECT_TRUE(model()->is_loaded());
|
| EXPECT_EQ(0U, page_added_count());
|
|
|
| @@ -392,7 +392,6 @@ TEST_F(RecentTabHelperTest, TwoCapturesSamePageLoad) {
|
| // capture should happen.
|
| recent_tab_helper()->DocumentOnLoadCompletedInMainFrame();
|
| FastForwardSnapshotController();
|
| - RunUntilIdle();
|
| EXPECT_EQ(1U, page_added_count());
|
| EXPECT_EQ(0U, model_removed_count());
|
| ASSERT_EQ(1U, GetAllPages().size());
|
| @@ -465,7 +464,6 @@ TEST_F(RecentTabHelperTest, TwoCapturesDifferentPageLoadsSameUrl) {
|
| NavigateAndCommitTyped(kTestPageUrl);
|
| recent_tab_helper()->DocumentAvailableInMainFrame();
|
| FastForwardSnapshotController();
|
| - RunUntilIdle();
|
| EXPECT_EQ(1U, page_added_count());
|
| EXPECT_EQ(0U, model_removed_count());
|
| ASSERT_EQ(1U, GetAllPages().size());
|
| @@ -531,7 +529,6 @@ TEST_F(RecentTabHelperTest, TwoCapturesDifferentPageLoadsDifferentUrls) {
|
| NavigateAndCommitTyped(kTestPageUrlOther);
|
| recent_tab_helper()->DocumentOnLoadCompletedInMainFrame();
|
| FastForwardSnapshotController();
|
| - RunUntilIdle();
|
| EXPECT_EQ(1U, page_added_count());
|
| EXPECT_EQ(0U, model_removed_count());
|
| ASSERT_EQ(1U, GetAllPages().size());
|
| @@ -642,14 +639,12 @@ TEST_F(RecentTabHelperTest, DownloadRequestEarlyInLoad) {
|
| const ClientId client_id = NewDownloadClientId();
|
| recent_tab_helper()->ObserveAndDownloadCurrentPage(client_id, 153L);
|
| FastForwardSnapshotController();
|
| - RunUntilIdle();
|
| EXPECT_TRUE(model()->is_loaded());
|
| ASSERT_EQ(0U, GetAllPages().size());
|
|
|
| // Minimally load the page. First capture should occur.
|
| recent_tab_helper()->DocumentAvailableInMainFrame();
|
| FastForwardSnapshotController();
|
| - RunUntilIdle();
|
| ASSERT_EQ(1U, GetAllPages().size());
|
| const OfflinePageItem& early_page = GetAllPages()[0];
|
| EXPECT_EQ(kTestPageUrl, early_page.url);
|
| @@ -659,7 +654,6 @@ TEST_F(RecentTabHelperTest, DownloadRequestEarlyInLoad) {
|
| // Fully load the page. A second capture should replace the first one.
|
| recent_tab_helper()->DocumentOnLoadCompletedInMainFrame();
|
| FastForwardSnapshotController();
|
| - RunUntilIdle();
|
| EXPECT_EQ(2U, page_added_count());
|
| EXPECT_EQ(1U, model_removed_count());
|
| ASSERT_EQ(1U, GetAllPages().size());
|
| @@ -676,7 +670,6 @@ TEST_F(RecentTabHelperTest, DownloadRequestLaterInLoad) {
|
| NavigateAndCommit(kTestPageUrl);
|
| recent_tab_helper()->DocumentAvailableInMainFrame();
|
| FastForwardSnapshotController();
|
| - RunUntilIdle();
|
| EXPECT_TRUE(model()->is_loaded());
|
| ASSERT_EQ(0U, GetAllPages().size());
|
|
|
| @@ -691,7 +684,6 @@ TEST_F(RecentTabHelperTest, DownloadRequestLaterInLoad) {
|
|
|
| recent_tab_helper()->DocumentOnLoadCompletedInMainFrame();
|
| FastForwardSnapshotController();
|
| - RunUntilIdle();
|
| EXPECT_EQ(2U, page_added_count());
|
| EXPECT_EQ(1U, model_removed_count());
|
| ASSERT_EQ(1U, GetAllPages().size());
|
| @@ -703,7 +695,6 @@ TEST_F(RecentTabHelperTest, DownloadRequestAfterFullyLoad) {
|
| NavigateAndCommit(kTestPageUrl);
|
| recent_tab_helper()->DocumentOnLoadCompletedInMainFrame();
|
| FastForwardSnapshotController();
|
| - RunUntilIdle();
|
| EXPECT_TRUE(model()->is_loaded());
|
| ASSERT_EQ(0U, GetAllPages().size());
|
|
|
| @@ -793,7 +784,6 @@ TEST_F(RecentTabHelperTest, OverlappingDownloadRequestsAreIgnored) {
|
| // Finish loading the page. Only the first request should be executed.
|
| recent_tab_helper()->DocumentOnLoadCompletedInMainFrame();
|
| FastForwardSnapshotController();
|
| - RunUntilIdle();
|
| EXPECT_EQ(1U, page_added_count());
|
| EXPECT_EQ(0U, model_removed_count());
|
| ASSERT_EQ(1U, GetAllPages().size());
|
|
|