| Index: components/ntp_snippets/bookmarks/bookmark_suggestions_provider.cc
|
| diff --git a/components/ntp_snippets/bookmarks/bookmark_suggestions_provider.cc b/components/ntp_snippets/bookmarks/bookmark_suggestions_provider.cc
|
| index 04395e5c570d511e5f7abd467f852a0437dedffc..89fe6503db31a2fd592a561dabe3941e2d000902 100644
|
| --- a/components/ntp_snippets/bookmarks/bookmark_suggestions_provider.cc
|
| +++ b/components/ntp_snippets/bookmarks/bookmark_suggestions_provider.cc
|
| @@ -12,11 +12,15 @@
|
| #include "base/strings/string_number_conversions.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "base/threading/thread_task_runner_handle.h"
|
| +#include "base/time/time.h"
|
| #include "components/bookmarks/browser/bookmark_model.h"
|
| #include "components/ntp_snippets/bookmarks/bookmark_last_visit_utils.h"
|
| #include "components/ntp_snippets/category_factory.h"
|
| #include "components/ntp_snippets/content_suggestion.h"
|
| #include "components/ntp_snippets/features.h"
|
| +#include "components/ntp_snippets/pref_names.h"
|
| +#include "components/prefs/pref_registry_simple.h"
|
| +#include "components/prefs/pref_service.h"
|
| #include "components/variations/variations_associated_data.h"
|
| #include "grit/components_strings.h"
|
| #include "ui/base/l10n/l10n_util.h"
|
| @@ -30,18 +34,21 @@ namespace {
|
| const int kMaxBookmarks = 10;
|
| const int kMinBookmarks = 3;
|
| const int kMaxBookmarkAgeInDays = 42;
|
| +const int kUseCreationDateFallbackForDays = 42;
|
|
|
| -const char* kMaxBookmarksParamName = "max_count";
|
| -const char* kMinBookmarksParamName = "min_count";
|
| -const char* kMaxBookmarkAgeInDaysParamName = "max_age_in_days";
|
| +const char* kMaxBookmarksParamName = "bookmarks_max_count";
|
| +const char* kMinBookmarksParamName = "bookmarks_min_count";
|
| +const char* kMaxBookmarkAgeInDaysParamName = "bookmarks_max_age_in_days";
|
|
|
| base::Time GetThresholdTime() {
|
| std::string age_in_days_string = variations::GetVariationParamValueByFeature(
|
| ntp_snippets::kBookmarkSuggestionsFeature, kMaxBookmarkAgeInDaysParamName);
|
| int age_in_days = 0;
|
| - if (!base::StringToInt(age_in_days_string, &age_in_days))
|
| + if (!base::StringToInt(age_in_days_string, &age_in_days)) {
|
| + if (!age_in_days_string.empty())
|
| + LOG(WARNING) << "Failed to parse bookmark age " << age_in_days_string;
|
| age_in_days = kMaxBookmarkAgeInDays;
|
| -
|
| + }
|
| return base::Time::Now() - base::TimeDelta::FromDays(age_in_days);
|
| }
|
|
|
| @@ -51,6 +58,8 @@ int GetMaxCount() {
|
| int max_count = 0;
|
| if (base::StringToInt(max_count_string, &max_count))
|
| return max_count;
|
| + if (!max_count_string.empty())
|
| + LOG(WARNING) << "Failed to parse max bookmarks count" << max_count_string;
|
|
|
| return kMaxBookmarks;
|
| }
|
| @@ -61,6 +70,8 @@ int GetMinCount() {
|
| int min_count = 0;
|
| if (base::StringToInt(min_count_string, &min_count))
|
| return min_count;
|
| + if (!min_count_string.empty())
|
| + LOG(WARNING) << "Failed to parse min bookmarks count" << min_count_string;
|
|
|
| return kMinBookmarks;
|
| }
|
| @@ -72,7 +83,8 @@ namespace ntp_snippets {
|
| BookmarkSuggestionsProvider::BookmarkSuggestionsProvider(
|
| ContentSuggestionsProvider::Observer* observer,
|
| CategoryFactory* category_factory,
|
| - bookmarks::BookmarkModel* bookmark_model)
|
| + bookmarks::BookmarkModel* bookmark_model,
|
| + PrefService* pref_service)
|
| : ContentSuggestionsProvider(observer, category_factory),
|
| category_status_(CategoryStatus::AVAILABLE_LOADING),
|
| provided_category_(
|
| @@ -80,6 +92,19 @@ BookmarkSuggestionsProvider::BookmarkSuggestionsProvider(
|
| bookmark_model_(bookmark_model),
|
| fetch_requested_(false),
|
| end_of_list_last_visit_date_(GetThresholdTime()) {
|
| + base::Time first_m54_start;
|
| + base::Time now = base::Time::Now();
|
| + if (pref_service->HasPrefPath(prefs::kBookmarksFirstM54Start)) {
|
| + first_m54_start = base::Time::FromInternalValue(
|
| + pref_service->GetInt64(prefs::kBookmarksFirstM54Start));
|
| + } else {
|
| + first_m54_start = now;
|
| + pref_service->SetInt64(prefs::kBookmarksFirstM54Start,
|
| + first_m54_start.ToInternalValue());
|
| + }
|
| + base::TimeDelta time_since_first_m54_start = now - first_m54_start;
|
| + creation_date_fallback_ =
|
| + time_since_first_m54_start.InDays() < kUseCreationDateFallbackForDays;
|
| bookmark_model_->AddObserver(this);
|
| FetchBookmarks();
|
| }
|
| @@ -88,6 +113,12 @@ BookmarkSuggestionsProvider::~BookmarkSuggestionsProvider() {
|
| bookmark_model_->RemoveObserver(this);
|
| }
|
|
|
| +// static
|
| +void BookmarkSuggestionsProvider::RegisterProfilePrefs(
|
| + PrefRegistrySimple* registry) {
|
| + registry->RegisterInt64Pref(prefs::kBookmarksFirstM54Start, 0);
|
| +}
|
| +
|
| ////////////////////////////////////////////////////////////////////////////////
|
| // Private methods
|
|
|
| @@ -163,13 +194,14 @@ void BookmarkSuggestionsProvider::OnWillChangeBookmarkMetaInfo(
|
| const BookmarkNode* node) {
|
| // Store the last visit date of the node that is about to change.
|
| node_to_change_last_visit_date_ =
|
| - GetLastVisitDateForBookmarkIfNotDismissed(node);
|
| + GetLastVisitDateForBookmarkIfNotDismissed(node, creation_date_fallback_);
|
| }
|
|
|
| void BookmarkSuggestionsProvider::BookmarkMetaInfoChanged(
|
| BookmarkModel* model,
|
| const BookmarkNode* node) {
|
| - base::Time time = GetLastVisitDateForBookmarkIfNotDismissed(node);
|
| + base::Time time =
|
| + GetLastVisitDateForBookmarkIfNotDismissed(node, creation_date_fallback_);
|
| if (time == node_to_change_last_visit_date_ ||
|
| time < end_of_list_last_visit_date_)
|
| return;
|
| @@ -185,9 +217,10 @@ void BookmarkSuggestionsProvider::BookmarkNodeRemoved(
|
| int old_index,
|
| const bookmarks::BookmarkNode* node,
|
| const std::set<GURL>& no_longer_bookmarked) {
|
| - if (GetLastVisitDateForBookmarkIfNotDismissed(node) <
|
| - end_of_list_last_visit_date_)
|
| + if (GetLastVisitDateForBookmarkIfNotDismissed(node, creation_date_fallback_) <
|
| + end_of_list_last_visit_date_) {
|
| return;
|
| + }
|
|
|
| // Some node from our list got deleted, we should update the suggestions.
|
| FetchBookmarks();
|
| @@ -201,7 +234,8 @@ ContentSuggestion BookmarkSuggestionsProvider::ConvertBookmark(
|
|
|
| suggestion.set_title(bookmark->GetTitle());
|
| suggestion.set_snippet_text(base::string16());
|
| - suggestion.set_publish_date(GetLastVisitDateForBookmark(bookmark));
|
| + suggestion.set_publish_date(
|
| + GetLastVisitDateForBookmark(bookmark, creation_date_fallback_));
|
| suggestion.set_publisher_name(base::UTF8ToUTF16(bookmark->url().host()));
|
| return suggestion;
|
| }
|
| @@ -212,9 +246,9 @@ void BookmarkSuggestionsProvider::FetchBookmarksInternal() {
|
| NotifyStatusChanged(CategoryStatus::AVAILABLE);
|
|
|
| base::Time threshold_time = GetThresholdTime();
|
| - std::vector<const BookmarkNode*> bookmarks = GetRecentlyVisitedBookmarks(
|
| - bookmark_model_, GetMinCount(), GetMaxCount(),
|
| - threshold_time);
|
| + std::vector<const BookmarkNode*> bookmarks =
|
| + GetRecentlyVisitedBookmarks(bookmark_model_, GetMinCount(), GetMaxCount(),
|
| + threshold_time, creation_date_fallback_);
|
|
|
| std::vector<ContentSuggestion> suggestions;
|
| for (const BookmarkNode* bookmark : bookmarks)
|
|
|