Use a PassKey to restrict access to URLRequest's ctor
This allows us to make the URLRequest ctor public (to use std::make_unique instead of new & base::WrapUnique) without allowing any callers outside of URLRequestContext. It also allows us to remove the `friend` directive. Change-Id: I2d0ed2042e7a17246c736510d7d9315827e66d6c Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4152592 Commit-Queue: Matt Menke <mmenke@chromium.org> Reviewed-by: Matt Menke <mmenke@chromium.org> Auto-Submit: Chris Fredrickson <cfredric@chromium.org> Cr-Commit-Position: refs/heads/main@{#1090970}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
761e18164c
commit
03e7a8a044
net/url_request
@ -15,6 +15,7 @@
|
||||
#include "base/strings/utf_string_conversions.h"
|
||||
#include "base/synchronization/lock.h"
|
||||
#include "base/task/single_thread_task_runner.h"
|
||||
#include "base/types/pass_key.h"
|
||||
#include "base/values.h"
|
||||
#include "net/base/auth.h"
|
||||
#include "net/base/io_buffer.h"
|
||||
@ -574,7 +575,8 @@ void URLRequest::Start() {
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
URLRequest::URLRequest(const GURL& url,
|
||||
URLRequest::URLRequest(base::PassKey<URLRequestContext> pass_key,
|
||||
const GURL& url,
|
||||
RequestPriority priority,
|
||||
Delegate* delegate,
|
||||
const URLRequestContext* context,
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include "base/supports_user_data.h"
|
||||
#include "base/threading/thread_checker.h"
|
||||
#include "base/time/time.h"
|
||||
#include "base/types/pass_key.h"
|
||||
#include "net/base/auth.h"
|
||||
#include "net/base/completion_repeating_callback.h"
|
||||
#include "net/base/idempotency.h"
|
||||
@ -206,6 +207,16 @@ class NET_EXPORT URLRequest : public base::SupportsUserData {
|
||||
virtual ~Delegate() = default;
|
||||
};
|
||||
|
||||
// URLRequests are always created by calling URLRequestContext::CreateRequest.
|
||||
URLRequest(base::PassKey<URLRequestContext> pass_key,
|
||||
const GURL& url,
|
||||
RequestPriority priority,
|
||||
Delegate* delegate,
|
||||
const URLRequestContext* context,
|
||||
NetworkTrafficAnnotationTag traffic_annotation,
|
||||
bool is_for_websockets,
|
||||
absl::optional<net::NetLogSource> net_log_source);
|
||||
|
||||
URLRequest(const URLRequest&) = delete;
|
||||
URLRequest& operator=(const URLRequest&) = delete;
|
||||
|
||||
@ -861,21 +872,11 @@ class NET_EXPORT URLRequest : public base::SupportsUserData {
|
||||
|
||||
private:
|
||||
friend class URLRequestJob;
|
||||
friend class URLRequestContext;
|
||||
|
||||
// For testing purposes.
|
||||
// TODO(maksims): Remove this.
|
||||
friend class TestNetworkDelegate;
|
||||
|
||||
// URLRequests are always created by calling URLRequestContext::CreateRequest.
|
||||
URLRequest(const GURL& url,
|
||||
RequestPriority priority,
|
||||
Delegate* delegate,
|
||||
const URLRequestContext* context,
|
||||
NetworkTrafficAnnotationTag traffic_annotation,
|
||||
bool is_for_websockets,
|
||||
absl::optional<net::NetLogSource> net_log_source);
|
||||
|
||||
// Resumes or blocks a request paused by the NetworkDelegate::OnBeforeRequest
|
||||
// handler. If |blocked| is true, the request is blocked and an error page is
|
||||
// returned indicating so. This should only be called after Start is called
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "base/metrics/histogram_functions.h"
|
||||
#include "base/metrics/histogram_macros.h"
|
||||
#include "base/strings/string_util.h"
|
||||
#include "base/types/pass_key.h"
|
||||
#include "build/build_config.h"
|
||||
#include "build/chromeos_buildflags.h"
|
||||
#include "net/base/http_user_agent_settings.h"
|
||||
@ -125,9 +126,9 @@ std::unique_ptr<URLRequest> URLRequestContext::CreateRequest(
|
||||
NetworkTrafficAnnotationTag traffic_annotation,
|
||||
bool is_for_websockets,
|
||||
const absl::optional<net::NetLogSource> net_log_source) const {
|
||||
return base::WrapUnique(new URLRequest(url, priority, delegate, this,
|
||||
traffic_annotation, is_for_websockets,
|
||||
net_log_source));
|
||||
return std::make_unique<URLRequest>(
|
||||
base::PassKey<URLRequestContext>(), url, priority, delegate, this,
|
||||
traffic_annotation, is_for_websockets, net_log_source);
|
||||
}
|
||||
|
||||
void URLRequestContext::AssertNoURLRequests() const {
|
||||
|
Reference in New Issue
Block a user