Index: components/offline_pages/offline_page_model_impl_unittest.cc |
diff --git a/components/offline_pages/offline_page_model_impl_unittest.cc b/components/offline_pages/offline_page_model_impl_unittest.cc |
deleted file mode 100644 |
index 6a01066fa2927edf27faf9bd90865046fa552f1a..0000000000000000000000000000000000000000 |
--- a/components/offline_pages/offline_page_model_impl_unittest.cc |
+++ /dev/null |
@@ -1,1333 +0,0 @@ |
-// Copyright 2015 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 "components/offline_pages/offline_page_model_impl.h" |
- |
-#include <stdint.h> |
-#include <algorithm> |
-#include <utility> |
- |
-#include "base/bind.h" |
-#include "base/command_line.h" |
-#include "base/feature_list.h" |
-#include "base/files/file_util.h" |
-#include "base/files/scoped_temp_dir.h" |
-#include "base/memory/ptr_util.h" |
-#include "base/metrics/statistics_recorder.h" |
-#include "base/run_loop.h" |
-#include "base/single_thread_task_runner.h" |
-#include "base/strings/string_number_conversions.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "base/test/histogram_tester.h" |
-#include "base/test/scoped_feature_list.h" |
-#include "base/test/test_mock_time_task_runner.h" |
-#include "base/threading/thread_task_runner_handle.h" |
-#include "base/time/time.h" |
-#include "components/offline_pages/client_namespace_constants.h" |
-#include "components/offline_pages/client_policy_controller.h" |
-#include "components/offline_pages/offline_page_client_policy.h" |
-#include "components/offline_pages/offline_page_feature.h" |
-#include "components/offline_pages/offline_page_item.h" |
-#include "components/offline_pages/offline_page_storage_manager.h" |
-#include "components/offline_pages/offline_page_test_archiver.h" |
-#include "components/offline_pages/offline_page_test_store.h" |
-#include "components/offline_pages/offline_page_types.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
-#include "url/gurl.h" |
- |
-namespace offline_pages { |
- |
-namespace { |
-const char kTestClientNamespace[] = "default"; |
-const char kUserRequestedNamespace[] = "download"; |
-const GURL kTestUrl("http://example.com"); |
-const GURL kTestUrl2("http://other.page.com"); |
-const GURL kTestUrl3("http://test.xyz"); |
-const GURL kTestUrl4("http://page.net"); |
-const GURL kFileUrl("file:///foo"); |
-const GURL kTestUrlWithFragment("http://example.com#frag"); |
-const GURL kTestUrl2WithFragment("http://other.page.com#frag"); |
-const GURL kTestUrl2WithFragment2("http://other.page.com#frag2"); |
-const ClientId kTestClientId1(kTestClientNamespace, "1234"); |
-const ClientId kTestClientId2(kTestClientNamespace, "5678"); |
-const ClientId kTestClientId3(kTestClientNamespace, "42"); |
-const ClientId kTestUserRequestedClientId(kUserRequestedNamespace, "714"); |
-const int64_t kTestFileSize = 876543LL; |
-const base::string16 kTestTitle = base::UTF8ToUTF16("a title"); |
- |
-bool URLSpecContains(std::string contains_value, const GURL& url) { |
- std::string spec = url.spec(); |
- return spec.find(contains_value) != std::string::npos; |
-} |
- |
-} // namespace |
- |
-class OfflinePageModelImplTest |
- : public testing::Test, |
- public OfflinePageModel::Observer, |
- public OfflinePageTestArchiver::Observer, |
- public base::SupportsWeakPtr<OfflinePageModelImplTest> { |
- public: |
- OfflinePageModelImplTest(); |
- ~OfflinePageModelImplTest() override; |
- |
- void SetUp() override; |
- void TearDown() override; |
- |
- // OfflinePageModel::Observer implementation. |
- void OfflinePageModelLoaded(OfflinePageModel* model) override; |
- void OfflinePageModelChanged(OfflinePageModel* model) override; |
- void OfflinePageDeleted(int64_t offline_id, |
- const ClientId& client_id) override; |
- |
- // OfflinePageTestArchiver::Observer implementation. |
- void SetLastPathCreatedByArchiver(const base::FilePath& file_path) override; |
- |
- // OfflinePageModel callbacks. |
- void OnSavePageDone(SavePageResult result, int64_t offline_id); |
- void OnDeletePageDone(DeletePageResult result); |
- void OnCheckPagesExistOfflineDone(const CheckPagesExistOfflineResult& result); |
- void OnGetOfflineIdsForClientIdDone(MultipleOfflineIdResult* storage, |
- const MultipleOfflineIdResult& result); |
- void OnGetSingleOfflinePageItemResult( |
- std::unique_ptr<OfflinePageItem>* storage, |
- const OfflinePageItem* result); |
- void OnGetMultipleOfflinePageItemsResult( |
- MultipleOfflinePageItemResult* storage, |
- const MultipleOfflinePageItemResult& result); |
- void OnPagesExpired(bool result); |
- |
- // OfflinePageMetadataStore callbacks. |
- void OnStoreUpdateDone(bool /* success */); |
- |
- std::unique_ptr<OfflinePageTestArchiver> BuildArchiver( |
- const GURL& url, |
- OfflinePageArchiver::ArchiverResult result); |
- std::unique_ptr<OfflinePageMetadataStore> BuildStore(); |
- std::unique_ptr<OfflinePageModelImpl> BuildModel( |
- std::unique_ptr<OfflinePageMetadataStore> store); |
- void ResetModel(); |
- |
- // Utility methods. |
- // Runs until all of the tasks that are not delayed are gone from the task |
- // queue. |
- void PumpLoop(); |
- // Fast-forwards virtual time by |delta|, causing tasks with a remaining |
- // delay less than or equal to |delta| to be executed. |
- void FastForwardBy(base::TimeDelta delta); |
- void ResetResults(); |
- |
- OfflinePageTestStore* GetStore(); |
- |
- MultipleOfflinePageItemResult GetAllPages(); |
- MultipleOfflinePageItemResult GetPagesByClientIds( |
- const std::vector<ClientId>& client_ids); |
- void DeletePagesByClientIds(const std::vector<ClientId>& client_ids); |
- |
- // Saves the page without waiting for it to finish. |
- void SavePageWithArchiverAsync( |
- const GURL& url, |
- const ClientId& client_id, |
- const GURL& original_url, |
- std::unique_ptr<OfflinePageArchiver> archiver); |
- |
- // All 3 methods below will wait for the save to finish. |
- void SavePageWithArchiver( |
- const GURL& url, |
- const ClientId& client_id, |
- std::unique_ptr<OfflinePageArchiver> archiver); |
- void SavePageWithArchiverResult(const GURL& url, |
- const ClientId& client_id, |
- OfflinePageArchiver::ArchiverResult result); |
- // Returns the offline ID of the saved page. |
- std::pair<SavePageResult, int64_t> SavePage(const GURL& url, |
- const ClientId& client_id); |
- |
- void DeletePage(int64_t offline_id, const DeletePageCallback& callback) { |
- std::vector<int64_t> offline_ids; |
- offline_ids.push_back(offline_id); |
- model()->DeletePagesByOfflineId(offline_ids, callback); |
- } |
- |
- bool HasPages(std::string name_space); |
- |
- CheckPagesExistOfflineResult CheckPagesExistOffline(std::set<GURL>); |
- |
- MultipleOfflineIdResult GetOfflineIdsForClientId(const ClientId& client_id); |
- |
- std::unique_ptr<OfflinePageItem> GetPageByOfflineId(int64_t offline_id); |
- |
- MultipleOfflinePageItemResult GetPagesByFinalURL(const GURL& url); |
- MultipleOfflinePageItemResult GetPagesByAllURLS(const GURL& url); |
- |
- OfflinePageModelImpl* model() { return model_.get(); } |
- |
- int64_t last_save_offline_id() const { return last_save_offline_id_; } |
- |
- SavePageResult last_save_result() const { return last_save_result_; } |
- |
- DeletePageResult last_delete_result() const { return last_delete_result_; } |
- |
- int64_t last_deleted_offline_id() const { return last_deleted_offline_id_; } |
- |
- ClientId last_deleted_client_id() const { return last_deleted_client_id_; } |
- |
- const base::FilePath& last_archiver_path() { return last_archiver_path_; } |
- |
- int last_cleared_pages_count() const { return last_cleared_pages_count_; } |
- |
- DeletePageResult last_clear_page_result() const { |
- return last_clear_page_result_; |
- } |
- |
- bool last_expire_page_result() const { return last_expire_page_result_; } |
- |
- const base::HistogramTester& histograms() const { return histogram_tester_; } |
- |
- private: |
- scoped_refptr<base::TestMockTimeTaskRunner> task_runner_; |
- base::ThreadTaskRunnerHandle task_runner_handle_; |
- base::ScopedTempDir temp_dir_; |
- |
- std::unique_ptr<OfflinePageModelImpl> model_; |
- SavePageResult last_save_result_; |
- int64_t last_save_offline_id_; |
- DeletePageResult last_delete_result_; |
- base::FilePath last_archiver_path_; |
- int64_t last_deleted_offline_id_; |
- ClientId last_deleted_client_id_; |
- CheckPagesExistOfflineResult last_pages_exist_result_; |
- int last_cleared_pages_count_; |
- DeletePageResult last_clear_page_result_; |
- bool last_expire_page_result_; |
- |
- base::HistogramTester histogram_tester_; |
-}; |
- |
-OfflinePageModelImplTest::OfflinePageModelImplTest() |
- : task_runner_(new base::TestMockTimeTaskRunner), |
- task_runner_handle_(task_runner_), |
- last_save_result_(SavePageResult::CANCELLED), |
- last_save_offline_id_(-1), |
- last_delete_result_(DeletePageResult::CANCELLED), |
- last_deleted_offline_id_(-1) {} |
- |
-OfflinePageModelImplTest::~OfflinePageModelImplTest() {} |
- |
-void OfflinePageModelImplTest::SetUp() { |
- ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
- model_ = BuildModel(BuildStore()); |
- model_->AddObserver(this); |
- PumpLoop(); |
-} |
- |
-void OfflinePageModelImplTest::TearDown() { |
- model_->RemoveObserver(this); |
- model_.reset(); |
- PumpLoop(); |
-} |
- |
-void OfflinePageModelImplTest::OfflinePageModelLoaded(OfflinePageModel* model) { |
- ASSERT_EQ(model_.get(), model); |
-} |
- |
-void OfflinePageModelImplTest::OfflinePageModelChanged( |
- OfflinePageModel* model) { |
- ASSERT_EQ(model_.get(), model); |
-} |
- |
-void OfflinePageModelImplTest::OfflinePageDeleted(int64_t offline_id, |
- const ClientId& client_id) { |
- last_deleted_offline_id_ = offline_id; |
- last_deleted_client_id_ = client_id; |
-} |
- |
-void OfflinePageModelImplTest::SetLastPathCreatedByArchiver( |
- const base::FilePath& file_path) { |
- last_archiver_path_ = file_path; |
-} |
- |
-void OfflinePageModelImplTest::OnSavePageDone(SavePageResult result, |
- int64_t offline_id) { |
- last_save_result_ = result; |
- last_save_offline_id_ = offline_id; |
-} |
- |
-void OfflinePageModelImplTest::OnDeletePageDone(DeletePageResult result) { |
- last_delete_result_ = result; |
-} |
- |
-void OfflinePageModelImplTest::OnCheckPagesExistOfflineDone( |
- const CheckPagesExistOfflineResult& result) { |
- last_pages_exist_result_ = result; |
-} |
- |
-void OfflinePageModelImplTest::OnStoreUpdateDone(bool /* success - ignored */) { |
-} |
- |
-std::unique_ptr<OfflinePageTestArchiver> |
-OfflinePageModelImplTest::BuildArchiver( |
- const GURL& url, |
- OfflinePageArchiver::ArchiverResult result) { |
- return std::unique_ptr<OfflinePageTestArchiver>( |
- new OfflinePageTestArchiver(this, url, result, kTestTitle, kTestFileSize, |
- base::ThreadTaskRunnerHandle::Get())); |
-} |
- |
-std::unique_ptr<OfflinePageMetadataStore> |
-OfflinePageModelImplTest::BuildStore() { |
- return std::unique_ptr<OfflinePageMetadataStore>( |
- new OfflinePageTestStore(base::ThreadTaskRunnerHandle::Get())); |
-} |
- |
-std::unique_ptr<OfflinePageModelImpl> OfflinePageModelImplTest::BuildModel( |
- std::unique_ptr<OfflinePageMetadataStore> store) { |
- return std::unique_ptr<OfflinePageModelImpl>( |
- new OfflinePageModelImpl(std::move(store), temp_dir_.GetPath(), |
- base::ThreadTaskRunnerHandle::Get())); |
-} |
- |
-void OfflinePageModelImplTest::ResetModel() { |
- model_->RemoveObserver(this); |
- OfflinePageTestStore* old_store = GetStore(); |
- std::unique_ptr<OfflinePageMetadataStore> new_store( |
- new OfflinePageTestStore(*old_store)); |
- model_ = BuildModel(std::move(new_store)); |
- model_->AddObserver(this); |
- PumpLoop(); |
-} |
- |
-void OfflinePageModelImplTest::PumpLoop() { |
- task_runner_->RunUntilIdle(); |
-} |
- |
-void OfflinePageModelImplTest::FastForwardBy(base::TimeDelta delta) { |
- task_runner_->FastForwardBy(delta); |
-} |
- |
-void OfflinePageModelImplTest::ResetResults() { |
- last_save_result_ = SavePageResult::CANCELLED; |
- last_delete_result_ = DeletePageResult::CANCELLED; |
- last_archiver_path_.clear(); |
- last_pages_exist_result_.clear(); |
- last_cleared_pages_count_ = 0; |
-} |
- |
-OfflinePageTestStore* OfflinePageModelImplTest::GetStore() { |
- return static_cast<OfflinePageTestStore*>(model()->GetStoreForTesting()); |
-} |
- |
-void OfflinePageModelImplTest::SavePageWithArchiverAsync( |
- const GURL& url, |
- const ClientId& client_id, |
- const GURL& original_url, |
- std::unique_ptr<OfflinePageArchiver> archiver) { |
- OfflinePageModel::SavePageParams save_page_params; |
- save_page_params.url = url; |
- save_page_params.client_id = client_id; |
- save_page_params.original_url = original_url; |
- model()->SavePage( |
- save_page_params, |
- std::move(archiver), |
- base::Bind(&OfflinePageModelImplTest::OnSavePageDone, AsWeakPtr())); |
-} |
- |
-void OfflinePageModelImplTest::SavePageWithArchiver( |
- const GURL& url, |
- const ClientId& client_id, |
- std::unique_ptr<OfflinePageArchiver> archiver) { |
- SavePageWithArchiverAsync(url, client_id, GURL(), std::move(archiver)); |
- PumpLoop(); |
-} |
- |
-void OfflinePageModelImplTest::SavePageWithArchiverResult( |
- const GURL& url, |
- const ClientId& client_id, |
- OfflinePageArchiver::ArchiverResult result) { |
- std::unique_ptr<OfflinePageTestArchiver> archiver(BuildArchiver(url, result)); |
- SavePageWithArchiverAsync(url, client_id, GURL(), std::move(archiver)); |
- PumpLoop(); |
-} |
- |
-std::pair<SavePageResult, int64_t> |
-OfflinePageModelImplTest::SavePage(const GURL& url, const ClientId& client_id) { |
- std::unique_ptr<OfflinePageTestArchiver> archiver(BuildArchiver( |
- url, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)); |
- SavePageWithArchiverAsync(url, client_id, GURL(), std::move(archiver)); |
- PumpLoop(); |
- return std::make_pair(last_save_result_, last_save_offline_id_); |
-} |
- |
-MultipleOfflinePageItemResult OfflinePageModelImplTest::GetAllPages() { |
- MultipleOfflinePageItemResult result; |
- model()->GetAllPages( |
- base::Bind(&OfflinePageModelImplTest::OnGetMultipleOfflinePageItemsResult, |
- AsWeakPtr(), base::Unretained(&result))); |
- PumpLoop(); |
- return result; |
-} |
- |
-MultipleOfflinePageItemResult OfflinePageModelImplTest::GetPagesByClientIds( |
- const std::vector<ClientId>& client_ids) { |
- MultipleOfflinePageItemResult result; |
- model()->GetPagesByClientIds( |
- client_ids, |
- base::Bind(&OfflinePageModelImplTest::OnGetMultipleOfflinePageItemsResult, |
- AsWeakPtr(), base::Unretained(&result))); |
- PumpLoop(); |
- return result; |
-} |
- |
-void OfflinePageModelImplTest::DeletePagesByClientIds( |
- const std::vector<ClientId>& client_ids) { |
- model()->DeletePagesByClientIds( |
- client_ids, |
- base::Bind(&OfflinePageModelImplTest::OnDeletePageDone, AsWeakPtr())); |
- PumpLoop(); |
-} |
- |
-CheckPagesExistOfflineResult OfflinePageModelImplTest::CheckPagesExistOffline( |
- std::set<GURL> pages) { |
- model()->CheckPagesExistOffline( |
- pages, base::Bind(&OfflinePageModelImplTest::OnCheckPagesExistOfflineDone, |
- AsWeakPtr())); |
- PumpLoop(); |
- return last_pages_exist_result_; |
-} |
- |
-MultipleOfflineIdResult OfflinePageModelImplTest::GetOfflineIdsForClientId( |
- const ClientId& client_id) { |
- MultipleOfflineIdResult result; |
- model()->GetOfflineIdsForClientId( |
- client_id, |
- base::Bind(&OfflinePageModelImplTest::OnGetOfflineIdsForClientIdDone, |
- AsWeakPtr(), base::Unretained(&result))); |
- PumpLoop(); |
- return result; |
-} |
- |
-void OfflinePageModelImplTest::OnGetOfflineIdsForClientIdDone( |
- MultipleOfflineIdResult* storage, |
- const MultipleOfflineIdResult& result) { |
- *storage = result; |
-} |
- |
-std::unique_ptr<OfflinePageItem> OfflinePageModelImplTest::GetPageByOfflineId( |
- int64_t offline_id) { |
- std::unique_ptr<OfflinePageItem> result = nullptr; |
- model()->GetPageByOfflineId( |
- offline_id, |
- base::Bind(&OfflinePageModelImplTest::OnGetSingleOfflinePageItemResult, |
- AsWeakPtr(), base::Unretained(&result))); |
- PumpLoop(); |
- return result; |
-} |
- |
-void OfflinePageModelImplTest::OnGetSingleOfflinePageItemResult( |
- std::unique_ptr<OfflinePageItem>* storage, |
- const OfflinePageItem* result) { |
- if (result == nullptr) { |
- storage->reset(nullptr); |
- return; |
- } |
- |
- *storage = base::MakeUnique<OfflinePageItem>(*result); |
-} |
- |
-void OfflinePageModelImplTest::OnGetMultipleOfflinePageItemsResult( |
- MultipleOfflinePageItemResult* storage, |
- const MultipleOfflinePageItemResult& result) { |
- *storage = result; |
-} |
- |
-void OfflinePageModelImplTest::OnPagesExpired(bool result) { |
- last_expire_page_result_ = result; |
-} |
- |
-MultipleOfflinePageItemResult OfflinePageModelImplTest::GetPagesByFinalURL( |
- const GURL& url) { |
- MultipleOfflinePageItemResult result; |
- model()->GetPagesByURL( |
- url, |
- OfflinePageModel::URLSearchMode::SEARCH_BY_FINAL_URL_ONLY, |
- base::Bind(&OfflinePageModelImplTest::OnGetMultipleOfflinePageItemsResult, |
- AsWeakPtr(), base::Unretained(&result))); |
- PumpLoop(); |
- return result; |
-} |
- |
-MultipleOfflinePageItemResult OfflinePageModelImplTest::GetPagesByAllURLS( |
- const GURL& url) { |
- MultipleOfflinePageItemResult result; |
- model()->GetPagesByURL( |
- url, |
- OfflinePageModel::URLSearchMode::SEARCH_BY_ALL_URLS, |
- base::Bind(&OfflinePageModelImplTest::OnGetMultipleOfflinePageItemsResult, |
- AsWeakPtr(), base::Unretained(&result))); |
- PumpLoop(); |
- return result; |
-} |
- |
-bool OfflinePageModelImplTest::HasPages(std::string name_space) { |
- MultipleOfflinePageItemResult all_pages = GetAllPages(); |
- for (const auto& page : all_pages) { |
- if (page.client_id.name_space == name_space) |
- return true; |
- } |
- |
- return false; |
-} |
- |
-TEST_F(OfflinePageModelImplTest, SavePageSuccessful) { |
- EXPECT_FALSE(HasPages(kTestClientNamespace)); |
- |
- std::unique_ptr<OfflinePageTestArchiver> archiver(BuildArchiver( |
- kTestUrl, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)); |
- SavePageWithArchiverAsync( |
- kTestUrl, kTestClientId1, kTestUrl2, std::move(archiver)); |
- PumpLoop(); |
- EXPECT_TRUE(HasPages(kTestClientNamespace)); |
- |
- OfflinePageTestStore* store = GetStore(); |
- EXPECT_EQ(kTestUrl, store->last_saved_page().url); |
- EXPECT_EQ(kTestClientId1.id, store->last_saved_page().client_id.id); |
- EXPECT_EQ(kTestClientId1.name_space, |
- store->last_saved_page().client_id.name_space); |
- // Save last_archiver_path since it will be referred to later. |
- base::FilePath archiver_path = last_archiver_path(); |
- EXPECT_EQ(archiver_path, store->last_saved_page().file_path); |
- EXPECT_EQ(kTestFileSize, store->last_saved_page().file_size); |
- EXPECT_EQ(SavePageResult::SUCCESS, last_save_result()); |
- ResetResults(); |
- |
- const std::vector<OfflinePageItem>& offline_pages = GetAllPages(); |
- |
- ASSERT_EQ(1UL, offline_pages.size()); |
- EXPECT_EQ(kTestUrl, offline_pages[0].url); |
- EXPECT_EQ(kTestClientId1.id, offline_pages[0].client_id.id); |
- EXPECT_EQ(kTestClientId1.name_space, offline_pages[0].client_id.name_space); |
- EXPECT_EQ(archiver_path, offline_pages[0].file_path); |
- EXPECT_EQ(kTestFileSize, offline_pages[0].file_size); |
- EXPECT_EQ(0, offline_pages[0].access_count); |
- EXPECT_EQ(0, offline_pages[0].flags); |
- EXPECT_EQ(kTestTitle, offline_pages[0].title); |
- EXPECT_EQ(kTestUrl2, offline_pages[0].original_url); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, SavePageOfflineArchiverCancelled) { |
- SavePageWithArchiverResult( |
- kTestUrl, kTestClientId1, |
- OfflinePageArchiver::ArchiverResult::ERROR_CANCELED); |
- EXPECT_EQ(SavePageResult::CANCELLED, last_save_result()); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, SavePageOfflineArchiverDeviceFull) { |
- SavePageWithArchiverResult( |
- kTestUrl, kTestClientId1, |
- OfflinePageArchiver::ArchiverResult::ERROR_DEVICE_FULL); |
- EXPECT_EQ(SavePageResult::DEVICE_FULL, last_save_result()); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, SavePageOfflineArchiverContentUnavailable) { |
- SavePageWithArchiverResult( |
- kTestUrl, kTestClientId1, |
- OfflinePageArchiver::ArchiverResult::ERROR_CONTENT_UNAVAILABLE); |
- EXPECT_EQ(SavePageResult::CONTENT_UNAVAILABLE, last_save_result()); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, SavePageOfflineCreationFailed) { |
- SavePageWithArchiverResult( |
- kTestUrl, kTestClientId1, |
- OfflinePageArchiver::ArchiverResult::ERROR_ARCHIVE_CREATION_FAILED); |
- EXPECT_EQ(SavePageResult::ARCHIVE_CREATION_FAILED, last_save_result()); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, SavePageOfflineArchiverReturnedWrongUrl) { |
- std::unique_ptr<OfflinePageTestArchiver> archiver( |
- BuildArchiver(GURL("http://other.random.url.com"), |
- OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)); |
- SavePageWithArchiver(kTestUrl, kTestClientId1, std::move(archiver)); |
- EXPECT_EQ(SavePageResult::ARCHIVE_CREATION_FAILED, last_save_result()); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, SavePageOfflineCreationStoreWriteFailure) { |
- GetStore()->set_test_scenario( |
- OfflinePageTestStore::TestScenario::WRITE_FAILED); |
- SavePageWithArchiverResult( |
- kTestUrl, kTestClientId1, |
- OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED); |
- EXPECT_EQ(SavePageResult::STORE_FAILURE, last_save_result()); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, SavePageLocalFileFailed) { |
- // Don't create archiver since it will not be needed for pages that are not |
- // going to be saved. |
- SavePageWithArchiver( |
- kFileUrl, kTestClientId1, std::unique_ptr<OfflinePageTestArchiver>()); |
- EXPECT_EQ(SavePageResult::SKIPPED, last_save_result()); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, SavePageOfflineArchiverTwoPages) { |
- std::unique_ptr<OfflinePageTestArchiver> archiver(BuildArchiver( |
- kTestUrl, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)); |
- // archiver_ptr will be valid until after first PumpLoop() call after |
- // CompleteCreateArchive() is called. |
- OfflinePageTestArchiver* archiver_ptr = archiver.get(); |
- archiver_ptr->set_delayed(true); |
- SavePageWithArchiverAsync( |
- kTestUrl, kTestClientId1, GURL(), std::move(archiver)); |
- EXPECT_TRUE(archiver_ptr->create_archive_called()); |
- |
- // Request to save another page. |
- SavePage(kTestUrl2, kTestClientId2); |
- |
- OfflinePageTestStore* store = GetStore(); |
- |
- EXPECT_EQ(kTestUrl2, store->last_saved_page().url); |
- EXPECT_EQ(kTestClientId2, store->last_saved_page().client_id); |
- base::FilePath archiver_path2 = last_archiver_path(); |
- EXPECT_EQ(archiver_path2, store->last_saved_page().file_path); |
- EXPECT_EQ(kTestFileSize, store->last_saved_page().file_size); |
- EXPECT_EQ(SavePageResult::SUCCESS, last_save_result()); |
- |
- ResetResults(); |
- |
- archiver_ptr->CompleteCreateArchive(); |
- // After this pump loop archiver_ptr is invalid. |
- PumpLoop(); |
- |
- EXPECT_EQ(kTestUrl, store->last_saved_page().url); |
- EXPECT_EQ(kTestClientId1, store->last_saved_page().client_id); |
- base::FilePath archiver_path = last_archiver_path(); |
- EXPECT_EQ(archiver_path, store->last_saved_page().file_path); |
- EXPECT_EQ(kTestFileSize, store->last_saved_page().file_size); |
- EXPECT_EQ(SavePageResult::SUCCESS, last_save_result()); |
- |
- ResetResults(); |
- |
- const std::vector<OfflinePageItem>& offline_pages = GetAllPages(); |
- |
- EXPECT_EQ(2UL, offline_pages.size()); |
- // Offline IDs are random, so the order of the pages is also random |
- // So load in the right page for the validation below. |
- const OfflinePageItem* page1 = nullptr; |
- const OfflinePageItem* page2 = nullptr; |
- if (offline_pages[0].client_id == kTestClientId1) { |
- page1 = &offline_pages[0]; |
- page2 = &offline_pages[1]; |
- } else { |
- page1 = &offline_pages[1]; |
- page2 = &offline_pages[0]; |
- } |
- |
- EXPECT_EQ(kTestUrl, page1->url); |
- EXPECT_EQ(kTestClientId1, page1->client_id); |
- EXPECT_EQ(archiver_path, page1->file_path); |
- EXPECT_EQ(kTestFileSize, page1->file_size); |
- EXPECT_EQ(0, page1->access_count); |
- EXPECT_EQ(0, page1->flags); |
- EXPECT_EQ(kTestUrl2, page2->url); |
- EXPECT_EQ(kTestClientId2, page2->client_id); |
- EXPECT_EQ(archiver_path2, page2->file_path); |
- EXPECT_EQ(kTestFileSize, page2->file_size); |
- EXPECT_EQ(0, page2->access_count); |
- EXPECT_EQ(0, page2->flags); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, MarkPageAccessed) { |
- SavePage(kTestUrl, kTestClientId1); |
- |
- // This will increase access_count by one. |
- model()->MarkPageAccessed(last_save_offline_id()); |
- PumpLoop(); |
- |
- const std::vector<OfflinePageItem>& offline_pages = GetAllPages(); |
- |
- EXPECT_EQ(1UL, offline_pages.size()); |
- EXPECT_EQ(kTestUrl, offline_pages[0].url); |
- EXPECT_EQ(kTestClientId1, offline_pages[0].client_id); |
- EXPECT_EQ(kTestFileSize, offline_pages[0].file_size); |
- EXPECT_EQ(1, offline_pages[0].access_count); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, GetAllPagesStoreEmpty) { |
- const std::vector<OfflinePageItem>& offline_pages = GetAllPages(); |
- |
- EXPECT_EQ(0UL, offline_pages.size()); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, DeletePageSuccessful) { |
- OfflinePageTestStore* store = GetStore(); |
- |
- // Save one page. |
- SavePage(kTestUrl, kTestClientId1); |
- int64_t offline1 = last_save_offline_id(); |
- EXPECT_EQ(SavePageResult::SUCCESS, last_save_result()); |
- EXPECT_EQ(1u, store->GetAllPages().size()); |
- |
- ResetResults(); |
- |
- // Save another page. |
- SavePage(kTestUrl2, kTestClientId2); |
- int64_t offline2 = last_save_offline_id(); |
- EXPECT_EQ(SavePageResult::SUCCESS, last_save_result()); |
- EXPECT_EQ(2u, store->GetAllPages().size()); |
- |
- ResetResults(); |
- |
- // Delete one page. |
- DeletePage(offline1, base::Bind(&OfflinePageModelImplTest::OnDeletePageDone, |
- AsWeakPtr())); |
- |
- PumpLoop(); |
- |
- EXPECT_EQ(last_deleted_offline_id(), offline1); |
- EXPECT_EQ(last_deleted_client_id(), kTestClientId1); |
- EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_result()); |
- ASSERT_EQ(1u, store->GetAllPages().size()); |
- EXPECT_EQ(kTestUrl2, store->GetAllPages()[0].url); |
- |
- // Delete another page. |
- DeletePage(offline2, base::Bind(&OfflinePageModelImplTest::OnDeletePageDone, |
- AsWeakPtr())); |
- |
- ResetResults(); |
- |
- PumpLoop(); |
- |
- EXPECT_EQ(last_deleted_offline_id(), offline2); |
- EXPECT_EQ(last_deleted_client_id(), kTestClientId2); |
- EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_result()); |
- EXPECT_EQ(0u, store->GetAllPages().size()); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, DeleteCachedPageByPredicateUserRequested) { |
- OfflinePageTestStore* store = GetStore(); |
- |
- // Save one page. |
- SavePage(kTestUrl, kTestClientId1); |
- int64_t offline1 = last_save_offline_id(); |
- EXPECT_EQ(SavePageResult::SUCCESS, last_save_result()); |
- EXPECT_EQ(1u, store->GetAllPages().size()); |
- |
- ResetResults(); |
- |
- // Save an user-requested page in same domain. |
- SavePage(kTestUrl, kTestUserRequestedClientId); |
- int64_t offline2 = last_save_offline_id(); |
- EXPECT_EQ(SavePageResult::SUCCESS, last_save_result()); |
- EXPECT_EQ(2u, store->GetAllPages().size()); |
- |
- ResetResults(); |
- |
- // Delete the second page. |
- model()->DeleteCachedPagesByURLPredicate( |
- base::Bind(&URLSpecContains, "example.com"), |
- base::Bind(&OfflinePageModelImplTest::OnDeletePageDone, AsWeakPtr())); |
- |
- PumpLoop(); |
- |
- EXPECT_EQ(last_deleted_offline_id(), offline1); |
- EXPECT_EQ(last_deleted_client_id(), kTestClientId1); |
- EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_result()); |
- ASSERT_EQ(1u, store->GetAllPages().size()); |
- EXPECT_EQ(kTestUrl, store->GetAllPages()[0].url); |
- EXPECT_EQ(offline2, store->GetAllPages()[0].offline_id); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, DeleteCachedPageByPredicate) { |
- OfflinePageTestStore* store = GetStore(); |
- |
- // Save one page. |
- SavePage(kTestUrl, kTestClientId1); |
- int64_t offline1 = last_save_offline_id(); |
- EXPECT_EQ(SavePageResult::SUCCESS, last_save_result()); |
- EXPECT_EQ(1u, store->GetAllPages().size()); |
- |
- ResetResults(); |
- |
- // Save another page. |
- SavePage(kTestUrl2, kTestClientId2); |
- int64_t offline2 = last_save_offline_id(); |
- EXPECT_EQ(SavePageResult::SUCCESS, last_save_result()); |
- EXPECT_EQ(2u, store->GetAllPages().size()); |
- |
- ResetResults(); |
- |
- // Delete the second page. |
- model()->DeleteCachedPagesByURLPredicate( |
- base::Bind(&URLSpecContains, "page.com"), |
- base::Bind(&OfflinePageModelImplTest::OnDeletePageDone, AsWeakPtr())); |
- |
- PumpLoop(); |
- |
- EXPECT_EQ(last_deleted_offline_id(), offline2); |
- EXPECT_EQ(last_deleted_client_id(), kTestClientId2); |
- EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_result()); |
- ASSERT_EQ(1u, store->GetAllPages().size()); |
- EXPECT_EQ(kTestUrl, store->GetAllPages()[0].url); |
- |
- ResetResults(); |
- |
- // Delete the first page. |
- model()->DeleteCachedPagesByURLPredicate( |
- base::Bind(&URLSpecContains, "example.com"), |
- base::Bind(&OfflinePageModelImplTest::OnDeletePageDone, AsWeakPtr())); |
- |
- PumpLoop(); |
- |
- EXPECT_EQ(last_deleted_offline_id(), offline1); |
- EXPECT_EQ(last_deleted_client_id(), kTestClientId1); |
- EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_result()); |
- EXPECT_EQ(0u, store->GetAllPages().size()); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, DeletePageNotFound) { |
- DeletePage(1234LL, base::Bind(&OfflinePageModelImplTest::OnDeletePageDone, |
- AsWeakPtr())); |
- PumpLoop(); |
- |
- EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_result()); |
- |
- ResetResults(); |
- |
- model()->DeleteCachedPagesByURLPredicate( |
- base::Bind(&URLSpecContains, "page.com"), |
- base::Bind(&OfflinePageModelImplTest::OnDeletePageDone, AsWeakPtr())); |
- PumpLoop(); |
- |
- EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_result()); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, DeletePageStoreFailureOnRemove) { |
- // Save a page. |
- SavePage(kTestUrl, kTestClientId1); |
- int64_t offline_id = last_save_offline_id(); |
- ResetResults(); |
- |
- // Try to delete this page. |
- GetStore()->set_test_scenario( |
- OfflinePageTestStore::TestScenario::REMOVE_FAILED); |
- DeletePage(offline_id, base::Bind(&OfflinePageModelImplTest::OnDeletePageDone, |
- AsWeakPtr())); |
- PumpLoop(); |
- EXPECT_EQ(DeletePageResult::STORE_FAILURE, last_delete_result()); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, DetectThatOfflineCopyIsMissing) { |
- // Save a page. |
- SavePage(kTestUrl, kTestClientId1); |
- int64_t offline_id = last_save_offline_id(); |
- |
- ResetResults(); |
- |
- std::unique_ptr<OfflinePageItem> page = GetPageByOfflineId(offline_id); |
- |
- // Delete the offline copy of the page. |
- base::DeleteFile(page->file_path, false); |
- |
- // Resetting the model will cause a consistency check. |
- ResetModel(); |
- |
- PumpLoop(); |
- |
- // Check if the page has been expired. |
- EXPECT_EQ(0UL, GetAllPages().size()); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, DetectThatOfflineCopyIsMissingAfterLoad) { |
- // Save a page. |
- SavePage(kTestUrl, kTestClientId1); |
- PumpLoop(); |
- int64_t offline_id = last_save_offline_id(); |
- |
- ResetResults(); |
- |
- std::unique_ptr<OfflinePageItem> page = GetPageByOfflineId(offline_id); |
- // Delete the offline copy of the page and check the metadata. |
- base::DeleteFile(page->file_path, false); |
- // Reseting the model should trigger the metadata consistency check as well. |
- ResetModel(); |
- PumpLoop(); |
- |
- // Check if the page has been expired. |
- EXPECT_EQ(0UL, GetAllPages().size()); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, DetectThatHeadlessPageIsDeleted) { |
- // Save a page. |
- SavePage(kTestUrl, kTestClientId1); |
- PumpLoop(); |
- int64_t offline_id = last_save_offline_id(); |
- |
- ResetResults(); |
- std::unique_ptr<OfflinePageItem> page = GetPageByOfflineId(offline_id); |
- base::FilePath path = page->file_path; |
- EXPECT_TRUE(base::PathExists(path)); |
- GetStore()->ClearAllPages(); |
- |
- EXPECT_TRUE(base::PathExists(path)); |
- // Since we've manually changed the store, we have to reload the model to |
- // actually refresh the in-memory copy in model. Otherwise GetAllPages() would |
- // still have the page we saved above. |
- ResetModel(); |
- PumpLoop(); |
- |
- EXPECT_EQ(0UL, GetAllPages().size()); |
- EXPECT_FALSE(base::PathExists(path)); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, DeleteMultiplePages) { |
- OfflinePageTestStore* store = GetStore(); |
- |
- // Save 3 pages. |
- SavePage(kTestUrl, kTestClientId1); |
- int64_t offline1 = last_save_offline_id(); |
- |
- SavePage(kTestUrl2, kTestClientId2); |
- int64_t offline2 = last_save_offline_id(); |
- |
- SavePage(kTestUrl3, kTestClientId3); |
- PumpLoop(); |
- |
- EXPECT_EQ(3u, store->GetAllPages().size()); |
- |
- // Delete multiple pages. |
- std::vector<int64_t> ids_to_delete; |
- ids_to_delete.push_back(offline2); |
- ids_to_delete.push_back(offline1); |
- ids_to_delete.push_back(23434LL); // Non-existent ID. |
- model()->DeletePagesByOfflineId( |
- ids_to_delete, |
- base::Bind(&OfflinePageModelImplTest::OnDeletePageDone, AsWeakPtr())); |
- PumpLoop(); |
- |
- // Success is expected if at least one page is deleted successfully. |
- EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_result()); |
- EXPECT_EQ(1u, store->GetAllPages().size()); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, GetPageByOfflineId) { |
- SavePage(kTestUrl, kTestClientId1); |
- int64_t offline1 = last_save_offline_id(); |
- SavePage(kTestUrl2, kTestClientId2); |
- int64_t offline2 = last_save_offline_id(); |
- |
- std::unique_ptr<OfflinePageItem> page = GetPageByOfflineId(offline1); |
- ASSERT_TRUE(page); |
- EXPECT_EQ(kTestUrl, page->url); |
- EXPECT_EQ(kTestClientId1, page->client_id); |
- EXPECT_EQ(kTestFileSize, page->file_size); |
- |
- page = GetPageByOfflineId(offline2); |
- ASSERT_TRUE(page); |
- EXPECT_EQ(kTestUrl2, page->url); |
- EXPECT_EQ(kTestClientId2, page->client_id); |
- EXPECT_EQ(kTestFileSize, page->file_size); |
- |
- page = GetPageByOfflineId(-42); |
- EXPECT_FALSE(page); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, GetPagesByFinalURL) { |
- SavePage(kTestUrl, kTestClientId1); |
- SavePage(kTestUrl2, kTestClientId2); |
- |
- MultipleOfflinePageItemResult pages = GetPagesByFinalURL(kTestUrl2); |
- EXPECT_EQ(1U, pages.size()); |
- EXPECT_EQ(kTestUrl2, pages[0].url); |
- EXPECT_EQ(kTestClientId2, pages[0].client_id); |
- |
- pages = GetPagesByFinalURL(kTestUrl); |
- EXPECT_EQ(1U, pages.size()); |
- EXPECT_EQ(kTestUrl, pages[0].url); |
- EXPECT_EQ(kTestClientId1, pages[0].client_id); |
- |
- pages = GetPagesByFinalURL(GURL("http://foo")); |
- EXPECT_EQ(0U, pages.size()); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, GetPagesByFinalURLWithFragmentStripped) { |
- SavePage(kTestUrl, kTestClientId1); |
- SavePage(kTestUrl2WithFragment, kTestClientId2); |
- |
- MultipleOfflinePageItemResult pages = |
- GetPagesByFinalURL(kTestUrlWithFragment); |
- EXPECT_EQ(1U, pages.size()); |
- EXPECT_EQ(kTestUrl, pages[0].url); |
- EXPECT_EQ(kTestClientId1, pages[0].client_id); |
- |
- pages = GetPagesByFinalURL(kTestUrl2); |
- EXPECT_EQ(1U, pages.size()); |
- EXPECT_EQ(kTestUrl2WithFragment, pages[0].url); |
- EXPECT_EQ(kTestClientId2, pages[0].client_id); |
- |
- pages = GetPagesByFinalURL(kTestUrl2WithFragment2); |
- EXPECT_EQ(1U, pages.size()); |
- EXPECT_EQ(kTestUrl2WithFragment, pages[0].url); |
- EXPECT_EQ(kTestClientId2, pages[0].client_id); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, GetPagesByAllURLS) { |
- std::unique_ptr<OfflinePageTestArchiver> archiver(BuildArchiver( |
- kTestUrl, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)); |
- SavePageWithArchiverAsync( |
- kTestUrl, kTestClientId1, kTestUrl2, std::move(archiver)); |
- PumpLoop(); |
- |
- SavePage(kTestUrl2, kTestClientId2); |
- |
- MultipleOfflinePageItemResult pages = GetPagesByAllURLS(kTestUrl2); |
- ASSERT_EQ(2U, pages.size()); |
- // Validates the items regardless their order. |
- int i = -1; |
- if (pages[0].url == kTestUrl2) |
- i = 0; |
- else if (pages[1].url == kTestUrl2) |
- i = 1; |
- ASSERT_NE(-1, i); |
- EXPECT_EQ(kTestUrl2, pages[i].url); |
- EXPECT_EQ(kTestClientId2, pages[i].client_id); |
- EXPECT_EQ(GURL(), pages[i].original_url); |
- EXPECT_EQ(kTestUrl, pages[1 - i].url); |
- EXPECT_EQ(kTestClientId1, pages[1 - i].client_id); |
- EXPECT_EQ(kTestUrl2, pages[1 - i].original_url); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, CheckPagesExistOffline) { |
- SavePage(kTestUrl, kTestClientId1); |
- SavePage(kTestUrl2, kTestClientId2); |
- |
- // TODO(dewittj): Remove the "Last N" restriction in favor of a better query |
- // interface. See https://crbug.com/622763 for information. |
- const ClientId last_n_client_id(kLastNNamespace, "1234"); |
- SavePage(kTestUrl3, last_n_client_id); |
- |
- std::set<GURL> input; |
- input.insert(kTestUrl); |
- input.insert(kTestUrl2); |
- input.insert(kTestUrl3); |
- input.insert(kTestUrl4); |
- |
- CheckPagesExistOfflineResult existing_pages = CheckPagesExistOffline(input); |
- EXPECT_EQ(2U, existing_pages.size()); |
- EXPECT_NE(existing_pages.end(), existing_pages.find(kTestUrl)); |
- EXPECT_NE(existing_pages.end(), existing_pages.find(kTestUrl2)); |
- EXPECT_EQ(existing_pages.end(), existing_pages.find(kTestUrl3)); |
- EXPECT_EQ(existing_pages.end(), existing_pages.find(kTestUrl4)); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, CanSaveURL) { |
- EXPECT_TRUE(OfflinePageModel::CanSaveURL(GURL("http://foo"))); |
- EXPECT_TRUE(OfflinePageModel::CanSaveURL(GURL("https://foo"))); |
- EXPECT_FALSE(OfflinePageModel::CanSaveURL(GURL("file:///foo"))); |
- EXPECT_FALSE(OfflinePageModel::CanSaveURL(GURL("data:image/png;base64,ab"))); |
- EXPECT_FALSE(OfflinePageModel::CanSaveURL(GURL("chrome://version"))); |
- EXPECT_FALSE(OfflinePageModel::CanSaveURL(GURL("chrome-native://newtab/"))); |
- EXPECT_FALSE(OfflinePageModel::CanSaveURL(GURL("/invalid/url.mhtml"))); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, SaveRetrieveMultipleClientIds) { |
- EXPECT_FALSE(HasPages(kTestClientNamespace)); |
- SavePage(kTestUrl, kTestClientId1); |
- int64_t offline1 = last_save_offline_id(); |
- EXPECT_TRUE(HasPages(kTestClientNamespace)); |
- |
- SavePage(kTestUrl2, kTestClientId1); |
- int64_t offline2 = last_save_offline_id(); |
- |
- EXPECT_NE(offline1, offline2); |
- |
- const std::vector<int64_t> ids = GetOfflineIdsForClientId(kTestClientId1); |
- |
- EXPECT_EQ(2UL, ids.size()); |
- |
- std::set<int64_t> id_set; |
- for (size_t i = 0; i < ids.size(); i++) { |
- id_set.insert(ids[i]); |
- } |
- |
- EXPECT_TRUE(id_set.find(offline1) != id_set.end()); |
- EXPECT_TRUE(id_set.find(offline2) != id_set.end()); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, SaveMultiplePagesWithSameURLBySameClientId) { |
- EXPECT_FALSE(HasPages(kTestClientNamespace)); |
- SavePage(kTestUrl, kTestClientId1); |
- int64_t offline1 = last_save_offline_id(); |
- EXPECT_TRUE(HasPages(kTestClientNamespace)); |
- |
- SavePage(kTestUrl, kTestClientId1); |
- int64_t offline2 = last_save_offline_id(); |
- |
- EXPECT_NE(offline1, offline2); |
- |
- const std::vector<int64_t> ids = GetOfflineIdsForClientId(kTestClientId1); |
- |
- EXPECT_EQ(1UL, ids.size()); |
- |
- std::set<int64_t> id_set; |
- for (size_t i = 0; i < ids.size(); i++) { |
- id_set.insert(ids[i]); |
- } |
- |
- EXPECT_TRUE(id_set.find(offline2) != id_set.end()); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, DownloadMetrics) { |
- EXPECT_FALSE(HasPages(kUserRequestedNamespace)); |
- SavePage(kTestUrl, kTestUserRequestedClientId); |
- histograms().ExpectUniqueSample( |
- "OfflinePages.DownloadSavedPageDuplicateCount", 1, 1); |
- FastForwardBy(base::TimeDelta::FromMinutes(1)); |
- histograms().ExpectTotalCount( |
- "OfflinePages.DownloadSavedPageTimeSinceDuplicateSaved", 0); |
- SavePage(kTestUrl, kTestUserRequestedClientId); |
- histograms().ExpectTotalCount("OfflinePages.DownloadSavedPageDuplicateCount", |
- 2); |
- histograms().ExpectBucketCount("OfflinePages.DownloadSavedPageDuplicateCount", |
- 2, 1); |
- histograms().ExpectBucketCount("OfflinePages.DownloadSavedPageDuplicateCount", |
- 1, 1); |
- histograms().ExpectTotalCount( |
- "OfflinePages.DownloadSavedPageTimeSinceDuplicateSaved", 1); |
- histograms().ExpectTotalCount( |
- "OfflinePages.DownloadDeletedPageDuplicateCount", 0); |
- |
- // void DeletePage(int64_t offline_id, const DeletePageCallback& callback) { |
- const std::vector<int64_t> ids = |
- GetOfflineIdsForClientId(kTestUserRequestedClientId); |
- ASSERT_EQ(2U, ids.size()); |
- |
- DeletePage(ids[0], base::Bind(&OfflinePageModelImplTest::OnDeletePageDone, |
- AsWeakPtr())); |
- PumpLoop(); |
- histograms().ExpectUniqueSample( |
- "OfflinePages.DownloadDeletedPageDuplicateCount", 2, 1); |
- DeletePage(ids[1], base::Bind(&OfflinePageModelImplTest::OnDeletePageDone, |
- AsWeakPtr())); |
- PumpLoop(); |
- // No change when we delete the last page. |
- histograms().ExpectTotalCount( |
- "OfflinePages.DownloadDeletedPageDuplicateCount", 2); |
- histograms().ExpectBucketCount( |
- "OfflinePages.DownloadDeletedPageDuplicateCount", 1, 1); |
- histograms().ExpectBucketCount( |
- "OfflinePages.DownloadDeletedPageDuplicateCount", 2, 1); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, ExpirePages) { |
- // We will save 3 pages and then expire 2 of them. |
- std::pair<SavePageResult, int64_t> saved_pages[3]; |
- saved_pages[0] = SavePage(kTestUrl, kTestClientId1); |
- saved_pages[1] = SavePage(kTestUrl2, kTestClientId2); |
- saved_pages[2] = SavePage(kTestUrl3, kTestClientId3); |
- |
- for (const auto& save_result : saved_pages) { |
- ASSERT_EQ(OfflinePageModel::SavePageResult::SUCCESS, |
- std::get<0>(save_result)); |
- } |
- |
- // First two pages will be expired. |
- std::vector<int64_t> pages_to_expire = {std::get<1>(saved_pages[0]), |
- std::get<1>(saved_pages[1])}; |
- // Pages are marked as expired if they have an expiration_time set. |
- base::Time expiration_time = |
- base::Time::Now() + base::TimeDelta::FromMinutes(5); |
- |
- model()->ExpirePages( |
- pages_to_expire, expiration_time, |
- base::Bind(&OfflinePageModelImplTest::OnPagesExpired, AsWeakPtr())); |
- PumpLoop(); |
- |
- const std::vector<OfflinePageItem>& offline_pages = GetAllPages(); |
- for (const auto& offline_page : offline_pages) { |
- if (std::find(pages_to_expire.begin(), pages_to_expire.end(), |
- offline_page.offline_id) != pages_to_expire.end()) { |
- EXPECT_EQ(expiration_time, offline_page.expiration_time); |
- EXPECT_TRUE(offline_page.IsExpired()); |
- } else { |
- EXPECT_EQ(base::Time(), offline_page.expiration_time); |
- EXPECT_FALSE(offline_page.IsExpired()); |
- } |
- } |
- EXPECT_TRUE(last_expire_page_result()); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, GetPagesByClientIds) { |
- // We will save 3 pages. One will be expired. |
- std::pair<SavePageResult, int64_t> saved_pages[3]; |
- saved_pages[0] = SavePage(kTestUrl, kTestClientId1); |
- saved_pages[1] = SavePage(kTestUrl2, kTestClientId2); |
- saved_pages[2] = SavePage(kTestUrl3, kTestClientId3); |
- |
- for (const auto& save_result : saved_pages) { |
- ASSERT_EQ(OfflinePageModel::SavePageResult::SUCCESS, |
- std::get<0>(save_result)); |
- } |
- |
- std::vector<int64_t> pages_to_expire = {std::get<1>(saved_pages[0])}; |
- // Pages are marked as expired if they have an expiration_time set. |
- base::Time expiration_time = |
- base::Time::Now() + base::TimeDelta::FromMinutes(5); |
- model()->ExpirePages( |
- pages_to_expire, expiration_time, |
- base::Bind(&OfflinePageModelImplTest::OnPagesExpired, AsWeakPtr())); |
- PumpLoop(); |
- |
- std::vector<ClientId> client_ids = {kTestClientId1, kTestClientId2}; |
- std::vector<OfflinePageItem> offline_pages = GetPagesByClientIds(client_ids); |
- EXPECT_EQ(1U, offline_pages.size()); |
- |
- const OfflinePageItem& item = offline_pages[0]; |
- EXPECT_EQ(kTestClientId2.name_space, item.client_id.name_space); |
- EXPECT_EQ(kTestClientId2.id, item.client_id.id); |
- EXPECT_EQ(kTestUrl2, item.url); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, DeletePagesByClientIds) { |
- // We will save 3 pages. |
- std::pair<SavePageResult, int64_t> saved_pages[3]; |
- saved_pages[0] = SavePage(kTestUrl, kTestClientId1); |
- saved_pages[1] = SavePage(kTestUrl2, kTestClientId2); |
- saved_pages[2] = SavePage(kTestUrl3, kTestClientId3); |
- |
- for (const auto& save_result : saved_pages) { |
- ASSERT_EQ(OfflinePageModel::SavePageResult::SUCCESS, |
- std::get<0>(save_result)); |
- } |
- |
- std::vector<ClientId> client_ids = {kTestClientId1, kTestClientId2}; |
- DeletePagesByClientIds(client_ids); |
- std::vector<OfflinePageItem> offline_pages = GetAllPages(); |
- ASSERT_EQ(1U, offline_pages.size()); |
- |
- const OfflinePageItem& item = offline_pages[0]; |
- EXPECT_EQ(kTestClientId3.name_space, item.client_id.name_space); |
- EXPECT_EQ(kTestClientId3.id, item.client_id.id); |
- EXPECT_EQ(kTestUrl3, item.url); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, CustomTabsNamespace) { |
- SavePage(kTestUrl, ClientId(kCCTNamespace, "123")); |
- std::string histogram_name = "OfflinePages.SavePageResult."; |
- histogram_name += kCCTNamespace; |
- |
- histograms().ExpectUniqueSample(histogram_name, |
- static_cast<int>(SavePageResult::SUCCESS), 1); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, DownloadNamespace) { |
- SavePage(kTestUrl, ClientId(kDownloadNamespace, "123")); |
- std::string histogram_name = "OfflinePages.SavePageResult."; |
- histogram_name += kDownloadNamespace; |
- |
- histograms().ExpectUniqueSample(histogram_name, |
- static_cast<int>(SavePageResult::SUCCESS), 1); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, NewTabPageNamespace) { |
- SavePage(kTestUrl, ClientId(kNTPSuggestionsNamespace, "123")); |
- std::string histogram_name = "OfflinePages.SavePageResult."; |
- histogram_name += kNTPSuggestionsNamespace; |
- |
- histograms().ExpectUniqueSample(histogram_name, |
- static_cast<int>(SavePageResult::SUCCESS), 1); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, StoreResetSuccessful) { |
- GetStore()->set_test_scenario( |
- OfflinePageTestStore::TestScenario::LOAD_FAILED_RESET_SUCCESS); |
- ResetModel(); |
- |
- const std::vector<OfflinePageItem>& offline_pages = GetAllPages(); |
- |
- EXPECT_TRUE(model()->is_loaded()); |
- EXPECT_EQ(StoreState::LOADED, GetStore()->state()); |
- EXPECT_EQ(0UL, offline_pages.size()); |
- |
- std::pair<SavePageResult, int64_t> result = |
- SavePage(kTestUrl, ClientId(kDownloadNamespace, "123")); |
- |
- EXPECT_EQ(SavePageResult::SUCCESS, result.first); |
-} |
- |
-TEST_F(OfflinePageModelImplTest, StoreResetFailed) { |
- GetStore()->set_test_scenario( |
- OfflinePageTestStore::TestScenario::LOAD_FAILED_RESET_FAILED); |
- ResetModel(); |
- |
- const std::vector<OfflinePageItem>& offline_pages = GetAllPages(); |
- |
- EXPECT_TRUE(model()->is_loaded()); |
- EXPECT_EQ(StoreState::FAILED_RESET, GetStore()->state()); |
- EXPECT_EQ(0UL, offline_pages.size()); |
- |
- ResetResults(); |
- std::pair<SavePageResult, int64_t> result = |
- SavePage(kTestUrl, ClientId(kDownloadNamespace, "123")); |
- |
- EXPECT_EQ(SavePageResult::STORE_FAILURE, result.first); |
-} |
- |
-TEST(CommandLineFlagsTest, OfflineBookmarks) { |
- // Disabled by default. |
- EXPECT_FALSE(offline_pages::IsOfflineBookmarksEnabled()); |
- |
- // Check if feature is correctly enabled by command-line flag. |
- base::test::ScopedFeatureList scoped_feature_list; |
- scoped_feature_list.InitAndEnableFeature(kOfflineBookmarksFeature); |
- EXPECT_TRUE(offline_pages::IsOfflineBookmarksEnabled()); |
-} |
- |
-TEST(CommandLineFlagsTest, OffliningRecentPages) { |
- // Enable offline bookmarks feature first. |
- // TODO(dimich): once offline pages are enabled by default, remove this. |
- std::unique_ptr<base::test::ScopedFeatureList> scoped_feature_list( |
- new base::test::ScopedFeatureList); |
- scoped_feature_list->InitAndEnableFeature(kOfflineBookmarksFeature); |
- |
- // This feature is still disabled by default. |
- EXPECT_FALSE(offline_pages::IsOffliningRecentPagesEnabled()); |
- |
- // Check if feature is correctly enabled by command-line flag. |
- scoped_feature_list.reset(new base::test::ScopedFeatureList); |
- scoped_feature_list->InitFromCommandLine( |
- std::string(kOfflineBookmarksFeature.name) + "," + |
- kOffliningRecentPagesFeature.name, |
- ""); |
- EXPECT_TRUE(offline_pages::IsOffliningRecentPagesEnabled()); |
-} |
- |
-TEST(CommandLineFlagsTest, OfflinePagesSharing) { |
- // Enable offline bookmarks feature first. |
- // TODO(dimich): once offline pages are enabled by default, remove this. |
- std::unique_ptr<base::test::ScopedFeatureList> scoped_feature_list( |
- new base::test::ScopedFeatureList); |
- scoped_feature_list->InitAndEnableFeature(kOfflineBookmarksFeature); |
- |
- // This feature is still disabled by default. |
- EXPECT_FALSE(offline_pages::IsOfflinePagesSharingEnabled()); |
- |
- // Check if feature is correctly enabled by command-line flag. |
- scoped_feature_list.reset(new base::test::ScopedFeatureList); |
- scoped_feature_list->InitFromCommandLine( |
- std::string(kOfflineBookmarksFeature.name) + "," + |
- kOfflinePagesSharingFeature.name, |
- ""); |
- EXPECT_TRUE(offline_pages::IsOfflinePagesSharingEnabled()); |
-} |
- |
-TEST(CommandLineFlagsTest, OfflinePagesSvelteConcurrentLoading) { |
- // This feature is disabled by default. |
- EXPECT_FALSE(offline_pages::IsOfflinePagesSvelteConcurrentLoadingEnabled()); |
- |
- // Check if feature is correctly enabled by command-line flag. |
- base::test::ScopedFeatureList scoped_feature_list; |
- scoped_feature_list.InitAndEnableFeature( |
- kOfflinePagesSvelteConcurrentLoadingFeature); |
- EXPECT_TRUE(offline_pages::IsOfflinePagesSvelteConcurrentLoadingEnabled()); |
-} |
- |
-} // namespace offline_pages |