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

Unified Diff: components/ntp_snippets/offline_pages/offline_page_suggestions_provider.cc

Issue 2251743002: Refactor OfflinePageSuggestionsProvider dismissed ID handling (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@offlinedelete
Patch Set: Fire OnSuggestionInvalidated even if previously dismissed Created 4 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: components/ntp_snippets/offline_pages/offline_page_suggestions_provider.cc
diff --git a/components/ntp_snippets/offline_pages/offline_page_suggestions_provider.cc b/components/ntp_snippets/offline_pages/offline_page_suggestions_provider.cc
index 3491a708c13ecb33c1a035c8b69d517587f9db49..8ce05637f31e634dc93e40d07f5fd3b170dfa70c 100644
--- a/components/ntp_snippets/offline_pages/offline_page_suggestions_provider.cc
+++ b/components/ntp_snippets/offline_pages/offline_page_suggestions_provider.cc
@@ -60,10 +60,6 @@ OfflinePageSuggestionsProvider::OfflinePageSuggestionsProvider(
downloads_category_(
category_factory->FromKnownCategory(KnownCategories::DOWNLOADS)),
pref_service_(pref_service),
- dismissed_recent_tab_ids_(ReadDismissedIDsFromPrefs(
- prefs::kDismissedRecentOfflineTabSuggestions)),
- dismissed_download_ids_(
- ReadDismissedIDsFromPrefs(prefs::kDismissedDownloadSuggestions)),
download_manager_ui_enabled_(download_manager_ui_enabled) {
DCHECK(recent_tabs_enabled || downloads_enabled);
offline_page_model_->AddObserver(this);
@@ -127,19 +123,9 @@ void OfflinePageSuggestionsProvider::DismissSuggestion(
const std::string& suggestion_id) {
Category category = GetCategoryFromUniqueID(suggestion_id);
std::string offline_page_id = GetWithinCategoryIDFromUniqueID(suggestion_id);
- if (category == recent_tabs_category_) {
- DCHECK_NE(CategoryStatus::NOT_PROVIDED, recent_tabs_status_);
- dismissed_recent_tab_ids_.insert(offline_page_id);
- StoreDismissedIDsToPrefs(prefs::kDismissedRecentOfflineTabSuggestions,
- dismissed_recent_tab_ids_);
- } else if (category == downloads_category_) {
- DCHECK_NE(CategoryStatus::NOT_PROVIDED, downloads_status_);
- dismissed_download_ids_.insert(offline_page_id);
- StoreDismissedIDsToPrefs(prefs::kDismissedDownloadSuggestions,
- dismissed_download_ids_);
- } else {
- NOTREACHED() << "Unknown category " << category.id();
- }
+ std::set<std::string> dismissed_ids = ReadDismissedIDsFromPrefs(category);
+ dismissed_ids.insert(offline_page_id);
+ StoreDismissedIDsToPrefs(category, dismissed_ids);
}
void OfflinePageSuggestionsProvider::FetchSuggestionImage(
@@ -161,20 +147,9 @@ OfflinePageSuggestionsProvider::GetDismissedSuggestionsForDebugging(
Category category) {
// TODO(pke): Make GetDismissedSuggestionsForDebugging asynchronous so this
// can return proper values.
+ std::set<std::string> dismissed_ids = ReadDismissedIDsFromPrefs(category);
std::vector<ContentSuggestion> suggestions;
- const std::set<std::string>* dismissed_ids = nullptr;
- if (category == recent_tabs_category_) {
- DCHECK_NE(CategoryStatus::NOT_PROVIDED, recent_tabs_status_);
- dismissed_ids = &dismissed_recent_tab_ids_;
- } else if (category == downloads_category_) {
- DCHECK_NE(CategoryStatus::NOT_PROVIDED, downloads_status_);
- dismissed_ids = &dismissed_download_ids_;
- } else {
- NOTREACHED() << "Unknown category " << category.id();
- return suggestions;
- }
-
- for (const std::string& dismissed_id : *dismissed_ids) {
+ for (const std::string& dismissed_id : dismissed_ids) {
ContentSuggestion suggestion(
MakeUniqueID(category, dismissed_id),
GURL("http://dismissed-offline-page-" + dismissed_id));
@@ -186,19 +161,7 @@ OfflinePageSuggestionsProvider::GetDismissedSuggestionsForDebugging(
void OfflinePageSuggestionsProvider::ClearDismissedSuggestionsForDebugging(
Category category) {
- if (category == recent_tabs_category_) {
- DCHECK_NE(CategoryStatus::NOT_PROVIDED, recent_tabs_status_);
- dismissed_recent_tab_ids_.clear();
- StoreDismissedIDsToPrefs(prefs::kDismissedRecentOfflineTabSuggestions,
- dismissed_recent_tab_ids_);
- } else if (category == downloads_category_) {
- DCHECK_NE(CategoryStatus::NOT_PROVIDED, downloads_status_);
- dismissed_download_ids_.clear();
- StoreDismissedIDsToPrefs(prefs::kDismissedDownloadSuggestions,
- dismissed_download_ids_);
- } else {
- NOTREACHED() << "Unknown category " << category.id();
- }
+ StoreDismissedIDsToPrefs(category, std::set<std::string>());
FetchOfflinePages();
}
@@ -216,34 +179,13 @@ void OfflinePageSuggestionsProvider::OfflinePageModelChanged(
void OfflinePageSuggestionsProvider::OfflinePageDeleted(
int64_t offline_id,
const offline_pages::ClientId& client_id) {
- std::string offline_page_id = base::IntToString(offline_id);
if (recent_tabs_status_ != CategoryStatus::NOT_PROVIDED &&
client_id.name_space == offline_pages::kLastNNamespace) {
- auto it = std::find(dismissed_recent_tab_ids_.begin(),
- dismissed_recent_tab_ids_.end(), offline_page_id);
- if (it == dismissed_recent_tab_ids_.end()) {
- observer()->OnSuggestionInvalidated(
- this, recent_tabs_category_,
- MakeUniqueID(recent_tabs_category_, offline_page_id));
- } else {
- dismissed_recent_tab_ids_.erase(it);
- StoreDismissedIDsToPrefs(prefs::kDismissedRecentOfflineTabSuggestions,
- dismissed_recent_tab_ids_);
- }
+ InvalidateSuggestion(recent_tabs_category_, offline_id);
} else if (downloads_status_ != CategoryStatus::NOT_PROVIDED &&
client_id.name_space == offline_pages::kAsyncNamespace &&
base::IsValidGUID(client_id.id)) {
- auto it = std::find(dismissed_download_ids_.begin(),
- dismissed_download_ids_.end(), offline_page_id);
- if (it == dismissed_download_ids_.end()) {
- observer()->OnSuggestionInvalidated(
- this, downloads_category_,
- MakeUniqueID(downloads_category_, offline_page_id));
- } else {
- dismissed_download_ids_.erase(it);
- StoreDismissedIDsToPrefs(prefs::kDismissedDownloadSuggestions,
- dismissed_download_ids_);
- }
+ InvalidateSuggestion(downloads_category_, offline_id);
}
}
@@ -262,12 +204,16 @@ void OfflinePageSuggestionsProvider::OnOfflinePagesLoaded(
if (need_downloads)
NotifyStatusChanged(downloads_category_, CategoryStatus::AVAILABLE);
+ std::set<std::string> dismissed_recent_tab_ids =
+ ReadDismissedIDsFromPrefs(recent_tabs_category_);
+ std::set<std::string> dismissed_download_ids =
+ ReadDismissedIDsFromPrefs(downloads_category_);
std::vector<const OfflinePageItem*> recent_tab_items;
std::vector<const OfflinePageItem*> download_items;
for (const OfflinePageItem& item : result) {
if (need_recent_tabs &&
item.client_id.name_space == offline_pages::kLastNNamespace &&
- !dismissed_recent_tab_ids_.count(base::IntToString(item.offline_id))) {
+ !dismissed_recent_tab_ids.count(base::IntToString(item.offline_id))) {
recent_tab_items.push_back(&item);
}
@@ -277,7 +223,7 @@ void OfflinePageSuggestionsProvider::OnOfflinePagesLoaded(
if (need_downloads &&
item.client_id.name_space == offline_pages::kAsyncNamespace &&
base::IsValidGUID(item.client_id.id) &&
- !dismissed_download_ids_.count(base::IntToString(item.offline_id))) {
+ !dismissed_download_ids.count(base::IntToString(item.offline_id))) {
download_items.push_back(&item);
}
}
@@ -356,10 +302,38 @@ OfflinePageSuggestionsProvider::GetMostRecentlyVisited(
return suggestions;
}
+void OfflinePageSuggestionsProvider::InvalidateSuggestion(Category category,
+ int64_t offline_id) {
+ std::string offline_page_id = base::IntToString(offline_id);
+ observer()->OnSuggestionInvalidated(this, category,
+ MakeUniqueID(category, offline_page_id));
+
+ std::set<std::string> dismissed_ids = ReadDismissedIDsFromPrefs(category);
+ auto it =
+ std::find(dismissed_ids.begin(), dismissed_ids.end(), offline_page_id);
+ if (it != dismissed_ids.end()) {
+ dismissed_ids.erase(it);
+ StoreDismissedIDsToPrefs(category, dismissed_ids);
+ }
+}
+
+std::string OfflinePageSuggestionsProvider::GetDismissedPref(
+ Category category) const {
+ if (category == recent_tabs_category_) {
+ return prefs::kDismissedRecentOfflineTabSuggestions;
+ } else if (category == downloads_category_) {
Marc Treib 2016/08/16 11:45:17 no else after return
Philipp Keck 2016/08/16 12:04:01 Done.
+ return prefs::kDismissedDownloadSuggestions;
+ } else {
+ NOTREACHED() << "Unknown category " << category.id();
+ return std::string();
+ }
+}
+
std::set<std::string> OfflinePageSuggestionsProvider::ReadDismissedIDsFromPrefs(
- const std::string& pref_name) const {
+ Category category) const {
std::set<std::string> dismissed_ids;
- const base::ListValue* list = pref_service_->GetList(pref_name);
+ const base::ListValue* list =
+ pref_service_->GetList(GetDismissedPref(category));
for (const std::unique_ptr<base::Value>& value : *list) {
std::string dismissed_id;
bool success = value->GetAsString(&dismissed_id);
@@ -370,12 +344,12 @@ std::set<std::string> OfflinePageSuggestionsProvider::ReadDismissedIDsFromPrefs(
}
void OfflinePageSuggestionsProvider::StoreDismissedIDsToPrefs(
- const std::string& pref_name,
+ Category category,
const std::set<std::string>& dismissed_ids) {
base::ListValue list;
for (const std::string& dismissed_id : dismissed_ids)
list.AppendString(dismissed_id);
- pref_service_->Set(pref_name, list);
+ pref_service_->Set(GetDismissedPref(category), list);
}
} // namespace ntp_snippets

Powered by Google App Engine
This is Rietveld 408576698