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

Side by Side Diff: components/ntp_snippets/remote/ntp_snippets_service.h

Issue 2421463002: FetchMore functionality backend (Closed)
Patch Set: Strategy pattern to handle differences in fetching procedure. Created 4 years, 2 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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_REMOTE_NTP_SNIPPETS_SERVICE_H_ 5 #ifndef COMPONENTS_NTP_SNIPPETS_REMOTE_NTP_SNIPPETS_SERVICE_H_
6 #define COMPONENTS_NTP_SNIPPETS_REMOTE_NTP_SNIPPETS_SERVICE_H_ 6 #define COMPONENTS_NTP_SNIPPETS_REMOTE_NTP_SNIPPETS_SERVICE_H_
7 7
8 #include <cstddef> 8 #include <cstddef>
9 #include <map> 9 #include <map>
10 #include <memory> 10 #include <memory>
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 // tasks will be re-scheduled even if they already exist and have the correct 109 // tasks will be re-scheduled even if they already exist and have the correct
110 // periods. 110 // periods.
111 void RescheduleFetching(bool force); 111 void RescheduleFetching(bool force);
112 112
113 // ContentSuggestionsProvider implementation 113 // ContentSuggestionsProvider implementation
114 CategoryStatus GetCategoryStatus(Category category) override; 114 CategoryStatus GetCategoryStatus(Category category) override;
115 CategoryInfo GetCategoryInfo(Category category) override; 115 CategoryInfo GetCategoryInfo(Category category) override;
116 void DismissSuggestion(const ContentSuggestion::ID& suggestion_id) override; 116 void DismissSuggestion(const ContentSuggestion::ID& suggestion_id) override;
117 void FetchSuggestionImage(const ContentSuggestion::ID& suggestion_id, 117 void FetchSuggestionImage(const ContentSuggestion::ID& suggestion_id,
118 const ImageFetchedCallback& callback) override; 118 const ImageFetchedCallback& callback) override;
119 void FetchMore() override;
119 void ClearHistory( 120 void ClearHistory(
120 base::Time begin, 121 base::Time begin,
121 base::Time end, 122 base::Time end,
122 const base::Callback<bool(const GURL& url)>& filter) override; 123 const base::Callback<bool(const GURL& url)>& filter) override;
123 void ClearCachedSuggestions(Category category) override; 124 void ClearCachedSuggestions(Category category) override;
124 void GetDismissedSuggestionsForDebugging( 125 void GetDismissedSuggestionsForDebugging(
125 Category category, 126 Category category,
126 const DismissedSuggestionsCallback& callback) override; 127 const DismissedSuggestionsCallback& callback) override;
127 void ClearDismissedSuggestionsForDebugging(Category category) override; 128 void ClearDismissedSuggestionsForDebugging(Category category) override;
128 129
(...skipping 13 matching lines...) Expand all
142 } 143 }
143 144
144 // Dismissed snippets, only for unit tests. 145 // Dismissed snippets, only for unit tests.
145 const NTPSnippet::PtrVector& GetDismissedSnippetsForTesting( 146 const NTPSnippet::PtrVector& GetDismissedSnippetsForTesting(
146 Category category) const { 147 Category category) const {
147 return categories_.find(category)->second.dismissed; 148 return categories_.find(category)->second.dismissed;
148 } 149 }
149 150
150 private: 151 private:
151 friend class NTPSnippetsServiceTest; 152 friend class NTPSnippetsServiceTest;
153
154 // Forward declaration of the Strategy used to process fetch requests.
155 class NewNTPSnippetsHandlingStrategy;
156
152 FRIEND_TEST_ALL_PREFIXES(NTPSnippetsServiceTest, 157 FRIEND_TEST_ALL_PREFIXES(NTPSnippetsServiceTest,
153 RemoveExpiredDismissedContent); 158 RemoveExpiredDismissedContent);
154 FRIEND_TEST_ALL_PREFIXES(NTPSnippetsServiceTest, RescheduleOnStateChange); 159 FRIEND_TEST_ALL_PREFIXES(NTPSnippetsServiceTest, RescheduleOnStateChange);
155 FRIEND_TEST_ALL_PREFIXES(NTPSnippetsServiceTest, StatusChanges); 160 FRIEND_TEST_ALL_PREFIXES(NTPSnippetsServiceTest, StatusChanges);
156 FRIEND_TEST_ALL_PREFIXES(NTPSnippetsServiceTest, 161 FRIEND_TEST_ALL_PREFIXES(NTPSnippetsServiceTest,
157 SuggestionsFetchedOnSignInAndSignOut); 162 SuggestionsFetchedOnSignInAndSignOut);
158 163
159 // Possible state transitions: 164 // Possible state transitions:
160 // NOT_INITED --------+ 165 // NOT_INITED --------+
161 // / \ | 166 // / \ |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 // image_fetcher::ImageFetcherDelegate implementation. 206 // image_fetcher::ImageFetcherDelegate implementation.
202 void OnImageDataFetched(const std::string& id_within_category, 207 void OnImageDataFetched(const std::string& id_within_category,
203 const std::string& image_data) override; 208 const std::string& image_data) override;
204 209
205 // Callbacks for the NTPSnippetsDatabase. 210 // Callbacks for the NTPSnippetsDatabase.
206 void OnDatabaseLoaded(NTPSnippet::PtrVector snippets); 211 void OnDatabaseLoaded(NTPSnippet::PtrVector snippets);
207 void OnDatabaseError(); 212 void OnDatabaseError();
208 213
209 // Callback for the NTPSnippetsFetcher. 214 // Callback for the NTPSnippetsFetcher.
210 void OnFetchFinished( 215 void OnFetchFinished(
216 std::unique_ptr<NewNTPSnippetsHandlingStrategy> strategy,
211 NTPSnippetsFetcher::OptionalFetchedCategories fetched_categories); 217 NTPSnippetsFetcher::OptionalFetchedCategories fetched_categories);
212 218
213 // Moves all snippets from |to_archive| into the archive of the |category|. 219 // Moves all snippets from |to_archive| into the archive of the |category|.
214 // It also deletes the snippets from the DB and keeps the archive reasonably 220 // It also deletes the snippets from the DB and keeps the archive reasonably
215 // short. 221 // short.
216 void ArchiveSnippets(Category category, NTPSnippet::PtrVector* to_archive); 222 void ArchiveSnippets(Category category, NTPSnippet::PtrVector* to_archive);
217 223
218 // Replace old snippets in |category| by newly available snippets. 224 // Add newly available snippets in |category| to the provided content.
219 void ReplaceSnippets(Category category, NTPSnippet::PtrVector new_snippets); 225 // If |replace_snippets| is set, archive old snippets.
226 void StoreSnippets(const Category& category,
227 NTPSnippet::PtrVector new_snippets,
228 NewNTPSnippetsHandlingStrategy* strategy);
220 229
221 // Removes expired dismissed snippets from the service and the database. 230 // Removes expired dismissed snippets from the service and the database.
222 void ClearExpiredDismissedSnippets(); 231 void ClearExpiredDismissedSnippets();
223 232
224 // Removes images from the DB that are not referenced from any known snippet. 233 // Removes images from the DB that are not referenced from any known snippet.
225 // Needs to iterate the whole snippet database -- so do it often enough to 234 // Needs to iterate the whole snippet database -- so do it often enough to
226 // keep it small but not too often as it still iterates over the file system. 235 // keep it small but not too often as it still iterates over the file system.
227 void ClearOrphanedImages(); 236 void ClearOrphanedImages();
228 237
229 // Clears all stored snippets and updates the observer. 238 // Clears all stored snippets and updates the observer.
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 285
277 // Updates the internal status for |category| to |category_status_| and 286 // Updates the internal status for |category| to |category_status_| and
278 // notifies the content suggestions observer if it changed. 287 // notifies the content suggestions observer if it changed.
279 void UpdateCategoryStatus(Category category, CategoryStatus status); 288 void UpdateCategoryStatus(Category category, CategoryStatus status);
280 // Calls UpdateCategoryStatus() for all provided categories. 289 // Calls UpdateCategoryStatus() for all provided categories.
281 void UpdateAllCategoryStatus(CategoryStatus status); 290 void UpdateAllCategoryStatus(CategoryStatus status);
282 291
283 void RestoreCategoriesFromPrefs(); 292 void RestoreCategoriesFromPrefs();
284 void StoreCategoriesToPrefs(); 293 void StoreCategoriesToPrefs();
285 294
295 // Implementation for |FetchSnippets| and |FetchMore| that calls the snippet
296 // fetcher and replaces or adds the fetched snippets depending on the passed
297 // |strategy|.
298 void FetchSnippetsFromHostsImpl(
299 const std::set<std::string>& hosts,
300 bool interactive_request,
301 std::unique_ptr<NewNTPSnippetsHandlingStrategy> strategy);
302
303 void MarkEmptyCategoriesAsLoading();
304
305 void AssignExpiryDates(NTPSnippet::PtrVector* snippets);
306
307 void AddIncompleteSnippets(NTPSnippet::PtrVector* snippets);
308
286 State state_; 309 State state_;
287 310
311 // TODO(fhorschig): Consider moving this into a separate File.
312 // This class implements a Strategy pattern to determine the handling of new
313 // snippets.
314 // As friend of NTPSnippetService, it calls private methods to handle the
315 // persistence of snippets, invoking correct notification for observers, etc.
316 class NewNTPSnippetsHandlingStrategy {
317 public:
318 virtual void NotifySuggestions() = 0;
319 virtual void SaveNewSnippets(const Category& category,
320 NTPSnippet::PtrVector new_snippets) = 0;
321 virtual void CollectIdsToExclude(std::set<std::string>* ids) = 0;
322
323 protected:
324 explicit NewNTPSnippetsHandlingStrategy(NTPSnippetsService* service);
325
326 NTPSnippetsService* service_;
327
328 private:
329 DISALLOW_COPY_AND_ASSIGN(NewNTPSnippetsHandlingStrategy);
330 };
331 friend class NewNTPSnippetsHandlingStrategy;
Marc Treib 2016/10/18 08:17:45 Hm... TBH, I'm not sure I like this. Clearly, NTPS
fhorschig 2016/10/20 13:10:38 I absolutely agree with the private methods and I
Marc Treib 2016/10/20 16:51:39 I guess that might work... it's hard to judge with
tschumann 2016/10/24 06:38:25 What about introducing a NTPSnippetsFetcher::Param
Marc Treib 2016/10/28 14:49:48 NTPSnippetsFetcher::FetchSnippets now takes a Para
332
333 // This class handles fetch requests that require all existing snippets to be
334 // replaced by newly fetched ones.
335 // It invokes the |OnNewSuggestions()| notification for observers.
336 class ReplaceExistingSnippets : public NewNTPSnippetsHandlingStrategy {
337 public:
338 explicit ReplaceExistingSnippets(NTPSnippetsService* service);
339 void CollectIdsToExclude(std::set<std::string>* ids) override;
340 void SaveNewSnippets(const Category& category,
341 NTPSnippet::PtrVector new_snippets) override;
342 void NotifySuggestions() override;
343 };
344
345 // This class handles fetch requests that add more snippets.
346 // It invokes the |OnMoreSuggestions()| notification for observers.
347 class AddNewSnippets : public NewNTPSnippetsHandlingStrategy{
348 public:
349 explicit AddNewSnippets(NTPSnippetsService* service);
350
351 void CollectIdsToExclude(std::set<std::string>* ids) override;
352 void SaveNewSnippets(const Category& category,
353 NTPSnippet::PtrVector new_snippets) override;
354 void NotifySuggestions() override;
355 };
356
288 PrefService* pref_service_; 357 PrefService* pref_service_;
289 358
290 const Category articles_category_; 359 const Category articles_category_;
291 360
292 // TODO(sfiera): Reduce duplication of CategoryContent with CategoryInfo. 361 // TODO(sfiera): Reduce duplication of CategoryContent with CategoryInfo.
293 struct CategoryContent { 362 struct CategoryContent {
294 CategoryStatus status = CategoryStatus::INITIALIZING; 363 CategoryStatus status = CategoryStatus::INITIALIZING;
295 364
296 // The title of the section, localized to the running UI language. 365 // The title of the section, localized to the running UI language.
297 base::string16 localized_title; 366 base::string16 localized_title;
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 426
358 // Request throttler for limiting requests to thumbnail images. 427 // Request throttler for limiting requests to thumbnail images.
359 RequestThrottler thumbnail_requests_throttler_; 428 RequestThrottler thumbnail_requests_throttler_;
360 429
361 DISALLOW_COPY_AND_ASSIGN(NTPSnippetsService); 430 DISALLOW_COPY_AND_ASSIGN(NTPSnippetsService);
362 }; 431 };
363 432
364 } // namespace ntp_snippets 433 } // namespace ntp_snippets
365 434
366 #endif // COMPONENTS_NTP_SNIPPETS_REMOTE_NTP_SNIPPETS_SERVICE_H_ 435 #endif // COMPONENTS_NTP_SNIPPETS_REMOTE_NTP_SNIPPETS_SERVICE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698