Index: components/surfaces/surfaces_service_application.cc |
diff --git a/components/surfaces/surfaces_service_application.cc b/components/surfaces/surfaces_service_application.cc |
index 172a394dd727cdf7c73229239d3eab3b67685f67..38a293a7bffb00c580c6b9e67563a3ec2710e9d6 100644 |
--- a/components/surfaces/surfaces_service_application.cc |
+++ b/components/surfaces/surfaces_service_application.cc |
@@ -4,6 +4,7 @@ |
#include "components/surfaces/surfaces_service_application.h" |
+#include "base/stl_util.h" |
#include "components/surfaces/display_factory_impl.h" |
#include "components/surfaces/surfaces_impl.h" |
#include "components/surfaces/surfaces_scheduler.h" |
@@ -15,6 +16,12 @@ SurfacesServiceApplication::SurfacesServiceApplication() |
} |
SurfacesServiceApplication::~SurfacesServiceApplication() { |
+ // Make a copy of the sets before deleting them because their destructor will |
+ // call back into this class to remove them from the set. |
+ auto displays = displays_; |
+ STLDeleteElements(&displays); |
+ auto surfaces = surfaces_; |
+ STLDeleteElements(&surfaces); |
} |
void SurfacesServiceApplication::Initialize(mojo::ApplicationImpl* app) { |
@@ -32,15 +39,28 @@ bool SurfacesServiceApplication::ConfigureIncomingConnection( |
void SurfacesServiceApplication::Create( |
mojo::ApplicationConnection* connection, |
mojo::InterfaceRequest<mojo::DisplayFactory> request) { |
- new DisplayFactoryImpl(&manager_, next_id_namespace_++, scheduler_.get(), |
- request.Pass()); |
+ new DisplayFactoryImpl(this, &manager_, next_id_namespace_++, |
+ scheduler_.get(), request.Pass()); |
} |
void SurfacesServiceApplication::Create( |
mojo::ApplicationConnection* connection, |
mojo::InterfaceRequest<mojo::Surface> request) { |
- new SurfacesImpl(&manager_, next_id_namespace_++, scheduler_.get(), |
- request.Pass()); |
+ surfaces_.insert( |
+ new SurfacesImpl(this, &manager_, next_id_namespace_++, scheduler_.get(), |
+ request.Pass())); |
+} |
+ |
+void SurfacesServiceApplication::DisplayCreated(DisplayImpl* display) { |
+ displays_.insert(display); |
+} |
+ |
+void SurfacesServiceApplication::DisplayDestroyed(DisplayImpl* display) { |
+ displays_.erase(display); |
+} |
+ |
+void SurfacesServiceApplication::SurfaceDestroyed(SurfacesImpl* surface) { |
+ surfaces_.erase(surface); |
} |
} // namespace surfaces |