1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "components/view_manager/server_view_drawn_tracker.h"
7 #include "components/view_manager/server_view.h"
8 #include "components/view_manager/server_view_drawn_tracker_observer.h"
10 namespace view_manager
{
12 ServerViewDrawnTracker::ServerViewDrawnTracker(
15 ServerViewDrawnTrackerObserver
* observer
)
19 drawn_(view
->IsDrawn(root
)) {
23 ServerViewDrawnTracker::~ServerViewDrawnTracker() {
27 void ServerViewDrawnTracker::SetDrawn(ServerView
* ancestor
, bool drawn
) {
32 observer_
->OnDrawnStateChanged(ancestor
, view_
, drawn
);
35 void ServerViewDrawnTracker::AddObservers() {
39 for (ServerView
* v
= view_
; v
; v
= v
->parent()) {
45 void ServerViewDrawnTracker::RemoveObservers() {
46 for (ServerView
* view
: views_
)
47 view
->RemoveObserver(this);
52 void ServerViewDrawnTracker::OnViewDestroyed(ServerView
* view
) {
53 // As views are removed before being destroyed, resulting in
54 // OnViewHierarchyChanged() and us removing ourself as an observer, the only
55 // view we should ever get notified of destruction on is |view_|.
56 DCHECK_EQ(view
, view_
);
59 SetDrawn(nullptr, false);
62 void ServerViewDrawnTracker::OnViewHierarchyChanged(ServerView
* view
,
63 ServerView
* new_parent
,
64 ServerView
* old_parent
) {
67 const bool is_drawn
= view_
->IsDrawn(root_
);
68 SetDrawn(is_drawn
? nullptr : old_parent
, is_drawn
);
71 void ServerViewDrawnTracker::OnViewVisibilityChanged(ServerView
* view
) {
72 const bool is_drawn
= view_
->IsDrawn(root_
);
73 SetDrawn(is_drawn
? nullptr : view
->parent(), is_drawn
);
76 } // namespace view_manager