Index: services/navigation/navigation.cc |
diff --git a/services/navigation/navigation.cc b/services/navigation/navigation.cc |
index 46375862e74339ee63aa0f7adfb3c81ddc578a1d..b9db546bf80daeb9388e17b9cfd59c7e66d170b1 100644 |
--- a/services/navigation/navigation.cc |
+++ b/services/navigation/navigation.cc |
@@ -29,7 +29,8 @@ void CreateViewOnViewTaskRunner( |
Navigation::Navigation() |
: view_task_runner_(base::ThreadTaskRunnerHandle::Get()), |
- ref_factory_(base::MessageLoop::QuitWhenIdleClosure()) { |
+ ref_factory_(base::MessageLoop::QuitWhenIdleClosure()), |
+ weak_factory_(this) { |
bindings_.set_connection_error_handler( |
base::Bind(&Navigation::ViewFactoryLost, base::Unretained(this))); |
} |
@@ -46,16 +47,11 @@ bool Navigation::OnConnect(const shell::Identity& remote_identity, |
} |
client_user_id_ = remote_user_id; |
- registry->AddInterface<mojom::ViewFactory>(this); |
+ registry->AddInterface( |
+ base::Bind(&Navigation::CreateViewFactory, weak_factory_.GetWeakPtr())); |
return true; |
} |
-void Navigation::Create(const shell::Identity& remote_identity, |
- mojom::ViewFactoryRequest request) { |
- bindings_.AddBinding(this, std::move(request)); |
- refs_.insert(ref_factory_.CreateRef()); |
-} |
- |
void Navigation::CreateView(mojom::ViewClientPtr client, |
mojom::ViewRequest request) { |
std::unique_ptr<shell::Connector> new_connector = connector_->Clone(); |
@@ -68,6 +64,11 @@ void Navigation::CreateView(mojom::ViewClientPtr client, |
base::Passed(&context_ref))); |
} |
+void Navigation::CreateViewFactory(mojom::ViewFactoryRequest request) { |
+ bindings_.AddBinding(this, std::move(request)); |
+ refs_.insert(ref_factory_.CreateRef()); |
+} |
+ |
void Navigation::ViewFactoryLost() { |
refs_.erase(refs_.begin()); |
} |