1 /* 2 * Copyright (C) 1998, 1999 Torben Weis <weis (at) kde.org> 3 * 1999-2001 Lars Knoll <knoll (at) kde.org> 4 * 1999-2001 Antti Koivisto <koivisto (at) kde.org> 5 * 2000-2001 Simon Hausmann <hausmann (at) kde.org> 6 * 2000-2001 Dirk Mueller <mueller (at) kde.org> 7 * 2000 Stefan Schimanski <1Stein (at) gmx.de> 8 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved. 9 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) 10 * Copyright (C) 2008 Eric Seidel <eric (at) webkit.org> 11 * 12 * This library is free software; you can redistribute it and/or 13 * modify it under the terms of the GNU Library General Public 14 * License as published by the Free Software Foundation; either 15 * version 2 of the License, or (at your option) any later version. 16 * 17 * This library is distributed in the hope that it will be useful, 18 * but WITHOUT ANY WARRANTY; without even the implied warranty of 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 20 * Library General Public License for more details. 21 * 22 * You should have received a copy of the GNU Library General Public License 23 * along with this library; see the file COPYING.LIB. If not, write to 24 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 25 * Boston, MA 02110-1301, USA. 26 */ 27 28 #ifndef Frame_h 29 #define Frame_h 30 31 #include "core/page/FrameTree.h" 32 #include "platform/heap/Handle.h" 33 #include "wtf/Forward.h" 34 #include "wtf/HashSet.h" 35 #include "wtf/RefCounted.h" 36 37 namespace blink { 38 class WebLayer; 39 } 40 41 namespace WebCore { 42 43 class ChromeClient; 44 class FrameClient; 45 class FrameDestructionObserver; 46 class FrameHost; 47 class FrameOwner; 48 class HTMLFrameOwnerElement; 49 class LocalDOMWindow; 50 class Page; 51 class RenderPart; 52 class Settings; 53 54 class Frame : public RefCounted<Frame> { 55 public: 56 virtual bool isLocalFrame() const { return false; } 57 virtual bool isRemoteFrame() const { return false; } 58 59 virtual ~Frame(); 60 61 void addDestructionObserver(FrameDestructionObserver*); 62 void removeDestructionObserver(FrameDestructionObserver*); 63 64 virtual void willDetachFrameHost(); 65 virtual void detachFromFrameHost(); 66 67 FrameClient* client() const; 68 void clearClient(); 69 70 // NOTE: Page is moving out of Blink up into the browser process as 71 // part of the site-isolation (out of process iframes) work. 72 // FrameHost should be used instead where possible. 73 Page* page() const; 74 FrameHost* host() const; // Null when the frame is detached. 75 76 bool isMainFrame() const; 77 78 virtual void disconnectOwnerElement(); 79 80 FrameOwner* owner() const; 81 HTMLFrameOwnerElement* deprecatedLocalOwner() const; 82 83 // FIXME: LocalDOMWindow and Document should both be moved to LocalFrame 84 // after RemoteFrame is complete enough to exist without them. 85 virtual void setDOMWindow(PassRefPtrWillBeRawPtr<LocalDOMWindow>); 86 LocalDOMWindow* domWindow() const; 87 88 FrameTree& tree() const; 89 ChromeClient& chromeClient() const; 90 91 RenderPart* ownerRenderer() const; // Renderer for the element that contains this frame. 92 93 // FIXME: These should move to RemoteFrame when that is instantiated. 94 void setRemotePlatformLayer(blink::WebLayer* remotePlatformLayer) { m_remotePlatformLayer = remotePlatformLayer; } 95 blink::WebLayer* remotePlatformLayer() const { return m_remotePlatformLayer; } 96 97 Settings* settings() const; // can be null 98 99 // FIXME: This method identifies a LocalFrame that is acting as a RemoteFrame. 100 // It is necessary only until we can instantiate a RemoteFrame, at which point 101 // it can be removed and its callers can be converted to use the isRemoteFrame() 102 // method. 103 bool isRemoteFrameTemporary() const { return m_remotePlatformLayer; } 104 105 protected: 106 Frame(FrameClient*, FrameHost*, FrameOwner*); 107 108 mutable FrameTree m_treeNode; 109 110 FrameHost* m_host; 111 FrameOwner* m_owner; 112 113 RefPtrWillBePersistent<LocalDOMWindow> m_domWindow; 114 115 private: 116 FrameClient* m_client; 117 HashSet<FrameDestructionObserver*> m_destructionObservers; 118 119 blink::WebLayer* m_remotePlatformLayer; 120 }; 121 122 inline FrameClient* Frame::client() const 123 { 124 return m_client; 125 } 126 127 inline void Frame::clearClient() 128 { 129 m_client = 0; 130 } 131 132 inline LocalDOMWindow* Frame::domWindow() const 133 { 134 return m_domWindow.get(); 135 } 136 137 inline FrameOwner* Frame::owner() const 138 { 139 return m_owner; 140 } 141 142 inline FrameTree& Frame::tree() const 143 { 144 return m_treeNode; 145 } 146 147 // Allow equality comparisons of Frames by reference or pointer, interchangeably. 148 DEFINE_COMPARISON_OPERATORS_WITH_REFERENCES_REFCOUNTED(Frame) 149 150 } // namespace WebCore 151 152 #endif // Frame_h 153