| 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 "public/web/WebFrame.h" | 5 #include "public/web/WebFrame.h" |
| 6 | 6 |
| 7 #include "bindings/core/v8/WindowProxyManager.h" | 7 #include "bindings/core/v8/WindowProxyManager.h" |
| 8 #include "core/HTMLNames.h" | 8 #include "core/HTMLNames.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 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 293 ALWAYS_INLINE bool WebFrame::isFrameAlive(const WebFrame* frame) { | 293 ALWAYS_INLINE bool WebFrame::isFrameAlive(const WebFrame* frame) { |
| 294 if (!frame) | 294 if (!frame) |
| 295 return true; | 295 return true; |
| 296 | 296 |
| 297 if (frame->isWebLocalFrame()) | 297 if (frame->isWebLocalFrame()) |
| 298 return ThreadHeap::isHeapObjectAlive(toWebLocalFrameImpl(frame)); | 298 return ThreadHeap::isHeapObjectAlive(toWebLocalFrameImpl(frame)); |
| 299 | 299 |
| 300 return ThreadHeap::isHeapObjectAlive(toWebRemoteFrameImpl(frame)); | 300 return ThreadHeap::isHeapObjectAlive(toWebRemoteFrameImpl(frame)); |
| 301 } | 301 } |
| 302 | 302 |
| 303 template <typename VisitorDispatcher> | 303 void WebFrame::traceFrame(Visitor* visitor, WebFrame* frame) { |
| 304 ALWAYS_INLINE void WebFrame::traceFrameImpl(VisitorDispatcher visitor, | |
| 305 WebFrame* frame) { | |
| 306 if (!frame) | 304 if (!frame) |
| 307 return; | 305 return; |
| 308 | 306 |
| 309 if (frame->isWebLocalFrame()) | 307 if (frame->isWebLocalFrame()) |
| 310 visitor->trace(toWebLocalFrameImpl(frame)); | 308 visitor->trace(toWebLocalFrameImpl(frame)); |
| 311 else | 309 else |
| 312 visitor->trace(toWebRemoteFrameImpl(frame)); | 310 visitor->trace(toWebRemoteFrameImpl(frame)); |
| 313 } | 311 } |
| 314 | 312 |
| 315 template <typename VisitorDispatcher> | 313 void WebFrame::traceFrames(Visitor* visitor, WebFrame* frame) { |
| 316 ALWAYS_INLINE void WebFrame::traceFramesImpl(VisitorDispatcher visitor, | |
| 317 WebFrame* frame) { | |
| 318 DCHECK(frame); | 314 DCHECK(frame); |
| 319 traceFrame(visitor, frame->m_parent); | 315 traceFrame(visitor, frame->m_parent); |
| 320 for (WebFrame* child = frame->firstChild(); child; | 316 for (WebFrame* child = frame->firstChild(); child; |
| 321 child = child->nextSibling()) | 317 child = child->nextSibling()) |
| 322 traceFrame(visitor, child); | 318 traceFrame(visitor, child); |
| 323 // m_opener is a weak reference. | 319 // m_opener is a weak reference. |
| 324 frame->m_openedFrameTracker->traceFrames(visitor); | 320 frame->m_openedFrameTracker->traceFrames(visitor); |
| 325 } | 321 } |
| 326 | 322 |
| 327 template <typename VisitorDispatcher> | 323 void WebFrame::clearWeakFrames(Visitor* visitor) { |
| 328 ALWAYS_INLINE void WebFrame::clearWeakFramesImpl(VisitorDispatcher visitor) { | |
| 329 if (!isFrameAlive(m_opener)) | 324 if (!isFrameAlive(m_opener)) |
| 330 m_opener = nullptr; | 325 m_opener = nullptr; |
| 331 } | 326 } |
| 332 | 327 |
| 333 #define DEFINE_VISITOR_METHOD(VisitorDispatcher) \ | |
| 334 void WebFrame::traceFrame(VisitorDispatcher visitor, WebFrame* frame) { \ | |
| 335 traceFrameImpl(visitor, frame); \ | |
| 336 } \ | |
| 337 void WebFrame::traceFrames(VisitorDispatcher visitor, WebFrame* frame) { \ | |
| 338 traceFramesImpl(visitor, frame); \ | |
| 339 } \ | |
| 340 void WebFrame::clearWeakFrames(VisitorDispatcher visitor) { \ | |
| 341 clearWeakFramesImpl(visitor); \ | |
| 342 } | |
| 343 | |
| 344 DEFINE_VISITOR_METHOD(Visitor*) | |
| 345 | |
| 346 #undef DEFINE_VISITOR_METHOD | |
| 347 | |
| 348 } // namespace blink | 328 } // namespace blink |
| OLD | NEW |