#include "components/feed/core/v2/feed_network_impl.h"
#include <memory>
#include <string_view>
#include <utility>
#include "base/base64.h"
#include "base/base64url.h"
#include "base/command_line.h"
#include "base/containers/flat_set.h"
#include "base/functional/bind.h"
#include "base/memory/raw_ptr.h"
#include "base/metrics/histogram_functions.h"
#include "base/metrics/histogram_macros.h"
#include "base/strings/strcat.h"
#include "base/strings/string_util.h"
#include "base/task/sequenced_task_runner.h"
#include "base/time/time.h"
#include "base/trace_event/trace_event.h"
#include "base/trace_event/typed_macros.h"
#include "components/feed/core/common/pref_names.h"
#include "components/feed/core/proto/v2/wire/feed_query.pb.h"
#include "components/feed/core/proto/v2/wire/request.pb.h"
#include "components/feed/core/proto/v2/wire/response.pb.h"
#include "components/feed/core/proto/v2/wire/upload_actions_request.pb.h"
#include "components/feed/core/proto/v2/wire/upload_actions_response.pb.h"
#include "components/feed/core/v2/metrics_reporter.h"
#include "components/feed/core/v2/proto_util.h"
#include "components/feed/feed_feature_list.h"
#include "components/prefs/pref_service.h"
#include "components/signin/public/base/consent_level.h"
#include "components/signin/public/identity_manager/access_token_info.h"
#include "components/signin/public/identity_manager/identity_manager.h"
#include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h"
#include "components/signin/public/identity_manager/scope_set.h"
#include "components/variations/net/variations_http_headers.h"
#include "google_apis/gaia/gaia_constants.h"
#include "net/base/isolation_info.h"
#include "net/base/load_flags.h"
#include "net/base/url_util.h"
#include "net/http/http_response_headers.h"
#include "net/http/http_status_code.h"
#include "net/traffic_annotation/network_traffic_annotation.h"
#include "services/network/public/cpp/resource_request.h"
#include "services/network/public/cpp/resource_request_body.h"
#include "services/network/public/cpp/shared_url_loader_factory.h"
#include "services/network/public/cpp/simple_url_loader.h"
#include "services/network/public/mojom/url_response_head.mojom.h"
#include "third_party/protobuf/src/google/protobuf/io/coded_stream.h"
#include "third_party/zlib/google/compression_utils.h"
namespace feed {
namespace {
constexpr char kApplicationXProtobuf[] = …;
constexpr base::TimeDelta kNetworkTimeout = …;
constexpr char kDiscoverHost[] = …;
signin::ScopeSet GetAuthScopes() { … }
int EstimateFeedQueryRequestSize(const network::ResourceRequest& request) { … }
GURL GetFeedQueryURL(feedwire::FeedQuery::RequestReason reason) { … }
GURL GetUrlWithoutQuery(const GURL& url) { … }
RawResponse;
net::HttpRequestHeaders CreateApiRequestHeaders(
const RequestMetadata& request_metadata) { … }
}
namespace {
void ParseAndForwardQueryResponse(
NetworkRequestType request_type,
base::OnceCallback<void(FeedNetwork::QueryRequestResult)> result_callback,
RawResponse raw_response) { … }
void AddMothershipPayloadQueryParams(const std::string& payload,
const std::string& language_tag,
GURL& url) { … }
int PopulateRequestBody(const std::string& request_body,
network::SimpleURLLoader* loader) { … }
GURL OverrideUrlSchemeHostPort(const GURL& url,
const GURL& override_scheme_host_port) { … }
}
class FeedNetworkImpl::NetworkFetch { … };
FeedNetworkImpl::FeedNetworkImpl(
Delegate* delegate,
signin::IdentityManager* identity_manager,
const std::string& api_key,
scoped_refptr<network::SharedURLLoaderFactory> loader_factory,
PrefService* pref_service)
: … { … }
FeedNetworkImpl::~FeedNetworkImpl() = default;
void FeedNetworkImpl::SendQueryRequest(
NetworkRequestType request_type,
const feedwire::Request& request,
const AccountInfo& account_info,
base::OnceCallback<void(QueryRequestResult)> callback) { … }
void FeedNetworkImpl::CancelRequests() { … }
void FeedNetworkImpl::Send(const GURL& url,
std::string_view request_method,
std::string request_body,
bool allow_bless_auth,
const AccountInfo& account_info,
net::HttpRequestHeaders headers,
bool is_feed_query,
base::OnceCallback<void(RawResponse)> callback) { … }
void FeedNetworkImpl::SendDiscoverApiRequest(
NetworkRequestType request_type,
std::string_view request_path,
std::string_view method,
std::string request_body,
const AccountInfo& account_info,
std::optional<RequestMetadata> request_metadata,
base::OnceCallback<void(RawResponse)> callback) { … }
void FeedNetworkImpl::SendAsyncDataRequest(
const GURL& url,
std::string_view request_method,
net::HttpRequestHeaders request_headers,
std::string request_body,
const AccountInfo& account_info,
base::OnceCallback<void(RawResponse)> callback) { … }
void FeedNetworkImpl::SendComplete(
NetworkFetch* fetch,
base::OnceCallback<void(RawResponse)> callback,
RawResponse raw_response) { … }
GURL FeedNetworkImpl::GetOverriddenUrl(const GURL& url) const { … }
}