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

Unified Diff: components/exo/display.cc

Issue 2065133002: exo: Implement notification surface support (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@notification-wayland-protocol
Patch Set: for comments in #2 Created 4 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
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

Powered by Google App Engine
This is Rietveld 408576698