Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(660)

Unified Diff: content/network/network_service.cc

Issue 2962693002: NetworkService: Destroy NetworkContexts on NetworkService teardown. (Closed)
Patch Set: Fix a couple comments Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/network/network_service.h ('k') | content/network/network_service_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/network/network_service.cc
diff --git a/content/network/network_service.cc b/content/network/network_service.cc
index 28d947b6adf5db1639efec3138b5dfdef1ce2620..a133884b0251b8fe163c130f2c1922c39734b6e1 100644
--- a/content/network/network_service.cc
+++ b/content/network/network_service.cc
@@ -55,11 +55,44 @@ class NetworkService::MojoNetLog : public net::NetLog {
NetworkService::NetworkService(
std::unique_ptr<service_manager::BinderRegistry> registry)
: net_log_(new MojoNetLog), registry_(std::move(registry)), binding_(this) {
- registry_->AddInterface<mojom::NetworkService>(
- base::Bind(&NetworkService::Create, base::Unretained(this)));
+ // |registry_| may be nullptr in tests.
+ if (registry_) {
+ registry_->AddInterface<mojom::NetworkService>(
+ base::Bind(&NetworkService::Create, base::Unretained(this)));
+ }
+}
+
+NetworkService::~NetworkService() {
+ // 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.
+ while (!network_contexts_.empty())
+ (*network_contexts_.begin())->Cleanup();
+}
+
+std::unique_ptr<NetworkService> NetworkService::CreateForTesting() {
+ return base::WrapUnique(new NetworkService());
}
-NetworkService::~NetworkService() = default;
+void NetworkService::RegisterNetworkContext(NetworkContext* network_context) {
+ DCHECK_EQ(0u, network_contexts_.count(network_context));
+ network_contexts_.insert(network_context);
+}
+
+void NetworkService::DeregisterNetworkContext(NetworkContext* network_context) {
+ DCHECK_EQ(1u, network_contexts_.count(network_context));
+ network_contexts_.erase(network_context);
+}
+
+void NetworkService::CreateNetworkContext(
+ mojom::NetworkContextRequest request,
+ mojom::NetworkContextParamsPtr params) {
+ // The NetworkContext will destroy itself on connection error, or when the
+ // service is destroyed.
+ new NetworkContext(this, std::move(request), std::move(params));
+}
+
+NetworkService::NetworkService() : NetworkService(nullptr) {}
void NetworkService::OnBindInterface(
const service_manager::BindSourceInfo& source_info,
@@ -75,12 +108,4 @@ void NetworkService::Create(const service_manager::BindSourceInfo& source_info,
binding_.Bind(std::move(request));
}
-void NetworkService::CreateNetworkContext(
- mojom::NetworkContextRequest request,
- mojom::NetworkContextParamsPtr params) {
- mojo::MakeStrongBinding(
- base::MakeUnique<NetworkContext>(std::move(request), std::move(params)),
- std::move(request));
-}
-
} // namespace content
« no previous file with comments | « content/network/network_service.h ('k') | content/network/network_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698