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 10namespace blink { 11 12class ElementShadow; 13class HTMLFrameOwnerElement; 14class Node; 15 16class ChildFrameDisconnector { 17 STACK_ALLOCATED(); 18public: 19 enum DisconnectPolicy { 20 RootAndDescendants, 21 DescendantsOnly 22 }; 23 24 explicit ChildFrameDisconnector(Node& root) 25 : m_root(root) 26 { 27 } 28 29 void disconnect(DisconnectPolicy = RootAndDescendants); 30 31private: 32 void collectFrameOwners(Node&); 33 void collectFrameOwners(ElementShadow&); 34 void disconnectCollectedFrameOwners(); 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