| Index: content/network/network_context.cc
|
| diff --git a/content/network/network_context.cc b/content/network/network_context.cc
|
| index 5862ea67d5b17977c9f4bac18390441b8c77a485..ea81b5ca2d8fa20ea9e6e82b18bafcd1ee97cb96 100644
|
| --- a/content/network/network_context.cc
|
| +++ b/content/network/network_context.cc
|
| @@ -9,6 +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_url_loader_factory_impl.h"
|
| #include "content/network/url_loader_impl.h"
|
| #include "content/public/common/content_client.h"
|
| @@ -86,11 +87,17 @@ std::unique_ptr<net::URLRequestContext> MakeURLRequestContext() {
|
|
|
| } // namespace
|
|
|
| -NetworkContext::NetworkContext(mojom::NetworkContextRequest request,
|
| +NetworkContext::NetworkContext(NetworkService* network_service,
|
| + mojom::NetworkContextRequest request,
|
| mojom::NetworkContextParamsPtr params)
|
| - : url_request_context_(MakeURLRequestContext()),
|
| + : network_service_(network_service),
|
| + url_request_context_(MakeURLRequestContext()),
|
| params_(std::move(params)),
|
| - binding_(this, std::move(request)) {}
|
| + binding_(this, std::move(request)) {
|
| + network_service_->RegisterNetworkContext(this);
|
| + binding_.set_connection_error_handler(
|
| + base::Bind(&NetworkContext::OnConnectionError, base::Unretained(this)));
|
| +}
|
|
|
| NetworkContext::~NetworkContext() {
|
| // Call each URLLoaderImpl and ask it to release its net::URLRequest, as the
|
| @@ -99,6 +106,10 @@ NetworkContext::~NetworkContext() {
|
| // so have to be careful.
|
| while (!url_loaders_.empty())
|
| (*url_loaders_.begin())->Cleanup();
|
| +
|
| + // May be nullptr in tests.
|
| + if (network_service_)
|
| + network_service_->DeregisterNetworkContext(this);
|
| }
|
|
|
| std::unique_ptr<NetworkContext> NetworkContext::CreateForTesting() {
|
| @@ -128,8 +139,22 @@ void NetworkContext::HandleViewCacheRequest(const GURL& url,
|
| StartCacheURLLoader(url, url_request_context_.get(), std::move(client));
|
| }
|
|
|
| +void NetworkContext::Cleanup() {
|
| + // The NetworkService is going away, so have to destroy the
|
| + // net::URLRequestContext held by this NetworkContext.
|
| + delete this;
|
| +}
|
| +
|
| NetworkContext::NetworkContext()
|
| - : url_request_context_(MakeURLRequestContext()),
|
| + : network_service_(nullptr),
|
| + url_request_context_(MakeURLRequestContext()),
|
| binding_(this) {}
|
|
|
| +void NetworkContext::OnConnectionError() {
|
| + // Don't delete |this| in response to connection errors when it was created by
|
| + // CreateForTesting.
|
| + if (network_service_)
|
| + delete this;
|
| +}
|
| +
|
| } // namespace content
|
|
|