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 3 // found in the LICENSE file. 4 5 #ifndef ChildFrameDisconnector_h 6 #define ChildFrameDisconnector_h 7 8 #include "platform/heap/Handle.h" 9 10 namespace blink { 11 12 class ElementShadow; 13 class HTMLFrameOwnerElement; 14 class Node; 15 16 class ChildFrameDisconnector { 17 STACK_ALLOCATED(); 18 public: 19 enum DisconnectPolicy { 20 RootAndDescendants, 21 DescendantsOnly 22 }; 23 ChildFrameDisconnector(Node & root)24 explicit ChildFrameDisconnector(Node& root) 25 : m_root(root) 26 { 27 } 28 29 void disconnect(DisconnectPolicy = RootAndDescendants); 30 31 private: 32 void collectFrameOwners(Node&); 33 void collectFrameOwners(ElementShadow&); 34 void disconnectCollectedFrameOwners(); root()35 Node& root() const { return *m_root; } 36 37 WillBeHeapVector<RefPtrWillBeMember<HTMLFrameOwnerElement>, 10> m_frameOwners; 38 RawPtrWillBeMember<Node> m_root; 39 }; 40 41 } // namespace blink 42 43 #endif // ChildFrameDisconnector_h 44