blob: be21e894c4fbb7a5088796049d7a6011d4d34a64 [file] [log] [blame]
// Copyright 2017 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.
#include <utility>
#include "components/ntp_snippets/contextual/contextual_suggestions_fetcher_impl.h"
#include "base/bind.h"
#include "services/network/public/cpp/shared_url_loader_factory.h"
namespace contextual_suggestions {
ContextualSuggestionsFetcherImpl::ContextualSuggestionsFetcherImpl(
const scoped_refptr<network::SharedURLLoaderFactory>& loader_factory,
const std::string& application_language_code)
: loader_factory_(loader_factory),
bcp_language_code_(application_language_code) {}
ContextualSuggestionsFetcherImpl::~ContextualSuggestionsFetcherImpl() = default;
void ContextualSuggestionsFetcherImpl::FetchContextualSuggestionsClusters(
const GURL& url,
FetchClustersCallback callback,
ReportFetchMetricsCallback metrics_callback) {
auto fetch =
std::make_unique<ContextualSuggestionsFetch>(url, bcp_language_code_);
ContextualSuggestionsFetch* fetch_unowned = fetch.get();
pending_requests_.emplace(std::move(fetch));
FetchClustersCallback internal_callback = base::BindOnce(
&ContextualSuggestionsFetcherImpl::FetchFinished, base::Unretained(this),
fetch_unowned, std::move(callback));
fetch_unowned->Start(std::move(internal_callback),
std::move(metrics_callback), loader_factory_);
}
void ContextualSuggestionsFetcherImpl::FetchFinished(
ContextualSuggestionsFetch* fetch,
FetchClustersCallback callback,
ContextualSuggestionsResult result) {
auto fetch_iterator = pending_requests_.find(fetch);
CHECK(fetch_iterator != pending_requests_.end());
pending_requests_.erase(fetch_iterator);
std::move(callback).Run(std::move(result));
}
} // namespace contextual_suggestions