| Index: components/offline_pages/core/prefetch/prefetch_dispatcher_impl_unittest.cc
|
| diff --git a/components/offline_pages/core/prefetch/prefetch_dispatcher_impl_unittest.cc b/components/offline_pages/core/prefetch/prefetch_dispatcher_impl_unittest.cc
|
| index 846f697919381afa39cbdd7671150446390f39b1..52fbe8e8a3e30e8306023b6f2f0cafefa29c2cc1 100644
|
| --- a/components/offline_pages/core/prefetch/prefetch_dispatcher_impl_unittest.cc
|
| +++ b/components/offline_pages/core/prefetch/prefetch_dispatcher_impl_unittest.cc
|
| @@ -12,9 +12,10 @@
|
| #include "components/offline_pages/core/client_namespace_constants.h"
|
| #include "components/offline_pages/core/offline_event_logger.h"
|
| #include "components/offline_pages/core/offline_page_feature.h"
|
| -#include "components/offline_pages/core/prefetch/prefetch_in_memory_store.h"
|
| #include "components/offline_pages/core/prefetch/prefetch_service.h"
|
| +#include "components/offline_pages/core/prefetch/store/prefetch_store_command_factory.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| +#include "url/gurl.h"
|
|
|
| namespace offline_pages {
|
|
|
| @@ -31,8 +32,72 @@ class TestScopedBackgroundTask
|
| bool needs_reschedule_called = false;
|
| };
|
|
|
| +namespace {
|
| +class TestPrefetchStoreCommandFactory;
|
| +
|
| +class TestAddUrlsStoreCommand : public AddUrlsStoreCommand {
|
| + public:
|
| + TestAddUrlsStoreCommand(TestPrefetchStoreCommandFactory* factory)
|
| + : factory_(factory){};
|
| + ~TestAddUrlsStoreCommand() override{};
|
| + void Execute(const std::string& name_space,
|
| + const std::vector<PrefetchURL>& prefetch_urls,
|
| + UrlsAddedCallback callback) override;
|
| +
|
| + private:
|
| + TestPrefetchStoreCommandFactory* factory_;
|
| +};
|
| +
|
| +class TestCleanupZombiesStoreCommand : public CleanupZombiesStoreCommand {
|
| + public:
|
| + TestCleanupZombiesStoreCommand(TestPrefetchStoreCommandFactory* factory)
|
| + : factory_(factory){};
|
| + ~TestCleanupZombiesStoreCommand() override{};
|
| + void Execute(const std::string& name_space,
|
| + const std::vector<GURL>& urls_to_keep,
|
| + base::OnceCallback<void()> callback) override;
|
| +
|
| + private:
|
| + TestPrefetchStoreCommandFactory* factory_;
|
| +};
|
| +
|
| +class TestPrefetchStoreCommandFactory : public PrefetchStoreCommandFactory {
|
| + public:
|
| + std::unique_ptr<AddUrlsStoreCommand> createAddUrls() override {
|
| + return base::MakeUnique<TestAddUrlsStoreCommand>(this);
|
| + }
|
| +
|
| + std::unique_ptr<CleanupZombiesStoreCommand> createCleanupZombies() override {
|
| + return base::MakeUnique<TestCleanupZombiesStoreCommand>(this);
|
| + }
|
| +
|
| + int add_url_execute_calls_ = 0;
|
| + bool add_url_succeeds = true;
|
| + int zombies_execute_calls_ = 0;
|
| +};
|
| +
|
| +void TestAddUrlsStoreCommand::Execute(
|
| + const std::string& name_space,
|
| + const std::vector<PrefetchURL>& prefetch_urls,
|
| + UrlsAddedCallback callback) {
|
| + ++factory_->add_url_execute_calls_;
|
| + std::move(callback).Run(factory_->add_url_succeeds);
|
| +}
|
| +
|
| +void TestCleanupZombiesStoreCommand::Execute(
|
| + const std::string& name_space,
|
| + const std::vector<GURL>& urls_to_keep,
|
| + base::OnceCallback<void()> callback) {
|
| + ++factory_->zombies_execute_calls_;
|
| + std::move(callback).Run();
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| class PrefetchDispatcherTest : public testing::Test, public PrefetchService {
|
| public:
|
| + const std::string TEST_NAMESPACE = "TestPrefetchClientNamespace";
|
| +
|
| PrefetchDispatcherTest();
|
|
|
| // Test implementation.
|
| @@ -44,7 +109,7 @@ class PrefetchDispatcherTest : public testing::Test, public PrefetchService {
|
| OfflineMetricsCollector* GetOfflineMetricsCollector() override;
|
| PrefetchDispatcher* GetPrefetchDispatcher() override;
|
| PrefetchGCMHandler* GetPrefetchGCMHandler() override;
|
| - PrefetchStore* GetPrefetchStore() override;
|
| + PrefetchStoreCommandFactory* GetPrefetchStoreCommandFactory() override;
|
| SuggestedArticlesObserver* GetSuggestedArticlesObserver() override;
|
|
|
| // KeyedService implementation.
|
| @@ -57,13 +122,14 @@ class PrefetchDispatcherTest : public testing::Test, public PrefetchService {
|
|
|
| TaskQueue* dispatcher_task_queue() { return &dispatcher_impl_->task_queue_; }
|
|
|
| + protected:
|
| + std::unique_ptr<TestPrefetchStoreCommandFactory> test_command_factory_;
|
| + std::vector<PrefetchURL> test_urls_;
|
| +
|
| private:
|
| + std::unique_ptr<PrefetchDispatcherImpl> dispatcher_impl_;
|
| OfflineEventLogger logger_;
|
| base::test::ScopedFeatureList feature_list_;
|
| -
|
| - std::unique_ptr<PrefetchInMemoryStore> in_memory_store_;
|
| - std::unique_ptr<PrefetchDispatcherImpl> dispatcher_impl_;
|
| -
|
| scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
|
| base::ThreadTaskRunnerHandle task_runner_handle_;
|
| };
|
| @@ -77,9 +143,13 @@ PrefetchDispatcherTest::PrefetchDispatcherTest()
|
| void PrefetchDispatcherTest::SetUp() {
|
| ASSERT_EQ(base::ThreadTaskRunnerHandle::Get(), task_runner_);
|
| ASSERT_FALSE(task_runner_->HasPendingTask());
|
| - in_memory_store_ = base::MakeUnique<PrefetchInMemoryStore>();
|
| + test_command_factory_ = base::MakeUnique<TestPrefetchStoreCommandFactory>();
|
| dispatcher_impl_ = base::MakeUnique<PrefetchDispatcherImpl>();
|
| dispatcher_impl_->SetService(this);
|
| +
|
| + ASSERT_TRUE(test_urls_.empty());
|
| + test_urls_.push_back({"1", GURL("http://testurl.com/foo")});
|
| + test_urls_.push_back({"2", GURL("https://testurl.com/bar")});
|
| }
|
|
|
| void PrefetchDispatcherTest::TearDown() {
|
| @@ -104,8 +174,9 @@ PrefetchGCMHandler* PrefetchDispatcherTest::GetPrefetchGCMHandler() {
|
| return nullptr;
|
| }
|
|
|
| -PrefetchStore* PrefetchDispatcherTest::GetPrefetchStore() {
|
| - return in_memory_store_.get();
|
| +PrefetchStoreCommandFactory*
|
| +PrefetchDispatcherTest::GetPrefetchStoreCommandFactory() {
|
| + return test_command_factory_.get();
|
| }
|
|
|
| SuggestedArticlesObserver*
|
| @@ -119,7 +190,7 @@ void PrefetchDispatcherTest::PumpLoop() {
|
| }
|
|
|
| TEST_F(PrefetchDispatcherTest, DispatcherDoesNotCrash) {
|
| - GetPrefetchDispatcher()->AddCandidatePrefetchURLs(std::vector<PrefetchURL>());
|
| + GetPrefetchDispatcher()->AddCandidatePrefetchURLs(TEST_NAMESPACE, test_urls_);
|
| GetPrefetchDispatcher()->RemoveAllUnprocessedPrefetchURLs(
|
| kSuggestedArticlesNamespace);
|
| GetPrefetchDispatcher()->RemovePrefetchURLsByClientId(
|
| @@ -127,12 +198,26 @@ TEST_F(PrefetchDispatcherTest, DispatcherDoesNotCrash) {
|
| }
|
|
|
| TEST_F(PrefetchDispatcherTest, AddCandidatePrefetchURLsTask) {
|
| - GetPrefetchDispatcher()->AddCandidatePrefetchURLs(std::vector<PrefetchURL>());
|
| + GetPrefetchDispatcher()->AddCandidatePrefetchURLs(TEST_NAMESPACE, test_urls_);
|
| + EXPECT_TRUE(dispatcher_task_queue()->HasPendingTasks());
|
| + EXPECT_TRUE(dispatcher_task_queue()->HasRunningTask());
|
| + PumpLoop();
|
| + EXPECT_FALSE(dispatcher_task_queue()->HasPendingTasks());
|
| + EXPECT_FALSE(dispatcher_task_queue()->HasRunningTask());
|
| + EXPECT_EQ(1, test_command_factory_->add_url_execute_calls_);
|
| + EXPECT_EQ(1, test_command_factory_->zombies_execute_calls_);
|
| +}
|
| +
|
| +TEST_F(PrefetchDispatcherTest, AddCandidatePrefetchURLsTaskFailsAdding) {
|
| + test_command_factory_->add_url_succeeds = false;
|
| + GetPrefetchDispatcher()->AddCandidatePrefetchURLs(TEST_NAMESPACE, test_urls_);
|
| EXPECT_TRUE(dispatcher_task_queue()->HasPendingTasks());
|
| EXPECT_TRUE(dispatcher_task_queue()->HasRunningTask());
|
| PumpLoop();
|
| EXPECT_FALSE(dispatcher_task_queue()->HasPendingTasks());
|
| EXPECT_FALSE(dispatcher_task_queue()->HasRunningTask());
|
| + EXPECT_EQ(1, test_command_factory_->add_url_execute_calls_);
|
| + EXPECT_EQ(0, test_command_factory_->zombies_execute_calls_);
|
| }
|
|
|
| TEST_F(PrefetchDispatcherTest, DispatcherDoesNothingIfFeatureNotEnabled) {
|
| @@ -140,10 +225,9 @@ TEST_F(PrefetchDispatcherTest, DispatcherDoesNothingIfFeatureNotEnabled) {
|
| disabled_feature_list.InitAndDisableFeature(kPrefetchingOfflinePagesFeature);
|
|
|
| // Don't add a task for new prefetch URLs.
|
| - ClientId client_id("namespace", "id");
|
| - PrefetchURL prefetch_url(client_id, GURL("https://www.chromium.org"));
|
| + PrefetchURL prefetch_url("id", GURL("https://www.chromium.org"));
|
| GetPrefetchDispatcher()->AddCandidatePrefetchURLs(
|
| - std::vector<PrefetchURL>(1, prefetch_url));
|
| + TEST_NAMESPACE, std::vector<PrefetchURL>(1, prefetch_url));
|
| EXPECT_FALSE(dispatcher_task_queue()->HasRunningTask());
|
|
|
| // Do nothing with a new background task.
|
|
|