Chromium Code Reviews| Index: components/exo/notification_surface_registry.h |
| diff --git a/components/exo/notification_surface_registry.h b/components/exo/notification_surface_registry.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..b4d204d714f25bdb680bc0ab6f68443c4c8c539f |
| --- /dev/null |
| +++ b/components/exo/notification_surface_registry.h |
| @@ -0,0 +1,61 @@ |
| +// Copyright 2016 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef COMPONENTS_EXO_NOTIFICATION_SURFACE_REGISTRY_H_ |
| +#define COMPONENTS_EXO_NOTIFICATION_SURFACE_REGISTRY_H_ |
| + |
| +#include <map> |
| +#include <string> |
| + |
| +#include "base/lazy_instance.h" |
| +#include "base/macros.h" |
| +#include "base/observer_list.h" |
| + |
| +namespace exo { |
| + |
| +class NotificationSurface; |
| + |
| +// Keeps track of NotificationSurface. |
| +class NotificationSurfaceRegistry { |
|
reveman
2016/06/16 03:35:20
I'd like to avoid this class if possible. So far c
xiyuan
2016/06/20 22:40:29
Unfortunately, we cannot avoid this class. We can
|
| + public: |
| + class Observer { |
| + public: |
| + // Invoked when a notification surface is added to the registry. |
| + virtual void OnNotificationSurfaceAdded(NotificationSurface* surface) = 0; |
| + |
| + // Invoked when a notification surface is removed from the registry. |
| + virtual void OnNotificationSurfaceRemoved(NotificationSurface* surface) = 0; |
| + |
| + protected: |
| + virtual ~Observer() = default; |
| + }; |
| + |
| + static NotificationSurfaceRegistry* Get(); |
| + |
| + NotificationSurface* GetSurface(const std::string& notification_key) const; |
| + |
| + void AddSurface(NotificationSurface* surface); |
| + void RemoveSurface(NotificationSurface* surface); |
| + |
| + void AddObserver(Observer* observer); |
| + void RemoveObserver(Observer* observer); |
| + |
| + private: |
| + friend struct base::DefaultLazyInstanceTraits<NotificationSurfaceRegistry>; |
| + |
| + NotificationSurfaceRegistry(); |
| + ~NotificationSurfaceRegistry(); |
| + |
| + using NotificationSurfaceMap = |
| + std::map<std::string, exo::NotificationSurface*>; |
| + NotificationSurfaceMap notification_surface_map_; |
| + |
| + base::ObserverList<Observer> observers_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(NotificationSurfaceRegistry); |
| +}; |
| + |
| +} // namespace exo |
| + |
| +#endif // COMPONENTS_EXO_NOTIFICATION_SURFACE_REGISTRY_H_ |