Remove ability for a URLRequest to use a separate NetworkDelegate.

The URLRequest constructor could accept a NetworkDelegate argument
which would override the URLRequestContext's NetworkDelegate. However,
URLRequest's constructor was private, and only URLRequestContext could
call it, and URLRequestContext didn't have a method to pass a
NetworkDelegate other than its own to URLRequest's constructor. As a
result, not only was nothing taking advantage of this ability, but
nothing *could* take advantage of it.

To the extent of my knowledge, this ability has never been used, yet
the per-request NetworkDelegate argument was wired through the entire
URLRequestJob creation stack.

Since this CL is already touching all URLRequestInterceptors, it
also updates the URLRequestInterceptor API to return a unique_ptr.

TBR= [email protected]

Bug: 1126597
Change-Id: I5f0fade639e06a2edc8f514853262af3afa6e110
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2401854
Reviewed-by: Matt Menke <[email protected]>
Reviewed-by: Monica Basta <[email protected]>
Reviewed-by: Eugene But <[email protected]>
Reviewed-by: Eric Roman <[email protected]>
Commit-Queue: Matt Menke <[email protected]>
Cr-Commit-Position: refs/heads/master@{#807048}
diff --git a/net/cert_net/cert_net_fetcher_url_request_unittest.cc b/net/cert_net/cert_net_fetcher_url_request_unittest.cc
index 9568a1a1..08e92be 100644
--- a/net/cert_net/cert_net_fetcher_url_request_unittest.cc
+++ b/net/cert_net/cert_net_fetcher_url_request_unittest.cc
@@ -260,9 +260,8 @@
 
  private:
   // URLRequestInterceptor implementation:
-  net::URLRequestJob* MaybeInterceptRequest(
-      net::URLRequest* request,
-      net::NetworkDelegate* network_delegate) const override {
+  std::unique_ptr<net::URLRequestJob> MaybeInterceptRequest(
+      net::URLRequest* request) const override {
     EXPECT_TRUE(request->disable_secure_dns());
     *invoked_interceptor_ = true;
     return nullptr;
diff --git a/net/dns/dns_transaction_unittest.cc b/net/dns/dns_transaction_unittest.cc
index c634da52..3816b918 100644
--- a/net/dns/dns_transaction_unittest.cc
+++ b/net/dns/dns_transaction_unittest.cc
@@ -420,9 +420,8 @@
 
 // Callback that allows the test to substitute its own implementation
 // of URLRequestJob to handle the request.
-typedef base::RepeatingCallback<URLRequestJob*(
+typedef base::RepeatingCallback<std::unique_ptr<URLRequestJob>(
     URLRequest* request,
-    NetworkDelegate* network_delegate,
     SocketDataProvider* data_provider)>
     DohJobMakerCallback;
 
@@ -432,10 +431,9 @@
  public:
   URLRequestMockDohJob(
       URLRequest* request,
-      NetworkDelegate* network_delegate,
       SocketDataProvider* data_provider,
       ResponseModifierCallback response_modifier = ResponseModifierCallback())
-      : URLRequestJob(request, network_delegate),
+      : URLRequestJob(request),
         content_length_(0),
         leftover_data_len_(0),
         data_provider_(data_provider),
@@ -783,8 +781,7 @@
     }
   }
 
-  URLRequestJob* MaybeInterceptRequest(URLRequest* request,
-                                       NetworkDelegate* network_delegate) {
+  std::unique_ptr<URLRequestJob> MaybeInterceptRequest(URLRequest* request) {
     // If the path indicates a redirect, skip checking the list of
     // configured servers, because it won't be there and we still want
     // to handle it.
@@ -847,10 +844,10 @@
     SocketDataProvider* provider = socket_factory_->mock_data().GetNext();
 
     if (doh_job_maker_)
-      return doh_job_maker_.Run(request, network_delegate, provider);
+      return doh_job_maker_.Run(request, provider);
 
-    return new URLRequestMockDohJob(request, network_delegate, provider,
-                                    response_modifier_);
+    return std::make_unique<URLRequestMockDohJob>(request, provider,
+                                                  response_modifier_);
   }
 
   class DohJobInterceptor : public URLRequestInterceptor {
@@ -859,10 +856,9 @@
     ~DohJobInterceptor() override {}
 
     // URLRequestInterceptor implementation:
-    URLRequestJob* MaybeInterceptRequest(
-        URLRequest* request,
-        NetworkDelegate* network_delegate) const override {
-      return test_->MaybeInterceptRequest(request, network_delegate);
+    std::unique_ptr<URLRequestJob> MaybeInterceptRequest(
+        URLRequest* request) const override {
+      return test_->MaybeInterceptRequest(request);
     }
 
    private:
@@ -1591,13 +1587,12 @@
   EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get()));
 }
 
-URLRequestJob* DohJobMakerCallbackFailLookup(URLRequest* request,
-                                             NetworkDelegate* network_delegate,
-                                             SocketDataProvider* data) {
+std::unique_ptr<URLRequestJob> DohJobMakerCallbackFailLookup(
+    URLRequest* request,
+    SocketDataProvider* data) {
   URLRequestMockDohJob::MatchQueryData(request, data);
-  return new URLRequestFailedJob(request, network_delegate,
-                                 URLRequestFailedJob::START,
-                                 ERR_NAME_NOT_RESOLVED);
+  return std::make_unique<URLRequestFailedJob>(
+      request, URLRequestFailedJob::START, ERR_NAME_NOT_RESOLVED);
 }
 
 TEST_F(DnsTransactionTest, HttpsPostLookupFailDohServerLookup) {
@@ -1614,12 +1609,12 @@
   EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get()));
 }
 
-URLRequestJob* DohJobMakerCallbackFailStart(URLRequest* request,
-                                            NetworkDelegate* network_delegate,
-                                            SocketDataProvider* data) {
+std::unique_ptr<URLRequestJob> DohJobMakerCallbackFailStart(
+    URLRequest* request,
+    SocketDataProvider* data) {
   URLRequestMockDohJob::MatchQueryData(request, data);
-  return new URLRequestFailedJob(request, network_delegate,
-                                 URLRequestFailedJob::START, ERR_FAILED);
+  return std::make_unique<URLRequestFailedJob>(
+      request, URLRequestFailedJob::START, ERR_FAILED);
 }
 
 TEST_F(DnsTransactionTest, HttpsPostLookupFailStart) {
@@ -1635,12 +1630,12 @@
   EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get()));
 }
 
-URLRequestJob* DohJobMakerCallbackFailSync(URLRequest* request,
-                                           NetworkDelegate* network_delegate,
-                                           SocketDataProvider* data) {
+std::unique_ptr<URLRequestJob> DohJobMakerCallbackFailSync(
+    URLRequest* request,
+    SocketDataProvider* data) {
   URLRequestMockDohJob::MatchQueryData(request, data);
-  return new URLRequestFailedJob(request, network_delegate,
-                                 URLRequestFailedJob::READ_SYNC, ERR_FAILED);
+  return std::make_unique<URLRequestFailedJob>(
+      request, URLRequestFailedJob::READ_SYNC, ERR_FAILED);
 }
 
 TEST_F(DnsTransactionTest, HttpsPostLookupFailSync) {
@@ -1656,12 +1651,12 @@
   EXPECT_TRUE(helper0.RunUntilDone(transaction_factory_.get()));
 }
 
-URLRequestJob* DohJobMakerCallbackFailAsync(URLRequest* request,
-                                            NetworkDelegate* network_delegate,
-                                            SocketDataProvider* data) {
+std::unique_ptr<URLRequestJob> DohJobMakerCallbackFailAsync(
+    URLRequest* request,
+    SocketDataProvider* data) {
   URLRequestMockDohJob::MatchQueryData(request, data);
-  return new URLRequestFailedJob(request, network_delegate,
-                                 URLRequestFailedJob::READ_ASYNC, ERR_FAILED);
+  return std::make_unique<URLRequestFailedJob>(
+      request, URLRequestFailedJob::READ_ASYNC, ERR_FAILED);
 }
 
 TEST_F(DnsTransactionTest, HttpsPostLookupFailAsync) {
diff --git a/net/test/url_request/ssl_certificate_error_job.cc b/net/test/url_request/ssl_certificate_error_job.cc
index 5044c74..ebe76f3 100644
--- a/net/test/url_request/ssl_certificate_error_job.cc
+++ b/net/test/url_request/ssl_certificate_error_job.cc
@@ -27,10 +27,9 @@
   ~MockJobInterceptor() override = default;
 
   // URLRequestJobFactory::ProtocolHandler implementation:
-  URLRequestJob* MaybeInterceptRequest(
-      URLRequest* request,
-      NetworkDelegate* network_delegate) const override {
-    return new SSLCertificateErrorJob(request, network_delegate);
+  std::unique_ptr<URLRequestJob> MaybeInterceptRequest(
+      URLRequest* request) const override {
+    return std::make_unique<SSLCertificateErrorJob>(request);
   }
 
  private:
@@ -39,10 +38,10 @@
 
 }  // namespace
 
-SSLCertificateErrorJob::SSLCertificateErrorJob(
-    URLRequest* request,
-    NetworkDelegate* network_delegate)
-    : URLRequestJob(request, network_delegate) {}
+SSLCertificateErrorJob::SSLCertificateErrorJob(URLRequest* request)
+    : URLRequestJob(request) {}
+
+SSLCertificateErrorJob::~SSLCertificateErrorJob() = default;
 
 void SSLCertificateErrorJob::Start() {
   base::ThreadTaskRunnerHandle::Get()->PostTask(
@@ -61,8 +60,6 @@
   return GURL(base::StringPrintf("https://%s", kMockHostname));
 }
 
-SSLCertificateErrorJob::~SSLCertificateErrorJob() = default;
-
 void SSLCertificateErrorJob::NotifyError() {
   SSLInfo info;
   info.cert_status = CERT_STATUS_DATE_INVALID;
diff --git a/net/test/url_request/ssl_certificate_error_job.h b/net/test/url_request/ssl_certificate_error_job.h
index 7a2c86f7..c3af368 100644
--- a/net/test/url_request/ssl_certificate_error_job.h
+++ b/net/test/url_request/ssl_certificate_error_job.h
@@ -12,14 +12,14 @@
 
 namespace net {
 
-class NetworkDelegate;
 class URLRequest;
 
 // SSLCertificateErrorJob simulates a ERR_CERT_DATE_INVALID error.
 class SSLCertificateErrorJob : public URLRequestJob {
  public:
-  SSLCertificateErrorJob(URLRequest* request,
-                         NetworkDelegate* network_delegate);
+  explicit SSLCertificateErrorJob(URLRequest* request);
+
+  ~SSLCertificateErrorJob() override;
 
   // URLRequestJob implementation:
   void Start() override;
@@ -30,8 +30,6 @@
   static GURL GetMockUrl();
 
  private:
-  ~SSLCertificateErrorJob() override;
-
   void NotifyError();
 
   base::WeakPtrFactory<SSLCertificateErrorJob> weak_factory_{this};
diff --git a/net/test/url_request/url_request_failed_job.cc b/net/test/url_request/url_request_failed_job.cc
index 78f74f4f..09bc153 100644
--- a/net/test/url_request/url_request_failed_job.cc
+++ b/net/test/url_request/url_request_failed_job.cc
@@ -41,9 +41,8 @@
   ~MockJobInterceptor() override = default;
 
   // URLRequestJobFactory::ProtocolHandler implementation:
-  URLRequestJob* MaybeInterceptRequest(
-      URLRequest* request,
-      NetworkDelegate* network_delegate) const override {
+  std::unique_ptr<URLRequestJob> MaybeInterceptRequest(
+      URLRequest* request) const override {
     int net_error = OK;
     URLRequestFailedJob::FailurePhase phase =
         URLRequestFailedJob::FailurePhase::MAX_FAILURE_PHASE;
@@ -57,7 +56,7 @@
         }
       }
     }
-    return new URLRequestFailedJob(request, network_delegate, phase, net_error);
+    return std::make_unique<URLRequestFailedJob>(request, phase, net_error);
   }
 
  private:
@@ -78,10 +77,9 @@
 }  // namespace
 
 URLRequestFailedJob::URLRequestFailedJob(URLRequest* request,
-                                         NetworkDelegate* network_delegate,
                                          FailurePhase phase,
                                          int net_error)
-    : URLRequestJob(request, network_delegate),
+    : URLRequestJob(request),
       phase_(phase),
       net_error_(net_error),
       total_received_bytes_(0) {
@@ -90,11 +88,10 @@
   CHECK_LT(net_error, OK);
 }
 
-URLRequestFailedJob::URLRequestFailedJob(URLRequest* request,
-                                         NetworkDelegate* network_delegate,
-                                         int net_error)
-    : URLRequestFailedJob(request, network_delegate, START, net_error) {
-}
+URLRequestFailedJob::URLRequestFailedJob(URLRequest* request, int net_error)
+    : URLRequestFailedJob(request, START, net_error) {}
+
+URLRequestFailedJob::~URLRequestFailedJob() = default;
 
 void URLRequestFailedJob::Start() {
   base::ThreadTaskRunnerHandle::Get()->PostTask(
@@ -179,8 +176,6 @@
   return GetMockUrl("https", hostname, START, net_error);
 }
 
-URLRequestFailedJob::~URLRequestFailedJob() = default;
-
 void URLRequestFailedJob::StartAsync() {
   if (phase_ == START) {
     if (net_error_ != ERR_IO_PENDING) {
diff --git a/net/test/url_request/url_request_failed_job.h b/net/test/url_request/url_request_failed_job.h
index 8ce4763f..3b14f9c1 100644
--- a/net/test/url_request/url_request_failed_job.h
+++ b/net/test/url_request/url_request_failed_job.h
@@ -29,15 +29,15 @@
   };
 
   URLRequestFailedJob(URLRequest* request,
-                      NetworkDelegate* network_delegate,
                       FailurePhase phase,
                       int net_error);
 
   // Same as above, except that the job fails at FailurePhase.START.
   URLRequestFailedJob(URLRequest* request,
-                      NetworkDelegate* network_delegate,
                       int net_error);
 
+  ~URLRequestFailedJob() override;
+
   // URLRequestJob implementation:
   void Start() override;
   int ReadRawData(IOBuffer* buf, int buf_size) override;
@@ -72,7 +72,6 @@
                                          const std::string& hostname);
 
  protected:
-  ~URLRequestFailedJob() override;
   void StartAsync();
 
  private:
diff --git a/net/test/url_request/url_request_hanging_read_job.cc b/net/test/url_request/url_request_hanging_read_job.cc
index df9bf44..4089df8d 100644
--- a/net/test/url_request/url_request_hanging_read_job.cc
+++ b/net/test/url_request/url_request_hanging_read_job.cc
@@ -31,10 +31,9 @@
   ~MockJobInterceptor() override = default;
 
   // URLRequestInterceptor implementation
-  URLRequestJob* MaybeInterceptRequest(
-      URLRequest* request,
-      NetworkDelegate* network_delegate) const override {
-    return new URLRequestHangingReadJob(request, network_delegate);
+  std::unique_ptr<URLRequestJob> MaybeInterceptRequest(
+      URLRequest* request) const override {
+    return std::make_unique<URLRequestHangingReadJob>(request);
   }
 
  private:
@@ -43,12 +42,12 @@
 
 }  // namespace
 
-URLRequestHangingReadJob::URLRequestHangingReadJob(
-    URLRequest* request,
-    NetworkDelegate* network_delegate)
-    : URLRequestJob(request, network_delegate),
-      content_length_(10)  // non-zero content-length
-{}
+URLRequestHangingReadJob::URLRequestHangingReadJob(URLRequest* request)
+    : URLRequestJob(request),
+      // non-zero content-length
+      content_length_(10) {}
+
+URLRequestHangingReadJob::~URLRequestHangingReadJob() = default;
 
 void URLRequestHangingReadJob::Start() {
   // Start reading asynchronously so that all error reporting and data
@@ -58,8 +57,6 @@
                                 weak_factory_.GetWeakPtr()));
 }
 
-URLRequestHangingReadJob::~URLRequestHangingReadJob() = default;
-
 int URLRequestHangingReadJob::ReadRawData(IOBuffer* buf, int buf_size) {
   // Make read hang. It never completes.
   return ERR_IO_PENDING;
diff --git a/net/test/url_request/url_request_hanging_read_job.h b/net/test/url_request/url_request_hanging_read_job.h
index bd4a4a7..d91580d 100644
--- a/net/test/url_request/url_request_hanging_read_job.h
+++ b/net/test/url_request/url_request_hanging_read_job.h
@@ -16,8 +16,8 @@
 // A URLRequestJob that hangs when try to read response body.
 class URLRequestHangingReadJob : public URLRequestJob {
  public:
-  URLRequestHangingReadJob(URLRequest* request,
-                           NetworkDelegate* network_delegate);
+  explicit URLRequestHangingReadJob(URLRequest* request);
+  ~URLRequestHangingReadJob() override;
 
   void Start() override;
   int ReadRawData(IOBuffer* buf, int buf_size) override;
@@ -31,7 +31,6 @@
 
  private:
   void GetResponseInfoConst(HttpResponseInfo* info) const;
-  ~URLRequestHangingReadJob() override;
 
   void StartAsync();
 
diff --git a/net/test/url_request/url_request_mock_data_job.cc b/net/test/url_request/url_request_mock_data_job.cc
index 59e69f9..964067a 100644
--- a/net/test/url_request/url_request_mock_data_job.cc
+++ b/net/test/url_request/url_request_mock_data_job.cc
@@ -79,13 +79,12 @@
   ~MockJobInterceptor() override = default;
 
   // URLRequestInterceptor implementation
-  URLRequestJob* MaybeInterceptRequest(
-      URLRequest* request,
-      NetworkDelegate* network_delegate) const override {
-    return new URLRequestMockDataJob(request, network_delegate,
-                                     GetDataFromRequest(*request),
-                                     GetRepeatCountFromRequest(*request),
-                                     GetRequestClientCertificate(*request));
+  std::unique_ptr<URLRequestJob> MaybeInterceptRequest(
+      URLRequest* request) const override {
+    return std::make_unique<URLRequestMockDataJob>(
+        request, GetDataFromRequest(*request),
+        GetRepeatCountFromRequest(*request),
+        GetRequestClientCertificate(*request));
   }
 
  private:
@@ -95,11 +94,10 @@
 }  // namespace
 
 URLRequestMockDataJob::URLRequestMockDataJob(URLRequest* request,
-                                             NetworkDelegate* network_delegate,
                                              const std::string& data,
                                              int data_repeat_count,
                                              bool request_client_certificate)
-    : URLRequestJob(request, network_delegate),
+    : URLRequestJob(request),
       data_offset_(0),
       request_client_certificate_(request_client_certificate) {
   DCHECK_GT(data_repeat_count, 0);
@@ -108,6 +106,8 @@
   }
 }
 
+URLRequestMockDataJob::~URLRequestMockDataJob() = default;
+
 void URLRequestMockDataJob::OverrideResponseHeaders(
     const std::string& headers) {
   headers_ = headers;
@@ -121,8 +121,6 @@
                                 weak_factory_.GetWeakPtr()));
 }
 
-URLRequestMockDataJob::~URLRequestMockDataJob() = default;
-
 int URLRequestMockDataJob::ReadRawData(IOBuffer* buf, int buf_size) {
   int bytes_read =
       std::min(static_cast<size_t>(buf_size), data_.length() - data_offset_);
diff --git a/net/test/url_request/url_request_mock_data_job.h b/net/test/url_request/url_request_mock_data_job.h
index 1e183699..6011a58 100644
--- a/net/test/url_request/url_request_mock_data_job.h
+++ b/net/test/url_request/url_request_mock_data_job.h
@@ -23,10 +23,10 @@
 class URLRequestMockDataJob : public URLRequestJob {
  public:
   URLRequestMockDataJob(URLRequest* request,
-                        NetworkDelegate* network_delegate,
                         const std::string& data,
                         int data_repeat_count,
                         bool request_client_certificate);
+  ~URLRequestMockDataJob() override;
 
   void Start() override;
   int ReadRawData(IOBuffer* buf, int buf_size) override;
@@ -61,9 +61,6 @@
   // Overrides response headers in the mocked response.
   void OverrideResponseHeaders(const std::string& headers);
 
- protected:
-  ~URLRequestMockDataJob() override;
-
  private:
   void GetResponseInfoConst(HttpResponseInfo* info) const;
 
diff --git a/net/test/url_request/url_request_mock_http_job.cc b/net/test/url_request/url_request_mock_http_job.cc
index 1f96c0b..8533009b 100644
--- a/net/test/url_request/url_request_mock_http_job.cc
+++ b/net/test/url_request/url_request_mock_http_job.cc
@@ -41,11 +41,10 @@
   ~MockJobInterceptor() override = default;
 
   // URLRequestJobFactory::ProtocolHandler implementation
-  URLRequestJob* MaybeInterceptRequest(
-      URLRequest* request,
-      NetworkDelegate* network_delegate) const override {
-    return new URLRequestMockHTTPJob(
-        request, network_delegate,
+  std::unique_ptr<URLRequestJob> MaybeInterceptRequest(
+      URLRequest* request) const override {
+    return std::make_unique<URLRequestMockHTTPJob>(
+        request,
         map_all_requests_to_base_path_ ? base_path_ : GetOnDiskPath(request));
   }
 
@@ -126,11 +125,9 @@
 }
 
 URLRequestMockHTTPJob::URLRequestMockHTTPJob(URLRequest* request,
-                                             NetworkDelegate* network_delegate,
                                              const base::FilePath& file_path)
     : URLRequestTestJobBackedByFile(
           request,
-          network_delegate,
           file_path,
           base::ThreadPool::CreateTaskRunner({base::MayBlock()})) {}
 
diff --git a/net/test/url_request/url_request_mock_http_job.h b/net/test/url_request/url_request_mock_http_job.h
index 905cfc71..2c053792 100644
--- a/net/test/url_request/url_request_mock_http_job.h
+++ b/net/test/url_request/url_request_mock_http_job.h
@@ -30,8 +30,8 @@
  public:
   // Note that all file I/O is done using ThreadPool.
   URLRequestMockHTTPJob(URLRequest* request,
-                        NetworkDelegate* network_delegate,
                         const base::FilePath& file_path);
+  ~URLRequestMockHTTPJob() override;
 
   // URLRequestJob overrides.
   void Start() override;
@@ -67,9 +67,6 @@
   static std::unique_ptr<URLRequestInterceptor> CreateInterceptorForSingleFile(
       const base::FilePath& file);
 
- protected:
-  ~URLRequestMockHTTPJob() override;
-
  private:
   void GetResponseInfoConst(HttpResponseInfo* info) const;
   void SetHeadersAndStart(const std::string& raw_headers);
diff --git a/net/test/url_request/url_request_test_job_backed_by_file.cc b/net/test/url_request/url_request_test_job_backed_by_file.cc
index 72e0655..b128704 100644
--- a/net/test/url_request/url_request_test_job_backed_by_file.cc
+++ b/net/test/url_request/url_request_test_job_backed_by_file.cc
@@ -54,10 +54,9 @@
 
 URLRequestTestJobBackedByFile::URLRequestTestJobBackedByFile(
     URLRequest* request,
-    NetworkDelegate* network_delegate,
     const base::FilePath& file_path,
     const scoped_refptr<base::TaskRunner>& file_task_runner)
-    : URLRequestJob(request, network_delegate),
+    : URLRequestJob(request),
       file_path_(file_path),
       stream_(new FileStream(file_task_runner)),
       file_task_runner_(file_task_runner),
diff --git a/net/test/url_request/url_request_test_job_backed_by_file.h b/net/test/url_request/url_request_test_job_backed_by_file.h
index cea7d39..e95c8a6f 100644
--- a/net/test/url_request/url_request_test_job_backed_by_file.h
+++ b/net/test/url_request/url_request_test_job_backed_by_file.h
@@ -38,7 +38,6 @@
  public:
   URLRequestTestJobBackedByFile(
       URLRequest* request,
-      NetworkDelegate* network_delegate,
       const base::FilePath& file_path,
       const scoped_refptr<base::TaskRunner>& file_task_runner);
 
diff --git a/net/test/url_request/url_request_test_job_backed_by_file_unittest.cc b/net/test/url_request/url_request_test_job_backed_by_file_unittest.cc
index 37495dd2..e4f4e87 100644
--- a/net/test/url_request/url_request_test_job_backed_by_file_unittest.cc
+++ b/net/test/url_request/url_request_test_job_backed_by_file_unittest.cc
@@ -35,7 +35,6 @@
   // OnReadComplete.
   TestURLRequestTestJobBackedByFile(
       URLRequest* request,
-      NetworkDelegate* network_delegate,
       const base::FilePath& file_path,
       const scoped_refptr<base::TaskRunner>& file_task_runner,
       int* open_result,
@@ -43,7 +42,6 @@
       bool* done_reading,
       std::string* observed_content)
       : URLRequestTestJobBackedByFile(request,
-                                      network_delegate,
                                       file_path,
                                       file_task_runner),
         open_result_(open_result),
@@ -232,9 +230,8 @@
       kUrl, DEFAULT_PRIORITY, &delegate_, TRAFFIC_ANNOTATION_FOR_TESTS));
   TestScopedURLInterceptor interceptor(
       kUrl, std::make_unique<TestURLRequestTestJobBackedByFile>(
-                request.get(), context_.network_delegate(), path,
-                base::ThreadTaskRunnerHandle::Get(), open_result, seek_position,
-                done_reading, observed_content));
+                request.get(), path, base::ThreadTaskRunnerHandle::Get(),
+                open_result, seek_position, done_reading, observed_content));
   if (!range.empty()) {
     request->SetExtraRequestHeaderByName(HttpRequestHeaders::kRange, range,
                                          true /*overwrite*/);
diff --git a/net/url_request/ftp_protocol_handler.cc b/net/url_request/ftp_protocol_handler.cc
index a052bfa5..03783e50 100644
--- a/net/url_request/ftp_protocol_handler.cc
+++ b/net/url_request/ftp_protocol_handler.cc
@@ -35,19 +35,16 @@
 FtpProtocolHandler::~FtpProtocolHandler() = default;
 
 std::unique_ptr<URLRequestJob> FtpProtocolHandler::CreateJob(
-    URLRequest* request,
-    NetworkDelegate* network_delegate) const {
+    URLRequest* request) const {
   DCHECK_EQ("ftp", request->url().scheme());
 
   if (!IsPortAllowedForScheme(request->url().EffectiveIntPort(),
                               request->url().scheme_piece())) {
-    return std::make_unique<URLRequestErrorJob>(request, network_delegate,
-                                                ERR_UNSAFE_PORT);
+    return std::make_unique<URLRequestErrorJob>(request, ERR_UNSAFE_PORT);
   }
 
-  return std::make_unique<URLRequestFtpJob>(request, network_delegate,
-                                            ftp_transaction_factory_.get(),
-                                            ftp_auth_cache_);
+  return std::make_unique<URLRequestFtpJob>(
+      request, ftp_transaction_factory_.get(), ftp_auth_cache_);
 }
 
 FtpProtocolHandler::FtpProtocolHandler(
diff --git a/net/url_request/ftp_protocol_handler.h b/net/url_request/ftp_protocol_handler.h
index d1e1906..114a051 100644
--- a/net/url_request/ftp_protocol_handler.h
+++ b/net/url_request/ftp_protocol_handler.h
@@ -17,7 +17,6 @@
 class FtpAuthCache;
 class FtpTransactionFactory;
 class HostResolver;
-class NetworkDelegate;
 class URLRequestJob;
 
 // Implements a ProtocolHandler for FTP.
@@ -37,9 +36,7 @@
       std::unique_ptr<FtpTransactionFactory> ftp_transaction_factory,
       FtpAuthCache* auth_cache);
 
-  std::unique_ptr<URLRequestJob> CreateJob(
-      URLRequest* request,
-      NetworkDelegate* network_delegate) const override;
+  std::unique_ptr<URLRequestJob> CreateJob(URLRequest* request) const override;
 
  private:
   friend class FtpTestURLRequestContext;
diff --git a/net/url_request/report_sender_unittest.cc b/net/url_request/report_sender_unittest.cc
index e897d36d..c921c6cc 100644
--- a/net/url_request/report_sender_unittest.cc
+++ b/net/url_request/report_sender_unittest.cc
@@ -81,8 +81,7 @@
 // URLRequestJob that returns an HTTP 500 response.
 class MockServerErrorJob : public URLRequestJob {
  public:
-  MockServerErrorJob(URLRequest* request, NetworkDelegate* network_delegate)
-      : URLRequestJob(request, network_delegate) {}
+  explicit MockServerErrorJob(URLRequest* request) : URLRequestJob(request) {}
   ~MockServerErrorJob() override = default;
 
  protected:
@@ -103,10 +102,9 @@
   MockServerErrorJobInterceptor() = default;
   ~MockServerErrorJobInterceptor() override = default;
 
-  URLRequestJob* MaybeInterceptRequest(
-      URLRequest* request,
-      NetworkDelegate* network_delegate) const override {
-    return new MockServerErrorJob(request, network_delegate);
+  std::unique_ptr<URLRequestJob> MaybeInterceptRequest(
+      URLRequest* request) const override {
+    return std::make_unique<MockServerErrorJob>(request);
   }
 
  private:
diff --git a/net/url_request/url_request.cc b/net/url_request/url_request.cc
index 87cc2d7..9138aae0 100644
--- a/net/url_request/url_request.cc
+++ b/net/url_request/url_request.cc
@@ -170,8 +170,8 @@
 
   Cancel();
 
-  if (network_delegate_) {
-    network_delegate_->NotifyURLRequestDestroyed(this);
+  if (network_delegate()) {
+    network_delegate()->NotifyURLRequestDestroyed(this);
     if (job_.get())
       job_->NotifyURLRequestDestroyed();
   }
@@ -507,9 +507,9 @@
   load_timing_info_.request_start_time = response_info_.request_time;
   load_timing_info_.request_start = base::TimeTicks::Now();
 
-  if (network_delegate_) {
+  if (network_delegate()) {
     OnCallToDelegate(NetLogEventType::NETWORK_DELEGATE_BEFORE_URL_REQUEST);
-    int error = network_delegate_->NotifyBeforeURLRequest(
+    int error = network_delegate()->NotifyBeforeURLRequest(
         this,
         base::BindOnce(&URLRequest::BeforeRequestComplete,
                        base::Unretained(this)),
@@ -521,7 +521,7 @@
     return;
   }
 
-  StartJob(context_->job_factory()->CreateJob(this, network_delegate_));
+  StartJob(context_->job_factory()->CreateJob(this));
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -530,11 +530,8 @@
                        RequestPriority priority,
                        Delegate* delegate,
                        const URLRequestContext* context,
-                       NetworkDelegate* network_delegate,
                        NetworkTrafficAnnotationTag traffic_annotation)
     : context_(context),
-      network_delegate_(network_delegate ? network_delegate
-                                         : context->network_delegate()),
       net_log_(NetLogWithSource::Make(context->net_log(),
                                       NetLogSourceType::URL_REQUEST)),
       url_chain_(1, url),
@@ -588,18 +585,17 @@
   if (error != OK) {
     net_log_.AddEventWithStringParams(NetLogEventType::CANCELLED, "source",
                                       "delegate");
-    StartJob(
-        std::make_unique<URLRequestErrorJob>(this, network_delegate_, error));
+    StartJob(std::make_unique<URLRequestErrorJob>(this, error));
   } else if (!delegate_redirect_url_.is_empty()) {
     GURL new_url;
     new_url.Swap(&delegate_redirect_url_);
 
     StartJob(std::make_unique<URLRequestRedirectJob>(
-        this, network_delegate_, new_url,
+        this, new_url,
         // Use status code 307 to preserve the method, so POST requests work.
         URLRequestRedirectJob::REDIRECT_307_TEMPORARY_REDIRECT, "Delegate"));
   } else {
-    StartJob(context_->job_factory()->CreateJob(this, network_delegate_));
+    StartJob(context_->job_factory()->CreateJob(this));
   }
 }
 
@@ -639,8 +635,8 @@
   if (referrer_url !=
       URLRequestJob::ComputeReferrerForPolicy(
           referrer_policy_, referrer_url, url(), &same_origin_for_metrics)) {
-    if (!network_delegate_ ||
-        !network_delegate_->CancelURLRequestWithPolicyViolatingReferrerHeader(
+    if (!network_delegate() ||
+        !network_delegate()->CancelURLRequestWithPolicyViolatingReferrerHeader(
             *this, url(), referrer_url)) {
       referrer_.clear();
     } else {
@@ -649,8 +645,8 @@
       referrer_.clear();
       net_log_.AddEventWithStringParams(NetLogEventType::CANCELLED, "source",
                                         "delegate");
-      RestartWithJob(std::make_unique<URLRequestErrorJob>(
-          this, network_delegate_, ERR_BLOCKED_BY_CLIENT));
+      RestartWithJob(
+          std::make_unique<URLRequestErrorJob>(this, ERR_BLOCKED_BY_CLIENT));
       return;
     }
   }
@@ -801,8 +797,8 @@
   // In some cases (e.g. an event was canceled), we might have sent the
   // completion event and receive a NotifyResponseStarted() later.
   if (!has_notified_completion_ && net_error == OK) {
-    if (network_delegate_)
-      network_delegate_->NotifyResponseStarted(this, net_error);
+    if (network_delegate())
+      network_delegate()->NotifyResponseStarted(this, net_error);
   }
 
   // Notify in case the entire URL Request has been finished.
@@ -907,8 +903,8 @@
         redirect_info.new_url.possibly_invalid_spec());
   }
 
-  if (network_delegate_)
-    network_delegate_->NotifyBeforeRedirect(this, redirect_info.new_url);
+  if (network_delegate())
+    network_delegate()->NotifyBeforeRedirect(this, redirect_info.new_url);
 
   if (!final_upload_progress_.position() && upload_data_stream_)
     final_upload_progress_ = upload_data_stream_->GetUploadProgress();
@@ -938,6 +934,10 @@
   return context_;
 }
 
+NetworkDelegate* URLRequest::network_delegate() const {
+  return context_->network_delegate();
+}
+
 int64_t URLRequest::GetExpectedContentSize() const {
   int64_t expected_content_size = -1;
   if (job_.get())
@@ -996,9 +996,9 @@
 bool URLRequest::CanGetCookies() const {
   DCHECK_EQ(PrivacyMode::PRIVACY_MODE_DISABLED, privacy_mode_);
   bool can_get_cookies = g_default_can_use_cookies;
-  if (network_delegate_) {
+  if (network_delegate()) {
     can_get_cookies =
-        network_delegate_->CanGetCookies(*this, /*allowed_from_caller=*/true);
+        network_delegate()->CanGetCookies(*this, /*allowed_from_caller=*/true);
   }
 
   if (!can_get_cookies)
@@ -1010,10 +1010,10 @@
                               CookieOptions* options) const {
   DCHECK(!(load_flags_ & LOAD_DO_NOT_SAVE_COOKIES));
   bool can_set_cookies = g_default_can_use_cookies;
-  if (network_delegate_) {
+  if (network_delegate()) {
     can_set_cookies =
-        network_delegate_->CanSetCookie(*this, cookie, options,
-                                        /*allowed_from_caller=*/true);
+        network_delegate()->CanSetCookie(*this, cookie, options,
+                                         /*allowed_from_caller=*/true);
   }
   if (!can_set_cookies)
     net_log_.AddEvent(NetLogEventType::COOKIE_SET_BLOCKED_BY_NETWORK_DELEGATE);
@@ -1036,8 +1036,8 @@
   // TODO(mmenke): Looks like |g_default_can_use_cookies| is not too useful,
   // with the network service - remove it.
   bool enable_privacy_mode = !g_default_can_use_cookies;
-  if (network_delegate_) {
-    enable_privacy_mode = network_delegate_->ForcePrivacyMode(
+  if (network_delegate()) {
+    enable_privacy_mode = network_delegate()->ForcePrivacyMode(
         url(), site_for_cookies_, isolation_info_.top_frame_origin());
   }
   return enable_privacy_mode ? PRIVACY_MODE_ENABLED : PRIVACY_MODE_DISABLED;
@@ -1098,8 +1098,8 @@
   is_pending_ = false;
   is_redirecting_ = false;
   has_notified_completion_ = true;
-  if (network_delegate_)
-    network_delegate_->NotifyCompleted(this, job_.get() != nullptr, status_);
+  if (network_delegate())
+    network_delegate()->NotifyCompleted(this, job_.get() != nullptr, status_);
 }
 
 void URLRequest::OnCallToDelegate(NetLogEventType type) {
diff --git a/net/url_request/url_request.h b/net/url_request/url_request.h
index 2df95bb9..adeb342 100644
--- a/net/url_request/url_request.h
+++ b/net/url_request/url_request.h
@@ -84,7 +84,6 @@
   // factories to be queried.  If no factory handles the request, then the
   // default job will be used.
   typedef URLRequestJob*(ProtocolFactory)(URLRequest* request,
-                                          NetworkDelegate* network_delegate,
                                           const std::string& scheme);
 
   // Max number of http redirects to follow. The Fetch spec says: "If
@@ -621,6 +620,9 @@
   // Used to specify the context (cookie store, cache) for this request.
   const URLRequestContext* context() const;
 
+  // Returns context()->network_delegate().
+  NetworkDelegate* network_delegate() const;
+
   const NetLogWithSource& net_log() const { return net_log_; }
 
   // Returns the expected content size if available
@@ -746,14 +748,10 @@
   friend class TestNetworkDelegate;
 
   // URLRequests are always created by calling URLRequestContext::CreateRequest.
-  //
-  // If no network delegate is passed in, will use the ones from the
-  // URLRequestContext.
   URLRequest(const GURL& url,
              RequestPriority priority,
              Delegate* delegate,
              const URLRequestContext* context,
-             NetworkDelegate* network_delegate,
              NetworkTrafficAnnotationTag traffic_annotation);
 
   // Resumes or blocks a request paused by the NetworkDelegate::OnBeforeRequest
@@ -797,9 +795,9 @@
                                  bool fatal);
   void NotifyReadCompleted(int bytes_read);
 
-  // These functions delegate to |network_delegate_| if it is not NULL.
-  // If |network_delegate_| is NULL, cookies can be used unless
-  // SetDefaultCookiePolicyToBlock() has been called.
+  // These functions delegate to the NetworkDelegate if it is not nullptr.
+  // Otherwise, cookies can be used unless SetDefaultCookiePolicyToBlock() has
+  // been called.
   bool CanGetCookies() const;
   bool CanSetCookie(const net::CanonicalCookie& cookie,
                     CookieOptions* options) const;
@@ -824,8 +822,6 @@
   // cookie store, socket pool, etc.)
   const URLRequestContext* context_;
 
-  NetworkDelegate* network_delegate_;
-
   // Tracks the time spent in various load states throughout this request.
   NetLogWithSource net_log_;
 
@@ -852,7 +848,7 @@
   // caller.
   bool allow_credentials_;
   // Privacy mode for current hop. Based on |allow_credentials_|, |load_flags_|,
-  // and information provided by |network_delegate_|. Saving cookies can
+  // and information provided by the NetworkDelegate. Saving cookies can
   // currently be blocked independently of this field by setting the deprecated
   // LOAD_DO_NOT_SAVE_COOKIES field in |load_flags_|.
   PrivacyMode privacy_mode_;
diff --git a/net/url_request/url_request_context.cc b/net/url_request/url_request_context.cc
index 56a3fe5..66bfcfb 100644
--- a/net/url_request/url_request_context.cc
+++ b/net/url_request/url_request_context.cc
@@ -105,8 +105,8 @@
     RequestPriority priority,
     URLRequest::Delegate* delegate,
     NetworkTrafficAnnotationTag traffic_annotation) const {
-  return base::WrapUnique(new URLRequest(
-      url, priority, delegate, this, network_delegate_, traffic_annotation));
+  return base::WrapUnique(
+      new URLRequest(url, priority, delegate, this, traffic_annotation));
 }
 
 void URLRequestContext::set_cookie_store(CookieStore* cookie_store) {
diff --git a/net/url_request/url_request_error_job.cc b/net/url_request/url_request_error_job.cc
index e47d6cddc..609e95d 100644
--- a/net/url_request/url_request_error_job.cc
+++ b/net/url_request/url_request_error_job.cc
@@ -13,10 +13,8 @@
 
 namespace net {
 
-URLRequestErrorJob::URLRequestErrorJob(URLRequest* request,
-                                       NetworkDelegate* network_delegate,
-                                       int error)
-    : URLRequestJob(request, network_delegate), error_(error) {}
+URLRequestErrorJob::URLRequestErrorJob(URLRequest* request, int error)
+    : URLRequestJob(request), error_(error) {}
 
 URLRequestErrorJob::~URLRequestErrorJob() = default;
 
diff --git a/net/url_request/url_request_error_job.h b/net/url_request/url_request_error_job.h
index c180442..205b150 100644
--- a/net/url_request/url_request_error_job.h
+++ b/net/url_request/url_request_error_job.h
@@ -17,7 +17,6 @@
 class NET_EXPORT URLRequestErrorJob : public URLRequestJob {
  public:
   URLRequestErrorJob(URLRequest* request,
-                     NetworkDelegate* network_delegate,
                      int error);
   ~URLRequestErrorJob() override;
 
diff --git a/net/url_request/url_request_filter.cc b/net/url_request/url_request_filter.cc
index c777e5e..77203dd 100644
--- a/net/url_request/url_request_filter.cc
+++ b/net/url_request/url_request_filter.cc
@@ -8,6 +8,7 @@
 #include "base/stl_util.h"
 #include "base/task/current_thread.h"
 #include "net/url_request/url_request.h"
+#include "net/url_request/url_request_job.h"
 #include "net/url_request/url_request_job_factory.h"
 
 namespace net {
@@ -108,14 +109,14 @@
   hit_count_ = 0;
 }
 
-URLRequestJob* URLRequestFilter::MaybeInterceptRequest(
-    URLRequest* request,
-    NetworkDelegate* network_delegate) const {
+std::unique_ptr<URLRequestJob> URLRequestFilter::MaybeInterceptRequest(
+    URLRequest* request) const {
   DCHECK(base::CurrentIOThread::Get());
-  URLRequestJob* job = nullptr;
   if (!request->url().is_valid())
     return nullptr;
 
+  std::unique_ptr<URLRequestJob> job;
+
   // Check the hostname map first.
   const std::string hostname = request->url().host();
   const std::string scheme = request->url().scheme();
@@ -123,7 +124,7 @@
   {
     auto it = hostname_interceptor_map_.find(make_pair(scheme, hostname));
     if (it != hostname_interceptor_map_.end())
-      job = it->second->MaybeInterceptRequest(request, network_delegate);
+      job = it->second->MaybeInterceptRequest(request);
   }
 
   if (!job) {
@@ -131,7 +132,7 @@
     const std::string& url = request->url().spec();
     auto it = url_interceptor_map_.find(url);
     if (it != url_interceptor_map_.end())
-      job = it->second->MaybeInterceptRequest(request, network_delegate);
+      job = it->second->MaybeInterceptRequest(request);
   }
   if (job) {
     DVLOG(1) << "URLRequestFilter hit for " << request->url().spec();
diff --git a/net/url_request/url_request_filter.h b/net/url_request/url_request_filter.h
index 29b08f2..003620a 100644
--- a/net/url_request/url_request_filter.h
+++ b/net/url_request/url_request_filter.h
@@ -65,9 +65,8 @@
   int hit_count() const { return hit_count_; }
 
   // URLRequestInterceptor implementation:
-  URLRequestJob* MaybeInterceptRequest(
-      URLRequest* request,
-      NetworkDelegate* network_delegate) const override;
+  std::unique_ptr<URLRequestJob> MaybeInterceptRequest(
+      URLRequest* request) const override;
 
  private:
   // scheme,hostname -> URLRequestInterceptor
diff --git a/net/url_request/url_request_filter_unittest.cc b/net/url_request/url_request_filter_unittest.cc
index 7af73646..d0e3502 100644
--- a/net/url_request/url_request_filter_unittest.cc
+++ b/net/url_request/url_request_filter_unittest.cc
@@ -7,6 +7,7 @@
 #include <memory>
 
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/test/task_environment.h"
 #include "net/base/request_priority.h"
 #include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
@@ -28,11 +29,10 @@
   ~TestURLRequestInterceptor() override = default;
 
   // URLRequestInterceptor implementation:
-  URLRequestJob* MaybeInterceptRequest(
-      URLRequest* request,
-      NetworkDelegate* network_delegate) const override {
-    job_ = new URLRequestTestJob(request, network_delegate);
-    return job_;
+  std::unique_ptr<URLRequestJob> MaybeInterceptRequest(
+      URLRequest* request) const override {
+    job_ = new URLRequestTestJob(request);
+    return base::WrapUnique<URLRequestJob>(job_);
   }
 
   // Is |job| the URLRequestJob generated during interception?
@@ -72,21 +72,19 @@
   EXPECT_TRUE(filter->AddUrlInterceptor(
       kUrl1, std::unique_ptr<URLRequestInterceptor>(interceptor)));
   {
-    std::unique_ptr<URLRequestJob> found(
-        filter->MaybeInterceptRequest(request1.get(), nullptr));
+    std::unique_ptr<URLRequestJob> found =
+        filter->MaybeInterceptRequest(request1.get());
     EXPECT_TRUE(interceptor->WasLastJobCreated(found.get()));
   }
   EXPECT_EQ(filter->hit_count(), 1);
 
   // Check we don't match other URLs.
-  EXPECT_TRUE(filter->MaybeInterceptRequest(request2.get(), nullptr) ==
-              nullptr);
+  EXPECT_FALSE(filter->MaybeInterceptRequest(request2.get()));
   EXPECT_EQ(1, filter->hit_count());
 
   // Check we can remove URL matching.
   filter->RemoveUrlHandler(kUrl1);
-  EXPECT_TRUE(filter->MaybeInterceptRequest(request1.get(), nullptr) ==
-              nullptr);
+  EXPECT_FALSE(filter->MaybeInterceptRequest(request1.get()));
   EXPECT_EQ(1, filter->hit_count());
 
   // Check hostname matching.
@@ -97,21 +95,19 @@
       kUrl1.scheme(), kUrl1.host(),
       std::unique_ptr<URLRequestInterceptor>(interceptor));
   {
-    std::unique_ptr<URLRequestJob> found(
-        filter->MaybeInterceptRequest(request1.get(), nullptr));
+    std::unique_ptr<URLRequestJob> found =
+        filter->MaybeInterceptRequest(request1.get());
     EXPECT_TRUE(interceptor->WasLastJobCreated(found.get()));
   }
   EXPECT_EQ(1, filter->hit_count());
 
   // Check we don't match other hostnames.
-  EXPECT_TRUE(filter->MaybeInterceptRequest(request2.get(), nullptr) ==
-              nullptr);
+  EXPECT_FALSE(filter->MaybeInterceptRequest(request2.get()));
   EXPECT_EQ(1, filter->hit_count());
 
   // Check we can remove hostname matching.
   filter->RemoveHostnameHandler(kUrl1.scheme(), kUrl1.host());
-  EXPECT_TRUE(filter->MaybeInterceptRequest(request1.get(), nullptr) ==
-              nullptr);
+  EXPECT_FALSE(filter->MaybeInterceptRequest(request1.get()));
   EXPECT_EQ(1, filter->hit_count());
 
   filter->ClearHandlers();
diff --git a/net/url_request/url_request_ftp_job.cc b/net/url_request/url_request_ftp_job.cc
index 8a23199..8ce8e65 100644
--- a/net/url_request/url_request_ftp_job.cc
+++ b/net/url_request/url_request_ftp_job.cc
@@ -43,10 +43,9 @@
 
 URLRequestFtpJob::URLRequestFtpJob(
     URLRequest* request,
-    NetworkDelegate* network_delegate,
     FtpTransactionFactory* ftp_transaction_factory,
     FtpAuthCache* ftp_auth_cache)
-    : URLRequestJob(request, network_delegate),
+    : URLRequestJob(request),
       proxy_resolution_service_(
           request_->context()->proxy_resolution_service()),
       read_in_progress_(false),
diff --git a/net/url_request/url_request_ftp_job.h b/net/url_request/url_request_ftp_job.h
index b796f69..6a0b17d 100644
--- a/net/url_request/url_request_ftp_job.h
+++ b/net/url_request/url_request_ftp_job.h
@@ -32,7 +32,6 @@
 
 class FtpAuthCache;
 class FtpTransactionFactory;
-class NetworkDelegate;
 class ProxyResolutionRequest;
 
 // A URLRequestJob subclass that is built on top of FtpTransaction. It
@@ -40,7 +39,6 @@
 class NET_EXPORT_PRIVATE URLRequestFtpJob : public URLRequestJob {
  public:
   URLRequestFtpJob(URLRequest* request,
-                   NetworkDelegate* network_delegate,
                    FtpTransactionFactory* ftp_transaction_factory,
                    FtpAuthCache* ftp_auth_cache);
   ~URLRequestFtpJob() override;
diff --git a/net/url_request/url_request_ftp_job_unittest.cc b/net/url_request/url_request_ftp_job_unittest.cc
index 7ce0eba8..0c1b174 100644
--- a/net/url_request/url_request_ftp_job_unittest.cc
+++ b/net/url_request/url_request_ftp_job_unittest.cc
@@ -120,11 +120,8 @@
     delete factory;
   }
 
-  std::unique_ptr<URLRequestJob> CreateJob(
-      URLRequest* request,
-      NetworkDelegate* network_delegate) const override {
-    return std::make_unique<URLRequestFtpJob>(request, network_delegate,
-                                              factory, auth_cache);
+  std::unique_ptr<URLRequestJob> CreateJob(URLRequest* request) const override {
+    return std::make_unique<URLRequestFtpJob>(request, factory, auth_cache);
   }
 
   bool IsSafeRedirectTarget(const GURL& location) const override {
diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc
index 4b58106..f5e754f 100644
--- a/net/url_request/url_request_http_job.cc
+++ b/net/url_request/url_request_http_job.cc
@@ -216,9 +216,7 @@
 
 namespace net {
 
-std::unique_ptr<URLRequestJob> URLRequestHttpJob::Create(
-    URLRequest* request,
-    NetworkDelegate* network_delegate) {
+std::unique_ptr<URLRequestJob> URLRequestHttpJob::Create(URLRequest* request) {
   const GURL& url = request->url();
 
   // URLRequestContext must have been initialized.
@@ -236,7 +234,7 @@
       replacements.SetSchemeStr(
           url.SchemeIs(url::kHttpScheme) ? url::kHttpsScheme : url::kWssScheme);
       return std::make_unique<URLRequestRedirectJob>(
-          request, network_delegate, url.ReplaceComponents(replacements),
+          request, url.ReplaceComponents(replacements),
           // Use status code 307 to preserve the method, so POST requests work.
           URLRequestRedirectJob::REDIRECT_307_TEMPORARY_REDIRECT, "HSTS");
     }
@@ -246,22 +244,20 @@
     // ERR_CLEARTEXT_NOT_PERMITTED if not.
     if (request->context()->check_cleartext_permitted() &&
         !android::IsCleartextPermitted(url.host())) {
-      return std::make_unique<URLRequestErrorJob>(request, network_delegate,
+      return std::make_unique<URLRequestErrorJob>(request,
                                                   ERR_CLEARTEXT_NOT_PERMITTED);
     }
 #endif
   }
 
-  return base::WrapUnique<URLRequestJob>(
-      new URLRequestHttpJob(request, network_delegate,
-                            request->context()->http_user_agent_settings()));
+  return base::WrapUnique<URLRequestJob>(new URLRequestHttpJob(
+      request, request->context()->http_user_agent_settings()));
 }
 
 URLRequestHttpJob::URLRequestHttpJob(
     URLRequest* request,
-    NetworkDelegate* network_delegate,
     const HttpUserAgentSettings* http_user_agent_settings)
-    : URLRequestJob(request, network_delegate),
+    : URLRequestJob(request),
       num_cookie_lines_left_(0),
       priority_(DEFAULT_PRIORITY),
       response_info_(nullptr),
@@ -407,14 +403,15 @@
 }
 
 void URLRequestHttpJob::StartTransaction() {
-  if (network_delegate()) {
+  NetworkDelegate* network_delegate = request()->network_delegate();
+  if (network_delegate) {
     OnCallToDelegate(
         NetLogEventType::NETWORK_DELEGATE_BEFORE_START_TRANSACTION);
     // The NetworkDelegate must watch for OnRequestDestroyed and not modify
     // |extra_headers| after it's called.
     // TODO(mattm): change the API to remove the out-params and take the
     // results as params of the callback.
-    int rv = network_delegate()->NotifyBeforeStartTransaction(
+    int rv = network_delegate->NotifyBeforeStartTransaction(
         request_,
         base::BindOnce(&URLRequestHttpJob::NotifyBeforeStartTransactionCallback,
                        weak_factory_.GetWeakPtr()),
@@ -908,7 +905,8 @@
   if (result == OK) {
     scoped_refptr<HttpResponseHeaders> headers = GetResponseHeaders();
 
-    if (network_delegate()) {
+    NetworkDelegate* network_delegate = request()->network_delegate();
+    if (network_delegate) {
       // Note that |this| may not be deleted until
       // |URLRequestHttpJob::OnHeadersReceivedCallback()| or
       // |NetworkDelegate::URLRequestDestroyed()| has been called.
@@ -921,7 +919,7 @@
       // any of the arguments after it's called.
       // TODO(mattm): change the API to remove the out-params and take the
       // results as params of the callback.
-      int error = network_delegate()->NotifyHeadersReceived(
+      int error = network_delegate->NotifyHeadersReceived(
           request_,
           base::BindOnce(&URLRequestHttpJob::OnHeadersReceivedCallback,
                          weak_factory_.GetWeakPtr()),
diff --git a/net/url_request/url_request_http_job.h b/net/url_request/url_request_http_job.h
index 183b6da..274314b 100644
--- a/net/url_request/url_request_http_job.h
+++ b/net/url_request/url_request_http_job.h
@@ -47,16 +47,13 @@
   // Returns a job that returns a redirect in the case of HSTS, and returns a
   // job that fails for unencrypted requests if current settings dont allow
   // them. Never returns nullptr.
-  static std::unique_ptr<URLRequestJob> Create(
-      URLRequest* request,
-      NetworkDelegate* network_delegate);
+  static std::unique_ptr<URLRequestJob> Create(URLRequest* request);
 
   void SetRequestHeadersCallback(RequestHeadersCallback callback) override;
   void SetResponseHeadersCallback(ResponseHeadersCallback callback) override;
 
  protected:
   URLRequestHttpJob(URLRequest* request,
-                    NetworkDelegate* network_delegate,
                     const HttpUserAgentSettings* http_user_agent_settings);
 
   ~URLRequestHttpJob() override;
diff --git a/net/url_request/url_request_http_job_unittest.cc b/net/url_request/url_request_http_job_unittest.cc
index ae108a2..723a911 100644
--- a/net/url_request/url_request_http_job_unittest.cc
+++ b/net/url_request/url_request_http_job_unittest.cc
@@ -97,7 +97,6 @@
  public:
   explicit TestURLRequestHttpJob(URLRequest* request)
       : URLRequestHttpJob(request,
-                          request->context()->network_delegate(),
                           request->context()->http_user_agent_settings()),
         use_null_source_stream_(false) {}
 
diff --git a/net/url_request/url_request_interceptor.h b/net/url_request/url_request_interceptor.h
index 9ed1670..0ce071f 100644
--- a/net/url_request/url_request_interceptor.h
+++ b/net/url_request/url_request_interceptor.h
@@ -5,6 +5,8 @@
 #ifndef NET_URL_REQUEST_URL_REQUEST_INTERCEPTOR_H_
 #define NET_URL_REQUEST_URL_REQUEST_INTERCEPTOR_H_
 
+#include <memory>
+
 #include "base/macros.h"
 #include "net/base/net_export.h"
 
@@ -12,7 +14,6 @@
 
 class URLRequest;
 class URLRequestJob;
-class NetworkDelegate;
 
 // In tests, URLRequestFilter lets URLRequestInterceptors create URLRequestJobs
 // to handle URLRequests before they're handed off to the ProtocolHandler for
@@ -27,9 +28,9 @@
 
   // Returns a URLRequestJob to handle |request|, if the interceptor wants to
   // take over the handling the request instead of the default ProtocolHandler.
-  // Otherwise, returns NULL.
-  virtual URLRequestJob* MaybeInterceptRequest(
-      URLRequest* request, NetworkDelegate* network_delegate) const = 0;
+  // Otherwise, returns nullptr.
+  virtual std::unique_ptr<URLRequestJob> MaybeInterceptRequest(
+      URLRequest* request) const = 0;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(URLRequestInterceptor);
diff --git a/net/url_request/url_request_job.cc b/net/url_request/url_request_job.cc
index 88d9a007..1f669a4 100644
--- a/net/url_request/url_request_job.cc
+++ b/net/url_request/url_request_job.cc
@@ -79,15 +79,13 @@
   DISALLOW_COPY_AND_ASSIGN(URLRequestJobSourceStream);
 };
 
-URLRequestJob::URLRequestJob(URLRequest* request,
-                             NetworkDelegate* network_delegate)
+URLRequestJob::URLRequestJob(URLRequest* request)
     : request_(request),
       done_(false),
       prefilter_bytes_read_(0),
       postfilter_bytes_read_(0),
       has_handled_response_(false),
-      expected_content_size_(-1),
-      network_delegate_(network_delegate) {}
+      expected_content_size_(-1) {}
 
 URLRequestJob::~URLRequestJob() {
 }
diff --git a/net/url_request/url_request_job.h b/net/url_request/url_request_job.h
index b3f9216..fe4dc8ea 100644
--- a/net/url_request/url_request_job.h
+++ b/net/url_request/url_request_job.h
@@ -40,7 +40,6 @@
 class HttpResponseInfo;
 class IOBuffer;
 struct LoadTimingInfo;
-class NetworkDelegate;
 class ProxyServer;
 class SSLCertRequestInfo;
 class SSLInfo;
@@ -51,8 +50,7 @@
 
 class NET_EXPORT URLRequestJob {
  public:
-  explicit URLRequestJob(URLRequest* request,
-                         NetworkDelegate* network_delegate);
+  explicit URLRequestJob(URLRequest* request);
   virtual ~URLRequestJob();
 
   // Returns the request that owns this job.
@@ -325,9 +323,6 @@
   // or nullptr on error.
   virtual std::unique_ptr<SourceStream> SetUpSourceStream();
 
-  // Provides derived classes with access to the request's network delegate.
-  NetworkDelegate* network_delegate() { return network_delegate_; }
-
   // Set the proxy server that was used, if any.
   void SetProxyServer(const ProxyServer& proxy_server);
 
@@ -433,9 +428,6 @@
   // checks are performed, so this field must not be modified.
   base::Optional<RedirectInfo> deferred_redirect_info_;
 
-  // The network delegate to use with this request, if any.
-  NetworkDelegate* network_delegate_;
-
   // Non-null if ReadRawData() returned ERR_IO_PENDING, and the read has not
   // completed.
   CompletionOnceCallback read_raw_callback_;
diff --git a/net/url_request/url_request_job_factory.cc b/net/url_request/url_request_job_factory.cc
index d850556b..dceb26f 100644
--- a/net/url_request/url_request_job_factory.cc
+++ b/net/url_request/url_request_job_factory.cc
@@ -30,10 +30,8 @@
   HttpProtocolHandler& operator=(const HttpProtocolHandler&) = delete;
   ~HttpProtocolHandler() override = default;
 
-  std::unique_ptr<URLRequestJob> CreateJob(
-      URLRequest* request,
-      NetworkDelegate* network_delegate) const override {
-    return URLRequestHttpJob::Create(request, network_delegate);
+  std::unique_ptr<URLRequestJob> CreateJob(URLRequest* request) const override {
+    return URLRequestHttpJob::Create(request);
   }
 };
 
@@ -81,30 +79,27 @@
 }
 
 std::unique_ptr<URLRequestJob> URLRequestJobFactory::CreateJob(
-    URLRequest* request,
-    NetworkDelegate* network_delegate) const {
+    URLRequest* request) const {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
   // If we are given an invalid URL, then don't even try to inspect the scheme.
   if (!request->url().is_valid())
-    return std::make_unique<URLRequestErrorJob>(request, network_delegate,
-                                                ERR_INVALID_URL);
+    return std::make_unique<URLRequestErrorJob>(request, ERR_INVALID_URL);
 
   if (g_interceptor_for_testing) {
     std::unique_ptr<URLRequestJob> job(
-        g_interceptor_for_testing->MaybeInterceptRequest(request,
-                                                         network_delegate));
+        g_interceptor_for_testing->MaybeInterceptRequest(request));
     if (job)
       return job;
   }
 
   auto it = protocol_handler_map_.find(request->url().scheme());
   if (it == protocol_handler_map_.end()) {
-    return std::make_unique<URLRequestErrorJob>(request, network_delegate,
+    return std::make_unique<URLRequestErrorJob>(request,
                                                 ERR_UNKNOWN_URL_SCHEME);
   }
 
-  return it->second->CreateJob(request, network_delegate);
+  return it->second->CreateJob(request);
 }
 
 bool URLRequestJobFactory::IsSafeRedirectTarget(const GURL& location) const {
diff --git a/net/url_request/url_request_job_factory.h b/net/url_request/url_request_job_factory.h
index 58a55b1c..9d31c6c 100644
--- a/net/url_request/url_request_job_factory.h
+++ b/net/url_request/url_request_job_factory.h
@@ -18,7 +18,6 @@
 
 namespace net {
 
-class NetworkDelegate;
 class URLRequest;
 class URLRequestInterceptor;
 class URLRequestJob;
@@ -34,8 +33,7 @@
     // Creates a URLRequestJob for the particular protocol. Never returns
     // nullptr.
     virtual std::unique_ptr<URLRequestJob> CreateJob(
-        URLRequest* request,
-        NetworkDelegate* network_delegate) const = 0;
+        URLRequest* request) const = 0;
 
     // Indicates if it should be safe to redirect to |location|. Should handle
     // protocols handled by MaybeCreateJob().
@@ -54,9 +52,7 @@
   // with net::Error code if unable to handle request->url().
   //
   // Virtual for tests.
-  virtual std::unique_ptr<URLRequestJob> CreateJob(
-      URLRequest* request,
-      NetworkDelegate* network_delegate) const;
+  virtual std::unique_ptr<URLRequestJob> CreateJob(URLRequest* request) const;
 
   // Returns true if it's safe to redirect to |location|.
   //
diff --git a/net/url_request/url_request_job_factory_unittest.cc b/net/url_request/url_request_job_factory_unittest.cc
index 5ce221b..604d4ae 100644
--- a/net/url_request/url_request_job_factory_unittest.cc
+++ b/net/url_request/url_request_job_factory_unittest.cc
@@ -29,8 +29,7 @@
 
 class MockURLRequestJob : public URLRequestJob {
  public:
-  MockURLRequestJob(URLRequest* request, NetworkDelegate* network_delegate)
-      : URLRequestJob(request, network_delegate) {}
+  explicit MockURLRequestJob(URLRequest* request) : URLRequestJob(request) {}
 
   ~MockURLRequestJob() override = default;
 
@@ -50,10 +49,8 @@
 
 class DummyProtocolHandler : public URLRequestJobFactory::ProtocolHandler {
  public:
-  std::unique_ptr<URLRequestJob> CreateJob(
-      URLRequest* request,
-      NetworkDelegate* network_delegate) const override {
-    return std::make_unique<MockURLRequestJob>(request, network_delegate);
+  std::unique_ptr<URLRequestJob> CreateJob(URLRequest* request) const override {
+    return std::make_unique<MockURLRequestJob>(request);
   }
 };
 
diff --git a/net/url_request/url_request_redirect_job.cc b/net/url_request/url_request_redirect_job.cc
index 58fefd34..d43060b 100644
--- a/net/url_request/url_request_redirect_job.cc
+++ b/net/url_request/url_request_redirect_job.cc
@@ -29,11 +29,10 @@
 namespace net {
 
 URLRequestRedirectJob::URLRequestRedirectJob(URLRequest* request,
-                                             NetworkDelegate* network_delegate,
                                              const GURL& redirect_destination,
                                              ResponseCode response_code,
                                              const std::string& redirect_reason)
-    : URLRequestJob(request, network_delegate),
+    : URLRequestJob(request),
       redirect_destination_(redirect_destination),
       response_code_(response_code),
       redirect_reason_(redirect_reason) {
diff --git a/net/url_request/url_request_redirect_job.h b/net/url_request/url_request_redirect_job.h
index 244de39..c4aa2df8 100644
--- a/net/url_request/url_request_redirect_job.h
+++ b/net/url_request/url_request_redirect_job.h
@@ -37,7 +37,6 @@
   // Constructs a job that redirects to the specified URL.  |redirect_reason| is
   // logged for debugging purposes, and must not be an empty string.
   URLRequestRedirectJob(URLRequest* request,
-                        NetworkDelegate* network_delegate,
                         const GURL& redirect_destination,
                         ResponseCode response_code,
                         const std::string& redirect_reason);
diff --git a/net/url_request/url_request_test_job.cc b/net/url_request/url_request_test_job.cc
index d1f6d4a..a3a4ed8b 100644
--- a/net/url_request/url_request_test_job.cc
+++ b/net/url_request/url_request_test_job.cc
@@ -126,14 +126,8 @@
   return std::string(kHeaders, base::size(kHeaders));
 }
 
-URLRequestTestJob::URLRequestTestJob(URLRequest* request,
-                                     NetworkDelegate* network_delegate)
-    : URLRequestTestJob(request, network_delegate, false) {}
-
-URLRequestTestJob::URLRequestTestJob(URLRequest* request,
-                                     NetworkDelegate* network_delegate,
-                                     bool auto_advance)
-    : URLRequestJob(request, network_delegate),
+URLRequestTestJob::URLRequestTestJob(URLRequest* request, bool auto_advance)
+    : URLRequestJob(request),
       auto_advance_(auto_advance),
       stage_(WAITING),
       priority_(DEFAULT_PRIORITY),
@@ -144,11 +138,10 @@
       async_reads_(false) {}
 
 URLRequestTestJob::URLRequestTestJob(URLRequest* request,
-                                     NetworkDelegate* network_delegate,
                                      const std::string& response_headers,
                                      const std::string& response_data,
                                      bool auto_advance)
-    : URLRequestJob(request, network_delegate),
+    : URLRequestJob(request),
       auto_advance_(auto_advance),
       stage_(WAITING),
       priority_(DEFAULT_PRIORITY),
diff --git a/net/url_request/url_request_test_job.h b/net/url_request/url_request_test_job.h
index 22f30ca..9c5906c 100644
--- a/net/url_request/url_request_test_job.h
+++ b/net/url_request/url_request_test_job.h
@@ -40,20 +40,13 @@
 class NET_EXPORT_PRIVATE URLRequestTestJob : public URLRequestJob {
  public:
   // Constructs a job to return one of the canned responses depending on the
-  // request url, with auto advance disabled.
-  URLRequestTestJob(URLRequest* request, NetworkDelegate* network_delegate);
-
-  // Constructs a job to return one of the canned responses depending on the
-  // request url, optionally with auto advance enabled.
-  URLRequestTestJob(URLRequest* request,
-                    NetworkDelegate* network_delegate,
-                    bool auto_advance);
+  // request url.
+  explicit URLRequestTestJob(URLRequest* request, bool auto_advance = false);
 
   // Constructs a job to return the given response regardless of the request
   // url. The headers should include the HTTP status line and use CRLF/LF as the
   // line separator.
   URLRequestTestJob(URLRequest* request,
-                    NetworkDelegate* network_delegate,
                     const std::string& response_headers,
                     const std::string& response_data,
                     bool auto_advance);
diff --git a/net/url_request/url_request_test_util.cc b/net/url_request/url_request_test_util.cc
index 5692205..0fef1f0 100644
--- a/net/url_request/url_request_test_util.cc
+++ b/net/url_request/url_request_test_util.cc
@@ -656,10 +656,9 @@
 
   ~TestRequestInterceptor() override { CHECK(safe_to_delete_); }
 
-  URLRequestJob* MaybeInterceptRequest(
-      URLRequest* request,
-      NetworkDelegate* network_delegate) const override {
-    return intercept_job_.release();
+  std::unique_ptr<URLRequestJob> MaybeInterceptRequest(
+      URLRequest* request) const override {
+    return std::move(intercept_job_);
   }
 
   bool job_used() const { return intercept_job_.get() == nullptr; }
diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc
index 6a9ed04..2f92038 100644
--- a/net/url_request/url_request_unittest.cc
+++ b/net/url_request/url_request_unittest.cc
@@ -336,10 +336,8 @@
  public:
   // The latest priority of the job is always written to |request_priority_|.
   PriorityMonitoringURLRequestJob(URLRequest* request,
-                                  NetworkDelegate* network_delegate,
                                   RequestPriority* request_priority)
-      : URLRequestTestJob(request, network_delegate),
-        request_priority_(request_priority) {
+      : URLRequestTestJob(request), request_priority_(request_priority) {
     *request_priority_ = DEFAULT_PRIORITY;
   }
 
@@ -979,11 +977,11 @@
   ~URLRequestInterceptorWithLoadTimingInfo() override = default;
 
   // URLRequestInterceptor implementation:
-  URLRequestJob* MaybeInterceptRequest(
-      URLRequest* request,
-      NetworkDelegate* network_delegate) const override {
-    URLRequestTestJob* job = new URLRequestTestJob(
-        request, network_delegate, ok_headers(), ok_data(), true);
+  std::unique_ptr<URLRequestJob> MaybeInterceptRequest(
+      URLRequest* request) const override {
+    std::unique_ptr<URLRequestTestJob> job =
+        std::make_unique<URLRequestTestJob>(request, ok_headers(), ok_data(),
+                                            true);
     job->set_load_timing_info(main_request_load_timing_info_);
     return job;
   }
@@ -1408,8 +1406,9 @@
   EXPECT_EQ(DEFAULT_PRIORITY, req->priority());
 
   RequestPriority job_priority;
-  std::unique_ptr<URLRequestJob> job(new PriorityMonitoringURLRequestJob(
-      req.get(), &default_network_delegate_, &job_priority));
+  std::unique_ptr<URLRequestJob> job =
+      std::make_unique<PriorityMonitoringURLRequestJob>(req.get(),
+                                                        &job_priority);
   TestScopedURLInterceptor interceptor(req->url(), std::move(job));
   EXPECT_EQ(DEFAULT_PRIORITY, job_priority);
 
@@ -1428,8 +1427,9 @@
       TRAFFIC_ANNOTATION_FOR_TESTS));
 
   RequestPriority job_priority;
-  std::unique_ptr<URLRequestJob> job(new PriorityMonitoringURLRequestJob(
-      req.get(), &default_network_delegate_, &job_priority));
+  std::unique_ptr<URLRequestJob> job =
+      std::make_unique<PriorityMonitoringURLRequestJob>(req.get(),
+                                                        &job_priority);
   TestScopedURLInterceptor interceptor(req->url(), std::move(job));
 
   req->SetPriority(LOW);
@@ -1451,8 +1451,9 @@
   EXPECT_EQ(MAXIMUM_PRIORITY, req->priority());
 
   RequestPriority job_priority;
-  std::unique_ptr<URLRequestJob> job(new PriorityMonitoringURLRequestJob(
-      req.get(), &default_network_delegate_, &job_priority));
+  std::unique_ptr<URLRequestJob> job =
+      std::make_unique<PriorityMonitoringURLRequestJob>(req.get(),
+                                                        &job_priority);
   TestScopedURLInterceptor interceptor(req->url(), std::move(job));
 
   req->SetLoadFlags(LOAD_IGNORE_LIMITS);
@@ -2884,8 +2885,7 @@
     // URLRequestJobFactory::ProtocolHandler implementation:
 
     std::unique_ptr<URLRequestJob> CreateJob(
-        URLRequest* request,
-        NetworkDelegate* network_delegate) const override {
+        URLRequest* request) const override {
       NOTREACHED();
       return nullptr;
     }
@@ -6159,9 +6159,10 @@
   std::unique_ptr<URLRequest> r(default_context().CreateRequest(
       original_url, DEFAULT_PRIORITY, &d, TRAFFIC_ANNOTATION_FOR_TESTS));
 
-  std::unique_ptr<URLRequestRedirectJob> job(new URLRequestRedirectJob(
-      r.get(), &default_network_delegate_, redirect_url,
-      URLRequestRedirectJob::REDIRECT_302_FOUND, "Very Good Reason"));
+  std::unique_ptr<URLRequestRedirectJob> job =
+      std::make_unique<URLRequestRedirectJob>(
+          r.get(), redirect_url, URLRequestRedirectJob::REDIRECT_302_FOUND,
+          "Very Good Reason");
   TestScopedURLInterceptor interceptor(r->url(), std::move(job));
 
   r->Start();
@@ -7978,10 +7979,10 @@
                     base::NumberToString(base::size(kData) - 1));
   req->SetExtraRequestHeaders(headers);
 
-  std::unique_ptr<URLRequestRedirectJob> job(new URLRequestRedirectJob(
-      req.get(), &default_network_delegate_,
-      http_test_server()->GetURL("/echo"),
-      URLRequestRedirectJob::REDIRECT_302_FOUND, "Very Good Reason"));
+  std::unique_ptr<URLRequestRedirectJob> job =
+      std::make_unique<URLRequestRedirectJob>(
+          req.get(), http_test_server()->GetURL("/echo"),
+          URLRequestRedirectJob::REDIRECT_302_FOUND, "Very Good Reason");
   TestScopedURLInterceptor interceptor(req->url(), std::move(job));
 
   req->Start();
@@ -8005,11 +8006,11 @@
                     base::NumberToString(base::size(kData) - 1));
   req->SetExtraRequestHeaders(headers);
 
-  std::unique_ptr<URLRequestRedirectJob> job(new URLRequestRedirectJob(
-      req.get(), &default_network_delegate_,
-      http_test_server()->GetURL("/echo"),
-      URLRequestRedirectJob::REDIRECT_307_TEMPORARY_REDIRECT,
-      "Very Good Reason"));
+  std::unique_ptr<URLRequestRedirectJob> job =
+      std::make_unique<URLRequestRedirectJob>(
+          req.get(), http_test_server()->GetURL("/echo"),
+          URLRequestRedirectJob::REDIRECT_307_TEMPORARY_REDIRECT,
+          "Very Good Reason");
   TestScopedURLInterceptor interceptor(req->url(), std::move(job));
 
   req->Start();
@@ -8208,9 +8209,10 @@
       initial_url, DEFAULT_PRIORITY, &d, TRAFFIC_ANNOTATION_FOR_TESTS));
   EXPECT_EQ(DEFAULT_PRIORITY, req->priority());
 
-  std::unique_ptr<URLRequestRedirectJob> redirect_job(new URLRequestRedirectJob(
-      req.get(), &default_network_delegate_, redirect_url,
-      URLRequestRedirectJob::REDIRECT_302_FOUND, "Very Good Reason"));
+  std::unique_ptr<URLRequestRedirectJob> redirect_job =
+      std::make_unique<URLRequestRedirectJob>(
+          req.get(), redirect_url, URLRequestRedirectJob::REDIRECT_302_FOUND,
+          "Very Good Reason");
   auto interceptor = std::make_unique<TestScopedURLInterceptor>(
       initial_url, std::move(redirect_job));
 
@@ -8221,8 +8223,9 @@
   interceptor.reset();
 
   RequestPriority job_priority;
-  std::unique_ptr<URLRequestJob> job(new PriorityMonitoringURLRequestJob(
-      req.get(), &default_network_delegate_, &job_priority));
+  std::unique_ptr<URLRequestJob> job =
+      std::make_unique<PriorityMonitoringURLRequestJob>(req.get(),
+                                                        &job_priority);
   interceptor =
       std::make_unique<TestScopedURLInterceptor>(redirect_url, std::move(job));
 
@@ -9837,9 +9840,8 @@
 
  private:
   // URLRequestInterceptor implementation:
-  net::URLRequestJob* MaybeInterceptRequest(
-      net::URLRequest* request,
-      net::NetworkDelegate* network_delegate) const override {
+  std::unique_ptr<net::URLRequestJob> MaybeInterceptRequest(
+      net::URLRequest* request) const override {
     EXPECT_TRUE(request->disable_secure_dns());
     return nullptr;
   }
@@ -11616,10 +11618,11 @@
       GURL("http://not-a-real-domain/"), DEFAULT_PRIORITY, &d,
       TRAFFIC_ANNOTATION_FOR_TESTS));
 
-  std::unique_ptr<URLRequestRedirectJob> job(new URLRequestRedirectJob(
-      req.get(), &default_network_delegate_,
-      GURL("http://this-should-never-be-navigated-to/"),
-      URLRequestRedirectJob::REDIRECT_307_TEMPORARY_REDIRECT, "Jumbo shrimp"));
+  std::unique_ptr<URLRequestRedirectJob> job =
+      std::make_unique<URLRequestRedirectJob>(
+          req.get(), GURL("http://this-should-never-be-navigated-to/"),
+          URLRequestRedirectJob::REDIRECT_307_TEMPORARY_REDIRECT,
+          "Jumbo shrimp");
   TestScopedURLInterceptor interceptor(req->url(), std::move(job));
 
   req->Start();