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