`ChildProcessId` is now a strong alias, however when fixing this it became apparent that there was actually no use for the value being plumed around. This change removes the plumbing of the value. Chromium change: https://chromium.googlesource.com/chromium/src/+/49b8ddcb14867f200cfa36063fcb79be944f3bcf commit 49b8ddcb14867f200cfa36063fcb79be944f3bcf Author: Emily Andrews <emiled@microsoft.com> Date: Tue Dec 10 20:42:14 2024 +0000 Add APIs to RenderProcessHost to use ChildProcessId Using int32_t for the child process id can be fraught with peril. Developers can mistake this for the PID. Bugs can be created by passing in an invalid value by mistake. Using a strongly typed ChildProcessId instead will allow the compiler to catch errors. This change modifies the internal id_ and render_process_id_ variables in the RenderProcessHostImpl code and adds APIs to use ChildProcessId to index in. This will allow incremental changes to remove int references. Bug: 379869738
119 lines
4.2 KiB
C++
119 lines
4.2 KiB
C++
/* Copyright (c) 2019 The Brave Authors. All rights reserved.
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
* You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "brave/browser/net/resource_context_data.h"
|
|
|
|
#include <memory>
|
|
#include <optional>
|
|
#include <string>
|
|
#include <utility>
|
|
|
|
#include "brave/browser/net/brave_proxying_url_loader_factory.h"
|
|
#include "brave/browser/net/brave_proxying_web_socket.h"
|
|
#include "brave/browser/net/brave_request_handler.h"
|
|
#include "content/public/browser/browser_context.h"
|
|
#include "net/cookies/site_for_cookies.h"
|
|
|
|
// User data key for ResourceContextData.
|
|
const void* const kResourceContextUserDataKey = &kResourceContextUserDataKey;
|
|
|
|
ResourceContextData::ResourceContextData()
|
|
: request_id_generator_(base::MakeRefCounted<RequestIDGenerator>()),
|
|
weak_factory_(this) {
|
|
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
|
}
|
|
|
|
ResourceContextData::~ResourceContextData() = default;
|
|
|
|
// static
|
|
void ResourceContextData::StartProxying(
|
|
content::BrowserContext* browser_context,
|
|
content::FrameTreeNodeId frame_tree_node_id,
|
|
network::URLLoaderFactoryBuilder& factory_builder,
|
|
scoped_refptr<base::SequencedTaskRunner> navigation_response_task_runner) {
|
|
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
|
|
|
auto* self = static_cast<ResourceContextData*>(
|
|
browser_context->GetUserData(kResourceContextUserDataKey));
|
|
if (!self) {
|
|
self = new ResourceContextData();
|
|
browser_context->SetUserData(kResourceContextUserDataKey,
|
|
base::WrapUnique(self));
|
|
}
|
|
|
|
if (!self->request_handler_) {
|
|
self->request_handler_ = std::make_unique<BraveRequestHandler>();
|
|
}
|
|
|
|
auto proxy = std::make_unique<BraveProxyingURLLoaderFactory>(
|
|
*self->request_handler_, browser_context, frame_tree_node_id,
|
|
factory_builder, self->request_id_generator_,
|
|
base::BindOnce(&ResourceContextData::RemoveProxy,
|
|
self->weak_factory_.GetWeakPtr()),
|
|
navigation_response_task_runner);
|
|
|
|
self->proxies_.emplace(std::move(proxy));
|
|
}
|
|
|
|
// static
|
|
BraveProxyingWebSocket* ResourceContextData::StartProxyingWebSocket(
|
|
content::ContentBrowserClient::WebSocketFactory factory,
|
|
const GURL& url,
|
|
const net::SiteForCookies& site_for_cookies,
|
|
const std::optional<std::string>& user_agent,
|
|
mojo::PendingRemote<network::mojom::WebSocketHandshakeClient>
|
|
handshake_client,
|
|
content::BrowserContext* browser_context,
|
|
int frame_id,
|
|
content::FrameTreeNodeId frame_tree_node_id,
|
|
const url::Origin& origin) {
|
|
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
|
|
|
auto* self = static_cast<ResourceContextData*>(
|
|
browser_context->GetUserData(kResourceContextUserDataKey));
|
|
if (!self) {
|
|
self = new ResourceContextData();
|
|
browser_context->SetUserData(kResourceContextUserDataKey,
|
|
base::WrapUnique(self));
|
|
}
|
|
|
|
if (!self->request_handler_) {
|
|
self->request_handler_ = std::make_unique<BraveRequestHandler>();
|
|
}
|
|
|
|
network::ResourceRequest request;
|
|
request.url = url;
|
|
// TODO(iefremov): site_for_cookies is not enough, we should find a way
|
|
// to initialize NetworkIsolationKey.
|
|
request.site_for_cookies = site_for_cookies;
|
|
if (user_agent) {
|
|
request.headers.SetHeader(net::HttpRequestHeaders::kUserAgent, *user_agent);
|
|
}
|
|
request.request_initiator = origin;
|
|
|
|
auto proxy = std::make_unique<BraveProxyingWebSocket>(
|
|
std::move(factory), request, std::move(handshake_client),
|
|
frame_tree_node_id, browser_context, self->request_id_generator_,
|
|
*self->request_handler_,
|
|
base::BindOnce(&ResourceContextData::RemoveProxyWebSocket,
|
|
self->weak_factory_.GetWeakPtr()));
|
|
|
|
auto* raw_proxy = proxy.get();
|
|
self->websocket_proxies_.emplace(std::move(proxy));
|
|
return raw_proxy;
|
|
}
|
|
|
|
void ResourceContextData::RemoveProxy(BraveProxyingURLLoaderFactory* proxy) {
|
|
auto it = proxies_.find(proxy);
|
|
DCHECK(it != proxies_.end());
|
|
proxies_.erase(it);
|
|
}
|
|
|
|
void ResourceContextData::RemoveProxyWebSocket(BraveProxyingWebSocket* proxy) {
|
|
auto it = websocket_proxies_.find(proxy);
|
|
DCHECK(it != websocket_proxies_.end());
|
|
websocket_proxies_.erase(it);
|
|
}
|