Chromium Code Reviews| 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 #ifndef COMPONENTS_NTP_SNIPPETS_CONTENT_SUGGESTIONS_SERVICE_H_ | 5 #ifndef COMPONENTS_NTP_SNIPPETS_CONTENT_SUGGESTIONS_SERVICE_H_ |
| 6 #define COMPONENTS_NTP_SNIPPETS_CONTENT_SUGGESTIONS_SERVICE_H_ | 6 #define COMPONENTS_NTP_SNIPPETS_CONTENT_SUGGESTIONS_SERVICE_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <set> | 10 #include <set> |
| 11 #include <string> | 11 #include <string> |
| 12 #include <vector> | 12 #include <vector> |
| 13 | 13 |
| 14 #include "base/callback_forward.h" | 14 #include "base/callback_forward.h" |
| 15 #include "base/observer_list.h" | 15 #include "base/observer_list.h" |
| 16 #include "base/optional.h" | 16 #include "base/optional.h" |
| 17 #include "base/scoped_observer.h" | 17 #include "base/scoped_observer.h" |
| 18 #include "base/time/time.h" | 18 #include "base/time/time.h" |
| 19 #include "components/history/core/browser/history_service.h" | 19 #include "components/history/core/browser/history_service.h" |
| 20 #include "components/history/core/browser/history_service_observer.h" | 20 #include "components/history/core/browser/history_service_observer.h" |
| 21 #include "components/keyed_service/core/keyed_service.h" | 21 #include "components/keyed_service/core/keyed_service.h" |
| 22 #include "components/ntp_snippets/callbacks.h" | 22 #include "components/ntp_snippets/callbacks.h" |
| 23 #include "components/ntp_snippets/category_factory.h" | 23 #include "components/ntp_snippets/category_factory.h" |
| 24 #include "components/ntp_snippets/category_status.h" | 24 #include "components/ntp_snippets/category_status.h" |
| 25 #include "components/ntp_snippets/content_suggestions_provider.h" | 25 #include "components/ntp_snippets/content_suggestions_provider.h" |
| 26 #include "components/ntp_snippets/remote/persistent_scheduler.h" | |
| 26 #include "components/ntp_snippets/user_classifier.h" | 27 #include "components/ntp_snippets/user_classifier.h" |
| 27 #include "components/signin/core/browser/signin_manager.h" | 28 #include "components/signin/core/browser/signin_manager.h" |
| 28 | 29 |
| 29 class PrefService; | 30 class PrefService; |
| 30 class PrefRegistrySimple; | 31 class PrefRegistrySimple; |
| 31 | 32 |
| 32 namespace ntp_snippets { | 33 namespace ntp_snippets { |
| 33 | 34 |
| 34 class RemoteSuggestionsProvider; | 35 class RemoteSuggestionsProvider; |
| 35 | 36 |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 133 // Restores all dismissed categories. | 134 // Restores all dismissed categories. |
| 134 // This will not trigger an update through the observers. | 135 // This will not trigger an update through the observers. |
| 135 void RestoreDismissedCategories(); | 136 void RestoreDismissedCategories(); |
| 136 | 137 |
| 137 // Returns whether |category| is dismissed. | 138 // Returns whether |category| is dismissed. |
| 138 bool IsCategoryDismissed(Category category) const; | 139 bool IsCategoryDismissed(Category category) const; |
| 139 | 140 |
| 140 // Fetches additional contents for the given |category|. If the fetch was | 141 // Fetches additional contents for the given |category|. If the fetch was |
| 141 // completed, the given |callback| is called with the updated content. | 142 // completed, the given |callback| is called with the updated content. |
| 142 // This includes new and old data. | 143 // This includes new and old data. |
| 144 // TODO(jkrcal): Consider either renaming this to FetchMore or unify the ways | |
| 145 // to get suggestions to just this async Fetch() API. | |
| 143 void Fetch(const Category& category, | 146 void Fetch(const Category& category, |
| 144 const std::set<std::string>& known_suggestion_ids, | 147 const std::set<std::string>& known_suggestion_ids, |
| 145 const FetchDoneCallback& callback); | 148 const FetchDoneCallback& callback); |
| 146 | 149 |
| 150 // Reloads suggestions from all categories. Makes sense to call only after | |
|
tschumann
2016/12/15 19:27:00
what does "reload" mean? Would this include fetchi
jkrcal
2016/12/19 09:40:24
I've rewritten the comment. Hope it is clearer now
| |
| 151 // some suggestions have been dismissed. The provider may fill in the vacant | |
| 152 // space by new suggestions that haven't been included previously due to space | |
| 153 // limits. | |
| 154 void ReloadSuggestions(); | |
| 155 | |
| 147 // Observer accessors. | 156 // Observer accessors. |
| 148 void AddObserver(Observer* observer); | 157 void AddObserver(Observer* observer); |
| 149 void RemoveObserver(Observer* observer); | 158 void RemoveObserver(Observer* observer); |
| 150 | 159 |
| 151 // Registers a new ContentSuggestionsProvider. It must be ensured that at most | 160 // Registers a new ContentSuggestionsProvider. It must be ensured that at most |
| 152 // one provider is registered for every category and that this method is | 161 // one provider is registered for every category and that this method is |
| 153 // called only once per provider. | 162 // called only once per provider. |
| 154 void RegisterProvider(std::unique_ptr<ContentSuggestionsProvider> provider); | 163 void RegisterProvider(std::unique_ptr<ContentSuggestionsProvider> provider); |
| 155 | 164 |
| 156 // Removes history from the specified time range where the URL matches the | 165 // Removes history from the specified time range where the URL matches the |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 186 | 195 |
| 187 // Only for debugging use through the internals page. Some providers | 196 // Only for debugging use through the internals page. Some providers |
| 188 // internally store a list of dismissed suggestions to prevent them from | 197 // internally store a list of dismissed suggestions to prevent them from |
| 189 // reappearing. This function clears all suggestions of the given |category| | 198 // reappearing. This function clears all suggestions of the given |category| |
| 190 // from such lists, making dismissed suggestions reappear (if the provider | 199 // from such lists, making dismissed suggestions reappear (if the provider |
| 191 // supports it). | 200 // supports it). |
| 192 void ClearDismissedSuggestionsForDebugging(Category category); | 201 void ClearDismissedSuggestionsForDebugging(Category category); |
| 193 | 202 |
| 194 CategoryFactory* category_factory() { return &category_factory_; } | 203 CategoryFactory* category_factory() { return &category_factory_; } |
| 195 | 204 |
| 196 // The reference to the RemoteSuggestionsProvider provider should only be set | 205 // The reference to the RemoteSuggestionsProvider provider should |
| 197 // by the factory and only be used for scheduling, periodic fetching and | 206 // only be set by the factory and only used for debugging. |
| 198 // debugging. | 207 void set_remote_suggestions_provider( |
|
tschumann
2016/12/15 19:27:00
please add a TODO() to remove this setter. These i
jkrcal
2016/12/19 09:40:24
Yes, there is a cyclic dependency. Adding a setter
tschumann
2016/12/19 11:19:23
The depdencies just feel wrong: Needing the servic
jkrcal
2016/12/20 16:39:45
Thanks for the explanation. Still not totally conv
| |
| 199 RemoteSuggestionsProvider* ntp_snippets_service() { | 208 RemoteSuggestionsProvider* remote_suggestions_provider) { |
| 200 return ntp_snippets_service_; | 209 remote_suggestions_provider_ = remote_suggestions_provider; |
| 201 } | 210 } |
| 202 void set_ntp_snippets_service( | 211 RemoteSuggestionsProvider* remote_suggestions_provider_for_debugging() { |
| 203 RemoteSuggestionsProvider* ntp_snippets_service) { | 212 return remote_suggestions_provider_; |
| 204 ntp_snippets_service_ = ntp_snippets_service; | 213 } |
| 214 | |
| 215 // The reference to PersistentScheduler::Listener should | |
| 216 // only be set by the factory and only used for scheduling, periodic fetching. | |
| 217 void set_persistent_scheduler_listener( | |
| 218 PersistentScheduler::Listener* persistent_scheduler_listener) { | |
| 219 persistent_scheduler_listener_ = persistent_scheduler_listener; | |
| 220 } | |
| 221 PersistentScheduler::Listener* persistent_scheduler_listener() { | |
| 222 return persistent_scheduler_listener_; | |
| 205 } | 223 } |
| 206 | 224 |
| 207 UserClassifier* user_classifier() { return &user_classifier_; } | 225 UserClassifier* user_classifier() { return &user_classifier_; } |
| 208 | 226 |
| 209 private: | 227 private: |
| 210 friend class ContentSuggestionsServiceTest; | 228 friend class ContentSuggestionsServiceTest; |
| 211 | 229 |
| 212 // Implementation of ContentSuggestionsProvider::Observer. | 230 // Implementation of ContentSuggestionsProvider::Observer. |
| 213 void OnNewSuggestions(ContentSuggestionsProvider* provider, | 231 void OnNewSuggestions(ContentSuggestionsProvider* provider, |
| 214 Category category, | 232 Category category, |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 305 | 323 |
| 306 // Observer for the HistoryService. All providers are notified when history is | 324 // Observer for the HistoryService. All providers are notified when history is |
| 307 // deleted. | 325 // deleted. |
| 308 ScopedObserver<history::HistoryService, history::HistoryServiceObserver> | 326 ScopedObserver<history::HistoryService, history::HistoryServiceObserver> |
| 309 history_service_observer_; | 327 history_service_observer_; |
| 310 | 328 |
| 311 base::ObserverList<Observer> observers_; | 329 base::ObserverList<Observer> observers_; |
| 312 | 330 |
| 313 const std::vector<ContentSuggestion> no_suggestions_; | 331 const std::vector<ContentSuggestion> no_suggestions_; |
| 314 | 332 |
| 315 // Keep a direct reference to this special provider to redirect scheduling, | 333 // Keep a direct reference to this special provider to redirect debugging |
| 316 // background fetching and debugging calls to it. If the | 334 // calls to it. If the RemoteSuggestionsProvider is loaded, it is also present |
| 317 // RemoteSuggestionsProvider is loaded, it is also present in |providers_|, | 335 // in |providers_|, otherwise this is a nullptr. |
| 318 // otherwise this is a nullptr. | 336 RemoteSuggestionsProvider* remote_suggestions_provider_; |
| 319 RemoteSuggestionsProvider* ntp_snippets_service_; | 337 |
| 338 // Interface for OS-dependent scheduling and background fetching. | |
| 339 PersistentScheduler::Listener* persistent_scheduler_listener_; | |
| 320 | 340 |
| 321 PrefService* pref_service_; | 341 PrefService* pref_service_; |
| 322 | 342 |
| 323 UserClassifier user_classifier_; | 343 UserClassifier user_classifier_; |
| 324 | 344 |
| 325 DISALLOW_COPY_AND_ASSIGN(ContentSuggestionsService); | 345 DISALLOW_COPY_AND_ASSIGN(ContentSuggestionsService); |
| 326 }; | 346 }; |
| 327 | 347 |
| 328 } // namespace ntp_snippets | 348 } // namespace ntp_snippets |
| 329 | 349 |
| 330 #endif // COMPONENTS_NTP_SNIPPETS_CONTENT_SUGGESTIONS_SERVICE_H_ | 350 #endif // COMPONENTS_NTP_SNIPPETS_CONTENT_SUGGESTIONS_SERVICE_H_ |
| OLD | NEW |