Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(406)

Unified Diff: ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.cc

Issue 2232473002: Register all CSuggestionsProviders in IOSChromeContentSuggestionsServiceFactory (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix another compiler error Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.cc
diff --git a/ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.cc b/ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.cc
index 6f46ee9f58849a8bede17501cdf5e3de89631a02..e04514422512665dc83de433afab4325fa7124d5 100644
--- a/ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.cc
+++ b/ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.cc
@@ -4,12 +4,74 @@
#include "ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.h"
+#include "base/feature_list.h"
+#include "base/files/file_path.h"
+#include "base/json/json_reader.h"
#include "base/memory/ptr_util.h"
#include "base/memory/singleton.h"
+#include "base/threading/thread_task_runner_handle.h"
+#include "base/values.h"
+#include "components/bookmarks/browser/bookmark_model.h"
+#include "components/image_fetcher/image_decoder.h"
+#include "components/image_fetcher/image_fetcher.h"
+#include "components/keyed_service/core/service_access_type.h"
#include "components/keyed_service/ios/browser_state_dependency_manager.h"
+#include "components/ntp_snippets/bookmarks/bookmark_suggestions_provider.h"
#include "components/ntp_snippets/content_suggestions_service.h"
+#include "components/ntp_snippets/features.h"
+#include "components/ntp_snippets/ntp_snippets_constants.h"
+#include "components/ntp_snippets/ntp_snippets_database.h"
+#include "components/ntp_snippets/ntp_snippets_fetcher.h"
+#include "components/ntp_snippets/ntp_snippets_service.h"
+#include "components/ntp_snippets/ntp_snippets_status_service.h"
+#include "components/signin/core/browser/signin_manager.h"
+#include "components/version_info/version_info.h"
+#include "ios/chrome/browser/application_context.h"
+#include "ios/chrome/browser/bookmarks/bookmark_model_factory.h"
#include "ios/chrome/browser/browser_state/chrome_browser_state.h"
+#include "ios/chrome/browser/history/history_service_factory.h"
+#include "ios/chrome/browser/signin/oauth2_token_service_factory.h"
+#include "ios/chrome/browser/signin/signin_manager_factory.h"
+#include "ios/chrome/browser/suggestions/image_fetcher_impl.h"
+#include "ios/chrome/browser/suggestions/ios_image_decoder_impl.h"
+#include "ios/chrome/browser/suggestions/suggestions_service_factory.h"
+#include "ios/chrome/common/channel_info.h"
#include "ios/web/public/browser_state.h"
+#include "ios/web/public/web_thread.h"
+#include "net/url_request/url_request_context_getter.h"
+
+using bookmarks::BookmarkModel;
+using history::HistoryService;
+using ios::BookmarkModelFactory;
+using ntp_snippets::BookmarkSuggestionsProvider;
+using ntp_snippets::ContentSuggestionsService;
+using ntp_snippets::NTPSnippetsDatabase;
+using ntp_snippets::NTPSnippetsFetcher;
+using ntp_snippets::NTPSnippetsScheduler;
+using ntp_snippets::NTPSnippetsService;
+using ntp_snippets::NTPSnippetsStatusService;
+using suggestions::ImageFetcherImpl;
+using suggestions::IOSImageDecoderImpl;
+using suggestions::SuggestionsService;
+using suggestions::SuggestionsServiceFactory;
+
+namespace {
+
+void ParseJson(const std::string& json,
+ const NTPSnippetsFetcher::SuccessCallback& success_callback,
+ const NTPSnippetsFetcher::ErrorCallback& error_callback) {
+ base::JSONReader json_reader;
+ std::unique_ptr<base::Value> value = json_reader.ReadToValue(json);
+ if (value) {
+ base::ThreadTaskRunnerHandle::Get()->PostTask(
+ FROM_HERE, base::Bind(success_callback, base::Passed(&value)));
+ } else {
+ base::ThreadTaskRunnerHandle::Get()->PostTask(
+ FROM_HERE, base::Bind(error_callback, json_reader.GetErrorMessage()));
+ }
+}
+
+} // namespace
// static
IOSChromeContentSuggestionsServiceFactory*
@@ -18,11 +80,11 @@ IOSChromeContentSuggestionsServiceFactory::GetInstance() {
}
// static
-ntp_snippets::ContentSuggestionsService*
+ContentSuggestionsService*
IOSChromeContentSuggestionsServiceFactory::GetForBrowserState(
ios::ChromeBrowserState* browser_state) {
DCHECK(!browser_state->IsOffTheRecord());
- return static_cast<ntp_snippets::ContentSuggestionsService*>(
+ return static_cast<ContentSuggestionsService*>(
GetInstance()->GetServiceForBrowserState(browser_state, true));
}
@@ -30,7 +92,13 @@ IOSChromeContentSuggestionsServiceFactory::
IOSChromeContentSuggestionsServiceFactory()
: BrowserStateKeyedServiceFactory(
"ContentSuggestionsService",
- BrowserStateDependencyManager::GetInstance()) {}
+ BrowserStateDependencyManager::GetInstance()) {
+ DependsOn(BookmarkModelFactory::GetInstance());
+ DependsOn(ios::HistoryServiceFactory::GetInstance());
+ DependsOn(OAuth2TokenServiceFactory::GetInstance());
+ DependsOn(ios::SigninManagerFactory::GetInstance());
+ DependsOn(SuggestionsServiceFactory::GetInstance());
+}
IOSChromeContentSuggestionsServiceFactory::
~IOSChromeContentSuggestionsServiceFactory() {}
@@ -38,6 +106,70 @@ IOSChromeContentSuggestionsServiceFactory::
std::unique_ptr<KeyedService>
IOSChromeContentSuggestionsServiceFactory::BuildServiceInstanceFor(
web::BrowserState* browser_state) const {
- return base::MakeUnique<ntp_snippets::ContentSuggestionsService>(
- ntp_snippets::ContentSuggestionsService::State::DISABLED);
+ using State = ContentSuggestionsService::State;
+ ios::ChromeBrowserState* chrome_browser_state =
+ ios::ChromeBrowserState::FromBrowserState(browser_state);
+ DCHECK(!browser_state->IsOffTheRecord());
+ PrefService* prefs = chrome_browser_state->GetPrefs();
+
+ // Create the ContentSuggestionsService.
+ State state =
+ base::FeatureList::IsEnabled(ntp_snippets::kContentSuggestionsFeature)
+ ? State::ENABLED
+ : State::DISABLED;
+ std::unique_ptr<ContentSuggestionsService> service =
+ base::MakeUnique<ContentSuggestionsService>(state);
+ if (state == State::DISABLED)
+ return service;
+
+ // Create the BookmarkSuggestionsProvider.
+ if (base::FeatureList::IsEnabled(ntp_snippets::kBookmarkSuggestionsFeature)) {
+ BookmarkModel* bookmark_model =
+ BookmarkModelFactory::GetForBrowserState(chrome_browser_state);
+ std::unique_ptr<BookmarkSuggestionsProvider> bookmark_suggestions_provider =
+ base::MakeUnique<BookmarkSuggestionsProvider>(
+ service.get(), service->category_factory(), bookmark_model, prefs);
+ service->RegisterProvider(std::move(bookmark_suggestions_provider));
+ }
+
+ if (base::FeatureList::IsEnabled(ntp_snippets::kArticleSuggestionsFeature)) {
+ // Create the NTPSnippetsService (articles provider).
+ SigninManager* signin_manager =
+ ios::SigninManagerFactory::GetForBrowserState(chrome_browser_state);
+ OAuth2TokenService* token_service =
+ OAuth2TokenServiceFactory::GetForBrowserState(chrome_browser_state);
+ scoped_refptr<net::URLRequestContextGetter> request_context =
+ browser_state->GetRequestContext();
+ HistoryService* history_service =
+ ios::HistoryServiceFactory::GetForBrowserState(
+ chrome_browser_state, ServiceAccessType::EXPLICIT_ACCESS);
+ SuggestionsService* suggestions_service =
+ SuggestionsServiceFactory::GetForBrowserState(chrome_browser_state);
+ NTPSnippetsScheduler* scheduler = nullptr;
+ base::FilePath database_dir(
+ browser_state->GetStatePath().Append(ntp_snippets::kDatabaseFolder));
+ scoped_refptr<base::SequencedTaskRunner> task_runner =
+ web::WebThread::GetBlockingPool()
+ ->GetSequencedTaskRunnerWithShutdownBehavior(
+ base::SequencedWorkerPool::GetSequenceToken(),
+ base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN);
+ std::unique_ptr<NTPSnippetsService> ntp_snippets_service =
+ base::MakeUnique<NTPSnippetsService>(
+ service.get(), service->category_factory(), prefs, history_service,
+ suggestions_service,
+ GetApplicationContext()->GetApplicationLocale(), scheduler,
+ base::MakeUnique<NTPSnippetsFetcher>(
+ signin_manager, token_service, request_context, prefs,
+ service->category_factory(), base::Bind(&ParseJson),
+ GetChannel() == version_info::Channel::STABLE),
+ base::MakeUnique<ImageFetcherImpl>(
+ request_context.get(), web::WebThread::GetBlockingPool()),
+ base::MakeUnique<IOSImageDecoderImpl>(),
+ base::MakeUnique<NTPSnippetsDatabase>(database_dir, task_runner),
+ base::MakeUnique<NTPSnippetsStatusService>(signin_manager, prefs));
+ service->set_ntp_snippets_service(ntp_snippets_service.get());
+ service->RegisterProvider(std::move(ntp_snippets_service));
+ }
+
+ return service;
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698