OLD | NEW |
---|---|
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 "base/feature_list.h" | 7 #include "base/feature_list.h" |
8 #include "base/files/file_path.h" | 8 #include "base/files/file_path.h" |
9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
10 #include "base/memory/singleton.h" | 10 #include "base/memory/singleton.h" |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
70 | 70 |
71 namespace { | 71 namespace { |
72 | 72 |
73 // Clear the tasks that can be scheduled by running services. | 73 // Clear the tasks that can be scheduled by running services. |
74 void ClearScheduledTasks() { | 74 void ClearScheduledTasks() { |
75 #if defined(OS_ANDROID) | 75 #if defined(OS_ANDROID) |
76 NTPSnippetsLauncher::Get()->Unschedule(); | 76 NTPSnippetsLauncher::Get()->Unschedule(); |
77 #endif // OS_ANDROID | 77 #endif // OS_ANDROID |
78 } | 78 } |
79 | 79 |
80 void RegisterOfflinePageProvider(ContentSuggestionsService* service, | |
81 Profile* profile) { | |
82 bool recent_tabs_enabled = base::FeatureList::IsEnabled( | |
83 ntp_snippets::kRecentOfflineTabSuggestionsFeature); | |
84 bool downloads_enabled = | |
85 base::FeatureList::IsEnabled(ntp_snippets::kDownloadSuggestionsFeature); | |
86 bool download_manager_ui_enabled = | |
87 base::FeatureList::IsEnabled(chrome::android::kDownloadsUiFeature); | |
88 OfflinePageModel* offline_page_model = | |
89 OfflinePageModelFactory::GetForBrowserContext(profile); | |
90 | |
91 std::unique_ptr<OfflinePageSuggestionsProvider> | |
92 offline_page_suggestions_provider = | |
93 base::MakeUnique<OfflinePageSuggestionsProvider>( | |
94 recent_tabs_enabled, downloads_enabled, | |
95 download_manager_ui_enabled, service, service->category_factory(), | |
96 offline_page_model, profile->GetPrefs()); | |
97 service->RegisterProvider(std::move(offline_page_suggestions_provider)); | |
98 } | |
99 | |
100 void RegisterBookmarkProvider(ContentSuggestionsService* service, | |
101 Profile* profile) { | |
102 BookmarkModel* bookmark_model = | |
103 BookmarkModelFactory::GetForBrowserContext(profile); | |
104 std::unique_ptr<BookmarkSuggestionsProvider> bookmark_suggestions_provider = | |
105 base::MakeUnique<BookmarkSuggestionsProvider>( | |
106 service, service->category_factory(), bookmark_model); | |
107 service->RegisterProvider(std::move(bookmark_suggestions_provider)); | |
108 } | |
109 | |
110 void RegisterPhysicalWebPageProvider(ContentSuggestionsService* service) { | |
111 std::unique_ptr<PhysicalWebPageSuggestionsProvider> | |
112 physical_web_page_suggestions_provider = | |
113 base::MakeUnique<PhysicalWebPageSuggestionsProvider>( | |
114 service, service->category_factory()); | |
115 service->RegisterProvider(std::move(physical_web_page_suggestions_provider)); | |
116 } | |
117 | |
118 void RegisterArticleProvider(ContentSuggestionsService* service, | |
119 Profile* profile) { | |
120 SigninManagerBase* signin_manager = | |
121 SigninManagerFactory::GetForProfile(profile); | |
dgn
2016/08/17 14:07:29
We need to specifically declare the dependency on
tschumann
2016/08/18 17:41:29
So you are concerned about keeping the DependsOn()
dgn
2016/08/19 09:25:14
Yes, I agree, this CL already helps a lot. What I
vitaliii
2016/08/25 13:44:18
Done.
| |
122 OAuth2TokenService* token_service = | |
123 ProfileOAuth2TokenServiceFactory::GetForProfile(profile); | |
124 scoped_refptr<net::URLRequestContextGetter> request_context = | |
125 content::BrowserContext::GetDefaultStoragePartition(profile) | |
126 ->GetURLRequestContext(); | |
127 SuggestionsService* suggestions_service = | |
128 SuggestionsServiceFactory::GetForProfile(profile); | |
129 NTPSnippetsScheduler* scheduler = nullptr; | |
130 #if defined(OS_ANDROID) | |
131 scheduler = NTPSnippetsLauncher::Get(); | |
132 #endif // OS_ANDROID | |
133 base::FilePath database_dir( | |
134 profile->GetPath().Append(ntp_snippets::kDatabaseFolder)); | |
135 scoped_refptr<base::SequencedTaskRunner> task_runner = | |
136 BrowserThread::GetBlockingPool() | |
137 ->GetSequencedTaskRunnerWithShutdownBehavior( | |
138 base::SequencedWorkerPool::GetSequenceToken(), | |
139 base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN); | |
140 bool is_stable_channel = | |
141 chrome::GetChannel() == version_info::Channel::STABLE; | |
142 std::unique_ptr<NTPSnippetsService> ntp_snippets_service = | |
143 base::MakeUnique<NTPSnippetsService>( | |
144 service, service->category_factory(), profile->GetPrefs(), | |
145 suggestions_service, g_browser_process->GetApplicationLocale(), | |
146 scheduler, | |
147 base::MakeUnique<NTPSnippetsFetcher>( | |
148 signin_manager, token_service, request_context, | |
149 profile->GetPrefs(), service->category_factory(), | |
150 base::Bind(&safe_json::SafeJsonParser::Parse), is_stable_channel), | |
151 base::MakeUnique<ImageFetcherImpl>( | |
152 base::MakeUnique<ImageDecoderImpl>(), request_context.get()), | |
153 base::MakeUnique<ImageDecoderImpl>(), | |
154 base::MakeUnique<NTPSnippetsDatabase>(database_dir, task_runner), | |
155 base::MakeUnique<NTPSnippetsStatusService>(signin_manager, | |
156 profile->GetPrefs())); | |
157 service->set_ntp_snippets_service(ntp_snippets_service.get()); | |
158 service->RegisterProvider(std::move(ntp_snippets_service)); | |
159 } | |
160 | |
80 } // namespace | 161 } // namespace |
81 | 162 |
82 // static | 163 // static |
83 ContentSuggestionsServiceFactory* | 164 ContentSuggestionsServiceFactory* |
84 ContentSuggestionsServiceFactory::GetInstance() { | 165 ContentSuggestionsServiceFactory::GetInstance() { |
85 return base::Singleton<ContentSuggestionsServiceFactory>::get(); | 166 return base::Singleton<ContentSuggestionsServiceFactory>::get(); |
86 } | 167 } |
87 | 168 |
88 // static | 169 // static |
89 ContentSuggestionsService* ContentSuggestionsServiceFactory::GetForProfile( | 170 ContentSuggestionsService* ContentSuggestionsServiceFactory::GetForProfile( |
(...skipping 30 matching lines...) Expand all Loading... | |
120 : State::DISABLED; | 201 : State::DISABLED; |
121 ContentSuggestionsService* service = new ContentSuggestionsService(state); | 202 ContentSuggestionsService* service = new ContentSuggestionsService(state); |
122 if (state == State::DISABLED) { | 203 if (state == State::DISABLED) { |
123 // Since we won't initialise the services, they won't get a chance to | 204 // Since we won't initialise the services, they won't get a chance to |
124 // unschedule their tasks. We do it explicitly here instead. | 205 // unschedule their tasks. We do it explicitly here instead. |
125 ClearScheduledTasks(); | 206 ClearScheduledTasks(); |
126 return service; | 207 return service; |
127 } | 208 } |
128 | 209 |
129 #if defined(OS_ANDROID) | 210 #if defined(OS_ANDROID) |
130 // Create the OfflinePageSuggestionsProvider. | 211 if (base::FeatureList::IsEnabled( |
131 bool recent_tabs_enabled = base::FeatureList::IsEnabled( | 212 ntp_snippets::kRecentOfflineTabSuggestionsFeature) || |
132 ntp_snippets::kRecentOfflineTabSuggestionsFeature); | 213 base::FeatureList::IsEnabled(ntp_snippets::kDownloadSuggestionsFeature)) { |
133 bool downloads_enabled = | 214 RegisterOfflinePageProvider(service, profile); |
134 base::FeatureList::IsEnabled(ntp_snippets::kDownloadSuggestionsFeature); | |
135 bool download_manager_ui_enabled = | |
136 base::FeatureList::IsEnabled(chrome::android::kDownloadsUiFeature); | |
137 if (recent_tabs_enabled || downloads_enabled) { | |
138 OfflinePageModel* offline_page_model = | |
139 OfflinePageModelFactory::GetForBrowserContext(profile); | |
140 | |
141 std::unique_ptr<OfflinePageSuggestionsProvider> | |
142 offline_page_suggestions_provider = | |
143 base::MakeUnique<OfflinePageSuggestionsProvider>( | |
144 recent_tabs_enabled, downloads_enabled, | |
145 download_manager_ui_enabled, service, | |
146 service->category_factory(), offline_page_model, | |
147 profile->GetPrefs()); | |
148 service->RegisterProvider(std::move(offline_page_suggestions_provider)); | |
149 } | 215 } |
150 #endif // OS_ANDROID | 216 #endif // OS_ANDROID |
151 | 217 |
152 // Create the BookmarkSuggestionsProvider. | 218 if (base::FeatureList::IsEnabled(ntp_snippets::kBookmarkSuggestionsFeature)) { |
153 if (base::FeatureList::IsEnabled( | 219 RegisterBookmarkProvider(service, profile); |
154 ntp_snippets::kBookmarkSuggestionsFeature)) { | |
155 BookmarkModel* bookmark_model = | |
156 BookmarkModelFactory::GetForBrowserContext(profile); | |
157 std::unique_ptr<BookmarkSuggestionsProvider> bookmark_suggestions_provider = | |
158 base::MakeUnique<BookmarkSuggestionsProvider>( | |
159 service, service->category_factory(), bookmark_model); | |
160 service->RegisterProvider(std::move(bookmark_suggestions_provider)); | |
161 } | 220 } |
162 | 221 |
163 #if defined(OS_ANDROID) | 222 #if defined(OS_ANDROID) |
164 // Create the PhysicalWebPageSuggestionsProvider. | |
165 if (base::FeatureList::IsEnabled( | 223 if (base::FeatureList::IsEnabled( |
166 ntp_snippets::kPhysicalWebPageSuggestionsFeature)) { | 224 ntp_snippets::kPhysicalWebPageSuggestionsFeature)) { |
167 std::unique_ptr<PhysicalWebPageSuggestionsProvider> | 225 RegisterPhysicalWebPageProvider(service); |
168 physical_web_page_suggestions_provider = | |
169 base::MakeUnique<PhysicalWebPageSuggestionsProvider>( | |
170 service, service->category_factory()); | |
171 service->RegisterProvider( | |
172 std::move(physical_web_page_suggestions_provider)); | |
173 } | 226 } |
174 #endif // OS_ANDROID | 227 #endif // OS_ANDROID |
175 | 228 |
176 if (base::FeatureList::IsEnabled(ntp_snippets::kArticleSuggestionsFeature)) { | 229 if (base::FeatureList::IsEnabled(ntp_snippets::kArticleSuggestionsFeature)) { |
177 // Create the NTPSnippetsService (articles provider). | 230 RegisterArticleProvider(service, profile); |
178 SigninManagerBase* signin_manager = | |
179 SigninManagerFactory::GetForProfile(profile); | |
180 OAuth2TokenService* token_service = | |
181 ProfileOAuth2TokenServiceFactory::GetForProfile(profile); | |
182 scoped_refptr<net::URLRequestContextGetter> request_context = | |
183 content::BrowserContext::GetDefaultStoragePartition(context) | |
184 ->GetURLRequestContext(); | |
185 SuggestionsService* suggestions_service = | |
186 SuggestionsServiceFactory::GetForProfile(profile); | |
187 NTPSnippetsScheduler* scheduler = nullptr; | |
188 #if defined(OS_ANDROID) | |
189 scheduler = NTPSnippetsLauncher::Get(); | |
190 #endif // OS_ANDROID | |
191 base::FilePath database_dir( | |
192 profile->GetPath().Append(ntp_snippets::kDatabaseFolder)); | |
193 scoped_refptr<base::SequencedTaskRunner> task_runner = | |
194 BrowserThread::GetBlockingPool() | |
195 ->GetSequencedTaskRunnerWithShutdownBehavior( | |
196 base::SequencedWorkerPool::GetSequenceToken(), | |
197 base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN); | |
198 bool is_stable_channel = | |
199 chrome::GetChannel() == version_info::Channel::STABLE; | |
200 std::unique_ptr<NTPSnippetsService> ntp_snippets_service = | |
201 base::MakeUnique<NTPSnippetsService>( | |
202 service, service->category_factory(), profile->GetPrefs(), | |
203 suggestions_service, g_browser_process->GetApplicationLocale(), | |
204 scheduler, base::MakeUnique<NTPSnippetsFetcher>( | |
205 signin_manager, token_service, request_context, | |
206 profile->GetPrefs(), service->category_factory(), | |
207 base::Bind(&safe_json::SafeJsonParser::Parse), | |
208 is_stable_channel), | |
209 base::MakeUnique<ImageFetcherImpl>( | |
210 base::MakeUnique<ImageDecoderImpl>(), request_context.get()), | |
211 base::MakeUnique<ImageDecoderImpl>(), | |
212 base::MakeUnique<NTPSnippetsDatabase>(database_dir, task_runner), | |
213 base::MakeUnique<NTPSnippetsStatusService>(signin_manager, | |
214 profile->GetPrefs())); | |
215 service->set_ntp_snippets_service(ntp_snippets_service.get()); | |
216 service->RegisterProvider(std::move(ntp_snippets_service)); | |
217 } | 231 } |
218 | 232 |
219 return service; | 233 return service; |
220 } | 234 } |
OLD | NEW |