Index: components/exo/display.cc |
diff --git a/components/exo/display.cc b/components/exo/display.cc |
index 7039936a1db49b11a4de1b0ff40cd987806c3a5f..56829ba78af91f254f6ad00469495531a8976ff0 100644 |
--- a/components/exo/display.cc |
+++ b/components/exo/display.cc |
@@ -12,6 +12,8 @@ |
#include "base/memory/ptr_util.h" |
#include "base/trace_event/trace_event.h" |
#include "base/trace_event/trace_event_argument.h" |
+#include "components/exo/notification_surface.h" |
+#include "components/exo/notification_surface_registry.h" |
#include "components/exo/shared_memory.h" |
#include "components/exo/shell_surface.h" |
#include "components/exo/sub_surface.h" |
@@ -32,7 +34,8 @@ namespace exo { |
//////////////////////////////////////////////////////////////////////////////// |
// Display, public: |
-Display::Display() {} |
+Display::Display() |
+ : notification_surface_registry_(new NotificationSurfaceRegistry) {} |
Display::~Display() {} |
@@ -179,4 +182,24 @@ std::unique_ptr<SubSurface> Display::CreateSubSurface(Surface* surface, |
return base::WrapUnique(new SubSurface(surface, parent)); |
} |
+std::unique_ptr<NotificationSurface> Display::CreateNotificationSurface( |
+ Surface* surface, |
+ const std::string& notification_id) { |
+ TRACE_EVENT2("exo", "Display::CreateNotificationSurface", "surface", |
+ surface->AsTracedValue(), "notification_id", notification_id); |
+ |
+ if (surface->HasSurfaceDelegate()) { |
+ DLOG(ERROR) << "Surface has already been assigned a role"; |
+ return nullptr; |
+ } |
+ |
+ if (notification_surface_registry_->GetSurface(notification_id) != nullptr) { |
+ DLOG(ERROR) << "Invalid notification id, id=" << notification_id; |
+ return nullptr; |
+ } |
+ |
+ return base::WrapUnique(new NotificationSurface( |
+ notification_surface_registry(), surface, notification_id)); |
+} |
+ |
} // namespace exo |