blob: f2897060ad917d6c653533ad8f3d7d3ddf3db0fa [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_CONTENT_SUGGESTION_H_
#define COMPONENTS_NTP_SNIPPETS_CONTENT_SUGGESTION_H_
#include <memory>
#include <string>
#include <vector>
#include "base/macros.h"
#include "base/strings/string16.h"
#include "base/time/time.h"
#include "url/gurl.h"
namespace ntp_snippets {
// A content suggestion for the new tab page, which can be an article or an
// offline page, for example.
class ContentSuggestion {
public:
// Creates a new ContentSuggestion. The caller must ensure that the |id|
// passed in here is unique application-wide.
ContentSuggestion(const std::string& id,
const GURL& url);
ContentSuggestion(ContentSuggestion&&);
ContentSuggestion& operator=(ContentSuggestion&&);
~ContentSuggestion();
// An ID for identifying the suggestion. The ID is unique application-wide.
const std::string& id() const { return id_; }
// The normal content URL where the content referenced by the suggestion can
// be accessed.
const GURL& url() const { return url_; }
// If available, this contains an URL to an AMP version of the same content.
// Otherwise, this is an empty GURL().
const GURL& amp_url() const { return amp_url_; }
void set_amp_url(const GURL& amp_url) { amp_url_ = amp_url; }
// Title of the suggestion.
const base::string16& title() const { return title_; }
void set_title(const base::string16& title) { title_ = title; }
// Summary or relevant textual extract from the content.
const base::string16& snippet_text() const { return snippet_text_; }
void set_snippet_text(const base::string16& snippet_text) {
snippet_text_ = snippet_text;
}
// The time when the content represented by this suggestion was published.
const base::Time& publish_date() const { return publish_date_; }
void set_publish_date(const base::Time& publish_date) {
publish_date_ = publish_date;
}
// The name of the source/publisher of this suggestion.
const base::string16& publisher_name() const { return publisher_name_; }
void set_publisher_name(const base::string16& publisher_name) {
publisher_name_ = publisher_name;
}
// TODO(pke): Remove the score from the ContentSuggestion class. The UI only
// uses it to track user clicks (histogram data). Instead, the providers
// should be informed about clicks and do appropriate logging themselves.
// IMPORTANT: The score may simply be 0 for suggestions from providers which
// cannot provide score values.
float score() const { return score_; }
void set_score(float score) { score_ = score; }
private:
std::string id_;
GURL url_;
GURL amp_url_;
base::string16 title_;
base::string16 snippet_text_;
base::Time publish_date_;
base::string16 publisher_name_;
float score_;
DISALLOW_COPY_AND_ASSIGN(ContentSuggestion);
};
} // namespace ntp_snippets
#endif // COMPONENTS_NTP_SNIPPETS_CONTENT_SUGGESTION_H_