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