blob: e16dec659f45820576c0ef871c8b6dfc3f93cf4f [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_REMOTE_REMOTE_SUGGESTIONS_FETCHER_H_
#define COMPONENTS_NTP_SNIPPETS_REMOTE_REMOTE_SUGGESTIONS_FETCHER_H_
#include <string>
#include <vector>
#include "base/callback.h"
#include "base/optional.h"
#include "components/ntp_snippets/category.h"
#include "components/ntp_snippets/category_info.h"
#include "components/ntp_snippets/remote/json_to_categories.h"
#include "components/ntp_snippets/remote/remote_suggestion.h"
#include "components/ntp_snippets/remote/request_params.h"
#include "components/ntp_snippets/status.h"
#include "components/version_info/version_info.h"
#include "url/gurl.h"
namespace ntp_snippets {
// Returns the appropriate API endpoint for the fetcher, in consideration of
// the channel and variation parameters.
GURL GetFetchEndpoint(version_info::Channel channel);
// Fetches suggestion data for the NTP from the server.
class RemoteSuggestionsFetcher {
public:
using OptionalFetchedCategories = base::Optional<FetchedCategoriesVector>;
using SnippetsAvailableCallback =
base::OnceCallback<void(Status status,
OptionalFetchedCategories fetched_categories)>;
virtual ~RemoteSuggestionsFetcher();
// Initiates a fetch from the server. When done (successfully or not), calls
// the callback.
//
// If an ongoing fetch exists, both fetches won't influence each other (i.e.
// every callback will be called exactly once).
virtual void FetchSnippets(const RequestParams& params,
SnippetsAvailableCallback callback) = 0;
// Debug string representing the status/result of the last fetch attempt.
virtual const std::string& GetLastStatusForDebugging() const = 0;
// Returns the last JSON fetched from the server.
virtual const std::string& GetLastJsonForDebugging() const = 0;
// Returns the URL endpoint used by the fetcher.
virtual const GURL& GetFetchUrlForDebugging() const = 0;
};
} // namespace ntp_snippets
#endif // COMPONENTS_NTP_SNIPPETS_REMOTE_REMOTE_SUGGESTIONS_FETCHER_H_