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

Side by Side Diff: chrome/browser/ntp_snippets/content_suggestions_service_factory.cc

Issue 2568033005: [NTP::SectionOrder] Replace CategoryFactory with a category ranker. (Closed)
Patch Set: rebase. Created 4 years 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ntp_snippets/content_suggestions_service_factory.h" 5 #include "chrome/browser/ntp_snippets/content_suggestions_service_factory.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/feature_list.h" 9 #include "base/feature_list.h"
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
(...skipping 11 matching lines...) Expand all
22 #include "chrome/common/channel_info.h" 22 #include "chrome/common/channel_info.h"
23 #include "chrome/common/chrome_features.h" 23 #include "chrome/common/chrome_features.h"
24 #include "components/bookmarks/browser/bookmark_model.h" 24 #include "components/bookmarks/browser/bookmark_model.h"
25 #include "components/browser_sync/profile_sync_service.h" 25 #include "components/browser_sync/profile_sync_service.h"
26 #include "components/image_fetcher/image_decoder.h" 26 #include "components/image_fetcher/image_decoder.h"
27 #include "components/image_fetcher/image_fetcher.h" 27 #include "components/image_fetcher/image_fetcher.h"
28 #include "components/image_fetcher/image_fetcher_impl.h" 28 #include "components/image_fetcher/image_fetcher_impl.h"
29 #include "components/keyed_service/content/browser_context_dependency_manager.h" 29 #include "components/keyed_service/content/browser_context_dependency_manager.h"
30 #include "components/keyed_service/core/service_access_type.h" 30 #include "components/keyed_service/core/service_access_type.h"
31 #include "components/ntp_snippets/bookmarks/bookmark_suggestions_provider.h" 31 #include "components/ntp_snippets/bookmarks/bookmark_suggestions_provider.h"
32 #include "components/ntp_snippets/category_factory.h" 32 #include "components/ntp_snippets/category_rankers/constant_category_ranker.h"
33 #include "components/ntp_snippets/content_suggestions_service.h" 33 #include "components/ntp_snippets/content_suggestions_service.h"
34 #include "components/ntp_snippets/features.h" 34 #include "components/ntp_snippets/features.h"
35 #include "components/ntp_snippets/ntp_snippets_constants.h" 35 #include "components/ntp_snippets/ntp_snippets_constants.h"
36 #include "components/ntp_snippets/remote/ntp_snippets_fetcher.h" 36 #include "components/ntp_snippets/remote/ntp_snippets_fetcher.h"
37 #include "components/ntp_snippets/remote/ntp_snippets_scheduler.h" 37 #include "components/ntp_snippets/remote/ntp_snippets_scheduler.h"
38 #include "components/ntp_snippets/remote/remote_suggestions_database.h" 38 #include "components/ntp_snippets/remote/remote_suggestions_database.h"
39 #include "components/ntp_snippets/remote/remote_suggestions_provider.h" 39 #include "components/ntp_snippets/remote/remote_suggestions_provider.h"
40 #include "components/ntp_snippets/remote/remote_suggestions_status_service.h" 40 #include "components/ntp_snippets/remote/remote_suggestions_status_service.h"
41 #include "components/ntp_snippets/sessions/foreign_sessions_suggestions_provider .h" 41 #include "components/ntp_snippets/sessions/foreign_sessions_suggestions_provider .h"
42 #include "components/ntp_snippets/sessions/tab_delegate_sync_adapter.h" 42 #include "components/ntp_snippets/sessions/tab_delegate_sync_adapter.h"
(...skipping 25 matching lines...) Expand all
68 using offline_pages::OfflinePageModel; 68 using offline_pages::OfflinePageModel;
69 using offline_pages::OfflinePageModelFactory; 69 using offline_pages::OfflinePageModelFactory;
70 using physical_web::PhysicalWebDataSource; 70 using physical_web::PhysicalWebDataSource;
71 #endif // OS_ANDROID 71 #endif // OS_ANDROID
72 72
73 using bookmarks::BookmarkModel; 73 using bookmarks::BookmarkModel;
74 using content::BrowserThread; 74 using content::BrowserThread;
75 using history::HistoryService; 75 using history::HistoryService;
76 using image_fetcher::ImageFetcherImpl; 76 using image_fetcher::ImageFetcherImpl;
77 using ntp_snippets::BookmarkSuggestionsProvider; 77 using ntp_snippets::BookmarkSuggestionsProvider;
78 using ntp_snippets::CategoryFactory;
79 using ntp_snippets::ContentSuggestionsService; 78 using ntp_snippets::ContentSuggestionsService;
80 using ntp_snippets::ForeignSessionsSuggestionsProvider; 79 using ntp_snippets::ForeignSessionsSuggestionsProvider;
81 using ntp_snippets::NTPSnippetsFetcher; 80 using ntp_snippets::NTPSnippetsFetcher;
82 using ntp_snippets::NTPSnippetsScheduler; 81 using ntp_snippets::NTPSnippetsScheduler;
83 using ntp_snippets::RemoteSuggestionsDatabase; 82 using ntp_snippets::RemoteSuggestionsDatabase;
84 using ntp_snippets::RemoteSuggestionsProvider; 83 using ntp_snippets::RemoteSuggestionsProvider;
85 using ntp_snippets::RemoteSuggestionsStatusService; 84 using ntp_snippets::RemoteSuggestionsStatusService;
86 using ntp_snippets::TabDelegateSyncAdapter; 85 using ntp_snippets::TabDelegateSyncAdapter;
87 using suggestions::ImageDecoderImpl; 86 using suggestions::ImageDecoderImpl;
88 using syncer::SyncService; 87 using syncer::SyncService;
89 using translate::LanguageModel; 88 using translate::LanguageModel;
90 89
91 namespace { 90 namespace {
92 91
93 // Clear the tasks that can be scheduled by running services. 92 // Clear the tasks that can be scheduled by running services.
94 void ClearScheduledTasks() { 93 void ClearScheduledTasks() {
95 #if defined(OS_ANDROID) 94 #if defined(OS_ANDROID)
96 NTPSnippetsLauncher::Get()->Unschedule(); 95 NTPSnippetsLauncher::Get()->Unschedule();
97 #endif // OS_ANDROID 96 #endif // OS_ANDROID
98 } 97 }
99 98
100 #if defined(OS_ANDROID) 99 #if defined(OS_ANDROID)
101 void RegisterRecentTabProvider(OfflinePageModel* offline_page_model, 100 void RegisterRecentTabProvider(OfflinePageModel* offline_page_model,
102 ContentSuggestionsService* service, 101 ContentSuggestionsService* service,
103 CategoryFactory* category_factory,
104 PrefService* pref_service) { 102 PrefService* pref_service) {
105 auto provider = base::MakeUnique<RecentTabSuggestionsProvider>( 103 auto provider = base::MakeUnique<RecentTabSuggestionsProvider>(
106 service, category_factory, offline_page_model, pref_service); 104 service, offline_page_model, pref_service);
107 service->RegisterProvider(std::move(provider)); 105 service->RegisterProvider(std::move(provider));
108 } 106 }
109 107
110 void RegisterDownloadsProvider(OfflinePageModel* offline_page_model, 108 void RegisterDownloadsProvider(OfflinePageModel* offline_page_model,
111 DownloadManager* download_manager, 109 DownloadManager* download_manager,
112 ContentSuggestionsService* service, 110 ContentSuggestionsService* service,
113 CategoryFactory* category_factory,
114 PrefService* pref_service) { 111 PrefService* pref_service) {
115 bool download_manager_ui_enabled = 112 bool download_manager_ui_enabled =
116 base::FeatureList::IsEnabled(chrome::android::kDownloadsUiFeature); 113 base::FeatureList::IsEnabled(chrome::android::kDownloadsUiFeature);
117 auto provider = base::MakeUnique<DownloadSuggestionsProvider>( 114 auto provider = base::MakeUnique<DownloadSuggestionsProvider>(
118 service, category_factory, offline_page_model, download_manager, 115 service, offline_page_model, download_manager, pref_service,
119 pref_service, download_manager_ui_enabled); 116 download_manager_ui_enabled);
120 service->RegisterProvider(std::move(provider)); 117 service->RegisterProvider(std::move(provider));
121 } 118 }
122 #endif // OS_ANDROID 119 #endif // OS_ANDROID
123 120
124 void RegisterBookmarkProvider(BookmarkModel* bookmark_model, 121 void RegisterBookmarkProvider(BookmarkModel* bookmark_model,
125 ContentSuggestionsService* service, 122 ContentSuggestionsService* service,
126 CategoryFactory* category_factory,
127 PrefService* pref_service) { 123 PrefService* pref_service) {
128 auto provider = base::MakeUnique<BookmarkSuggestionsProvider>( 124 auto provider = base::MakeUnique<BookmarkSuggestionsProvider>(
129 service, category_factory, bookmark_model, pref_service); 125 service, bookmark_model, pref_service);
130 service->RegisterProvider(std::move(provider)); 126 service->RegisterProvider(std::move(provider));
131 } 127 }
132 128
133 #if defined(OS_ANDROID) 129 #if defined(OS_ANDROID)
134 void RegisterPhysicalWebPageProvider( 130 void RegisterPhysicalWebPageProvider(
135 ContentSuggestionsService* service, 131 ContentSuggestionsService* service,
136 CategoryFactory* category_factory,
137 PhysicalWebDataSource* physical_web_data_source, 132 PhysicalWebDataSource* physical_web_data_source,
138 PrefService* pref_service) { 133 PrefService* pref_service) {
139 auto provider = base::MakeUnique<PhysicalWebPageSuggestionsProvider>( 134 auto provider = base::MakeUnique<PhysicalWebPageSuggestionsProvider>(
140 service, category_factory, physical_web_data_source, pref_service); 135 service, physical_web_data_source, pref_service);
141 service->RegisterProvider(std::move(provider)); 136 service->RegisterProvider(std::move(provider));
142 } 137 }
143 #endif // OS_ANDROID 138 #endif // OS_ANDROID
144 139
145 void RegisterArticleProvider(SigninManagerBase* signin_manager, 140 void RegisterArticleProvider(SigninManagerBase* signin_manager,
146 OAuth2TokenService* token_service, 141 OAuth2TokenService* token_service,
147 ContentSuggestionsService* service, 142 ContentSuggestionsService* service,
148 CategoryFactory* category_factory,
149 LanguageModel* language_model, 143 LanguageModel* language_model,
150 PrefService* pref_service, 144 PrefService* pref_service,
151 Profile* profile) { 145 Profile* profile) {
152 scoped_refptr<net::URLRequestContextGetter> request_context = 146 scoped_refptr<net::URLRequestContextGetter> request_context =
153 content::BrowserContext::GetDefaultStoragePartition(profile) 147 content::BrowserContext::GetDefaultStoragePartition(profile)
154 ->GetURLRequestContext(); 148 ->GetURLRequestContext();
155 149
156 NTPSnippetsScheduler* scheduler = nullptr; 150 NTPSnippetsScheduler* scheduler = nullptr;
157 #if defined(OS_ANDROID) 151 #if defined(OS_ANDROID)
158 scheduler = NTPSnippetsLauncher::Get(); 152 scheduler = NTPSnippetsLauncher::Get();
159 #endif // OS_ANDROID 153 #endif // OS_ANDROID
160 base::FilePath database_dir( 154 base::FilePath database_dir(
161 profile->GetPath().Append(ntp_snippets::kDatabaseFolder)); 155 profile->GetPath().Append(ntp_snippets::kDatabaseFolder));
162 scoped_refptr<base::SequencedTaskRunner> task_runner = 156 scoped_refptr<base::SequencedTaskRunner> task_runner =
163 BrowserThread::GetBlockingPool() 157 BrowserThread::GetBlockingPool()
164 ->GetSequencedTaskRunnerWithShutdownBehavior( 158 ->GetSequencedTaskRunnerWithShutdownBehavior(
165 base::SequencedWorkerPool::GetSequenceToken(), 159 base::SequencedWorkerPool::GetSequenceToken(),
166 base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN); 160 base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN);
167 bool is_stable_channel = 161 bool is_stable_channel =
168 chrome::GetChannel() == version_info::Channel::STABLE; 162 chrome::GetChannel() == version_info::Channel::STABLE;
169 auto provider = base::MakeUnique<RemoteSuggestionsProvider>( 163 auto provider = base::MakeUnique<RemoteSuggestionsProvider>(
170 service, service->category_factory(), pref_service, 164 service, pref_service, g_browser_process->GetApplicationLocale(),
171 g_browser_process->GetApplicationLocale(), service->user_classifier(), 165 service->category_ranker(), service->user_classifier(), scheduler,
172 scheduler, base::MakeUnique<NTPSnippetsFetcher>( 166 base::MakeUnique<NTPSnippetsFetcher>(
173 signin_manager, token_service, request_context, 167 signin_manager, token_service, request_context, pref_service,
174 pref_service, category_factory, language_model, 168 language_model, base::Bind(&safe_json::SafeJsonParser::Parse),
175 base::Bind(&safe_json::SafeJsonParser::Parse), 169 is_stable_channel ? google_apis::GetAPIKey()
176 is_stable_channel ? google_apis::GetAPIKey() 170 : google_apis::GetNonStableAPIKey(),
177 : google_apis::GetNonStableAPIKey(), 171 service->user_classifier()),
178 service->user_classifier()),
179 base::MakeUnique<ImageFetcherImpl>(base::MakeUnique<ImageDecoderImpl>(), 172 base::MakeUnique<ImageFetcherImpl>(base::MakeUnique<ImageDecoderImpl>(),
180 request_context.get()), 173 request_context.get()),
181 base::MakeUnique<ImageDecoderImpl>(), 174 base::MakeUnique<ImageDecoderImpl>(),
182 base::MakeUnique<RemoteSuggestionsDatabase>(database_dir, task_runner), 175 base::MakeUnique<RemoteSuggestionsDatabase>(database_dir, task_runner),
183 base::MakeUnique<RemoteSuggestionsStatusService>(signin_manager, 176 base::MakeUnique<RemoteSuggestionsStatusService>(signin_manager,
184 pref_service)); 177 pref_service));
185 service->set_ntp_snippets_service(provider.get()); 178 service->set_ntp_snippets_service(provider.get());
186 service->RegisterProvider(std::move(provider)); 179 service->RegisterProvider(std::move(provider));
187 } 180 }
188 181
189 void RegisterForeignSessionsProvider(SyncService* sync_service, 182 void RegisterForeignSessionsProvider(SyncService* sync_service,
190 ContentSuggestionsService* service, 183 ContentSuggestionsService* service,
191 CategoryFactory* category_factory,
192 PrefService* pref_service) { 184 PrefService* pref_service) {
193 std::unique_ptr<TabDelegateSyncAdapter> sync_adapter = 185 std::unique_ptr<TabDelegateSyncAdapter> sync_adapter =
194 base::MakeUnique<TabDelegateSyncAdapter>(sync_service); 186 base::MakeUnique<TabDelegateSyncAdapter>(sync_service);
195 auto provider = base::MakeUnique<ForeignSessionsSuggestionsProvider>( 187 auto provider = base::MakeUnique<ForeignSessionsSuggestionsProvider>(
196 service, category_factory, std::move(sync_adapter), pref_service); 188 service, std::move(sync_adapter), pref_service);
197 service->RegisterProvider(std::move(provider)); 189 service->RegisterProvider(std::move(provider));
198 } 190 }
199 191
200 } // namespace 192 } // namespace
201 193
202 // static 194 // static
203 ContentSuggestionsServiceFactory* 195 ContentSuggestionsServiceFactory*
204 ContentSuggestionsServiceFactory::GetInstance() { 196 ContentSuggestionsServiceFactory::GetInstance() {
205 return base::Singleton<ContentSuggestionsServiceFactory>::get(); 197 return base::Singleton<ContentSuggestionsServiceFactory>::get();
206 } 198 }
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 // Create the ContentSuggestionsService. 236 // Create the ContentSuggestionsService.
245 State state = 237 State state =
246 base::FeatureList::IsEnabled(ntp_snippets::kContentSuggestionsFeature) 238 base::FeatureList::IsEnabled(ntp_snippets::kContentSuggestionsFeature)
247 ? State::ENABLED 239 ? State::ENABLED
248 : State::DISABLED; 240 : State::DISABLED;
249 SigninManagerBase* signin_manager = 241 SigninManagerBase* signin_manager =
250 SigninManagerFactory::GetForProfile(profile); 242 SigninManagerFactory::GetForProfile(profile);
251 HistoryService* history_service = HistoryServiceFactory::GetForProfile( 243 HistoryService* history_service = HistoryServiceFactory::GetForProfile(
252 profile, ServiceAccessType::EXPLICIT_ACCESS); 244 profile, ServiceAccessType::EXPLICIT_ACCESS);
253 PrefService* pref_service = profile->GetPrefs(); 245 PrefService* pref_service = profile->GetPrefs();
254 auto* service = new ContentSuggestionsService(state, signin_manager, 246 auto category_ranker =
255 history_service, pref_service); 247 base::MakeUnique<ntp_snippets::ConstantCategoryRanker>();
248 auto* service =
249 new ContentSuggestionsService(state, signin_manager, history_service,
250 pref_service, std::move(category_ranker));
256 if (state == State::DISABLED) { 251 if (state == State::DISABLED) {
257 // Since we won't initialise the services, they won't get a chance to 252 // Since we won't initialise the services, they won't get a chance to
258 // unschedule their tasks. We do it explicitly here instead. 253 // unschedule their tasks. We do it explicitly here instead.
259 ClearScheduledTasks(); 254 ClearScheduledTasks();
260 return service; 255 return service;
261 } 256 }
262 257
263 CategoryFactory* category_factory = service->category_factory();
264 #if defined(OS_ANDROID) 258 #if defined(OS_ANDROID)
265 OfflinePageModel* offline_page_model = 259 OfflinePageModel* offline_page_model =
266 OfflinePageModelFactory::GetForBrowserContext(profile); 260 OfflinePageModelFactory::GetForBrowserContext(profile);
267 DownloadManager* download_manager = 261 DownloadManager* download_manager =
268 content::BrowserContext::GetDownloadManager(profile); 262 content::BrowserContext::GetDownloadManager(profile);
269 PhysicalWebDataSource* physical_web_data_source = 263 PhysicalWebDataSource* physical_web_data_source =
270 g_browser_process->GetPhysicalWebDataSource(); 264 g_browser_process->GetPhysicalWebDataSource();
271 #endif // OS_ANDROID 265 #endif // OS_ANDROID
272 BookmarkModel* bookmark_model = 266 BookmarkModel* bookmark_model =
273 BookmarkModelFactory::GetForBrowserContext(profile); 267 BookmarkModelFactory::GetForBrowserContext(profile);
274 OAuth2TokenService* token_service = 268 OAuth2TokenService* token_service =
275 ProfileOAuth2TokenServiceFactory::GetForProfile(profile); 269 ProfileOAuth2TokenServiceFactory::GetForProfile(profile);
276 SyncService* sync_service = 270 SyncService* sync_service =
277 ProfileSyncServiceFactory::GetSyncServiceForBrowserContext(profile); 271 ProfileSyncServiceFactory::GetSyncServiceForBrowserContext(profile);
278 LanguageModel* language_model = 272 LanguageModel* language_model =
279 LanguageModelFactory::GetInstance()->GetForBrowserContext(profile); 273 LanguageModelFactory::GetInstance()->GetForBrowserContext(profile);
280 274
281 #if defined(OS_ANDROID) 275 #if defined(OS_ANDROID)
282 if (base::FeatureList::IsEnabled( 276 if (base::FeatureList::IsEnabled(
283 ntp_snippets::kRecentOfflineTabSuggestionsFeature)) { 277 ntp_snippets::kRecentOfflineTabSuggestionsFeature)) {
284 RegisterRecentTabProvider(offline_page_model, service, category_factory, 278 RegisterRecentTabProvider(offline_page_model, service, pref_service);
285 pref_service);
286 } 279 }
287 280
288 bool show_asset_downloads = 281 bool show_asset_downloads =
289 base::FeatureList::IsEnabled(features::kAssetDownloadSuggestionsFeature); 282 base::FeatureList::IsEnabled(features::kAssetDownloadSuggestionsFeature);
290 bool show_offline_page_downloads = base::FeatureList::IsEnabled( 283 bool show_offline_page_downloads = base::FeatureList::IsEnabled(
291 features::kOfflinePageDownloadSuggestionsFeature); 284 features::kOfflinePageDownloadSuggestionsFeature);
292 if (show_asset_downloads || show_offline_page_downloads) { 285 if (show_asset_downloads || show_offline_page_downloads) {
293 RegisterDownloadsProvider( 286 RegisterDownloadsProvider(
294 show_offline_page_downloads ? offline_page_model : nullptr, 287 show_offline_page_downloads ? offline_page_model : nullptr,
295 show_asset_downloads ? download_manager : nullptr, service, 288 show_asset_downloads ? download_manager : nullptr, service,
296 category_factory, pref_service); 289 pref_service);
297 } 290 }
298 #endif // OS_ANDROID 291 #endif // OS_ANDROID
299 292
300 // |bookmark_model| can be null in tests. 293 // |bookmark_model| can be null in tests.
301 if (base::FeatureList::IsEnabled(ntp_snippets::kBookmarkSuggestionsFeature) && 294 if (base::FeatureList::IsEnabled(ntp_snippets::kBookmarkSuggestionsFeature) &&
302 bookmark_model) { 295 bookmark_model) {
303 RegisterBookmarkProvider(bookmark_model, service, category_factory, 296 RegisterBookmarkProvider(bookmark_model, service, pref_service);
304 pref_service);
305 } 297 }
306 298
307 #if defined(OS_ANDROID) 299 #if defined(OS_ANDROID)
308 if (base::FeatureList::IsEnabled( 300 if (base::FeatureList::IsEnabled(
309 ntp_snippets::kPhysicalWebPageSuggestionsFeature)) { 301 ntp_snippets::kPhysicalWebPageSuggestionsFeature)) {
310 RegisterPhysicalWebPageProvider(service, category_factory, 302 RegisterPhysicalWebPageProvider(service, physical_web_data_source,
311 physical_web_data_source, pref_service); 303 pref_service);
312 } 304 }
313 #endif // OS_ANDROID 305 #endif // OS_ANDROID
314 306
315 if (base::FeatureList::IsEnabled(ntp_snippets::kArticleSuggestionsFeature)) { 307 if (base::FeatureList::IsEnabled(ntp_snippets::kArticleSuggestionsFeature)) {
316 RegisterArticleProvider(signin_manager, token_service, service, 308 RegisterArticleProvider(signin_manager, token_service, service,
317 category_factory, language_model, pref_service, 309 language_model, pref_service, profile);
318 profile);
319 } 310 }
320 311
321 if (base::FeatureList::IsEnabled( 312 if (base::FeatureList::IsEnabled(
322 ntp_snippets::kForeignSessionsSuggestionsFeature)) { 313 ntp_snippets::kForeignSessionsSuggestionsFeature)) {
323 RegisterForeignSessionsProvider(sync_service, service, category_factory, 314 RegisterForeignSessionsProvider(sync_service, service, pref_service);
324 pref_service);
325 } 315 }
326 316
327 return service; 317 return service;
328 } 318 }
OLDNEW
« no previous file with comments | « chrome/browser/android/ntp/ntp_snippets_bridge.cc ('k') | chrome/browser/ntp_snippets/download_suggestions_provider.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698