Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(65)

Side by Side Diff: Source/core/frame/Frame.h

Issue 517043003: Move Frame to the Oilpan heap. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase past r181245 conflict Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> 2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org>
3 * 1999-2001 Lars Knoll <knoll@kde.org> 3 * 1999-2001 Lars Knoll <knoll@kde.org>
4 * 1999-2001 Antti Koivisto <koivisto@kde.org> 4 * 1999-2001 Antti Koivisto <koivisto@kde.org>
5 * 2000-2001 Simon Hausmann <hausmann@kde.org> 5 * 2000-2001 Simon Hausmann <hausmann@kde.org>
6 * 2000-2001 Dirk Mueller <mueller@kde.org> 6 * 2000-2001 Dirk Mueller <mueller@kde.org>
7 * 2000 Stefan Schimanski <1Stein@gmx.de> 7 * 2000 Stefan Schimanski <1Stein@gmx.de>
8 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved. 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) 9 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
10 * Copyright (C) 2008 Eric Seidel <eric@webkit.org> 10 * Copyright (C) 2008 Eric Seidel <eric@webkit.org>
(...skipping 16 matching lines...) Expand all
27 27
28 #ifndef Frame_h 28 #ifndef Frame_h
29 #define Frame_h 29 #define Frame_h
30 30
31 #include "core/page/FrameTree.h" 31 #include "core/page/FrameTree.h"
32 #include "platform/heap/Handle.h" 32 #include "platform/heap/Handle.h"
33 #include "wtf/Forward.h" 33 #include "wtf/Forward.h"
34 #include "wtf/RefCounted.h" 34 #include "wtf/RefCounted.h"
35 35
36 namespace blink { 36 namespace blink {
37 class WebLayer;
38 }
39
40 namespace blink {
41 37
42 class ChromeClient; 38 class ChromeClient;
43 class FrameClient; 39 class FrameClient;
44 class FrameHost; 40 class FrameHost;
45 class FrameOwner; 41 class FrameOwner;
42 class FrameProtector;
46 class HTMLFrameOwnerElement; 43 class HTMLFrameOwnerElement;
47 class LocalDOMWindow; 44 class LocalDOMWindow;
48 class Page; 45 class Page;
49 class RenderPart; 46 class RenderPart;
50 class Settings; 47 class Settings;
48 class WebLayer;
51 49
52 class Frame : public RefCounted<Frame> { 50 class Frame : public RefCountedWillBeGarbageCollectedFinalized<Frame> {
53 public: 51 public:
54 virtual bool isLocalFrame() const { return false; } 52 virtual bool isLocalFrame() const { return false; }
55 virtual bool isRemoteFrame() const { return false; } 53 virtual bool isRemoteFrame() const { return false; }
56 54
57 virtual ~Frame(); 55 virtual ~Frame();
56 virtual void trace(Visitor*);
58 57
58 #if ENABLE(OILPAN)
59 void willBeDestroyed();
60 #endif
59 virtual void detach() = 0; 61 virtual void detach() = 0;
60 void detachChildren(); 62 void detachChildren();
61 63
62 FrameClient* client() const; 64 FrameClient* client() const;
63 void clearClient(); 65 void clearClient();
64 66
65 // NOTE: Page is moving out of Blink up into the browser process as 67 // NOTE: Page is moving out of Blink up into the browser process as
66 // part of the site-isolation (out of process iframes) work. 68 // part of the site-isolation (out of process iframes) work.
67 // FrameHost should be used instead where possible. 69 // FrameHost should be used instead where possible.
68 Page* page() const; 70 Page* page() const;
(...skipping 11 matching lines...) Expand all
80 // after RemoteFrame is complete enough to exist without them. 82 // after RemoteFrame is complete enough to exist without them.
81 virtual void setDOMWindow(PassRefPtrWillBeRawPtr<LocalDOMWindow>); 83 virtual void setDOMWindow(PassRefPtrWillBeRawPtr<LocalDOMWindow>);
82 LocalDOMWindow* domWindow() const; 84 LocalDOMWindow* domWindow() const;
83 85
84 FrameTree& tree() const; 86 FrameTree& tree() const;
85 ChromeClient& chromeClient() const; 87 ChromeClient& chromeClient() const;
86 88
87 RenderPart* ownerRenderer() const; // Renderer for the element that contains this frame. 89 RenderPart* ownerRenderer() const; // Renderer for the element that contains this frame.
88 90
89 // FIXME: These should move to RemoteFrame when that is instantiated. 91 // FIXME: These should move to RemoteFrame when that is instantiated.
90 void setRemotePlatformLayer(blink::WebLayer*); 92 void setRemotePlatformLayer(WebLayer*);
91 blink::WebLayer* remotePlatformLayer() const { return m_remotePlatformLayer; } 93 WebLayer* remotePlatformLayer() const { return m_remotePlatformLayer; }
92 94
93 Settings* settings() const; // can be null 95 Settings* settings() const; // can be null
94 96
95 // FIXME: This method identifies a LocalFrame that is acting as a RemoteFram e. 97 // FIXME: This method identifies a LocalFrame that is acting as a RemoteFram e.
96 // It is necessary only until we can instantiate a RemoteFrame, at which poi nt 98 // It is necessary only until we can instantiate a RemoteFrame, at which poi nt
97 // it can be removed and its callers can be converted to use the isRemoteFra me() 99 // it can be removed and its callers can be converted to use the isRemoteFra me()
98 // method. 100 // method.
99 bool isRemoteFrameTemporary() const { return m_remotePlatformLayer; } 101 bool isRemoteFrameTemporary() const { return m_remotePlatformLayer; }
100 102
103 #if ENABLE(OILPAN)
104 bool hasBeenDisposed() const { return m_hasBeenDisposed; }
105
106 int incrementDisposeProtectionCount() { return m_disposeProtectionCount++; }
107 int decrementDisposeProtectionCount() { ASSERT(m_disposeProtectionCount > 0) ; return --m_disposeProtectionCount; }
108 #endif
109
101 protected: 110 protected:
102 Frame(FrameClient*, FrameHost*, FrameOwner*); 111 Frame(FrameClient*, FrameHost*, FrameOwner*);
103 112
113 virtual void dispose();
114
115 #if ENABLE(OILPAN)
116 friend class FrameProtector;
117
118 void setHasBeenDisposed() { m_hasBeenDisposed = true; }
119 #endif
120
104 mutable FrameTree m_treeNode; 121 mutable FrameTree m_treeNode;
105 122
106 FrameHost* m_host; 123 FrameHost* m_host;
107 FrameOwner* m_owner; 124 RawPtrWillBeMember<FrameOwner> m_owner;
108 125
109 RefPtrWillBePersistent<LocalDOMWindow> m_domWindow; 126 RefPtrWillBeMember<LocalDOMWindow> m_domWindow;
110 127
111 private: 128 private:
112 FrameClient* m_client; 129 FrameClient* m_client;
113 blink::WebLayer* m_remotePlatformLayer; 130 WebLayer* m_remotePlatformLayer;
131
132 #if ENABLE(OILPAN)
133 // If > 0, the LocalFrame has existing stack references and
134 // its disposing should be delayed until the stack has unwound
135 // past all of them. The FrameProtector class handles
136 // the details.
137 int m_disposeProtectionCount;
138
139 // The flag will be set to true when the frame is informed of
140 // pending destruction. All Frame owners must explicitly signal
141 // this (through Frame::willBeDestroyed()) so that timely
142 // finalization actions can be performed then; this cannot be
143 // reliably done when the GCed object is later on swept.
144 bool m_hasBeenDisposed;
145 #endif
114 }; 146 };
115 147
116 inline FrameClient* Frame::client() const 148 inline FrameClient* Frame::client() const
117 { 149 {
118 return m_client; 150 return m_client;
119 } 151 }
120 152
121 inline void Frame::clearClient() 153 inline void Frame::clearClient()
122 { 154 {
123 m_client = 0; 155 m_client = 0;
(...skipping 13 matching lines...) Expand all
137 { 169 {
138 return m_treeNode; 170 return m_treeNode;
139 } 171 }
140 172
141 // Allow equality comparisons of Frames by reference or pointer, interchangeably . 173 // Allow equality comparisons of Frames by reference or pointer, interchangeably .
142 DEFINE_COMPARISON_OPERATORS_WITH_REFERENCES_REFCOUNTED(Frame) 174 DEFINE_COMPARISON_OPERATORS_WITH_REFERENCES_REFCOUNTED(Frame)
143 175
144 } // namespace blink 176 } // namespace blink
145 177
146 #endif // Frame_h 178 #endif // Frame_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698