Commit af5e094c authored by Natalie Chouinard's avatar Natalie Chouinard Committed by Commit Bot

Migrate RemoteSuggestionsDatabase to new API

leveldb_proto databases will soon be migrated from unique LevelDB
instances to a single shared underlying database. Because of this,
we need to migrate to the new API to construct and initialize the
database.

Bug: 941796
Change-Id: Ic0462828c5dc1c026ffb08c2cec236f023b4478b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1559699Reviewed-by: default avatarPatrick Noland <pnoland@chromium.org>
Reviewed-by: default avatarGauthier Ambard <gambard@chromium.org>
Reviewed-by: default avatarssid <ssid@chromium.org>
Commit-Queue: Natalie Chouinard <chouinard@chromium.org>
Cr-Commit-Position: refs/heads/master@{#650515}
parent fa03b6b1
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/keyed_service/content/browser_context_dependency_manager.h"
#include "components/keyed_service/core/service_access_type.h" #include "components/keyed_service/core/service_access_type.h"
#include "components/language/core/browser/url_language_histogram.h" #include "components/language/core/browser/url_language_histogram.h"
#include "components/leveldb_proto/content/proto_database_provider_factory.h"
#include "components/ntp_snippets/category_rankers/category_ranker.h" #include "components/ntp_snippets/category_rankers/category_ranker.h"
#include "components/ntp_snippets/content_suggestions_service.h" #include "components/ntp_snippets/content_suggestions_service.h"
#include "components/ntp_snippets/features.h" #include "components/ntp_snippets/features.h"
...@@ -265,7 +266,10 @@ void RegisterArticleProviderIfEnabled(ContentSuggestionsService* service, ...@@ -265,7 +266,10 @@ void RegisterArticleProviderIfEnabled(ContentSuggestionsService* service,
std::move(suggestions_fetcher), std::move(suggestions_fetcher),
std::make_unique<ImageFetcherImpl>(std::make_unique<ImageDecoderImpl>(), std::make_unique<ImageFetcherImpl>(std::make_unique<ImageDecoderImpl>(),
url_loader_factory), url_loader_factory),
std::make_unique<RemoteSuggestionsDatabase>(database_dir), std::make_unique<RemoteSuggestionsDatabase>(
leveldb_proto::ProtoDatabaseProviderFactory::GetForKey(
profile->GetProfileKey()),
database_dir),
std::make_unique<RemoteSuggestionsStatusServiceImpl>( std::make_unique<RemoteSuggestionsStatusServiceImpl>(
identity_manager->HasPrimaryAccount(), pref_service, std::string()), identity_manager->HasPrimaryAccount(), pref_service, std::string()),
std::move(prefetched_pages_tracker), std::move(prefetched_pages_tracker),
...@@ -308,6 +312,7 @@ ContentSuggestionsServiceFactory::ContentSuggestionsServiceFactory() ...@@ -308,6 +312,7 @@ ContentSuggestionsServiceFactory::ContentSuggestionsServiceFactory()
DependsOn(HistoryServiceFactory::GetInstance()); DependsOn(HistoryServiceFactory::GetInstance());
DependsOn(IdentityManagerFactory::GetInstance()); DependsOn(IdentityManagerFactory::GetInstance());
DependsOn(LargeIconServiceFactory::GetInstance()); DependsOn(LargeIconServiceFactory::GetInstance());
DependsOn(leveldb_proto::ProtoDatabaseProviderFactory::GetInstance());
#if BUILDFLAG(ENABLE_OFFLINE_PAGES) #if BUILDFLAG(ENABLE_OFFLINE_PAGES)
// Depends on OfflinePageModelFactory in SimpleDependencyManager. // Depends on OfflinePageModelFactory in SimpleDependencyManager.
DependsOn(offline_pages::PrefetchServiceFactory::GetInstance()); DependsOn(offline_pages::PrefetchServiceFactory::GetInstance());
......
...@@ -47,6 +47,10 @@ std::string SharedProtoDatabaseClientList::ProtoDbTypeToString( ...@@ -47,6 +47,10 @@ std::string SharedProtoDatabaseClientList::ProtoDbTypeToString(
return "FeedContentDatabase"; return "FeedContentDatabase";
case ProtoDbType::FEED_JOURNAL_DATABASE: case ProtoDbType::FEED_JOURNAL_DATABASE:
return "FeedJournalDatabase"; return "FeedJournalDatabase";
case ProtoDbType::REMOTE_SUGGESTIONS_DATABASE:
return "NTPSnippets";
case ProtoDbType::REMOTE_SUGGESTIONS_IMAGE_DATABASE:
return "NTPSnippetImages";
case ProtoDbType::LAST: case ProtoDbType::LAST:
NOTREACHED(); NOTREACHED();
break; break;
......
...@@ -30,6 +30,8 @@ enum class ProtoDbType { ...@@ -30,6 +30,8 @@ enum class ProtoDbType {
CACHED_IMAGE_METADATA_STORE = 10, CACHED_IMAGE_METADATA_STORE = 10,
FEED_CONTENT_DATABASE = 11, FEED_CONTENT_DATABASE = 11,
FEED_JOURNAL_DATABASE = 12, FEED_JOURNAL_DATABASE = 12,
REMOTE_SUGGESTIONS_DATABASE = 13,
REMOTE_SUGGESTIONS_IMAGE_DATABASE = 14,
LAST, LAST,
}; };
......
...@@ -10,8 +10,6 @@ ...@@ -10,8 +10,6 @@
#include "base/bind.h" #include "base/bind.h"
#include "base/callback.h" #include "base/callback.h"
#include "base/files/file_path.h"
#include "base/files/scoped_temp_dir.h"
#include "base/test/mock_callback.h" #include "base/test/mock_callback.h"
#include "base/test/scoped_task_environment.h" #include "base/test/scoped_task_environment.h"
#include "components/image_fetcher/core/fake_image_decoder.h" #include "components/image_fetcher/core/fake_image_decoder.h"
...@@ -58,7 +56,6 @@ class NtpSnippetsCachedImageFetcherTest ...@@ -58,7 +56,6 @@ class NtpSnippetsCachedImageFetcherTest
: public testing::TestWithParam<TestType> { : public testing::TestWithParam<TestType> {
public: public:
NtpSnippetsCachedImageFetcherTest() { NtpSnippetsCachedImageFetcherTest() {
EXPECT_TRUE(database_dir_.CreateUniqueTempDir());
RequestThrottler::RegisterProfilePrefs(pref_service_.registry()); RequestThrottler::RegisterProfilePrefs(pref_service_.registry());
// Setup RemoteSuggestionsDatabase with fake ProtoDBs. // Setup RemoteSuggestionsDatabase with fake ProtoDBs.
...@@ -69,9 +66,9 @@ class NtpSnippetsCachedImageFetcherTest ...@@ -69,9 +66,9 @@ class NtpSnippetsCachedImageFetcherTest
suggestion_db_ = suggestion_db.get(); suggestion_db_ = suggestion_db.get();
image_db_ = image_db.get(); image_db_ = image_db.get();
database_ = std::make_unique<RemoteSuggestionsDatabase>( database_ = std::make_unique<RemoteSuggestionsDatabase>(
std::move(suggestion_db), std::move(image_db), database_dir_.GetPath()); std::move(suggestion_db), std::move(image_db));
suggestion_db_->InitCallback(true); suggestion_db_->InitStatusCallback(leveldb_proto::Enums::InitStatus::kOK);
image_db_->InitCallback(true); image_db_->InitStatusCallback(leveldb_proto::Enums::InitStatus::kOK);
shared_factory_ = shared_factory_ =
base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>( base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
...@@ -147,7 +144,6 @@ class NtpSnippetsCachedImageFetcherTest ...@@ -147,7 +144,6 @@ class NtpSnippetsCachedImageFetcherTest
image_fetcher::FakeImageDecoder* fake_image_decoder_; image_fetcher::FakeImageDecoder* fake_image_decoder_;
std::unique_ptr<RemoteSuggestionsDatabase> database_; std::unique_ptr<RemoteSuggestionsDatabase> database_;
base::ScopedTempDir database_dir_;
std::map<std::string, SnippetProto> suggestion_db_storage_; std::map<std::string, SnippetProto> suggestion_db_storage_;
std::map<std::string, SnippetImageProto> image_db_storage_; std::map<std::string, SnippetImageProto> image_db_storage_;
......
...@@ -17,13 +17,6 @@ using leveldb_proto::ProtoDatabase; ...@@ -17,13 +17,6 @@ using leveldb_proto::ProtoDatabase;
using leveldb_proto::ProtoDatabaseProvider; using leveldb_proto::ProtoDatabaseProvider;
namespace { namespace {
// Statistics are logged to UMA with this string as part of histogram name. They
// can all be found under LevelDB.*.NTPSnippets. Changing this needs to
// synchronize with histograms.xml, AND will also become incompatible with older
// browsers still reporting the previous values.
const char kDatabaseUMAClientName[] = "NTPSnippets";
const char kImageDatabaseUMAClientName[] = "NTPSnippetImages";
const char kSnippetDatabaseFolder[] = "snippets"; const char kSnippetDatabaseFolder[] = "snippets";
const char kImageDatabaseFolder[] = "images"; const char kImageDatabaseFolder[] = "images";
...@@ -33,44 +26,48 @@ const size_t kDatabaseWriteBufferSizeBytes = 128 << 10; ...@@ -33,44 +26,48 @@ const size_t kDatabaseWriteBufferSizeBytes = 128 << 10;
namespace ntp_snippets { namespace ntp_snippets {
RemoteSuggestionsDatabase::RemoteSuggestionsDatabase( RemoteSuggestionsDatabase::RemoteSuggestionsDatabase(
leveldb_proto::ProtoDatabaseProvider* proto_database_provider,
const base::FilePath& database_dir) const base::FilePath& database_dir)
: RemoteSuggestionsDatabase( : RemoteSuggestionsDatabase(
proto_database_provider,
database_dir,
base::CreateSequencedTaskRunnerWithTraits( base::CreateSequencedTaskRunnerWithTraits(
{base::MayBlock(), base::TaskPriority::BEST_EFFORT, {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN})) {}
database_dir) {}
RemoteSuggestionsDatabase::RemoteSuggestionsDatabase( RemoteSuggestionsDatabase::RemoteSuggestionsDatabase(
scoped_refptr<base::SequencedTaskRunner> task_runner, leveldb_proto::ProtoDatabaseProvider* proto_database_provider,
const base::FilePath& database_dir) const base::FilePath& database_dir,
scoped_refptr<base::SequencedTaskRunner> task_runner)
: RemoteSuggestionsDatabase( : RemoteSuggestionsDatabase(
ProtoDatabaseProvider::CreateUniqueDB<SnippetProto>(task_runner), proto_database_provider->GetDB<SnippetProto>(
ProtoDatabaseProvider::CreateUniqueDB<SnippetImageProto>(task_runner), leveldb_proto::ProtoDbType::REMOTE_SUGGESTIONS_DATABASE,
database_dir) {} database_dir.AppendASCII(kSnippetDatabaseFolder),
task_runner),
proto_database_provider->GetDB<SnippetImageProto>(
leveldb_proto::ProtoDbType::REMOTE_SUGGESTIONS_IMAGE_DATABASE,
database_dir.AppendASCII(kImageDatabaseFolder),
task_runner)) {}
RemoteSuggestionsDatabase::RemoteSuggestionsDatabase( RemoteSuggestionsDatabase::RemoteSuggestionsDatabase(
std::unique_ptr<ProtoDatabase<SnippetProto>> database, std::unique_ptr<ProtoDatabase<SnippetProto>> database,
std::unique_ptr<ProtoDatabase<SnippetImageProto>> image_database, std::unique_ptr<ProtoDatabase<SnippetImageProto>> image_database)
const base::FilePath& database_dir)
: database_(std::move(database)), : database_(std::move(database)),
database_initialized_(false), database_initialized_(false),
image_database_(std::move(image_database)), image_database_(std::move(image_database)),
image_database_initialized_(false), image_database_initialized_(false),
weak_ptr_factory_(this) { weak_ptr_factory_(this) {
base::FilePath snippet_dir = database_dir.AppendASCII(kSnippetDatabaseFolder);
leveldb_env::Options options = leveldb_proto::CreateSimpleOptions(); leveldb_env::Options options = leveldb_proto::CreateSimpleOptions();
options.reuse_logs = false; // Consumes less RAM over time. options.reuse_logs = false; // Consumes less RAM over time.
options.write_buffer_size = kDatabaseWriteBufferSizeBytes; options.write_buffer_size = kDatabaseWriteBufferSizeBytes;
database_->Init(kDatabaseUMAClientName, snippet_dir, options, database_->Init(options,
base::BindOnce(&RemoteSuggestionsDatabase::OnDatabaseInited, base::BindOnce(&RemoteSuggestionsDatabase::OnDatabaseInited,
weak_ptr_factory_.GetWeakPtr())); weak_ptr_factory_.GetWeakPtr()));
base::FilePath image_dir = database_dir.AppendASCII(kImageDatabaseFolder);
image_database_->Init( image_database_->Init(
kImageDatabaseUMAClientName, image_dir, options, options, base::BindOnce(&RemoteSuggestionsDatabase::OnImageDatabaseInited,
base::BindOnce(&RemoteSuggestionsDatabase::OnImageDatabaseInited, weak_ptr_factory_.GetWeakPtr()));
weak_ptr_factory_.GetWeakPtr()));
} }
RemoteSuggestionsDatabase::~RemoteSuggestionsDatabase() = default; RemoteSuggestionsDatabase::~RemoteSuggestionsDatabase() = default;
...@@ -180,9 +177,10 @@ void RemoteSuggestionsDatabase::GarbageCollectImages( ...@@ -180,9 +177,10 @@ void RemoteSuggestionsDatabase::GarbageCollectImages(
weak_ptr_factory_.GetWeakPtr(), std::move(alive_snippet_ids))); weak_ptr_factory_.GetWeakPtr(), std::move(alive_snippet_ids)));
} }
void RemoteSuggestionsDatabase::OnDatabaseInited(bool success) { void RemoteSuggestionsDatabase::OnDatabaseInited(
leveldb_proto::Enums::InitStatus status) {
DCHECK(!database_initialized_); DCHECK(!database_initialized_);
if (!success) { if (status != leveldb_proto::Enums::InitStatus::kOK) {
DVLOG(1) << "RemoteSuggestionsDatabase init failed."; DVLOG(1) << "RemoteSuggestionsDatabase init failed.";
OnDatabaseError(); OnDatabaseError();
return; return;
...@@ -239,9 +237,10 @@ void RemoteSuggestionsDatabase::OnDatabaseSaved(bool success) { ...@@ -239,9 +237,10 @@ void RemoteSuggestionsDatabase::OnDatabaseSaved(bool success) {
} }
} }
void RemoteSuggestionsDatabase::OnImageDatabaseInited(bool success) { void RemoteSuggestionsDatabase::OnImageDatabaseInited(
leveldb_proto::Enums::InitStatus status) {
DCHECK(!image_database_initialized_); DCHECK(!image_database_initialized_);
if (!success) { if (status != leveldb_proto::Enums::InitStatus::kOK) {
DVLOG(1) << "RemoteSuggestionsDatabase init failed."; DVLOG(1) << "RemoteSuggestionsDatabase init failed.";
OnDatabaseError(); OnDatabaseError();
return; return;
......
...@@ -23,6 +23,10 @@ namespace base { ...@@ -23,6 +23,10 @@ namespace base {
class FilePath; class FilePath;
} // namespace base } // namespace base
namespace leveldb_proto {
class ProtoDatabaseProvider;
} // namespace leveldb_proto
namespace ntp_snippets { namespace ntp_snippets {
class SnippetImageProto; class SnippetImageProto;
...@@ -36,14 +40,15 @@ class RemoteSuggestionsDatabase { ...@@ -36,14 +40,15 @@ class RemoteSuggestionsDatabase {
using SnippetImageCallback = base::OnceCallback<void(std::string)>; using SnippetImageCallback = base::OnceCallback<void(std::string)>;
// Creates a RemoteSuggestionsDatabase backed by real ProtoDatabases. // Creates a RemoteSuggestionsDatabase backed by real ProtoDatabases.
RemoteSuggestionsDatabase(const base::FilePath& database_dir); RemoteSuggestionsDatabase(
leveldb_proto::ProtoDatabaseProvider* proto_database_provider,
const base::FilePath& database_dir);
// Creates a RemoteSuggestionsDatabase backed by the passed-in ProtoDatabases, // Creates a RemoteSuggestionsDatabase backed by the passed-in ProtoDatabases,
// useful for testing. // useful for testing.
RemoteSuggestionsDatabase( RemoteSuggestionsDatabase(
std::unique_ptr<leveldb_proto::ProtoDatabase<SnippetProto>> database, std::unique_ptr<leveldb_proto::ProtoDatabase<SnippetProto>> database,
std::unique_ptr<leveldb_proto::ProtoDatabase<SnippetImageProto>> std::unique_ptr<leveldb_proto::ProtoDatabase<SnippetImageProto>>
image_database, image_database);
const base::FilePath& database_dir);
~RemoteSuggestionsDatabase(); ~RemoteSuggestionsDatabase();
// Returns whether the database has finished initialization. While this is // Returns whether the database has finished initialization. While this is
...@@ -97,18 +102,19 @@ class RemoteSuggestionsDatabase { ...@@ -97,18 +102,19 @@ class RemoteSuggestionsDatabase {
leveldb_proto::ProtoDatabase<SnippetImageProto>::KeyEntryVector; leveldb_proto::ProtoDatabase<SnippetImageProto>::KeyEntryVector;
RemoteSuggestionsDatabase( RemoteSuggestionsDatabase(
scoped_refptr<base::SequencedTaskRunner> task_runner, leveldb_proto::ProtoDatabaseProvider* proto_database_provider,
const base::FilePath& database_dir); const base::FilePath& database_dir,
scoped_refptr<base::SequencedTaskRunner> task_runner);
// Callbacks for ProtoDatabase<SnippetProto> operations. // Callbacks for ProtoDatabase<SnippetProto> operations.
void OnDatabaseInited(bool success); void OnDatabaseInited(leveldb_proto::Enums::InitStatus status);
void OnDatabaseLoaded(SnippetsCallback callback, void OnDatabaseLoaded(SnippetsCallback callback,
bool success, bool success,
std::unique_ptr<std::vector<SnippetProto>> entries); std::unique_ptr<std::vector<SnippetProto>> entries);
void OnDatabaseSaved(bool success); void OnDatabaseSaved(bool success);
// Callbacks for ProtoDatabase<SnippetImageProto> operations. // Callbacks for ProtoDatabase<SnippetImageProto> operations.
void OnImageDatabaseInited(bool success); void OnImageDatabaseInited(leveldb_proto::Enums::InitStatus status);
void OnImageDatabaseLoaded(SnippetImageCallback callback, void OnImageDatabaseLoaded(SnippetImageCallback callback,
bool success, bool success,
std::unique_ptr<SnippetImageProto> entry); std::unique_ptr<SnippetImageProto> entry);
......
...@@ -76,8 +76,8 @@ class RemoteSuggestionsDatabaseTest : public testing::Test { ...@@ -76,8 +76,8 @@ class RemoteSuggestionsDatabaseTest : public testing::Test {
std::make_unique<FakeDB<SnippetImageProto>>(&image_db_storage_); std::make_unique<FakeDB<SnippetImageProto>>(&image_db_storage_);
suggestion_db_ = suggestion_db.get(); suggestion_db_ = suggestion_db.get();
image_db_ = image_db.get(); image_db_ = image_db.get();
db_ = std::make_unique<RemoteSuggestionsDatabase>( db_ = std::make_unique<RemoteSuggestionsDatabase>(std::move(suggestion_db),
std::move(suggestion_db), std::move(image_db), base::FilePath()); std::move(image_db));
} }
FakeDB<SnippetProto>* suggestion_db() { return suggestion_db_; } FakeDB<SnippetProto>* suggestion_db() { return suggestion_db_; }
...@@ -114,8 +114,8 @@ TEST_F(RemoteSuggestionsDatabaseTest, Init) { ...@@ -114,8 +114,8 @@ TEST_F(RemoteSuggestionsDatabaseTest, Init) {
CreateDatabase(); CreateDatabase();
EXPECT_FALSE(db()->IsInitialized()); EXPECT_FALSE(db()->IsInitialized());
suggestion_db()->InitCallback(true); suggestion_db()->InitStatusCallback(leveldb_proto::Enums::InitStatus::kOK);
image_db()->InitCallback(true); image_db()->InitStatusCallback(leveldb_proto::Enums::InitStatus::kOK);
EXPECT_TRUE(db()->IsInitialized()); EXPECT_TRUE(db()->IsInitialized());
} }
...@@ -132,8 +132,8 @@ TEST_F(RemoteSuggestionsDatabaseTest, LoadBeforeInit) { ...@@ -132,8 +132,8 @@ TEST_F(RemoteSuggestionsDatabaseTest, LoadBeforeInit) {
base::BindOnce(&RemoteSuggestionsDatabaseTest::OnImageLoaded, base::BindOnce(&RemoteSuggestionsDatabaseTest::OnImageLoaded,
base::Unretained(this))); base::Unretained(this)));
suggestion_db()->InitCallback(true); suggestion_db()->InitStatusCallback(leveldb_proto::Enums::InitStatus::kOK);
image_db()->InitCallback(true); image_db()->InitStatusCallback(leveldb_proto::Enums::InitStatus::kOK);
EXPECT_TRUE(db()->IsInitialized()); EXPECT_TRUE(db()->IsInitialized());
EXPECT_CALL(*this, OnSnippetsLoadedImpl(_)); EXPECT_CALL(*this, OnSnippetsLoadedImpl(_));
...@@ -153,8 +153,8 @@ TEST_F(RemoteSuggestionsDatabaseTest, LoadAfterInit) { ...@@ -153,8 +153,8 @@ TEST_F(RemoteSuggestionsDatabaseTest, LoadAfterInit) {
EXPECT_CALL(*this, OnSnippetsLoadedImpl(_)).Times(0); EXPECT_CALL(*this, OnSnippetsLoadedImpl(_)).Times(0);
suggestion_db()->InitCallback(true); suggestion_db()->InitStatusCallback(leveldb_proto::Enums::InitStatus::kOK);
image_db()->InitCallback(true); image_db()->InitStatusCallback(leveldb_proto::Enums::InitStatus::kOK);
EXPECT_TRUE(db()->IsInitialized()); EXPECT_TRUE(db()->IsInitialized());
Mock::VerifyAndClearExpectations(this); Mock::VerifyAndClearExpectations(this);
...@@ -174,8 +174,8 @@ TEST_F(RemoteSuggestionsDatabaseTest, LoadAfterInit) { ...@@ -174,8 +174,8 @@ TEST_F(RemoteSuggestionsDatabaseTest, LoadAfterInit) {
TEST_F(RemoteSuggestionsDatabaseTest, Save) { TEST_F(RemoteSuggestionsDatabaseTest, Save) {
CreateDatabase(); CreateDatabase();
suggestion_db()->InitCallback(true); suggestion_db()->InitStatusCallback(leveldb_proto::Enums::InitStatus::kOK);
image_db()->InitCallback(true); image_db()->InitStatusCallback(leveldb_proto::Enums::InitStatus::kOK);
ASSERT_TRUE(db()->IsInitialized()); ASSERT_TRUE(db()->IsInitialized());
std::unique_ptr<RemoteSuggestion> snippet = CreateTestSuggestion(); std::unique_ptr<RemoteSuggestion> snippet = CreateTestSuggestion();
...@@ -206,8 +206,8 @@ TEST_F(RemoteSuggestionsDatabaseTest, Save) { ...@@ -206,8 +206,8 @@ TEST_F(RemoteSuggestionsDatabaseTest, Save) {
TEST_F(RemoteSuggestionsDatabaseTest, SavePersist) { TEST_F(RemoteSuggestionsDatabaseTest, SavePersist) {
CreateDatabase(); CreateDatabase();
suggestion_db()->InitCallback(true); suggestion_db()->InitStatusCallback(leveldb_proto::Enums::InitStatus::kOK);
image_db()->InitCallback(true); image_db()->InitStatusCallback(leveldb_proto::Enums::InitStatus::kOK);
ASSERT_TRUE(db()->IsInitialized()); ASSERT_TRUE(db()->IsInitialized());
std::unique_ptr<RemoteSuggestion> snippet = CreateTestSuggestion(); std::unique_ptr<RemoteSuggestion> snippet = CreateTestSuggestion();
...@@ -221,8 +221,8 @@ TEST_F(RemoteSuggestionsDatabaseTest, SavePersist) { ...@@ -221,8 +221,8 @@ TEST_F(RemoteSuggestionsDatabaseTest, SavePersist) {
// They should still exist after recreating the database. // They should still exist after recreating the database.
CreateDatabase(); CreateDatabase();
suggestion_db()->InitCallback(true); suggestion_db()->InitStatusCallback(leveldb_proto::Enums::InitStatus::kOK);
image_db()->InitCallback(true); image_db()->InitStatusCallback(leveldb_proto::Enums::InitStatus::kOK);
ASSERT_TRUE(db()->IsInitialized()); ASSERT_TRUE(db()->IsInitialized());
EXPECT_CALL(*this, EXPECT_CALL(*this,
...@@ -241,8 +241,8 @@ TEST_F(RemoteSuggestionsDatabaseTest, SavePersist) { ...@@ -241,8 +241,8 @@ TEST_F(RemoteSuggestionsDatabaseTest, SavePersist) {
TEST_F(RemoteSuggestionsDatabaseTest, Update) { TEST_F(RemoteSuggestionsDatabaseTest, Update) {
CreateDatabase(); CreateDatabase();
suggestion_db()->InitCallback(true); suggestion_db()->InitStatusCallback(leveldb_proto::Enums::InitStatus::kOK);
image_db()->InitCallback(true); image_db()->InitStatusCallback(leveldb_proto::Enums::InitStatus::kOK);
ASSERT_TRUE(db()->IsInitialized()); ASSERT_TRUE(db()->IsInitialized());
std::unique_ptr<RemoteSuggestion> snippet = CreateTestSuggestion(); std::unique_ptr<RemoteSuggestion> snippet = CreateTestSuggestion();
...@@ -267,8 +267,8 @@ TEST_F(RemoteSuggestionsDatabaseTest, Update) { ...@@ -267,8 +267,8 @@ TEST_F(RemoteSuggestionsDatabaseTest, Update) {
TEST_F(RemoteSuggestionsDatabaseTest, Delete) { TEST_F(RemoteSuggestionsDatabaseTest, Delete) {
CreateDatabase(); CreateDatabase();
suggestion_db()->InitCallback(true); suggestion_db()->InitStatusCallback(leveldb_proto::Enums::InitStatus::kOK);
image_db()->InitCallback(true); image_db()->InitStatusCallback(leveldb_proto::Enums::InitStatus::kOK);
ASSERT_TRUE(db()->IsInitialized()); ASSERT_TRUE(db()->IsInitialized());
std::unique_ptr<RemoteSuggestion> snippet = CreateTestSuggestion(); std::unique_ptr<RemoteSuggestion> snippet = CreateTestSuggestion();
...@@ -301,8 +301,8 @@ TEST_F(RemoteSuggestionsDatabaseTest, Delete) { ...@@ -301,8 +301,8 @@ TEST_F(RemoteSuggestionsDatabaseTest, Delete) {
TEST_F(RemoteSuggestionsDatabaseTest, DeleteSnippetDoesNotDeleteImage) { TEST_F(RemoteSuggestionsDatabaseTest, DeleteSnippetDoesNotDeleteImage) {
CreateDatabase(); CreateDatabase();
suggestion_db()->InitCallback(true); suggestion_db()->InitStatusCallback(leveldb_proto::Enums::InitStatus::kOK);
image_db()->InitCallback(true); image_db()->InitStatusCallback(leveldb_proto::Enums::InitStatus::kOK);
ASSERT_TRUE(db()->IsInitialized()); ASSERT_TRUE(db()->IsInitialized());
std::unique_ptr<RemoteSuggestion> snippet = CreateTestSuggestion(); std::unique_ptr<RemoteSuggestion> snippet = CreateTestSuggestion();
...@@ -344,8 +344,8 @@ TEST_F(RemoteSuggestionsDatabaseTest, DeleteSnippetDoesNotDeleteImage) { ...@@ -344,8 +344,8 @@ TEST_F(RemoteSuggestionsDatabaseTest, DeleteSnippetDoesNotDeleteImage) {
TEST_F(RemoteSuggestionsDatabaseTest, DeleteImage) { TEST_F(RemoteSuggestionsDatabaseTest, DeleteImage) {
CreateDatabase(); CreateDatabase();
suggestion_db()->InitCallback(true); suggestion_db()->InitStatusCallback(leveldb_proto::Enums::InitStatus::kOK);
image_db()->InitCallback(true); image_db()->InitStatusCallback(leveldb_proto::Enums::InitStatus::kOK);
ASSERT_TRUE(db()->IsInitialized()); ASSERT_TRUE(db()->IsInitialized());
std::unique_ptr<RemoteSuggestion> snippet = CreateTestSuggestion(); std::unique_ptr<RemoteSuggestion> snippet = CreateTestSuggestion();
...@@ -378,8 +378,8 @@ TEST_F(RemoteSuggestionsDatabaseTest, DeleteImage) { ...@@ -378,8 +378,8 @@ TEST_F(RemoteSuggestionsDatabaseTest, DeleteImage) {
TEST_F(RemoteSuggestionsDatabaseTest, ShouldGarbageCollectImages) { TEST_F(RemoteSuggestionsDatabaseTest, ShouldGarbageCollectImages) {
CreateDatabase(); CreateDatabase();
suggestion_db()->InitCallback(true); suggestion_db()->InitStatusCallback(leveldb_proto::Enums::InitStatus::kOK);
image_db()->InitCallback(true); image_db()->InitStatusCallback(leveldb_proto::Enums::InitStatus::kOK);
ASSERT_TRUE(db()->IsInitialized()); ASSERT_TRUE(db()->IsInitialized());
// Store images. // Store images.
......
...@@ -13,8 +13,6 @@ ...@@ -13,8 +13,6 @@
#include "base/bind.h" #include "base/bind.h"
#include "base/command_line.h" #include "base/command_line.h"
#include "base/files/file_path.h"
#include "base/files/scoped_temp_dir.h"
#include "base/json/json_reader.h" #include "base/json/json_reader.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/run_loop.h" #include "base/run_loop.h"
...@@ -295,8 +293,6 @@ class RemoteSuggestionsProviderImplTest : public ::testing::Test { ...@@ -295,8 +293,6 @@ class RemoteSuggestionsProviderImplTest : public ::testing::Test {
RemoteSuggestionsProviderImpl::RegisterProfilePrefs( RemoteSuggestionsProviderImpl::RegisterProfilePrefs(
utils_.pref_service()->registry()); utils_.pref_service()->registry());
RequestThrottler::RegisterProfilePrefs(utils_.pref_service()->registry()); RequestThrottler::RegisterProfilePrefs(utils_.pref_service()->registry());
EXPECT_TRUE(database_dir_.CreateUniqueTempDir());
} }
~RemoteSuggestionsProviderImplTest() override { ~RemoteSuggestionsProviderImplTest() override {
...@@ -374,10 +370,10 @@ class RemoteSuggestionsProviderImplTest : public ::testing::Test { ...@@ -374,10 +370,10 @@ class RemoteSuggestionsProviderImplTest : public ::testing::Test {
suggestion_db_ = suggestion_db.get(); suggestion_db_ = suggestion_db.get();
image_db_ = image_db.get(); image_db_ = image_db.get();
auto database = std::make_unique<RemoteSuggestionsDatabase>( auto database = std::make_unique<RemoteSuggestionsDatabase>(
std::move(suggestion_db), std::move(image_db), database_dir_.GetPath()); std::move(suggestion_db), std::move(image_db));
database_ = database.get(); database_ = database.get();
suggestion_db_->InitCallback(true); suggestion_db_->InitStatusCallback(leveldb_proto::Enums::InitStatus::kOK);
image_db_->InitCallback(true); image_db_->InitStatusCallback(leveldb_proto::Enums::InitStatus::kOK);
auto fetch_timeout_timer = std::make_unique<base::OneShotTimer>( auto fetch_timeout_timer = std::make_unique<base::OneShotTimer>(
timer_mock_task_runner_->GetMockTickClock()); timer_mock_task_runner_->GetMockTickClock());
...@@ -672,7 +668,6 @@ class RemoteSuggestionsProviderImplTest : public ::testing::Test { ...@@ -672,7 +668,6 @@ class RemoteSuggestionsProviderImplTest : public ::testing::Test {
RemoteSuggestionsStatusService::StatusChangeCallback status_change_callback_; RemoteSuggestionsStatusService::StatusChangeCallback status_change_callback_;
base::ScopedTempDir database_dir_;
RemoteSuggestionsDatabase* database_; RemoteSuggestionsDatabase* database_;
std::map<std::string, SnippetProto> suggestion_db_storage_; std::map<std::string, SnippetProto> suggestion_db_storage_;
std::map<std::string, SnippetImageProto> image_db_storage_; std::map<std::string, SnippetImageProto> image_db_storage_;
......
...@@ -27,6 +27,7 @@ source_set("ntp_snippets") { ...@@ -27,6 +27,7 @@ source_set("ntp_snippets") {
"//ios/chrome/browser/browser_state", "//ios/chrome/browser/browser_state",
"//ios/chrome/browser/favicon", "//ios/chrome/browser/favicon",
"//ios/chrome/browser/history", "//ios/chrome/browser/history",
"//ios/chrome/browser/leveldb_proto:factory",
"//ios/chrome/browser/reading_list", "//ios/chrome/browser/reading_list",
"//ios/chrome/browser/signin", "//ios/chrome/browser/signin",
"//ios/chrome/browser/ui/util", "//ios/chrome/browser/ui/util",
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
#include "ios/chrome/browser/favicon/ios_chrome_large_icon_service_factory.h" #include "ios/chrome/browser/favicon/ios_chrome_large_icon_service_factory.h"
#include "ios/chrome/browser/history/history_service_factory.h" #include "ios/chrome/browser/history/history_service_factory.h"
#include "ios/chrome/browser/leveldb_proto/proto_database_provider_factory.h"
#include "ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory_util.h" #include "ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory_util.h"
#include "ios/chrome/browser/pref_names.h" #include "ios/chrome/browser/pref_names.h"
#include "ios/chrome/browser/reading_list/reading_list_model_factory.h" #include "ios/chrome/browser/reading_list/reading_list_model_factory.h"
...@@ -52,6 +53,7 @@ IOSChromeContentSuggestionsServiceFactory:: ...@@ -52,6 +53,7 @@ IOSChromeContentSuggestionsServiceFactory::
DependsOn(ios::HistoryServiceFactory::GetInstance()); DependsOn(ios::HistoryServiceFactory::GetInstance());
DependsOn(IOSChromeLargeIconServiceFactory::GetInstance()); DependsOn(IOSChromeLargeIconServiceFactory::GetInstance());
DependsOn(ReadingListModelFactory::GetInstance()); DependsOn(ReadingListModelFactory::GetInstance());
DependsOn(leveldb_proto::ProtoDatabaseProviderFactory::GetInstance());
} }
IOSChromeContentSuggestionsServiceFactory:: IOSChromeContentSuggestionsServiceFactory::
......
...@@ -43,6 +43,7 @@ ...@@ -43,6 +43,7 @@
#include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
#include "ios/chrome/browser/favicon/ios_chrome_large_icon_service_factory.h" #include "ios/chrome/browser/favicon/ios_chrome_large_icon_service_factory.h"
#include "ios/chrome/browser/history/history_service_factory.h" #include "ios/chrome/browser/history/history_service_factory.h"
#include "ios/chrome/browser/leveldb_proto/proto_database_provider_factory.h"
#include "ios/chrome/browser/pref_names.h" #include "ios/chrome/browser/pref_names.h"
#include "ios/chrome/browser/signin/identity_manager_factory.h" #include "ios/chrome/browser/signin/identity_manager_factory.h"
#include "ios/chrome/browser/ui/util/ui_util.h" #include "ios/chrome/browser/ui/util/ui_util.h"
...@@ -167,6 +168,10 @@ void RegisterRemoteSuggestionsProvider(ContentSuggestionsService* service, ...@@ -167,6 +168,10 @@ void RegisterRemoteSuggestionsProvider(ContentSuggestionsService* service,
base::BindRepeating(&ParseJson), GetFetchEndpoint(), api_key, base::BindRepeating(&ParseJson), GetFetchEndpoint(), api_key,
service->user_classifier()); service->user_classifier());
leveldb_proto::ProtoDatabaseProvider* db_provider =
leveldb_proto::ProtoDatabaseProviderFactory::GetForBrowserState(
chrome_browser_state);
// This pref is also used for logging. If it is changed, change it in the // This pref is also used for logging. If it is changed, change it in the
// other places. // other places.
std::string pref_name = prefs::kArticlesForYouEnabled; std::string pref_name = prefs::kArticlesForYouEnabled;
...@@ -176,7 +181,7 @@ void RegisterRemoteSuggestionsProvider(ContentSuggestionsService* service, ...@@ -176,7 +181,7 @@ void RegisterRemoteSuggestionsProvider(ContentSuggestionsService* service,
std::move(suggestions_fetcher), std::move(suggestions_fetcher),
std::make_unique<ImageFetcherImpl>( std::make_unique<ImageFetcherImpl>(
CreateIOSImageDecoder(), browser_state->GetSharedURLLoaderFactory()), CreateIOSImageDecoder(), browser_state->GetSharedURLLoaderFactory()),
std::make_unique<RemoteSuggestionsDatabase>(database_dir), std::make_unique<RemoteSuggestionsDatabase>(db_provider, database_dir),
std::make_unique<RemoteSuggestionsStatusServiceImpl>( std::make_unique<RemoteSuggestionsStatusServiceImpl>(
identity_manager->HasPrimaryAccount(), prefs, pref_name), identity_manager->HasPrimaryAccount(), prefs, pref_name),
/*prefetched_pages_tracker=*/nullptr, /*prefetched_pages_tracker=*/nullptr,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment