Index: mojo/services/view_manager/server_view_drawn_tracker.h |
diff --git a/mojo/services/view_manager/server_view_drawn_tracker.h b/mojo/services/view_manager/server_view_drawn_tracker.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..85af3095c8aeb39c399f260dfe7ff1066185093d |
--- /dev/null |
+++ b/mojo/services/view_manager/server_view_drawn_tracker.h |
@@ -0,0 +1,58 @@ |
+// Copyright 2015 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 SERVICES_VIEW_MANAGER_SERVER_VIEW_DRAWN_TRACKER_H_ |
+#define SERVICES_VIEW_MANAGER_SERVER_VIEW_DRAWN_TRACKER_H_ |
+ |
+#include <set> |
+ |
+#include "base/basictypes.h" |
+#include "mojo/services/view_manager/server_view_observer.h" |
+ |
+namespace view_manager { |
+ |
+class ServerViewDrawnTrackerObserver; |
+ |
+// ServerViewDrawnTracker notifies its observer any time the drawn state of |
+// the supplied view changes. |
+// |
+// NOTE: you must ensure this class is destroyed before the root. |
+class ServerViewDrawnTracker : public ServerViewObserver { |
+ public: |
+ ServerViewDrawnTracker(ServerView* root, |
+ ServerView* view, |
+ ServerViewDrawnTrackerObserver* observer); |
+ ~ServerViewDrawnTracker() override; |
+ |
+ ServerView* view() { return view_; } |
+ |
+ private: |
+ void SetDrawn(ServerView* ancestor, bool drawn); |
+ |
+ // Adds |this| as an observer to |view_| and its ancestors. |
+ void AddObservers(); |
+ |
+ // Stops observerving any views we added as an observer in AddObservers(). |
+ void RemoveObservers(); |
+ |
+ // ServerViewObserver: |
+ void OnViewDestroyed(ServerView* view) override; |
+ void OnViewHierarchyChanged(ServerView* view, |
+ ServerView* new_parent, |
+ ServerView* old_parent) override; |
+ void OnViewVisibilityChanged(ServerView* view) override; |
+ |
+ ServerView* root_; |
+ ServerView* view_; |
+ ServerViewDrawnTrackerObserver* observer_; |
+ bool drawn_; |
+ // Set of views we're observing. This is |view_| and all its ancestors. |
+ std::set<ServerView*> views_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ServerViewDrawnTracker); |
+}; |
+ |
+} // namespace view_manager |
+ |
+#endif // SERVICES_VIEW_MANAGER_SERVER_VIEW_DRAWN_TRACKER_H_ |