Files
brave-core/browser/net/resource_context_data.cc
T
Claudio DeSouza 6fdb17ef31 [CodeHealth] Clang-tidy make_unique modernise I
This change applies clang-tidy with modernize-make-unique to the
codebase, correcting all instatiations of unique_ptr to use
std::make_unique.
2022-08-30 11:58:36 +01:00

120 lines
4.2 KiB
C++

/* Copyright 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 http://mozilla.org/MPL/2.0/. */
#include "brave/browser/net/resource_context_data.h"
#include <memory>
#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,
int render_process_id,
int frame_tree_node_id,
mojo::PendingReceiver<network::mojom::URLLoaderFactory> receiver,
mojo::PendingRemote<network::mojom::URLLoaderFactory> target_factory) {
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_.get(), browser_context, render_process_id,
frame_tree_node_id, std::move(receiver), std::move(target_factory),
self->request_id_generator_,
base::BindOnce(&ResourceContextData::RemoveProxy,
self->weak_factory_.GetWeakPtr()));
self->proxies_.emplace(std::move(proxy));
}
// static
BraveProxyingWebSocket* ResourceContextData::StartProxyingWebSocket(
content::ContentBrowserClient::WebSocketFactory factory,
const GURL& url,
const net::SiteForCookies& site_for_cookies,
const absl::optional<std::string>& user_agent,
mojo::PendingRemote<network::mojom::WebSocketHandshakeClient>
handshake_client,
content::BrowserContext* browser_context,
int render_process_id,
int frame_id,
int 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),
render_process_id, frame_tree_node_id, browser_context,
self->request_id_generator_, self->request_handler_.get(),
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);
}