1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/browser/interest_group/auction_downloader_delegate.h"
#include <memory>
#include <optional>
#include <string>
#include "base/check.h"
#include "base/types/pass_key.h"
#include "content/browser/devtools/devtools_instrumentation.h"
#include "content/browser/interest_group/protected_audience_network_util.h"
#include "content/browser/renderer_host/frame_tree_node.h"
#include "content/browser/renderer_host/render_frame_host_impl.h"
#include "content/public/browser/frame_tree_node_id.h"
#include "content/services/auction_worklet/public/cpp/auction_downloader.h"
#include "net/http/http_request_headers.h"
#include "services/network/public/cpp/resource_request.h"
#include "services/network/public/cpp/url_loader_completion_status.h"
#include "services/network/public/mojom/url_response_head.mojom-forward.h"
#include "services/network/public/mojom/url_response_head.mojom.h"
namespace content {
AuctionDownloaderDelegate::AuctionDownloaderDelegate(
base::PassKey<AuctionDownloaderDelegate>,
FrameTreeNodeId frame_tree_node_id)
: frame_tree_node_id_(frame_tree_node_id) {}
AuctionDownloaderDelegate::~AuctionDownloaderDelegate() = default;
// static
std::unique_ptr<AuctionDownloaderDelegate>
AuctionDownloaderDelegate::MaybeCreate(FrameTreeNodeId frame_tree_node_id) {
if (!frame_tree_node_id) {
return nullptr;
}
return std::make_unique<AuctionDownloaderDelegate>(
base::PassKey<AuctionDownloaderDelegate>(), frame_tree_node_id);
}
void AuctionDownloaderDelegate::OnNetworkSendRequest(
network::ResourceRequest& request) {
// This should only be invoked once, since only one request is being made,
// without any retries.
DCHECK(!request_id_);
request_id_ = request.devtools_request_id;
FrameTreeNode* frame_tree_node =
FrameTreeNode::GloballyFindByID(frame_tree_node_id_);
if (frame_tree_node) {
std::optional<std::string> user_agent_override =
GetUserAgentOverrideForProtectedAudience(frame_tree_node);
if (user_agent_override) {
request.headers.SetHeader(net::HttpRequestHeaders::kUserAgent,
std::move(user_agent_override).value());
}
SetUpDevtoolsForRequest(frame_tree_node, request);
}
devtools_instrumentation::OnAuctionWorkletNetworkRequestWillBeSent(
frame_tree_node_id_, request, base::TimeTicks::Now());
}
void AuctionDownloaderDelegate::OnNetworkResponseReceived(
const GURL& url,
const network::mojom::URLResponseHead& head) {
devtools_instrumentation::OnAuctionWorkletNetworkResponseReceived(
frame_tree_node_id_, *request_id_, /*loader_id=*/*request_id_, url, head);
}
void AuctionDownloaderDelegate::OnNetworkRequestComplete(
const network::URLLoaderCompletionStatus& status) {
devtools_instrumentation::OnAuctionWorkletNetworkRequestComplete(
frame_tree_node_id_, *request_id_, status);
}
} // namespace content
|