diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index ab5cd02..0572d5be 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -750,6 +750,8 @@
     "net/spdyproxy/data_reduction_proxy_chrome_settings_factory.h",
     "net/sth_distributor_provider.cc",
     "net/sth_distributor_provider.h",
+    "net/system_network_context_manager.cc",
+    "net/system_network_context_manager.h",
     "net/timed_cache.cc",
     "net/timed_cache.h",
     "net/url_info.cc",
@@ -1624,6 +1626,7 @@
     "//content/public/common:feature_h264_with_openh264_ffmpeg",
     "//content/public/common:features",
     "//content/public/common:service_names",
+    "//content/public/network",
     "//courgette:courgette_lib",
     "//crypto",
     "//crypto:platform",
diff --git a/chrome/browser/DEPS b/chrome/browser/DEPS
index 9a8a65d6..3a9c7de 100644
--- a/chrome/browser/DEPS
+++ b/chrome/browser/DEPS
@@ -88,6 +88,10 @@
   # sending synchronous IPC messages on non-UI threads.
   "-ipc/ipc_sync_message_filter.h",
 
+  # Allows in-process use of NetworkService for URLRequestContext configuration.
+  # Should be removed once the actual network service ships.
+  "+content/public/network",
+
   # Other libraries.
   "+libxml",
   "+third_party/google_toolbox_for_mac/src",
diff --git a/chrome/browser/io_thread.cc b/chrome/browser/io_thread.cc
index 41cfd40..9dcd7f0 100644
--- a/chrome/browser/io_thread.cc
+++ b/chrome/browser/io_thread.cc
@@ -264,9 +264,9 @@
 
 net::URLRequestContext* SystemURLRequestContextGetter::GetURLRequestContext() {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
-  DCHECK(io_thread_->globals()->system_request_context.get());
+  DCHECK(io_thread_->globals()->system_request_context);
 
-  return io_thread_->globals()->system_request_context.get();
+  return io_thread_->globals()->system_request_context;
 }
 
 scoped_refptr<base::SingleThreadTaskRunner>
@@ -283,12 +283,14 @@
 
 IOThread::Globals::
 SystemRequestContextLeakChecker::~SystemRequestContextLeakChecker() {
-  if (globals_->system_request_context.get())
+  if (globals_->system_request_context)
     globals_->system_request_context->AssertNoURLRequests();
 }
 
-IOThread::Globals::Globals() : system_request_context_leak_checker(this),
-                               enable_brotli(false) {}
+IOThread::Globals::Globals()
+    : system_request_context(nullptr),
+      system_request_context_leak_checker(this),
+      enable_brotli(false) {}
 
 IOThread::Globals::~Globals() {}
 
@@ -398,6 +400,9 @@
       std::unique_ptr<net::ct::STHDistributor>(new net::ct::STHDistributor()));
 
   BrowserThread::SetIOThreadDelegate(this);
+
+  SystemNetworkContextManager::SetUp(&network_context_request_,
+                                     &network_context_params_);
 }
 
 IOThread::~IOThread() {
@@ -785,14 +790,15 @@
 void IOThread::ConstructSystemRequestContext() {
   const base::CommandLine& command_line =
       *base::CommandLine::ForCurrentProcess();
-  net::URLRequestContextBuilderMojo builder;
+  std::unique_ptr<net::URLRequestContextBuilderMojo> builder =
+      base::MakeUnique<net::URLRequestContextBuilderMojo>();
 
-  builder.set_network_quality_estimator(
+  builder->set_network_quality_estimator(
       globals_->network_quality_estimator.get());
-  builder.set_enable_brotli(globals_->enable_brotli);
-  builder.set_name("system");
+  builder->set_enable_brotli(globals_->enable_brotli);
+  builder->set_name("system");
 
-  builder.set_user_agent(GetUserAgent());
+  builder->set_user_agent(GetUserAgent());
   std::unique_ptr<ChromeNetworkDelegate> chrome_network_delegate(
       new ChromeNetworkDelegate(extension_event_router_forwarder(),
                                 &system_enable_referrers_));
@@ -800,26 +806,26 @@
   chrome_network_delegate->set_data_use_aggregator(
       globals_->data_use_aggregator.get(),
       true /* is_data_usage_off_the_record */);
-  builder.set_network_delegate(
+  builder->set_network_delegate(
       globals_->data_use_ascriber->CreateNetworkDelegate(
           std::move(chrome_network_delegate), GetMetricsDataUseForwarder()));
-  builder.set_net_log(net_log_);
+  builder->set_net_log(net_log_);
   std::unique_ptr<net::HostResolver> host_resolver(
       CreateGlobalHostResolver(net_log_));
 
-  builder.set_ssl_config_service(GetSSLConfigService());
-  builder.SetHttpAuthHandlerFactory(
+  builder->set_ssl_config_service(GetSSLConfigService());
+  builder->SetHttpAuthHandlerFactory(
       CreateDefaultAuthHandlerFactory(host_resolver.get()));
 
-  builder.set_host_resolver(std::move(host_resolver));
+  builder->set_host_resolver(std::move(host_resolver));
 
 #if defined(OS_CHROMEOS)
   // Creates a CertVerifyProc that doesn't allow any profile-provided certs.
-  builder.SetCertVerifier(base::MakeUnique<net::CachingCertVerifier>(
+  builder->SetCertVerifier(base::MakeUnique<net::CachingCertVerifier>(
       base::MakeUnique<net::MultiThreadedCertVerifier>(
           new chromeos::CertVerifyProcChromeOS())));
 #else
-  builder.SetCertVerifier(IgnoreErrorsCertVerifier::MaybeWrapCertVerifier(
+  builder->SetCertVerifier(IgnoreErrorsCertVerifier::MaybeWrapCertVerifier(
       command_line, net::CertVerifier::CreateDefault()));
   UMA_HISTOGRAM_BOOLEAN(
       "Net.Certificate.IgnoreCertificateErrorsSPKIListPresent",
@@ -834,7 +840,7 @@
   // Register the ct_tree_tracker_ as observer for verified SCTs.
   ct_verifier->SetObserver(ct_tree_tracker_.get());
 
-  builder.set_ct_verifier(std::move(ct_verifier));
+  builder->set_ct_verifier(std::move(ct_verifier));
 
   // TODO(eroman): Figure out why this doesn't work in single-process mode.
   // Should be possible now that a private isolate is used.
@@ -843,40 +849,45 @@
     if (command_line.HasSwitch(switches::kSingleProcess)) {
       LOG(ERROR) << "Cannot use V8 Proxy resolver in single process mode.";
     } else {
-      builder.set_mojo_proxy_resolver_factory(
+      builder->set_mojo_proxy_resolver_factory(
           ChromeMojoProxyResolverFactory::GetInstance());
     }
   }
 
-  builder.set_pac_quick_check_enabled(WpadQuickCheckEnabled());
-  builder.set_pac_sanitize_url_policy(
+  builder->set_pac_quick_check_enabled(WpadQuickCheckEnabled());
+  builder->set_pac_sanitize_url_policy(
       PacHttpsUrlStrippingEnabled()
           ? net::ProxyService::SanitizeUrlPolicy::SAFE
           : net::ProxyService::SanitizeUrlPolicy::UNSAFE);
 #if defined(OS_CHROMEOS)
-  builder.set_dhcp_fetcher_factory(
+  builder->set_dhcp_fetcher_factory(
       base::MakeUnique<chromeos::DhcpProxyScriptFetcherFactoryChromeos>());
 #endif
-  builder.set_proxy_config_service(std::move(system_proxy_config_service_));
+  builder->set_proxy_config_service(std::move(system_proxy_config_service_));
 
-  builder.set_http_network_session_params(session_params_);
+  builder->set_http_network_session_params(session_params_);
 
-  builder.set_data_enabled(true);
-  builder.set_file_enabled(true);
+  builder->set_data_enabled(true);
+  builder->set_file_enabled(true);
 #if !BUILDFLAG(DISABLE_FTP_SUPPORT)
-  builder.set_ftp_enabled(true);
+  builder->set_ftp_enabled(true);
 #endif
 
-  builder.DisableHttpCache();
+  builder->DisableHttpCache();
 
-  globals_->system_request_context = builder.Build();
+  globals_->network_service = content::NetworkService::Create();
+  globals_->system_network_context =
+      globals_->network_service->CreateNetworkContextWithBuilder(
+          std::move(network_context_request_),
+          std::move(network_context_params_), std::move(builder),
+          &globals_->system_request_context);
 
 #if defined(USE_NSS_CERTS)
-  net::SetURLRequestContextForNSSHttpIO(globals_->system_request_context.get());
+  net::SetURLRequestContextForNSSHttpIO(globals_->system_request_context);
 #endif
 #if defined(OS_ANDROID)
   net::CertVerifyProcAndroid::SetCertNetFetcher(
-      net::CreateCertNetFetcher(globals_->system_request_context.get()));
+      net::CreateCertNetFetcher(globals_->system_request_context));
 #endif
 }
 
diff --git a/chrome/browser/io_thread.h b/chrome/browser/io_thread.h
index e250176..593491b 100644
--- a/chrome/browser/io_thread.h
+++ b/chrome/browser/io_thread.h
@@ -23,12 +23,15 @@
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "chrome/browser/net/chrome_network_delegate.h"
+#include "chrome/browser/net/system_network_context_manager.h"
 #include "chrome/common/features.h"
 #include "components/metrics/data_use_tracker.h"
 #include "components/prefs/pref_member.h"
 #include "components/ssl_config/ssl_config_service_manager.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/browser_thread_delegate.h"
+#include "content/public/common/network_service.mojom.h"
+#include "content/public/network/network_service.h"
 #include "extensions/features/features.h"
 #include "net/base/network_change_notifier.h"
 #include "net/http/http_network_session.h"
@@ -127,6 +130,11 @@
     Globals();
     ~Globals();
 
+    // In-process NetworkService for use in URLRequestContext configuration when
+    // the network service created through the ServiceManager is disabled. See
+    // SystemNetworkContextManager's header comment for more details
+    std::unique_ptr<content::NetworkService> network_service;
+
     // Ascribes all data use in Chrome to a source, such as page loads.
     std::unique_ptr<data_use_measurement::ChromeDataUseAscriber>
         data_use_ascriber;
@@ -140,7 +148,8 @@
 #endif  // defined(OS_ANDROID)
     std::vector<scoped_refptr<const net::CTLogVerifier>> ct_logs;
     std::unique_ptr<net::HttpAuthPreferences> http_auth_preferences;
-    std::unique_ptr<net::URLRequestContext> system_request_context;
+    std::unique_ptr<content::mojom::NetworkContext> system_network_context;
+    net::URLRequestContext* system_request_context;
     SystemRequestContextLeakChecker system_request_context_leak_checker;
 #if BUILDFLAG(ENABLE_EXTENSIONS)
     scoped_refptr<extensions::EventRouterForwarder>
@@ -323,6 +332,11 @@
   bool allow_gssapi_library_load_;
 #endif
 
+  // These are set on the UI thread, and then consumed during initialization on
+  // the IO thread.
+  content::mojom::NetworkContextRequest network_context_request_;
+  content::mojom::NetworkContextParamsPtr network_context_params_;
+
   // This is an instance of the default SSLConfigServiceManager for the current
   // platform and it gets SSL preferences from local_state object.
   std::unique_ptr<ssl_config::SSLConfigServiceManager>
diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/browser/net/system_network_context_manager.cc
new file mode 100644
index 0000000..4b940b1c1
--- /dev/null
+++ b/chrome/browser/net/system_network_context_manager.cc
@@ -0,0 +1,63 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/net/system_network_context_manager.h"
+
+#include "base/feature_list.h"
+#include "base/logging.h"
+#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/network_service_instance.h"
+#include "content/public/common/content_features.h"
+#include "content/public/common/service_names.mojom.h"
+#include "mojo/public/cpp/bindings/associated_interface_ptr.h"
+
+namespace {
+
+content::mojom::NetworkContextParamsPtr CreateNetworkContextParams() {
+  // TODO(mmenke): Set up parameters here (No cache, in memory cookie store,
+  // etc).
+  return content::mojom::NetworkContextParams::New();
+}
+
+}  // namespace
+
+base::LazyInstance<SystemNetworkContextManager>::Leaky
+    g_system_network_context_manager = LAZY_INSTANCE_INITIALIZER;
+
+content::mojom::NetworkContext* SystemNetworkContextManager::Context() {
+  return GetInstance()->GetContext();
+}
+
+void SystemNetworkContextManager::SetUp(
+    content::mojom::NetworkContextRequest* network_context_request,
+    content::mojom::NetworkContextParamsPtr* network_context_params) {
+  DCHECK(!GetInstance()->io_thread_network_context_);
+  *network_context_request =
+      mojo::MakeRequest(&GetInstance()->io_thread_network_context_);
+  *network_context_params = CreateNetworkContextParams();
+}
+
+SystemNetworkContextManager* SystemNetworkContextManager::GetInstance() {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  return g_system_network_context_manager.Pointer();
+}
+
+SystemNetworkContextManager::SystemNetworkContextManager() {}
+
+SystemNetworkContextManager::~SystemNetworkContextManager() {}
+
+content::mojom::NetworkContext* SystemNetworkContextManager::GetContext() {
+  if (!base::FeatureList::IsEnabled(features::kNetworkService)) {
+    // SetUp should already have been called.
+    DCHECK(io_thread_network_context_);
+    return io_thread_network_context_.get();
+  }
+
+  if (!network_service_network_context_) {
+    content::GetNetworkService()->CreateNetworkContext(
+        MakeRequest(&network_service_network_context_),
+        CreateNetworkContextParams());
+  }
+  return network_service_network_context_.get();
+}
diff --git a/chrome/browser/net/system_network_context_manager.h b/chrome/browser/net/system_network_context_manager.h
new file mode 100644
index 0000000..b3003c2
--- /dev/null
+++ b/chrome/browser/net/system_network_context_manager.h
@@ -0,0 +1,72 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_NET_SYSTEM_NETWORK_CONTEXT_MANAGER_H_
+#define CHROME_BROWSER_NET_SYSTEM_NETWORK_CONTEXT_MANAGER_H_
+
+#include <memory>
+
+#include "base/lazy_instance.h"
+#include "base/macros.h"
+#include "content/public/common/network_service.mojom.h"
+
+// Global object that lives on the UI thread. Responsible for creating and
+// managing access to the system NetworkContext. This NetworkContext is intended
+// for requests not associated with a profile. It stores no data on disk, and
+// has no HTTP cache, but it does have ephemeral cookie and channel ID stores.
+// It also does not have access to HTTP proxy auth information the user has
+// entered or that comes from extensions, and similarly, has no
+// extension-provided per-profile proxy configuration information.
+//
+// The "system" NetworkContext will either share a URLRequestContext with
+// IOThread's SystemURLRequestContext and be part of IOThread's NetworkService
+// (If the network service is disabled) or be an independent NetworkContext
+// using the actual network service.
+//
+// This class is intended to eventually replace IOThread. Handling the two cases
+// differently allows this to be used in production without breaking anything or
+// requiring two separate paths, while IOThread consumers slowly transition over
+// to being compatible with the network service.
+class SystemNetworkContextManager {
+ public:
+  // Initializes |network_context_params| as needed to set up a system
+  // NetworkContext. If the network service is disabled,
+  // |network_context_request| will be for the NetworkContext used by the
+  // SystemNetworkContextManager. Otherwise, this method can still be used to
+  // help set up the IOThread's in-process URLRequestContext, and
+  // |network_context_request| will still be populated, but the associated
+  // NetworkContext will not be used by the SystemNetworkContextManager.
+  //
+  // Must be called before the system NetworkContext is first used.
+  static void SetUp(
+      content::mojom::NetworkContextRequest* network_context_request,
+      content::mojom::NetworkContextParamsPtr* network_context_params);
+
+  // Returns the System NetworkContext. May only be called after SetUp().
+  static content::mojom::NetworkContext* Context();
+
+ private:
+  static SystemNetworkContextManager* GetInstance();
+
+  friend struct base::LazyInstanceTraitsBase<SystemNetworkContextManager>;
+
+  SystemNetworkContextManager();
+  ~SystemNetworkContextManager();
+
+  // Gets the system NetworkContext, creating it if needed.
+  content::mojom::NetworkContext* GetContext();
+
+  // NetworkContext using the network service, if the/ network service is
+  // enabled. nullptr, otherwise.
+  content::mojom::NetworkContextPtr network_service_network_context_;
+
+  // This is a NetworkContext that wraps the IOThread's SystemURLRequestContext.
+  // Always initialized in SetUp, but it's only returned by Context() when the
+  // network service is disabled.
+  content::mojom::NetworkContextPtr io_thread_network_context_;
+
+  DISALLOW_COPY_AND_ASSIGN(SystemNetworkContextManager);
+};
+
+#endif  // CHROME_BROWSER_NET_SYSTEM_NETWORK_CONTEXT_MANAGER_H_
diff --git a/chrome/browser/net/system_network_context_manager_browsertest.cc b/chrome/browser/net/system_network_context_manager_browsertest.cc
new file mode 100644
index 0000000..607bd658
--- /dev/null
+++ b/chrome/browser/net/system_network_context_manager_browsertest.cc
@@ -0,0 +1,91 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/net/system_network_context_manager.h"
+
+#include "base/test/scoped_feature_list.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "content/public/common/content_features.h"
+#include "content/public/common/content_switches.h"
+#include "content/public/common/network_service.mojom.h"
+#include "content/public/common/resource_response.h"
+#include "content/public/common/resource_response_info.h"
+#include "content/public/common/url_loader.mojom.h"
+#include "content/public/common/url_loader_factory.mojom.h"
+#include "content/public/test/test_url_loader_client.h"
+#include "mojo/common/data_pipe_utils.h"
+#include "net/base/net_errors.h"
+#include "net/http/http_response_headers.h"
+#include "net/test/embedded_test_server/embedded_test_server.h"
+#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
+
+namespace {
+
+enum class NetworkServiceState {
+  kDisabled,
+  kEnabled,
+};
+
+class SystemNetworkContextManagerTest
+    : public InProcessBrowserTest,
+      public testing::WithParamInterface<NetworkServiceState> {
+ public:
+  SystemNetworkContextManagerTest() {
+    EXPECT_TRUE(embedded_test_server()->Start());
+  }
+
+  ~SystemNetworkContextManagerTest() override {}
+
+  void SetUpInProcessBrowserTestFixture() override {
+    feature_list_.InitAndEnableFeature(features::kNetworkService);
+  }
+
+  void SetUpOnMainThread() override {
+    SystemNetworkContextManager::Context()->CreateURLLoaderFactory(
+        MakeRequest(&loader_factory_), 0);
+  }
+
+  content::mojom::URLLoaderFactory* loader_factory() {
+    return loader_factory_.get();
+  }
+
+ private:
+  content::mojom::URLLoaderFactoryPtr loader_factory_;
+  base::test::ScopedFeatureList feature_list_;
+};
+
+IN_PROC_BROWSER_TEST_P(SystemNetworkContextManagerTest, BasicRequest) {
+  content::mojom::URLLoaderAssociatedPtr loader;
+  content::ResourceRequest request;
+  content::TestURLLoaderClient client;
+  request.url = embedded_test_server()->GetURL("/echo");
+  request.method = "GET";
+  request.request_initiator = url::Origin();
+  loader_factory()->CreateLoaderAndStart(
+      mojo::MakeRequest(&loader), 2, 1, content::mojom::kURLLoadOptionNone,
+      request, client.CreateInterfacePtr(),
+      net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS));
+  client.RunUntilResponseReceived();
+  ASSERT_TRUE(client.response_head().headers);
+  EXPECT_EQ(200, client.response_head().headers->response_code());
+
+  client.RunUntilResponseBodyArrived();
+  // TODO(mmenke):  Is blocking the UI Thread while reading the response really
+  // the best way to test requests in a browser test?
+  std::string response_body;
+  EXPECT_TRUE(mojo::common::BlockingCopyToString(client.response_body_release(),
+                                                 &response_body));
+  EXPECT_EQ("Echo", response_body);
+
+  client.RunUntilComplete();
+  EXPECT_EQ(net::OK, client.completion_status().error_code);
+}
+
+INSTANTIATE_TEST_CASE_P(
+    /* no prefix */,
+    SystemNetworkContextManagerTest,
+    ::testing::Values(NetworkServiceState::kDisabled,
+                      NetworkServiceState::kEnabled));
+
+}  // namespace
diff --git a/chrome/browser/ui/webui/net_internals/net_internals_ui.cc b/chrome/browser/ui/webui/net_internals/net_internals_ui.cc
index c22f0c3..8c6cd04eb 100644
--- a/chrome/browser/ui/webui/net_internals/net_internals_ui.cc
+++ b/chrome/browser/ui/webui/net_internals/net_internals_ui.cc
@@ -1026,7 +1026,7 @@
   std::set<net::URLRequestContext*> contexts;
   for (const auto& getter : context_getters_)
     contexts.insert(getter->GetURLRequestContext());
-  contexts.insert(io_thread_->globals()->system_request_context.get());
+  contexts.insert(io_thread_->globals()->system_request_context);
 
   // Add entries for ongoing network objects.
   CreateNetLogEntriesForActiveObjects(contexts, this);
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 3b950ab..38a0778f 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -1355,6 +1355,7 @@
       "../browser/net/predictor_browsertest.cc",
       "../browser/net/proxy_browsertest.cc",
       "../browser/net/sdch_browsertest.cc",
+      "../browser/net/system_network_context_manager_browsertest.cc",
       "../browser/net/websocket_browsertest.cc",
       "../browser/ntp_snippets/content_suggestions_service_factory_browsertest.cc",
       "../browser/ntp_tiles/ntp_tiles_browsertest.cc",
diff --git a/content/BUILD.gn b/content/BUILD.gn
index 05c3876..5a0d26f 100644
--- a/content/BUILD.gn
+++ b/content/BUILD.gn
@@ -63,8 +63,9 @@
     "//content/network:network_sources",
     "//content/public/browser:browser_sources",
     "//content/public/child:child_sources",
-    "//content/public/gpu:gpu_sources",
     "//content/public/common:common_sources",
+    "//content/public/gpu:gpu_sources",
+    "//content/public/network:network_sources",
     "//content/public/renderer:renderer_sources",
     "//content/public/utility:utility_sources",
   ]
diff --git a/content/browser/blob_storage/blob_url_unittest.cc b/content/browser/blob_storage/blob_url_unittest.cc
index 32b4837..a59b631 100644
--- a/content/browser/blob_storage/blob_url_unittest.cc
+++ b/content/browser/blob_storage/blob_url_unittest.cc
@@ -20,9 +20,9 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "content/browser/blob_storage/blob_url_loader_factory.h"
-#include "content/browser/loader/test_url_loader_client.h"
 #include "content/browser/url_loader_factory_getter.h"
 #include "content/public/test/test_browser_thread_bundle.h"
+#include "content/public/test/test_url_loader_client.h"
 #include "mojo/common/data_pipe_utils.h"
 #include "net/base/net_errors.h"
 #include "net/base/request_priority.h"
diff --git a/content/browser/loader/DEPS b/content/browser/loader/DEPS
index 33ce038..28ae582 100644
--- a/content/browser/loader/DEPS
+++ b/content/browser/loader/DEPS
@@ -77,7 +77,6 @@
     "-content",
     "+content/browser/loader/mock_resource_loader.h",
     "+content/browser/loader/mojo_async_resource_handler.h",
-    "+content/browser/loader/test_url_loader_client.h",
     "+content/browser/loader/resource_controller.h",
     "+content/browser/loader/resource_dispatcher_host_impl.h",
     "+content/browser/loader/resource_request_info_impl.h",
@@ -97,6 +96,7 @@
     "+content/public/common/url_loader_factory.mojom.h",
     "+content/public/test/test_browser_context.h",
     "+content/public/test/test_browser_thread_bundle.h",
+    "+content/public/test/test_url_loader_client.h",
   ],
   "netlog_observer\.(cc|h)": [
     "-content",
@@ -301,14 +301,6 @@
     # TODO: To be replaced by mojo.
     "+content/common/resource_messages.h",
   ],
-  "test_url_loader_client\.(cc|h)": [
-    "-content",
-    "+content/browser/loader/test_url_loader_client.h",
-    "+content/public/common/resource_request_completion_status.h",
-    "+content/public/common/resource_response.h",
-    "+content/public/common/url_loader.mojom.h",
-    "+content/public/common/url_loader_factory.mojom.h",
-  ],
   "upload_progress_tracker\.(cc|h)": [
     "-content",
     "+content/browser/loader/upload_progress_tracker.h",
@@ -328,7 +320,6 @@
     "-content",
     "+content/browser/child_process_security_policy_impl.h",
     "+content/browser/loader/mojo_async_resource_handler.h",
-    "+content/browser/loader/test_url_loader_client.h",
     "+content/browser/loader/resource_dispatcher_host_impl.h",
     "+content/browser/loader/resource_message_filter.h",
     "+content/browser/loader/resource_request_info_impl.h",
@@ -343,6 +334,7 @@
     "+content/public/common/url_loader_factory.mojom.h",
     "+content/public/test/test_browser_context.h",
     "+content/public/test/test_browser_thread_bundle.h",
+    "+content/public/test/test_url_loader_client.h",
 
     #TODO: To be removed when PlzNavigate lands.
     "+content/browser/loader/navigation_resource_throttle.h"
diff --git a/content/browser/loader/mojo_async_resource_handler_unittest.cc b/content/browser/loader/mojo_async_resource_handler_unittest.cc
index c05fe38..d6bf4cba 100644
--- a/content/browser/loader/mojo_async_resource_handler_unittest.cc
+++ b/content/browser/loader/mojo_async_resource_handler_unittest.cc
@@ -23,7 +23,6 @@
 #include "content/browser/loader/resource_dispatcher_host_impl.h"
 #include "content/browser/loader/resource_request_info_impl.h"
 #include "content/browser/loader/resource_scheduler.h"
-#include "content/browser/loader/test_url_loader_client.h"
 #include "content/public/browser/appcache_service.h"
 #include "content/public/browser/navigation_data.h"
 #include "content/public/browser/resource_context.h"
@@ -38,6 +37,7 @@
 #include "content/public/common/url_loader_factory.mojom.h"
 #include "content/public/test/test_browser_context.h"
 #include "content/public/test/test_browser_thread_bundle.h"
+#include "content/public/test/test_url_loader_client.h"
 #include "mojo/public/c/system/data_pipe.h"
 #include "mojo/public/c/system/types.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
diff --git a/content/browser/loader/url_loader_factory_impl_unittest.cc b/content/browser/loader/url_loader_factory_impl_unittest.cc
index ab9dd1fc..c477cf6 100644
--- a/content/browser/loader/url_loader_factory_impl_unittest.cc
+++ b/content/browser/loader/url_loader_factory_impl_unittest.cc
@@ -26,7 +26,6 @@
 #include "content/browser/loader/resource_dispatcher_host_impl.h"
 #include "content/browser/loader/resource_message_filter.h"
 #include "content/browser/loader/resource_request_info_impl.h"
-#include "content/browser/loader/test_url_loader_client.h"
 #include "content/browser/loader_delegate_impl.h"
 #include "content/public/browser/resource_context.h"
 #include "content/public/browser/resource_dispatcher_host_delegate.h"
@@ -37,6 +36,7 @@
 #include "content/public/common/url_loader_factory.mojom.h"
 #include "content/public/test/test_browser_context.h"
 #include "content/public/test/test_browser_thread_bundle.h"
+#include "content/public/test/test_url_loader_client.h"
 #include "mojo/public/c/system/data_pipe.h"
 #include "mojo/public/c/system/types.h"
 #include "mojo/public/cpp/bindings/binding.h"
diff --git a/content/browser/storage_partition_impl.cc b/content/browser/storage_partition_impl.cc
index 2ad03f4..9b1e53ea 100644
--- a/content/browser/storage_partition_impl.cc
+++ b/content/browser/storage_partition_impl.cc
@@ -31,12 +31,11 @@
 #include "content/public/browser/dom_storage_context.h"
 #include "content/public/browser/indexed_db_context.h"
 #include "content/public/browser/local_storage_usage_info.h"
+#include "content/public/browser/network_service_instance.h"
 #include "content/public/browser/session_storage_usage_info.h"
 #include "content/public/common/content_client.h"
 #include "content/public/common/content_features.h"
 #include "content/public/common/content_switches.h"
-#include "content/public/common/service_manager_connection.h"
-#include "content/public/common/service_names.mojom.h"
 #include "net/base/completion_callback.h"
 #include "net/base/net_errors.h"
 #include "net/cookies/canonical_cookie.h"
@@ -532,20 +531,13 @@
       ChromeBlobStorageContext::GetFor(context);
 
   if (base::FeatureList::IsEnabled(features::kNetworkService)) {
-    static mojom::NetworkServicePtr* g_network_service =
-        new mojom::NetworkServicePtr;
-    if (!g_network_service->is_bound()) {
-      ServiceManagerConnection::GetForProcess()->GetConnector()->BindInterface(
-          mojom::kNetworkServiceName, g_network_service);
-    }
     mojom::NetworkContextParamsPtr context_params =
         mojom::NetworkContextParams::New();
     // TODO: fill this
     // context_params->cache_dir =
     // context_params->cookie_path =
-    (*g_network_service)
-        ->CreateNetworkContext(MakeRequest(&partition->network_context_),
-                               std::move(context_params));
+    GetNetworkService()->CreateNetworkContext(
+        MakeRequest(&partition->network_context_), std::move(context_params));
 
     BlobURLLoaderFactory::BlobContextGetter blob_getter =
         base::BindOnce(&BlobStorageContextGetter, blob_context);
diff --git a/content/network/BUILD.gn b/content/network/BUILD.gn
index 5eb1ad28..ffe4988a 100644
--- a/content/network/BUILD.gn
+++ b/content/network/BUILD.gn
@@ -24,6 +24,7 @@
     ":network",
     "//content",  # For the component build.
     "//content/app:*",
+    "//content/public/network/*",
     "//content/utility:utility",
   ]
 
@@ -32,8 +33,8 @@
     "cache_url_loader.h",
     "network_context.cc",
     "network_context.h",
-    "network_service.cc",
-    "network_service.h",
+    "network_service_impl.cc",
+    "network_service_impl.h",
     "network_service_url_loader_factory_impl.cc",
     "network_service_url_loader_factory_impl.h",
     "url_loader_impl.cc",
diff --git a/content/network/DEPS b/content/network/DEPS
index ac2ce4d..1105ee1e 100644
--- a/content/network/DEPS
+++ b/content/network/DEPS
@@ -14,12 +14,13 @@
   "+content/public/common/url_constants.h",
   "+content/public/common/url_loader.mojom.h",
   "+content/public/common/url_loader_factory.mojom.h",
+  "+content/public/network",
   "+services/service_manager/public",
 ]
 
 specific_include_rules = {
   '.*_[a-z]*test.*': [
-    "+content/browser/loader/test_url_loader_client.h",
     "+content/public/common/content_paths.h",
+    "+content/public/test/test_url_loader_client.h",
   ],
 }
diff --git a/content/network/network_context.cc b/content/network/network_context.cc
index ea81b5c..4dde5fda 100644
--- a/content/network/network_context.cc
+++ b/content/network/network_context.cc
@@ -9,7 +9,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "components/network_session_configurator/common/network_switches.h"
 #include "content/network/cache_url_loader.h"
-#include "content/network/network_service.h"
+#include "content/network/network_service_impl.h"
 #include "content/network/network_service_url_loader_factory_impl.h"
 #include "content/network/url_loader_impl.h"
 #include "content/public/common/content_client.h"
@@ -87,7 +87,7 @@
 
 }  // namespace
 
-NetworkContext::NetworkContext(NetworkService* network_service,
+NetworkContext::NetworkContext(NetworkServiceImpl* network_service,
                                mojom::NetworkContextRequest request,
                                mojom::NetworkContextParamsPtr params)
     : network_service_(network_service),
@@ -99,6 +99,18 @@
       base::Bind(&NetworkContext::OnConnectionError, base::Unretained(this)));
 }
 
+// TODO(mmenke): Share URLRequestContextBulder configuration between two
+// constructors. Can only share them once consumer code is ready for its
+// corresponding options to be overwritten.
+NetworkContext::NetworkContext(
+    mojom::NetworkContextRequest request,
+    mojom::NetworkContextParamsPtr params,
+    std::unique_ptr<net::URLRequestContextBuilder> builder)
+    : network_service_(nullptr),
+      url_request_context_(builder->Build()),
+      params_(std::move(params)),
+      binding_(this, std::move(request)) {}
+
 NetworkContext::~NetworkContext() {
   // Call each URLLoaderImpl and ask it to release its net::URLRequest, as the
   // corresponding net::URLRequestContext is going away with this
diff --git a/content/network/network_context.h b/content/network/network_context.h
index 278923f..c50fc033 100644
--- a/content/network/network_context.h
+++ b/content/network/network_context.h
@@ -19,17 +19,25 @@
 
 namespace net {
 class URLRequestContext;
+class URLRequestContextBuilder;
 }
 
 namespace content {
-class NetworkService;
+class NetworkServiceImpl;
 class URLLoaderImpl;
 
 class NetworkContext : public mojom::NetworkContext {
  public:
-  NetworkContext(NetworkService* network_service,
+  NetworkContext(NetworkServiceImpl* network_service,
                  mojom::NetworkContextRequest request,
                  mojom::NetworkContextParamsPtr params);
+
+  // Temporary constructor that allows creating an in-process NetworkContext
+  // with a pre-populated URLRequestContextBuilder.
+  NetworkContext(mojom::NetworkContextRequest request,
+                 mojom::NetworkContextParamsPtr params,
+                 std::unique_ptr<net::URLRequestContextBuilder> builder);
+
   ~NetworkContext() override;
 
   CONTENT_EXPORT static std::unique_ptr<NetworkContext> CreateForTesting();
@@ -49,7 +57,7 @@
   void HandleViewCacheRequest(const GURL& url,
                               mojom::URLLoaderClientPtr client) override;
 
-  // Called when the associated NetworkService is going away. Guaranteed to
+  // Called when the associated NetworkServiceImpl is going away. Guaranteed to
   // destroy NetworkContext's URLRequestContext.
   void Cleanup();
 
@@ -59,7 +67,7 @@
   // On connection errors the NetworkContext destroys itself.
   void OnConnectionError();
 
-  NetworkService* const network_service_;
+  NetworkServiceImpl* const network_service_;
 
   std::unique_ptr<net::URLRequestContext> url_request_context_;
 
diff --git a/content/network/network_service.cc b/content/network/network_service_impl.cc
similarity index 61%
rename from content/network/network_service.cc
rename to content/network/network_service_impl.cc
index a9a8845..d2b53be 100644
--- a/content/network/network_service.cc
+++ b/content/network/network_service_impl.cc
@@ -2,22 +2,28 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "content/network/network_service.h"
+#include "content/network/network_service_impl.h"
 
 #include "base/command_line.h"
 #include "base/logging.h"
 #include "base/memory/ptr_util.h"
 #include "base/values.h"
+#include "build/build_config.h"
 #include "content/network/network_context.h"
 #include "content/public/common/content_switches.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
 #include "net/log/file_net_log_observer.h"
 #include "net/log/net_log_util.h"
+#include "net/url_request/url_request_context_builder.h"
 #include "services/service_manager/public/cpp/bind_source_info.h"
 
 namespace content {
 
-class NetworkService::MojoNetLog : public net::NetLog {
+std::unique_ptr<NetworkService> NetworkService::Create() {
+  return base::MakeUnique<NetworkServiceImpl>(nullptr);
+}
+
+class NetworkServiceImpl::MojoNetLog : public net::NetLog {
  public:
   MojoNetLog() {
     const base::CommandLine* command_line =
@@ -46,17 +52,20 @@
   DISALLOW_COPY_AND_ASSIGN(MojoNetLog);
 };
 
-NetworkService::NetworkService(
+NetworkServiceImpl::NetworkServiceImpl(
     std::unique_ptr<service_manager::BinderRegistry> registry)
     : net_log_(new MojoNetLog), registry_(std::move(registry)), binding_(this) {
-  // |registry_| may be nullptr in tests.
+  // |registry_| is nullptr in tests and when an in-process NetworkService is
+  // created directly. The latter is done in concert with using
+  // CreateNetworkContextWithBuilder to ease the transition to using the network
+  // service.
   if (registry_) {
     registry_->AddInterface<mojom::NetworkService>(
-        base::Bind(&NetworkService::Create, base::Unretained(this)));
+        base::Bind(&NetworkServiceImpl::Create, base::Unretained(this)));
   }
 }
 
-NetworkService::~NetworkService() {
+NetworkServiceImpl::~NetworkServiceImpl() {
   // Call each Network and ask it to release its net::URLRequestContext, as they
   // may have references to shared objects owned by the NetworkService. The
   // NetworkContexts deregister themselves in Cleanup(), so have to be careful.
@@ -64,21 +73,36 @@
     (*network_contexts_.begin())->Cleanup();
 }
 
-std::unique_ptr<NetworkService> NetworkService::CreateForTesting() {
-  return base::WrapUnique(new NetworkService());
+std::unique_ptr<mojom::NetworkContext>
+NetworkServiceImpl::CreateNetworkContextWithBuilder(
+    content::mojom::NetworkContextRequest request,
+    content::mojom::NetworkContextParamsPtr params,
+    std::unique_ptr<net::URLRequestContextBuilder> builder,
+    net::URLRequestContext** url_request_context) {
+  std::unique_ptr<NetworkContext> network_context =
+      base::MakeUnique<NetworkContext>(std::move(request), std::move(params),
+                                       std::move(builder));
+  *url_request_context = network_context->url_request_context();
+  return network_context;
 }
 
-void NetworkService::RegisterNetworkContext(NetworkContext* network_context) {
+std::unique_ptr<NetworkService> NetworkServiceImpl::CreateForTesting() {
+  return base::WrapUnique(new NetworkServiceImpl(nullptr));
+}
+
+void NetworkServiceImpl::RegisterNetworkContext(
+    NetworkContext* network_context) {
   DCHECK_EQ(0u, network_contexts_.count(network_context));
   network_contexts_.insert(network_context);
 }
 
-void NetworkService::DeregisterNetworkContext(NetworkContext* network_context) {
+void NetworkServiceImpl::DeregisterNetworkContext(
+    NetworkContext* network_context) {
   DCHECK_EQ(1u, network_contexts_.count(network_context));
   network_contexts_.erase(network_context);
 }
 
-void NetworkService::CreateNetworkContext(
+void NetworkServiceImpl::CreateNetworkContext(
     mojom::NetworkContextRequest request,
     mojom::NetworkContextParamsPtr params) {
   // The NetworkContext will destroy itself on connection error, or when the
@@ -86,9 +110,7 @@
   new NetworkContext(this, std::move(request), std::move(params));
 }
 
-NetworkService::NetworkService() : NetworkService(nullptr) {}
-
-void NetworkService::OnBindInterface(
+void NetworkServiceImpl::OnBindInterface(
     const service_manager::BindSourceInfo& source_info,
     const std::string& interface_name,
     mojo::ScopedMessagePipeHandle interface_pipe) {
@@ -96,8 +118,9 @@
                            std::move(interface_pipe));
 }
 
-void NetworkService::Create(const service_manager::BindSourceInfo& source_info,
-                            mojom::NetworkServiceRequest request) {
+void NetworkServiceImpl::Create(
+    const service_manager::BindSourceInfo& source_info,
+    mojom::NetworkServiceRequest request) {
   DCHECK(!binding_.is_bound());
   binding_.Bind(std::move(request));
 }
diff --git a/content/network/network_service.h b/content/network/network_service_impl.h
similarity index 67%
rename from content/network/network_service.h
rename to content/network/network_service_impl.h
index 703ffc2..74e86910 100644
--- a/content/network/network_service.h
+++ b/content/network/network_service_impl.h
@@ -2,30 +2,43 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CONTENT_NETWORK_NETWORK_SERVICE_H_
-#define CONTENT_NETWORK_NETWORK_SERVICE_H_
+#ifndef CONTENT_NETWORK_NETWORK_SERVICE_IMPL_H_
+#define CONTENT_NETWORK_NETWORK_SERVICE_IMPL_H_
 
 #include <memory>
 
 #include "base/macros.h"
 #include "content/common/content_export.h"
 #include "content/public/common/network_service.mojom.h"
+#include "content/public/network/network_service.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/service.h"
 
+namespace net {
+class URLRequestContext;
+class URLRequestContextBuilder;
+}  // namespace net
+
 namespace content {
 
 class NetworkContext;
 
-class NetworkService : public service_manager::Service,
-                       public mojom::NetworkService {
+class CONTENT_EXPORT NetworkServiceImpl : public service_manager::Service,
+                                          public NetworkService {
  public:
-  explicit NetworkService(
+  explicit NetworkServiceImpl(
       std::unique_ptr<service_manager::BinderRegistry> registry);
-  ~NetworkService() override;
 
-  CONTENT_EXPORT static std::unique_ptr<NetworkService> CreateForTesting();
+  ~NetworkServiceImpl() override;
+
+  std::unique_ptr<mojom::NetworkContext> CreateNetworkContextWithBuilder(
+      content::mojom::NetworkContextRequest request,
+      content::mojom::NetworkContextParamsPtr params,
+      std::unique_ptr<net::URLRequestContextBuilder> builder,
+      net::URLRequestContext** url_request_context) override;
+
+  static std::unique_ptr<NetworkService> CreateForTesting();
 
   // These are called by NetworkContexts as they are being created and
   // destroyed.
@@ -39,9 +52,6 @@
  private:
   class MojoNetLog;
 
-  // Used for tests.
-  NetworkService();
-
   // service_manager::Service implementation.
   void OnBindInterface(const service_manager::BindSourceInfo& source_info,
                        const std::string& interface_name,
@@ -62,9 +72,9 @@
   // destroyed first.
   std::set<NetworkContext*> network_contexts_;
 
-  DISALLOW_COPY_AND_ASSIGN(NetworkService);
+  DISALLOW_COPY_AND_ASSIGN(NetworkServiceImpl);
 };
 
 }  // namespace content
 
-#endif  // CONTENT_NETWORK_NETWORK_SERVICE_H_
+#endif  // CONTENT_NETWORK_NETWORK_SERVICE_IMPL_H_
diff --git a/content/network/network_service_unittest.cc b/content/network/network_service_unittest.cc
index 29aa109..5a31c8e 100644
--- a/content/network/network_service_unittest.cc
+++ b/content/network/network_service_unittest.cc
@@ -8,7 +8,7 @@
 #include "base/test/scoped_task_environment.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "content/network/network_context.h"
-#include "content/network/network_service.h"
+#include "content/network/network_service_impl.h"
 #include "content/public/common/network_service.mojom.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -21,7 +21,7 @@
   NetworkServiceTest()
       : scoped_task_environment_(
             base::test::ScopedTaskEnvironment::MainThreadType::IO),
-        service_(NetworkService::CreateForTesting()) {}
+        service_(NetworkServiceImpl::CreateForTesting()) {}
   ~NetworkServiceTest() override {}
 
   NetworkService* service() const { return service_.get(); }
diff --git a/content/network/url_loader_unittest.cc b/content/network/url_loader_unittest.cc
index e9486c5..5af30a7e 100644
--- a/content/network/url_loader_unittest.cc
+++ b/content/network/url_loader_unittest.cc
@@ -7,10 +7,10 @@
 #include "base/run_loop.h"
 #include "base/test/scoped_task_environment.h"
 #include "base/threading/thread_task_runner_handle.h"
-#include "content/browser/loader/test_url_loader_client.h"
 #include "content/network/network_context.h"
 #include "content/network/url_loader_impl.h"
 #include "content/public/common/content_paths.h"
+#include "content/public/test/test_url_loader_client.h"
 #include "mojo/public/c/system/data_pipe.h"
 #include "mojo/public/cpp/system/wait.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
diff --git a/content/public/browser/BUILD.gn b/content/public/browser/BUILD.gn
index df45385..2cf71897 100644
--- a/content/public/browser/BUILD.gn
+++ b/content/public/browser/BUILD.gn
@@ -169,6 +169,8 @@
     "navigation_type.h",
     "navigation_ui_data.h",
     "network_quality_observer_factory.h",
+    "network_service_instance.cc",
+    "network_service_instance.h",
     "notification_database_data.cc",
     "notification_database_data.h",
     "notification_details.h",
@@ -323,12 +325,12 @@
     "//net",
     "//ppapi/c",
     "//services/device/public/interfaces",
+    "//third_party/webrtc/modules/desktop_capture",
     "//ui/accessibility",
     "//ui/base",
     "//ui/events",
     "//ui/gl",
     "//ui/surface",
-    "//third_party/webrtc/modules/desktop_capture",
   ]
 
   allow_circular_includes_from = [
diff --git a/content/public/browser/network_service_instance.cc b/content/public/browser/network_service_instance.cc
new file mode 100644
index 0000000..5cf2970
--- /dev/null
+++ b/content/public/browser/network_service_instance.cc
@@ -0,0 +1,30 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/public/browser/network_service_instance.h"
+
+#include "base/feature_list.h"
+#include "content/public/browser/browser_thread.h"
+#include "content/public/common/content_features.h"
+#include "content/public/common/network_service.mojom.h"
+#include "content/public/common/service_manager_connection.h"
+#include "content/public/common/service_names.mojom.h"
+#include "services/service_manager/public/cpp/connector.h"
+
+namespace content {
+
+mojom::NetworkService* GetNetworkService() {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK(base::FeatureList::IsEnabled(features::kNetworkService));
+
+  static mojom::NetworkServicePtr* g_network_service =
+      new mojom::NetworkServicePtr;
+  if (!g_network_service->is_bound()) {
+    ServiceManagerConnection::GetForProcess()->GetConnector()->BindInterface(
+        mojom::kNetworkServiceName, g_network_service);
+  }
+  return g_network_service->get();
+}
+
+}  // namespace content
diff --git a/content/public/browser/network_service_instance.h b/content/public/browser/network_service_instance.h
new file mode 100644
index 0000000..0de5b4d
--- /dev/null
+++ b/content/public/browser/network_service_instance.h
@@ -0,0 +1,23 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_PUBLIC_BROWSER_NETWORK_SERVICE_INSTANCE_H_
+#define CONTENT_PUBLIC_BROWSER_NETWORK_SERVICE_INSTANCE_H_
+
+#include "content/common/content_export.h"
+
+namespace content {
+
+namespace mojom {
+class NetworkService;
+}
+
+// Returns a pointer to the NetworkService, creating / re-creating it as needed.
+// Must only be called on the UI thread. Must not be called if the network
+// service is disabled.
+CONTENT_EXPORT mojom::NetworkService* GetNetworkService();
+
+}  // namespace content
+
+#endif  // CONTENT_PUBLIC_BROWSER_NETWORK_SERVICE_INSTANCE_H_
\ No newline at end of file
diff --git a/content/public/network/BUILD.gn b/content/public/network/BUILD.gn
new file mode 100644
index 0000000..3e44f5108
--- /dev/null
+++ b/content/public/network/BUILD.gn
@@ -0,0 +1,35 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# See //content/BUILD.gn for how this works.
+group("network") {
+  if (is_component_build) {
+    public_deps = [
+      "//content",
+    ]
+  } else {
+    public_deps = [
+      ":network_sources",
+    ]
+  }
+}
+
+target("source_set", "network_sources") {
+  visibility = [ "//content/*" ]
+
+  configs += [ "//content:content_implementation" ]
+
+  sources = [
+    "network_service.h",
+  ]
+
+  deps = [
+    "//base",
+    "//content:export",
+    "//content/common:mojo_bindings",
+    "//content/network:network_sources",
+  ]
+
+  allow_circular_includes_from = [ "//content/network:network_sources" ]
+}
diff --git a/content/public/network/DEPS b/content/public/network/DEPS
new file mode 100644
index 0000000..31545d0
--- /dev/null
+++ b/content/public/network/DEPS
@@ -0,0 +1,5 @@
+specific_include_rules = {
+  ".*\.cc": [
+    "+content/network",
+  ],
+}
diff --git a/content/public/network/network_service.h b/content/public/network/network_service.h
new file mode 100644
index 0000000..a4bb4de
--- /dev/null
+++ b/content/public/network/network_service.h
@@ -0,0 +1,50 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_PUBLIC_NETWORK_NETWORK_SERVICE_H_
+#define CONTENT_PUBLIC_NETWORK_NETWORK_SERVICE_H_
+
+#include <memory>
+
+#include "content/common/content_export.h"
+#include "content/public/common/network_service.mojom.h"
+
+namespace net {
+class URLRequestContext;
+class URLRequestContextBuilder;
+}  // namespace net
+
+namespace content {
+
+// Allows an in-process NetworkService to be set up.
+class CONTENT_EXPORT NetworkService : public mojom::NetworkService {
+ public:
+  // TODO(mmenke): Take in a NetworkServiceRequest.
+  static std::unique_ptr<NetworkService> Create();
+
+  // Can be used to seed a NetworkContext with a consumer-configured
+  // URLRequestContextBuilder, which |params| will then be applied to. The
+  // results URLRequestContext will be written to |url_request_context|, which
+  // is owned by the NetworkContext, and can be further modified before first
+  // use. The returned NetworkContext must be destroyed before the
+  // NetworkService.
+  //
+  // This method is intended to ease the transition to an out-of-process
+  // NetworkService, and will be removed once that ships.
+  virtual std::unique_ptr<mojom::NetworkContext>
+  CreateNetworkContextWithBuilder(
+      content::mojom::NetworkContextRequest request,
+      content::mojom::NetworkContextParamsPtr params,
+      std::unique_ptr<net::URLRequestContextBuilder> builder,
+      net::URLRequestContext** url_request_context) = 0;
+
+  ~NetworkService() override {}
+
+ protected:
+  NetworkService() {}
+};
+
+}  // namespace content
+
+#endif  // CONTENT_PUBLIC_NETWORK_NETWORK_SERVICE_H_
diff --git a/content/browser/loader/test_url_loader_client.cc b/content/public/test/test_url_loader_client.cc
similarity index 98%
rename from content/browser/loader/test_url_loader_client.cc
rename to content/public/test/test_url_loader_client.cc
index 5695002..36a2700 100644
--- a/content/browser/loader/test_url_loader_client.cc
+++ b/content/public/test/test_url_loader_client.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "content/browser/loader/test_url_loader_client.h"
+#include "content/public/test/test_url_loader_client.h"
 
 #include "base/memory/ref_counted.h"
 #include "base/run_loop.h"
diff --git a/content/browser/loader/test_url_loader_client.h b/content/public/test/test_url_loader_client.h
similarity index 94%
rename from content/browser/loader/test_url_loader_client.h
rename to content/public/test/test_url_loader_client.h
index bb5e249..c5d5a705 100644
--- a/content/browser/loader/test_url_loader_client.h
+++ b/content/public/test/test_url_loader_client.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CONTENT_BROWSER_LOADER_TEST_URL_LOADER_CLIENT_H_
-#define CONTENT_BROWSER_LOADER_TEST_URL_LOADER_CLIENT_H_
+#ifndef CONTENT_PUBLIC_TEST_TEST_URL_LOADER_CLIENT_H_
+#define CONTENT_PUBLIC_TEST_TEST_URL_LOADER_CLIENT_H_
 
 #include <stdint.h>
 #include <vector>
@@ -57,9 +57,7 @@
   const ResourceResponseHead& response_head() const { return response_head_; }
   const base::Optional<net::SSLInfo>& ssl_info() const { return ssl_info_; }
   const net::RedirectInfo& redirect_info() const { return redirect_info_; }
-  const std::string& cached_metadata() const {
-    return cached_metadata_;
-  }
+  const std::string& cached_metadata() const { return cached_metadata_; }
   mojo::DataPipeConsumerHandle response_body() { return response_body_.get(); }
   mojo::ScopedDataPipeConsumerHandle response_body_release() {
     return std::move(response_body_);
@@ -131,4 +129,4 @@
 
 }  // namespace content
 
-#endif  // CONTENT_BROWSER_LOADER_TEST_URL_LOADER_CLIENT_H_
+#endif  // CONTENT_PUBLIC_TEST_TEST_URL_LOADER_CLIENT_H_
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
index 58a736a3..f9e323f 100644
--- a/content/test/BUILD.gn
+++ b/content/test/BUILD.gn
@@ -132,6 +132,8 @@
     "../public/test/test_service_manager_context.h",
     "../public/test/test_synchronous_compositor_android.cc",
     "../public/test/test_synchronous_compositor_android.h",
+    "../public/test/test_url_loader_client.cc",
+    "../public/test/test_url_loader_client.h",
     "../public/test/test_utils.cc",
     "../public/test/test_utils.h",
     "../public/test/test_web_contents_factory.h",
@@ -1204,8 +1206,6 @@
     "../browser/loader/temporary_file_stream_unittest.cc",
     "../browser/loader/test_resource_handler.cc",
     "../browser/loader/test_resource_handler.h",
-    "../browser/loader/test_url_loader_client.cc",
-    "../browser/loader/test_url_loader_client.h",
     "../browser/loader/throttling_resource_handler_unittest.cc",
     "../browser/loader/upload_data_stream_builder_unittest.cc",
     "../browser/loader/upload_progress_tracker_unittest.cc",
diff --git a/content/utility/utility_service_factory.cc b/content/utility/utility_service_factory.cc
index abe5f28..74ffbf52 100644
--- a/content/utility/utility_service_factory.cc
+++ b/content/utility/utility_service_factory.cc
@@ -7,7 +7,7 @@
 #include "base/bind.h"
 #include "base/command_line.h"
 #include "content/child/child_process.h"
-#include "content/network/network_service.h"
+#include "content/network/network_service_impl.h"
 #include "content/public/common/content_client.h"
 #include "content/public/common/content_features.h"
 #include "content/public/common/content_switches.h"
@@ -134,7 +134,7 @@
 
 std::unique_ptr<service_manager::Service>
 UtilityServiceFactory::CreateNetworkService() {
-  return base::MakeUnique<NetworkService>(std::move(network_registry_));
+  return base::MakeUnique<NetworkServiceImpl>(std::move(network_registry_));
 }
 
 }  // namespace content
