blob: b140c319f034edd17d849a503b96db298a96f282 [file] [log] [blame]
// Copyright 2018 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_CONTEXTUAL_CONTEXTUAL_SUGGESTIONS_RESULT_H_
#define COMPONENTS_NTP_SNIPPETS_CONTEXTUAL_CONTEXTUAL_SUGGESTIONS_RESULT_H_
#include "components/ntp_snippets/contextual/contextual_suggestion.h"
#include <string>
#include <utility>
#include <vector>
#include "base/containers/flat_map.h"
namespace contextual_suggestions {
// Encapsulates conditions under which to show or "peek" the contextual
// suggestions UI.
struct PeekConditions {
PeekConditions();
// A measure of confidence that auto-peek should be enabled for this response
// in the range [0, 1].
float confidence = 1.0;
// The percentage of the page that the user scrolls required for an auto
// peek to occur.
float page_scroll_percentage;
// The minimum time (seconds) the user spends on the page required for
// auto peek.
float minimum_seconds_on_page;
// The maximum number of auto peeks that we can show for this page.
uint64_t maximum_number_of_peeks;
};
// A structure representing a suggestion cluster.
struct Cluster {
Cluster();
Cluster(const Cluster&);
Cluster(Cluster&&) noexcept;
~Cluster();
Cluster& operator=(const Cluster&);
std::string title;
std::vector<ContextualSuggestion> suggestions;
};
// Allows concise construction of a cluster.
class ClusterBuilder {
public:
explicit ClusterBuilder(const std::string& title);
// Allow copying for ease of validation when testing.
ClusterBuilder(const ClusterBuilder& other);
ClusterBuilder& AddSuggestion(ContextualSuggestion suggestion);
Cluster Build();
private:
Cluster cluster_;
};
// Synthetic field trials driven by the server.
struct ServerExperimentInfo {
ServerExperimentInfo();
ServerExperimentInfo(std::string name, std::string group);
ServerExperimentInfo(const ServerExperimentInfo&);
ServerExperimentInfo(ServerExperimentInfo&&) noexcept;
~ServerExperimentInfo();
ServerExperimentInfo& operator=(ServerExperimentInfo&&);
ServerExperimentInfo& operator=(const ServerExperimentInfo&);
std::string name;
std::string group;
};
using ServerExperimentInfos = std::vector<ServerExperimentInfo>;
// Struct that holds the data from a ContextualSuggestions response that we care
// about for UI purposes.
struct ContextualSuggestionsResult {
ContextualSuggestionsResult();
ContextualSuggestionsResult(std::string peek_text,
std::vector<Cluster> clusters,
PeekConditions peek_conditions,
ServerExperimentInfos experiment_infos);
ContextualSuggestionsResult(const ContextualSuggestionsResult&);
ContextualSuggestionsResult(ContextualSuggestionsResult&&) noexcept;
~ContextualSuggestionsResult();
ContextualSuggestionsResult& operator=(ContextualSuggestionsResult&&);
ContextualSuggestionsResult& operator=(const ContextualSuggestionsResult&);
std::vector<Cluster> clusters;
std::string peek_text;
PeekConditions peek_conditions;
ServerExperimentInfos experiment_infos;
};
using FetchClustersCallback =
base::OnceCallback<void(ContextualSuggestionsResult result)>;
} // namespace contextual_suggestions
#endif // COMPONENTS_NTP_SNIPPETS_CONTEXTUAL_CONTEXTUAL_SUGGESTIONS_RESULT_H_