blob: 89b01246f64245c51049b01722350a9c4626f5aa [file] [log] [blame]
// 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_CATEGORY_RANKERS_CATEGORY_RANKER_H_
#define COMPONENTS_NTP_SNIPPETS_CATEGORY_RANKERS_CATEGORY_RANKER_H_
#include <string>
#include <vector>
#include "base/time/time.h"
#include "components/ntp_snippets/category.h"
namespace ntp_snippets {
// Orders categories.
// The order may be dynamic and change at any time.
class CategoryRanker {
public:
virtual ~CategoryRanker() = default;
// Compares two categories. True means that |left| precedes |right|, i.e. it
// must be located earlier (above) on the NTP. This method must satisfy
// "Compare" contract required by sort algorithms.
virtual bool Compare(Category left, Category right) const = 0;
// Deletes all history related data between |begin| and |end|. After this
// call, the category order may not depend on this history range anymore.
virtual void ClearHistory(base::Time begin, base::Time end) = 0;
// If |category| has not been added previously, it is added after all already
// known categories, otherwise nothing is changed.
virtual void AppendCategoryIfNecessary(Category category) = 0;
// If |category_to_insert| has not been added previously, it is added before
// |anchor|, otherwise nothing is changed.
virtual void InsertCategoryBeforeIfNecessary(Category category_to_insert,
Category anchor) = 0;
// If |category_to_insert| has not been added previously, it is added after
// |anchor|, otherwise nothing is changed.
virtual void InsertCategoryAfterIfNecessary(Category category_to_insert,
Category anchor) = 0;
struct DebugDataItem {
std::string label;
std::string content;
DebugDataItem(const std::string& label, const std::string& content)
: label(label), content(content) {}
};
// Returns DebugData in form of pairs of strings (label; content),
// e.g. describing internal state or parameter values.
virtual std::vector<DebugDataItem> GetDebugData() = 0;
// Feedback data from the user to update the ranking.
// Called whenever a suggestion is opened by the user.
virtual void OnSuggestionOpened(Category category) = 0;
// Called whenever a category is dismissed by the user.
virtual void OnCategoryDismissed(Category category) = 0;
};
} // namespace ntp_snippets
#endif // COMPONENTS_NTP_SNIPPETS_CATEGORY_RANKERS_CATEGORY_RANKER_H_