15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org>
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *                     1999-2001 Lars Knoll <knoll@kde.org>
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *                     1999-2001 Antti Koivisto <koivisto@kde.org>
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *                     2000-2001 Simon Hausmann <hausmann@kde.org>
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *                     2000-2001 Dirk Mueller <mueller@kde.org>
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *                     2000 Stefan Schimanski <1Stein@gmx.de>
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2008 Eric Seidel <eric@webkit.org>
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is free software; you can redistribute it and/or
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modify it under the terms of the GNU Library General Public
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License as published by the Free Software Foundation; either
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version 2 of the License, or (at your option) any later version.
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is distributed in the hope that it will be useful,
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Library General Public License for more details.
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You should have received a copy of the GNU Library General Public License
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * along with this library; see the file COPYING.LIB.  If not, write to
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Boston, MA 02110-1301, USA.
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef Frame_h
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define Frame_h
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
31d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#include "core/page/FrameTree.h"
32f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "platform/heap/Handle.h"
33591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/Forward.h"
34591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/RefCounted.h"
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)namespace blink {
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
38d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class ChromeClient;
39d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)class FrameClient;
40d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class FrameHost;
41f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)class FrameOwner;
4276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)class HTMLFrameOwnerElement;
4376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)class LocalDOMWindow;
44d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class Page;
4507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochclass RenderPart;
46d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class Settings;
477242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass WebLayer;
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
497242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass Frame : public RefCountedWillBeGarbageCollectedFinalized<Frame> {
50d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)public:
51d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    virtual bool isLocalFrame() const { return false; }
52d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    virtual bool isRemoteFrame() const { return false; }
5319cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)
54d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    virtual ~Frame();
557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    virtual void trace(Visitor*);
5619cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)
57c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    virtual void detach() = 0;
58c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    void detachChildren();
5919cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)
60d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    FrameClient* client() const;
61d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void clearClient();
62d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
63d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    // NOTE: Page is moving out of Blink up into the browser process as
64d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    // part of the site-isolation (out of process iframes) work.
65d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    // FrameHost should be used instead where possible.
66d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    Page* page() const;
67d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    FrameHost* host() const; // Null when the frame is detached.
6819cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)
69d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool isMainFrame() const;
70197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    bool isLocalRoot() const;
7119cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)
7210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    virtual void disconnectOwnerElement();
7307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch
74f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    FrameOwner* owner() const;
75f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    HTMLFrameOwnerElement* deprecatedLocalOwner() const;
7607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch
7776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    // FIXME: LocalDOMWindow and Document should both be moved to LocalFrame
78d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    // after RemoteFrame is complete enough to exist without them.
7976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    virtual void setDOMWindow(PassRefPtrWillBeRawPtr<LocalDOMWindow>);
8076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    LocalDOMWindow* domWindow() const;
8119cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)
82d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    FrameTree& tree() const;
83d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    ChromeClient& chromeClient() const;
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    RenderPart* ownerRenderer() const; // Renderer for the element that contains this frame.
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
87d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    // FIXME: These should move to RemoteFrame when that is instantiated.
887242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void setRemotePlatformLayer(WebLayer*);
897242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    WebLayer* remotePlatformLayer() const { return m_remotePlatformLayer; }
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
91d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    Settings* settings() const; // can be null
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
93a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    // FIXME: This method identifies a LocalFrame that is acting as a RemoteFrame.
94a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    // It is necessary only until we can instantiate a RemoteFrame, at which point
95a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    // it can be removed and its callers can be converted to use the isRemoteFrame()
96a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    // method.
97a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    bool isRemoteFrameTemporary() const { return m_remotePlatformLayer; }
98a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
99d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)protected:
100f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    Frame(FrameClient*, FrameHost*, FrameOwner*);
101d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
102d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    mutable FrameTree m_treeNode;
10309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
1047242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    RawPtrWillBeMember<FrameHost> m_host;
1057242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    RawPtrWillBeMember<FrameOwner> m_owner;
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1077242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    RefPtrWillBeMember<LocalDOMWindow> m_domWindow;
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
109d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)private:
110d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    FrameClient* m_client;
1117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    WebLayer* m_remotePlatformLayer;
112d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)};
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
114d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)inline FrameClient* Frame::client() const
115d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){
116d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    return m_client;
117d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)}
118d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
119d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)inline void Frame::clearClient()
120d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){
121d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    m_client = 0;
122d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)}
123d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
12476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)inline LocalDOMWindow* Frame::domWindow() const
125d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
126d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    return m_domWindow.get();
127d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
12807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch
129f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)inline FrameOwner* Frame::owner() const
13007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{
131f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    return m_owner;
132f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)}
133f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)
134d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)inline FrameTree& Frame::tree() const
135d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){
136d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    return m_treeNode;
137d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)}
138d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
139f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)// Allow equality comparisons of Frames by reference or pointer, interchangeably.
140f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)DEFINE_COMPARISON_OPERATORS_WITH_REFERENCES_REFCOUNTED(Frame)
141f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)
142c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // Frame_h
145