1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
|
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_NTP_SNIPPETS_OFFLINE_PAGES_RECENT_TAB_SUGGESTIONS_PROVIDER_H_
#define COMPONENTS_NTP_SNIPPETS_OFFLINE_PAGES_RECENT_TAB_SUGGESTIONS_PROVIDER_H_
#include <set>
#include <string>
#include <vector>
#include "base/callback_forward.h"
#include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h"
#include "base/time/time.h"
#include "components/ntp_snippets/category.h"
#include "components/ntp_snippets/category_status.h"
#include "components/ntp_snippets/content_suggestion.h"
#include "components/ntp_snippets/content_suggestions_provider.h"
#include "components/offline_pages/core/offline_page_model.h"
class PrefRegistrySimple;
class PrefService;
namespace ntp_snippets {
// Provides recent tabs content suggestions from the offline pages model.
class RecentTabSuggestionsProvider
: public ContentSuggestionsProvider,
public offline_pages::OfflinePageModel::Observer {
public:
RecentTabSuggestionsProvider(
ContentSuggestionsProvider::Observer* observer,
offline_pages::OfflinePageModel* offline_page_model,
PrefService* pref_service);
~RecentTabSuggestionsProvider() override;
// ContentSuggestionsProvider implementation.
CategoryStatus GetCategoryStatus(Category category) override;
CategoryInfo GetCategoryInfo(Category category) override;
void DismissSuggestion(const ContentSuggestion::ID& suggestion_id) override;
void FetchSuggestionImage(const ContentSuggestion::ID& suggestion_id,
const ImageFetchedCallback& callback) override;
void Fetch(const Category& category,
const std::set<std::string>& known_suggestion_ids,
const FetchDoneCallback& callback) override;
void ClearHistory(
base::Time begin,
base::Time end,
const base::Callback<bool(const GURL& url)>& filter) override;
void ClearCachedSuggestions(Category category) override;
void GetDismissedSuggestionsForDebugging(
Category category,
const DismissedSuggestionsCallback& callback) override;
void ClearDismissedSuggestionsForDebugging(Category category) override;
static void RegisterProfilePrefs(PrefRegistrySimple* registry);
private:
friend class RecentTabSuggestionsProviderTest;
void GetPagesMatchingQueryCallbackForGetDismissedSuggestions(
const DismissedSuggestionsCallback& callback,
const std::vector<offline_pages::OfflinePageItem>& offline_pages) const;
// OfflinePageModel::Observer implementation.
void OfflinePageModelLoaded(offline_pages::OfflinePageModel* model) override;
void OfflinePageAdded(
offline_pages::OfflinePageModel* model,
const offline_pages::OfflinePageItem& added_page) override;
void OfflinePageDeleted(int64_t offline_id,
const offline_pages::ClientId& client_id) override;
void GetPagesMatchingQueryCallbackForFetchRecentTabs(
const std::vector<offline_pages::OfflinePageItem>& offline_pages);
// Updates the |category_status_| of the |provided_category_| and notifies the
// |observer_|, if necessary.
void NotifyStatusChanged(CategoryStatus new_status);
// Manually requests all offline pages and updates the suggestions.
void FetchRecentTabs();
// Converts an OfflinePageItem to a ContentSuggestion for the
// |provided_category_|.
ContentSuggestion ConvertOfflinePage(
const offline_pages::OfflinePageItem& offline_page) const;
// Removes duplicates for the same URL leaving only the most recently created
// items, returns at most |GetMaxSuggestionsCount()| ContentSuggestions
// corresponding to the remaining items, sorted by creation time (newer
// first).
std::vector<ContentSuggestion> GetMostRecentlyCreatedWithoutDuplicates(
std::vector<const offline_pages::OfflinePageItem*> offline_page_items)
const;
// Fires the |OnSuggestionInvalidated| event for the suggestion corresponding
// to the given |offline_id| and deletes it from the dismissed IDs list, if
// necessary.
void InvalidateSuggestion(int64_t offline_id);
// Reads dismissed IDs from Prefs.
std::set<std::string> ReadDismissedIDsFromPrefs() const;
// Writes |dismissed_ids| into Prefs.
void StoreDismissedIDsToPrefs(const std::set<std::string>& dismissed_ids);
CategoryStatus category_status_;
const Category provided_category_;
offline_pages::OfflinePageModel* offline_page_model_;
PrefService* pref_service_;
base::WeakPtrFactory<RecentTabSuggestionsProvider> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(RecentTabSuggestionsProvider);
};
} // namespace ntp_snippets
#endif // COMPONENTS_NTP_SNIPPETS_OFFLINE_PAGES_RECENT_TAB_SUGGESTIONS_PROVIDER_H_
|