OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> | 2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> |
3 * 1999 Lars Knoll <knoll@kde.org> | 3 * 1999 Lars Knoll <knoll@kde.org> |
4 * 1999 Antti Koivisto <koivisto@kde.org> | 4 * 1999 Antti Koivisto <koivisto@kde.org> |
5 * 2000 Simon Hausmann <hausmann@kde.org> | 5 * 2000 Simon Hausmann <hausmann@kde.org> |
6 * 2000 Stefan Schimanski <1Stein@gmx.de> | 6 * 2000 Stefan Schimanski <1Stein@gmx.de> |
7 * 2001 George Staikos <staikos@kde.org> | 7 * 2001 George Staikos <staikos@kde.org> |
8 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ights reserved. | 8 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ights reserved. |
9 * Copyright (C) 2005 Alexey Proskuryakov <ap@nypop.com> | 9 * Copyright (C) 2005 Alexey Proskuryakov <ap@nypop.com> |
10 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) | 10 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
199 | 199 |
200 LocalFrame::~LocalFrame() | 200 LocalFrame::~LocalFrame() |
201 { | 201 { |
202 // Verify that the FrameView has been cleared as part of detaching | 202 // Verify that the FrameView has been cleared as part of detaching |
203 // the frame owner. | 203 // the frame owner. |
204 ASSERT(!m_view); | 204 ASSERT(!m_view); |
205 | 205 |
206 #if !ENABLE(OILPAN) | 206 #if !ENABLE(OILPAN) |
207 // Oilpan: see setDOMWindow() comment why it is acceptable not to | 207 // Oilpan: see setDOMWindow() comment why it is acceptable not to |
208 // mirror the non-Oilpan call below. | 208 // mirror the non-Oilpan call below. |
| 209 // |
| 210 // Also, FrameDestructionObservers that live longer than this |
| 211 // frame object keep weak references to the frame; those will be |
| 212 // automatically cleared by the garbage collector. Hence, explicit |
| 213 // frameDestroyed() notifications aren't needed. |
209 setDOMWindow(nullptr); | 214 setDOMWindow(nullptr); |
| 215 |
| 216 for (const auto& frameDestructionObserver : m_destructionObservers) |
| 217 frameDestructionObserver->frameDestroyed(); |
210 #endif | 218 #endif |
211 } | 219 } |
212 | 220 |
213 void LocalFrame::trace(Visitor* visitor) | 221 void LocalFrame::trace(Visitor* visitor) |
214 { | 222 { |
215 #if ENABLE(OILPAN) | 223 #if ENABLE(OILPAN) |
216 visitor->trace(m_destructionObservers); | 224 visitor->trace(m_destructionObservers); |
217 visitor->trace(m_loader); | 225 visitor->trace(m_loader); |
218 visitor->trace(m_navigationScheduler); | 226 visitor->trace(m_navigationScheduler); |
219 visitor->trace(m_view); | 227 visitor->trace(m_view); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
276 script().clearForClose(); | 284 script().clearForClose(); |
277 ScriptForbiddenScope forbidScript; | 285 ScriptForbiddenScope forbidScript; |
278 setView(nullptr); | 286 setView(nullptr); |
279 willDetachFrameHost(); | 287 willDetachFrameHost(); |
280 InspectorInstrumentation::frameDetachedFromParent(this); | 288 InspectorInstrumentation::frameDetachedFromParent(this); |
281 Frame::detach(); | 289 Frame::detach(); |
282 // Clear the FrameLoader right here rather than during | 290 // Clear the FrameLoader right here rather than during |
283 // finalization. Too late to access various heap objects at that | 291 // finalization. Too late to access various heap objects at that |
284 // stage. | 292 // stage. |
285 m_loader.clear(); | 293 m_loader.clear(); |
286 | |
287 // Signal frame destruction here rather than in the destructor. | |
288 // Main motivation is to avoid being dependent on its exact timing (Oilpan.) | |
289 for (const auto& frameDestructionObserver : m_destructionObservers) | |
290 frameDestructionObserver->frameDestroyed(); | |
291 } | 294 } |
292 | 295 |
293 SecurityContext* LocalFrame::securityContext() const | 296 SecurityContext* LocalFrame::securityContext() const |
294 { | 297 { |
295 return document(); | 298 return document(); |
296 } | 299 } |
297 | 300 |
298 void LocalFrame::printNavigationErrorMessage(const Frame& targetFrame, const cha
r* reason) | 301 void LocalFrame::printNavigationErrorMessage(const Frame& targetFrame, const cha
r* reason) |
299 { | 302 { |
300 if (!targetFrame.isLocalFrame()) | 303 if (!targetFrame.isLocalFrame()) |
(...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
819 // We detach the FrameView's custom scroll bars as early as | 822 // We detach the FrameView's custom scroll bars as early as |
820 // possible to prevent m_doc->detach() from messing with the view | 823 // possible to prevent m_doc->detach() from messing with the view |
821 // such that its scroll bars won't be torn down. | 824 // such that its scroll bars won't be torn down. |
822 // | 825 // |
823 // FIXME: We should revisit this. | 826 // FIXME: We should revisit this. |
824 if (m_view) | 827 if (m_view) |
825 m_view->prepareForDetach(); | 828 m_view->prepareForDetach(); |
826 } | 829 } |
827 | 830 |
828 } // namespace blink | 831 } // namespace blink |
OLD | NEW |