| Index: chrome/browser/android/offline_pages/offline_page_utils_unittest.cc
|
| diff --git a/chrome/browser/android/offline_pages/offline_page_utils_unittest.cc b/chrome/browser/android/offline_pages/offline_page_utils_unittest.cc
|
| index 1fda016121365c9a2451fb514cee24575b463a57..12bd237d59b94563003dabce4c9cb479bba62cb5 100644
|
| --- a/chrome/browser/android/offline_pages/offline_page_utils_unittest.cc
|
| +++ b/chrome/browser/android/offline_pages/offline_page_utils_unittest.cc
|
| @@ -16,6 +16,7 @@
|
| #include "base/run_loop.h"
|
| #include "base/strings/string16.h"
|
| #include "base/test/scoped_feature_list.h"
|
| +#include "base/test/simple_test_clock.h"
|
| #include "base/threading/thread_task_runner_handle.h"
|
| #include "base/time/time.h"
|
| #include "chrome/browser/android/offline_pages/offline_page_model_factory.h"
|
| @@ -30,6 +31,7 @@
|
| #include "components/offline_pages/core/client_namespace_constants.h"
|
| #include "components/offline_pages/core/offline_page_feature.h"
|
| #include "components/offline_pages/core/offline_page_model.h"
|
| +#include "components/offline_pages/core/offline_page_model_impl.h"
|
| #include "components/offline_pages/core/offline_page_test_archiver.h"
|
| #include "components/offline_pages/core/offline_page_test_store.h"
|
| #include "components/offline_pages/core/offline_page_types.h"
|
| @@ -50,6 +52,7 @@ const int64_t kTestFileSize = 876543LL;
|
| const char* kTestPage1ClientId = "1234";
|
| const char* kTestPage2ClientId = "5678";
|
| const char* kTestPage3ClientId = "7890";
|
| +const char* kTestPage4ClientId = "42";
|
|
|
| void CheckDuplicateDownloadsCallback(
|
| OfflinePageUtils::DuplicateCheckResult* out_result,
|
| @@ -90,6 +93,7 @@ class OfflinePageUtilsTest
|
| void OnClearAllDone();
|
| void OnExpirePageDone(bool success);
|
| void OnGetURLDone(const GURL& url);
|
| + void OnSizeInBytesCalculated(int64_t size);
|
|
|
| // OfflinePageTestArchiver::Observer implementation:
|
| void SetLastPathCreatedByArchiver(const base::FilePath& file_path) override;
|
| @@ -98,6 +102,9 @@ class OfflinePageUtilsTest
|
| content::WebContents* web_contents() const { return web_contents_.get(); }
|
|
|
| int64_t offline_id() const { return offline_id_; }
|
| + int64_t last_cache_size() { return last_cache_size_; }
|
| +
|
| + void CreateCachedOfflinePages(base::SimpleTestClock* clock);
|
|
|
| private:
|
| void CreateOfflinePages();
|
| @@ -112,6 +119,7 @@ class OfflinePageUtilsTest
|
| TestingProfile profile_;
|
| std::unique_ptr<content::WebContents> web_contents_;
|
| base::test::ScopedFeatureList scoped_feature_list_;
|
| + int64_t last_cache_size_;
|
| };
|
|
|
| OfflinePageUtilsTest::OfflinePageUtilsTest() = default;
|
| @@ -180,6 +188,10 @@ void OfflinePageUtilsTest::OnGetURLDone(const GURL& url) {
|
| url_ = url;
|
| }
|
|
|
| +void OfflinePageUtilsTest::OnSizeInBytesCalculated(int64_t size) {
|
| + last_cache_size_ = size;
|
| +}
|
| +
|
| void OfflinePageUtilsTest::SetLastPathCreatedByArchiver(
|
| const base::FilePath& file_path) {}
|
|
|
| @@ -211,6 +223,42 @@ void OfflinePageUtilsTest::CreateRequests() {
|
| RunUntilIdle();
|
| }
|
|
|
| +void OfflinePageUtilsTest::CreateCachedOfflinePages(
|
| + base::SimpleTestClock* clock) {
|
| + // Add 4 temporary pages to the model used for test cases. And setting current
|
| + // time as the 00:00:00 time anchor.
|
| + offline_pages::ClientId client_id;
|
| + client_id.name_space = kBookmarkNamespace;
|
| +
|
| + clock->SetNow(base::Time::Now());
|
| + // Time 01:00:00.
|
| + clock->Advance(base::TimeDelta::FromHours(1));
|
| + std::unique_ptr<OfflinePageTestArchiver> archiver(BuildArchiver(
|
| + kTestPage1Url, base::FilePath(FILE_PATH_LITERAL("page1.mhtml"))));
|
| + client_id.id = kTestPage1ClientId;
|
| + SavePage(kTestPage1Url, client_id, std::move(archiver));
|
| + // time 02:00:00.
|
| + clock->Advance(base::TimeDelta::FromHours(1));
|
| + archiver = BuildArchiver(kTestPage2Url,
|
| + base::FilePath(FILE_PATH_LITERAL("page2.mhtml")));
|
| + client_id.id = kTestPage2ClientId;
|
| + SavePage(kTestPage2Url, client_id, std::move(archiver));
|
| + // time 03:00:00.
|
| + clock->Advance(base::TimeDelta::FromHours(1));
|
| + archiver = BuildArchiver(kTestPage3Url,
|
| + base::FilePath(FILE_PATH_LITERAL("page3.mhtml")));
|
| + client_id.id = kTestPage3ClientId;
|
| + SavePage(kTestPage3Url, client_id, std::move(archiver));
|
| + // Add a temporary page to test boundary at 10:00:00.
|
| + clock->Advance(base::TimeDelta::FromHours(7));
|
| + archiver = BuildArchiver(kTestPage4Url,
|
| + base::FilePath(FILE_PATH_LITERAL("page4.mhtml")));
|
| + client_id.id = kTestPage4ClientId;
|
| + SavePage(kTestPage4Url, client_id, std::move(archiver));
|
| + // Reset clock->to 03:00:00.
|
| + clock->SetNow(clock->Now() - base::TimeDelta::FromHours(7));
|
| +}
|
| +
|
| std::unique_ptr<OfflinePageTestArchiver> OfflinePageUtilsTest::BuildArchiver(
|
| const GURL& url,
|
| const base::FilePath& file_name) {
|
| @@ -310,4 +358,135 @@ TEST_F(OfflinePageUtilsTest, EqualsIgnoringFragment) {
|
| GURL("http://example.com/"), GURL("http://test.com/#test")));
|
| }
|
|
|
| +TEST_F(OfflinePageUtilsTest, TestGetCachedOfflinePageSizeBetween) {
|
| + // Set a test clock before adding cached offline pages.
|
| + // The clock will be at 03:00:00 after adding pages.
|
| + OfflinePageModel* model =
|
| + OfflinePageModelFactory::GetForBrowserContext(profile());
|
| + base::SimpleTestClock clock;
|
| + static_cast<OfflinePageModelImpl*>(model)->set_testing_clock(&clock);
|
| + CreateCachedOfflinePages(&clock);
|
| +
|
| + // Advance the clock so that we don't hit the time check boundary.
|
| + clock.Advance(base::TimeDelta::FromMinutes(5));
|
| +
|
| + // Get the size of cached offline pages between 01:05:00 and 03:05:00.
|
| + bool ret = OfflinePageUtils::GetCachedOfflinePageSizeBetween(
|
| + profile(),
|
| + base::Bind(&OfflinePageUtilsTest::OnSizeInBytesCalculated, AsWeakPtr()),
|
| + clock.Now() - base::TimeDelta::FromHours(2), clock.Now());
|
| + RunUntilIdle();
|
| + EXPECT_TRUE(ret);
|
| + EXPECT_EQ(kTestFileSize * 2, last_cache_size());
|
| +}
|
| +
|
| +TEST_F(OfflinePageUtilsTest, TestGetCachedOfflinePageSizeNoPageInModel) {
|
| + // Set a test clock.
|
| + OfflinePageModel* model =
|
| + OfflinePageModelFactory::GetForBrowserContext(profile());
|
| + base::SimpleTestClock clock;
|
| + static_cast<OfflinePageModelImpl*>(model)->set_testing_clock(&clock);
|
| +
|
| + clock.Advance(base::TimeDelta::FromHours(3));
|
| +
|
| + // Get the size of cached offline pages between 01:00:00 and 03:00:00.
|
| + // Since no temporary pages were added to the model, the cache size should be
|
| + // 0.
|
| + bool ret = OfflinePageUtils::GetCachedOfflinePageSizeBetween(
|
| + profile(),
|
| + base::Bind(&OfflinePageUtilsTest::OnSizeInBytesCalculated, AsWeakPtr()),
|
| + clock.Now() - base::TimeDelta::FromHours(2), clock.Now());
|
| + RunUntilIdle();
|
| + EXPECT_TRUE(ret);
|
| + EXPECT_EQ(0, last_cache_size());
|
| +}
|
| +
|
| +TEST_F(OfflinePageUtilsTest, TestGetCachedOfflinePageSizeNoPageInRange) {
|
| + // Set a test clock before adding cached offline pages.
|
| + // The clock will be at 03:00:00 after adding pages.
|
| + OfflinePageModel* model =
|
| + OfflinePageModelFactory::GetForBrowserContext(profile());
|
| + base::SimpleTestClock clock;
|
| + static_cast<OfflinePageModelImpl*>(model)->set_testing_clock(&clock);
|
| + CreateCachedOfflinePages(&clock);
|
| +
|
| + // Advance the clock so that we don't hit the time check boundary.
|
| + clock.Advance(base::TimeDelta::FromMinutes(5));
|
| +
|
| + // Get the size of cached offline pages between 03:04:00 and 03:05:00.
|
| + bool ret = OfflinePageUtils::GetCachedOfflinePageSizeBetween(
|
| + profile(),
|
| + base::Bind(&OfflinePageUtilsTest::OnSizeInBytesCalculated, AsWeakPtr()),
|
| + clock.Now() - base::TimeDelta::FromMinutes(1), clock.Now());
|
| + RunUntilIdle();
|
| + EXPECT_TRUE(ret);
|
| + EXPECT_EQ(0, last_cache_size());
|
| +}
|
| +
|
| +TEST_F(OfflinePageUtilsTest, TestGetCachedOfflinePageSizeAllPagesInRange) {
|
| + // Set a test clock before adding cached offline pages.
|
| + // The clock will be at 03:00:00 after adding pages.
|
| + OfflinePageModel* model =
|
| + OfflinePageModelFactory::GetForBrowserContext(profile());
|
| + base::SimpleTestClock clock;
|
| + static_cast<OfflinePageModelImpl*>(model)->set_testing_clock(&clock);
|
| + CreateCachedOfflinePages(&clock);
|
| +
|
| + // Advance the clock to 23:00:00.
|
| + clock.Advance(base::TimeDelta::FromHours(20));
|
| +
|
| + // Get the size of cached offline pages between -01:00:00 and 23:00:00.
|
| + bool ret = OfflinePageUtils::GetCachedOfflinePageSizeBetween(
|
| + profile(),
|
| + base::Bind(&OfflinePageUtilsTest::OnSizeInBytesCalculated, AsWeakPtr()),
|
| + clock.Now() - base::TimeDelta::FromHours(24), clock.Now());
|
| + RunUntilIdle();
|
| + EXPECT_TRUE(ret);
|
| + EXPECT_EQ(kTestFileSize * 4, last_cache_size());
|
| +}
|
| +
|
| +TEST_F(OfflinePageUtilsTest, TestGetCachedOfflinePageSizeAllPagesInvalidRange) {
|
| + // Set a test clock before adding cached offline pages.
|
| + // The clock will be at 03:00:00 after adding pages.
|
| + OfflinePageModel* model =
|
| + OfflinePageModelFactory::GetForBrowserContext(profile());
|
| + base::SimpleTestClock clock;
|
| + static_cast<OfflinePageModelImpl*>(model)->set_testing_clock(&clock);
|
| + CreateCachedOfflinePages(&clock);
|
| +
|
| + // Advance the clock to 23:00:00.
|
| + clock.Advance(base::TimeDelta::FromHours(20));
|
| +
|
| + // Get the size of cached offline pages between 23:00:00 and -01:00:00, which
|
| + // is an invalid range, the return value will be false and there will be no
|
| + // callback.
|
| + bool ret = OfflinePageUtils::GetCachedOfflinePageSizeBetween(
|
| + profile(),
|
| + base::Bind(&OfflinePageUtilsTest::OnSizeInBytesCalculated, AsWeakPtr()),
|
| + clock.Now(), clock.Now() - base::TimeDelta::FromHours(24));
|
| + RunUntilIdle();
|
| + EXPECT_FALSE(ret);
|
| +}
|
| +
|
| +TEST_F(OfflinePageUtilsTest, TestGetCachedOfflinePageSizeEdgeCase) {
|
| + // Set a test clock before adding cached offline pages.
|
| + // The clock will be at 03:00:00 after adding pages.
|
| + OfflinePageModel* model =
|
| + OfflinePageModelFactory::GetForBrowserContext(profile());
|
| + base::SimpleTestClock clock;
|
| + static_cast<OfflinePageModelImpl*>(model)->set_testing_clock(&clock);
|
| + CreateCachedOfflinePages(&clock);
|
| +
|
| + // Get the size of cached offline pages between 02:00:00 and 03:00:00, since
|
| + // we are using a [begin_time, end_time) range so there will be only 1 page
|
| + // when query for this time range.
|
| + bool ret = OfflinePageUtils::GetCachedOfflinePageSizeBetween(
|
| + profile(),
|
| + base::Bind(&OfflinePageUtilsTest::OnSizeInBytesCalculated, AsWeakPtr()),
|
| + clock.Now() - base::TimeDelta::FromHours(1), clock.Now());
|
| + RunUntilIdle();
|
| + EXPECT_TRUE(ret);
|
| + EXPECT_EQ(kTestFileSize * 1, last_cache_size());
|
| +}
|
| +
|
| } // namespace offline_pages
|
|
|