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

Side by Side Diff: mojo/services/public/cpp/view_manager/lib/node.cc

Issue 372273004: Shutdown cleanup (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 5 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "mojo/services/public/cpp/view_manager/node.h" 5 #include "mojo/services/public/cpp/view_manager/node.h"
6 6
7 #include "mojo/services/public/cpp/view_manager/lib/node_private.h" 7 #include "mojo/services/public/cpp/view_manager/lib/node_private.h"
8 #include "mojo/services/public/cpp/view_manager/lib/view_manager_client_impl.h" 8 #include "mojo/services/public/cpp/view_manager/lib/view_manager_client_impl.h"
9 #include "mojo/services/public/cpp/view_manager/lib/view_private.h" 9 #include "mojo/services/public/cpp/view_manager/lib/view_private.h"
10 #include "mojo/services/public/cpp/view_manager/node_observer.h" 10 #include "mojo/services/public/cpp/view_manager/node_observer.h"
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 } 187 }
188 188
189 private: 189 private:
190 Node* node_; 190 Node* node_;
191 const gfx::Rect old_bounds_; 191 const gfx::Rect old_bounds_;
192 const gfx::Rect new_bounds_; 192 const gfx::Rect new_bounds_;
193 193
194 DISALLOW_COPY_AND_ASSIGN(ScopedSetBoundsNotifier); 194 DISALLOW_COPY_AND_ASSIGN(ScopedSetBoundsNotifier);
195 }; 195 };
196 196
197 class ScopedDestructionNotifier {
198 public:
199 explicit ScopedDestructionNotifier(Node* node)
200 : node_(node) {
201 FOR_EACH_OBSERVER(NodeObserver,
202 *NodePrivate(node_).observers(),
203 OnNodeDestroying(node_));
204 }
205 ~ScopedDestructionNotifier() {
206 FOR_EACH_OBSERVER(NodeObserver,
207 *NodePrivate(node_).observers(),
208 OnNodeDestroyed(node_));
209 }
210
211 private:
212 Node* node_;
213
214 DISALLOW_COPY_AND_ASSIGN(ScopedDestructionNotifier);
215 };
216
217 // Some operations are only permitted in the connection that created the node. 197 // Some operations are only permitted in the connection that created the node.
218 bool OwnsNode(ViewManager* manager, Node* node) { 198 bool OwnsNode(ViewManager* manager, Node* node) {
219 return !manager || 199 return !manager ||
220 static_cast<ViewManagerClientImpl*>(manager)->OwnsNode(node->id()); 200 static_cast<ViewManagerClientImpl*>(manager)->OwnsNode(node->id());
221 } 201 }
222 202
223 } // namespace 203 } // namespace
224 204
225 //////////////////////////////////////////////////////////////////////////////// 205 ////////////////////////////////////////////////////////////////////////////////
226 // Node, public: 206 // Node, public:
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 //////////////////////////////////////////////////////////////////////////////// 332 ////////////////////////////////////////////////////////////////////////////////
353 // Node, protected: 333 // Node, protected:
354 334
355 Node::Node() 335 Node::Node()
356 : manager_(NULL), 336 : manager_(NULL),
357 id_(static_cast<Id>(-1)), 337 id_(static_cast<Id>(-1)),
358 parent_(NULL), 338 parent_(NULL),
359 active_view_(NULL) {} 339 active_view_(NULL) {}
360 340
361 Node::~Node() { 341 Node::~Node() {
362 ScopedDestructionNotifier notifier(this); 342 FOR_EACH_OBSERVER(NodeObserver, observers_, OnNodeDestroying(this));
363 if (parent_) 343 if (parent_)
364 parent_->LocalRemoveChild(this); 344 parent_->LocalRemoveChild(this);
365 // TODO(beng): It'd be better to do this via a destruction observer in the 345 // TODO(beng): It'd be better to do this via a destruction observer in the
366 // ViewManagerClientImpl. 346 // ViewManagerClientImpl.
367 if (manager_) 347 if (manager_)
368 static_cast<ViewManagerClientImpl*>(manager_)->RemoveNode(id_); 348 static_cast<ViewManagerClientImpl*>(manager_)->RemoveNode(id_);
349 FOR_EACH_OBSERVER(NodeObserver, observers_, OnNodeDestroyed(this));
369 } 350 }
370 351
371 //////////////////////////////////////////////////////////////////////////////// 352 ////////////////////////////////////////////////////////////////////////////////
372 // Node, private: 353 // Node, private:
373 354
374 Node::Node(ViewManager* manager) 355 Node::Node(ViewManager* manager)
375 : manager_(manager), 356 : manager_(manager),
376 id_(static_cast<ViewManagerClientImpl*>(manager_)->CreateNode()), 357 id_(static_cast<ViewManagerClientImpl*>(manager_)->CreateNode()),
377 parent_(NULL), 358 parent_(NULL),
378 active_view_(NULL) {} 359 active_view_(NULL) {}
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 391
411 void Node::LocalSetBounds(const gfx::Rect& old_bounds, 392 void Node::LocalSetBounds(const gfx::Rect& old_bounds,
412 const gfx::Rect& new_bounds) { 393 const gfx::Rect& new_bounds) {
413 DCHECK(old_bounds == bounds_); 394 DCHECK(old_bounds == bounds_);
414 ScopedSetBoundsNotifier notifier(this, old_bounds, new_bounds); 395 ScopedSetBoundsNotifier notifier(this, old_bounds, new_bounds);
415 bounds_ = new_bounds; 396 bounds_ = new_bounds;
416 } 397 }
417 398
418 } // namespace view_manager 399 } // namespace view_manager
419 } // namespace mojo 400 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698