| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "config.h" | 5 #include "config.h" |
| 6 #include "public/web/WebFrame.h" | 6 #include "public/web/WebFrame.h" |
| 7 | 7 |
| 8 #include "bindings/core/v8/WindowProxyManager.h" | 8 #include "bindings/core/v8/WindowProxyManager.h" |
| 9 #include "core/frame/FrameHost.h" | 9 #include "core/frame/FrameHost.h" |
| 10 #include "core/frame/FrameView.h" | 10 #include "core/frame/FrameView.h" |
| (...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 290 , m_openedFrameTracker(new OpenedFrameTracker) | 290 , m_openedFrameTracker(new OpenedFrameTracker) |
| 291 { | 291 { |
| 292 } | 292 } |
| 293 | 293 |
| 294 WebFrame::~WebFrame() | 294 WebFrame::~WebFrame() |
| 295 { | 295 { |
| 296 m_openedFrameTracker.reset(0); | 296 m_openedFrameTracker.reset(0); |
| 297 } | 297 } |
| 298 | 298 |
| 299 #if ENABLE(OILPAN) | 299 #if ENABLE(OILPAN) |
| 300 ALWAYS_INLINE bool WebFrame::isFrameAlive(const WebFrame* frame) |
| 301 { |
| 302 if (!frame) |
| 303 return true; |
| 304 |
| 305 if (frame->isWebLocalFrame()) |
| 306 return Heap::isHeapObjectAlive(toWebLocalFrameImpl(frame)); |
| 307 |
| 308 return Heap::isHeapObjectAlive(toWebRemoteFrameImpl(frame)); |
| 309 } |
| 310 |
| 300 template <typename VisitorDispatcher> | 311 template <typename VisitorDispatcher> |
| 301 ALWAYS_INLINE void WebFrame::traceFrameImpl(VisitorDispatcher visitor, WebFrame*
frame) | 312 ALWAYS_INLINE void WebFrame::traceFrameImpl(VisitorDispatcher visitor, WebFrame*
frame) |
| 302 { | 313 { |
| 303 if (!frame) | 314 if (!frame) |
| 304 return; | 315 return; |
| 305 | 316 |
| 306 if (frame->isWebLocalFrame()) | 317 if (frame->isWebLocalFrame()) |
| 307 visitor->trace(toWebLocalFrameImpl(frame)); | 318 visitor->trace(toWebLocalFrameImpl(frame)); |
| 308 else | 319 else |
| 309 visitor->trace(toWebRemoteFrameImpl(frame)); | 320 visitor->trace(toWebRemoteFrameImpl(frame)); |
| 310 } | 321 } |
| 311 | 322 |
| 312 template <typename VisitorDispatcher> | 323 template <typename VisitorDispatcher> |
| 313 ALWAYS_INLINE void WebFrame::traceFramesImpl(VisitorDispatcher visitor, WebFrame
* frame) | 324 ALWAYS_INLINE void WebFrame::traceFramesImpl(VisitorDispatcher visitor, WebFrame
* frame) |
| 314 { | 325 { |
| 315 ASSERT(frame); | 326 ASSERT(frame); |
| 316 traceFrame(visitor, frame->m_parent); | 327 traceFrame(visitor, frame->m_parent); |
| 317 for (WebFrame* child = frame->firstChild(); child; child = child->nextSiblin
g()) | 328 for (WebFrame* child = frame->firstChild(); child; child = child->nextSiblin
g()) |
| 318 traceFrame(visitor, child); | 329 traceFrame(visitor, child); |
| 319 // m_opener is a weak reference. | 330 // m_opener is a weak reference. |
| 320 frame->m_openedFrameTracker->traceFrames(visitor); | 331 frame->m_openedFrameTracker->traceFrames(visitor); |
| 321 } | 332 } |
| 322 | 333 |
| 323 template <typename VisitorDispatcher> | 334 template <typename VisitorDispatcher> |
| 324 ALWAYS_INLINE bool WebFrame::isFrameAliveImpl(VisitorDispatcher visitor, const W
ebFrame* frame) | |
| 325 { | |
| 326 if (!frame) | |
| 327 return true; | |
| 328 | |
| 329 if (frame->isWebLocalFrame()) | |
| 330 return visitor->isHeapObjectAlive(toWebLocalFrameImpl(frame)); | |
| 331 | |
| 332 return visitor->isHeapObjectAlive(toWebRemoteFrameImpl(frame)); | |
| 333 } | |
| 334 | |
| 335 template <typename VisitorDispatcher> | |
| 336 ALWAYS_INLINE void WebFrame::clearWeakFramesImpl(VisitorDispatcher visitor) | 335 ALWAYS_INLINE void WebFrame::clearWeakFramesImpl(VisitorDispatcher visitor) |
| 337 { | 336 { |
| 338 if (!isFrameAlive(visitor, m_opener)) | 337 if (!isFrameAlive(m_opener)) |
| 339 m_opener = nullptr; | 338 m_opener = nullptr; |
| 340 } | 339 } |
| 341 | 340 |
| 342 #define DEFINE_VISITOR_METHOD(VisitorDispatcher)
\ | 341 #define DEFINE_VISITOR_METHOD(VisitorDispatcher)
\ |
| 343 void WebFrame::traceFrame(VisitorDispatcher visitor, WebFrame* frame) { trac
eFrameImpl(visitor, frame); } \ | 342 void WebFrame::traceFrame(VisitorDispatcher visitor, WebFrame* frame) { trac
eFrameImpl(visitor, frame); } \ |
| 344 void WebFrame::traceFrames(VisitorDispatcher visitor, WebFrame* frame) { tra
ceFramesImpl(visitor, frame); } \ | 343 void WebFrame::traceFrames(VisitorDispatcher visitor, WebFrame* frame) { tra
ceFramesImpl(visitor, frame); } \ |
| 345 bool WebFrame::isFrameAlive(VisitorDispatcher visitor, const WebFrame* frame
) { return isFrameAliveImpl(visitor, frame); } \ | |
| 346 void WebFrame::clearWeakFrames(VisitorDispatcher visitor) { clearWeakFramesI
mpl(visitor); } | 344 void WebFrame::clearWeakFrames(VisitorDispatcher visitor) { clearWeakFramesI
mpl(visitor); } |
| 347 | 345 |
| 348 DEFINE_VISITOR_METHOD(Visitor*) | 346 DEFINE_VISITOR_METHOD(Visitor*) |
| 349 DEFINE_VISITOR_METHOD(InlinedGlobalMarkingVisitor) | 347 DEFINE_VISITOR_METHOD(InlinedGlobalMarkingVisitor) |
| 350 | 348 |
| 351 #undef DEFINE_VISITOR_METHOD | 349 #undef DEFINE_VISITOR_METHOD |
| 352 #endif | 350 #endif |
| 353 | 351 |
| 354 } // namespace blink | 352 } // namespace blink |
| OLD | NEW |