Files
brave-core/browser/net/url_context.h
T
Pavel Beloborodov 5b7a479719 Prevent blocked events from previous navigation showing up on new page (#33250)
* Replaced render_tree_node_id with render_frame_token.
* Check the blocking report only for active frames.
2026-01-22 16:13:59 +00:00

166 lines
5.6 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 http://mozilla.org/MPL/2.0/. */
#ifndef BRAVE_BROWSER_NET_URL_CONTEXT_H_
#define BRAVE_BROWSER_NET_URL_CONTEXT_H_
#include <memory>
#include <optional>
#include <set>
#include <string>
#include "base/memory/raw_ptr.h"
#include "base/memory/scoped_refptr.h"
#include "content/public/browser/global_routing_id.h"
#include "net/base/network_anonymization_key.h"
#include "net/http/http_request_headers.h"
#include "net/http/http_response_headers.h"
#include "net/url_request/referrer_policy.h"
#include "third_party/blink/public/mojom/loader/resource_load_info.mojom-shared.h"
#include "url/gurl.h"
class BraveRequestHandler;
namespace content {
class BrowserContext;
}
namespace network {
struct ResourceRequest;
}
namespace brave {
struct BraveRequestInfo;
using ResponseCallback = base::RepeatingCallback<void()>;
} // namespace brave
namespace brave_rewards {
int OnBeforeURLRequest(const brave::ResponseCallback& next_callback,
std::shared_ptr<brave::BraveRequestInfo> ctx);
} // namespace brave_rewards
namespace brave {
enum BraveNetworkDelegateEventType {
kOnBeforeRequest,
kOnBeforeStartTransaction,
kOnHeadersReceived,
kOnCanGetCookies,
kOnCanSetCookies,
kUnknownEventType
};
enum BlockedBy { kNotBlocked, kAdBlocked, kOtherBlocked };
struct BraveRequestInfo {
BraveRequestInfo();
BraveRequestInfo(const BraveRequestInfo&) = delete;
BraveRequestInfo& operator=(const BraveRequestInfo&) = delete;
// For tests, should not be used directly.
explicit BraveRequestInfo(const GURL& url);
~BraveRequestInfo();
std::string method;
GURL request_url;
GURL tab_origin;
GURL tab_url;
GURL initiator_url;
bool internal_redirect = false;
GURL redirect_source;
GURL referrer;
net::ReferrerPolicy referrer_policy =
net::ReferrerPolicy::CLEAR_ON_TRANSITION_FROM_SECURE_TO_INSECURE;
std::optional<GURL> new_referrer;
std::optional<int> pending_error;
std::string new_url_spec;
// TODO(iefremov): rename to shields_up.
bool allow_brave_shields = true;
bool allow_ads = false;
// Whether or not Shields "aggressive" mode was enabled where the request was
// initiated.
bool aggressive_blocking = false;
bool allow_http_upgradable_resource = false;
bool allow_referrers = false;
// GlobalRenderFrameHostToken: Uniquely identifies a RenderFrameHost instance.
// FrameTreeNodeId: Identifies a persistent location in the frame tree
// (remains constant across navigations) and is the primary handle for frame
// tree manipulation.
content::GlobalRenderFrameHostToken render_frame_token;
uint64_t request_identifier = 0;
size_t next_url_request_index = 0;
raw_ptr<content::BrowserContext, DanglingUntriaged> browser_context = nullptr;
raw_ptr<net::HttpRequestHeaders> headers = nullptr;
// The following two sets are populated by |OnBeforeStartTransactionCallback|.
// |set_headers| contains headers which values were added or modified.
std::set<std::string> set_headers;
std::set<std::string> removed_headers;
raw_ptr<const net::HttpResponseHeaders, DanglingUntriaged>
original_response_headers = nullptr;
raw_ptr<scoped_refptr<net::HttpResponseHeaders>, DanglingUntriaged>
override_response_headers = nullptr;
raw_ptr<GURL, DanglingUntriaged> allowed_unsafe_redirect_url = nullptr;
BraveNetworkDelegateEventType event_type = kUnknownEventType;
BlockedBy blocked_by = kNotBlocked;
std::string mock_data_url;
bool ShouldMockRequest() const {
return blocked_by == kAdBlocked && !mock_data_url.empty();
}
net::NetworkAnonymizationKey network_anonymization_key =
net::NetworkAnonymizationKey();
// Default to invalid type for resource_type, so delegate helpers
// can properly detect that the info couldn't be obtained.
// TODO(iefremov): Replace with something like |WebRequestResourceType| to
// distinguish WebSockets.
static constexpr blink::mojom::ResourceType kInvalidResourceType =
static_cast<blink::mojom::ResourceType>(-1);
blink::mojom::ResourceType resource_type = kInvalidResourceType;
std::string upload_data;
std::optional<std::string> devtools_request_id;
static std::shared_ptr<brave::BraveRequestInfo> MakeCTX(
const network::ResourceRequest& request,
content::GlobalRenderFrameHostToken render_frame_token,
uint64_t request_identifier,
content::BrowserContext* browser_context,
std::shared_ptr<brave::BraveRequestInfo> old_ctx);
private:
// Please don't add any more friends here if it can be avoided.
// We should also remove the one below.
friend class ::BraveRequestHandler;
raw_ptr<GURL, DanglingUntriaged> new_url = nullptr;
};
// ResponseListener
using OnBeforeURLRequestCallback =
base::RepeatingCallback<int(const ResponseCallback& next_callback,
std::shared_ptr<BraveRequestInfo> ctx)>;
using OnBeforeStartTransactionCallback =
base::RepeatingCallback<int(net::HttpRequestHeaders* headers,
const ResponseCallback& next_callback,
std::shared_ptr<BraveRequestInfo> ctx)>;
using OnHeadersReceivedCallback = base::RepeatingCallback<int(
const net::HttpResponseHeaders* original_response_headers,
scoped_refptr<net::HttpResponseHeaders>* override_response_headers,
GURL* allowed_unsafe_redirect_url,
const ResponseCallback& next_callback,
std::shared_ptr<BraveRequestInfo> ctx)>;
} // namespace brave
#endif // BRAVE_BROWSER_NET_URL_CONTEXT_H_