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 "core/frame/RemoteFrame.h" | 8 #include "core/frame/RemoteFrame.h" |
9 #include "core/html/HTMLFrameOwnerElement.h" | 9 #include "core/html/HTMLFrameOwnerElement.h" |
10 #include "platform/UserGestureIndicator.h" | 10 #include "platform/UserGestureIndicator.h" |
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
224 , m_opener(0) | 224 , m_opener(0) |
225 , m_openedFrameTracker(new OpenedFrameTracker) | 225 , m_openedFrameTracker(new OpenedFrameTracker) |
226 { | 226 { |
227 } | 227 } |
228 | 228 |
229 WebFrame::~WebFrame() | 229 WebFrame::~WebFrame() |
230 { | 230 { |
231 m_openedFrameTracker.reset(0); | 231 m_openedFrameTracker.reset(0); |
232 } | 232 } |
233 | 233 |
234 void WebFrame::traceChildren(Visitor* visitor, WebFrame* frame) | 234 void WebFrame::traceFrame(Visitor* visitor, WebFrame* frame) |
235 { | 235 { |
236 #if ENABLE(OILPAN) | 236 #if ENABLE(OILPAN) |
237 // Trace the children frames. | 237 if (!frame) |
238 WebFrame* child = frame ? frame->firstChild() : 0; | 238 return; |
239 while (child) { | |
240 if (child->isWebLocalFrame()) | |
241 visitor->trace(toWebLocalFrameImpl(child)); | |
242 else | |
243 visitor->trace(toWebRemoteFrameImpl(child)); | |
244 | 239 |
245 child = child->nextSibling(); | 240 if (frame->isWebLocalFrame()) |
246 } | 241 visitor->trace(toWebLocalFrameImpl(frame)); |
| 242 else |
| 243 visitor->trace(toWebRemoteFrameImpl(frame)); |
247 #endif | 244 #endif |
248 } | 245 } |
249 | 246 |
| 247 bool WebFrame::isAlive(Visitor* visitor, WebFrame* frame) |
| 248 { |
| 249 #if ENABLE(OILPAN) |
| 250 if (!frame) |
| 251 return false; |
| 252 |
| 253 if (frame->isWebLocalFrame()) |
| 254 return visitor->isAlive(toWebLocalFrameImpl(frame)); |
| 255 |
| 256 return visitor->isAlive(toWebRemoteFrameImpl(frame)); |
| 257 #else |
| 258 ASSERT_NOT_REACHED(); |
| 259 return true; |
| 260 #endif |
| 261 } |
| 262 |
| 263 void WebFrame::traceFrames(Visitor* visitor, WebFrame* frame) |
| 264 { |
| 265 #if ENABLE(OILPAN) |
| 266 ASSERT(frame); |
| 267 traceFrame(visitor, frame->m_parent); |
| 268 for (WebFrame* child = frame->firstChild(); child; child = child->nextSiblin
g()) |
| 269 traceFrame(visitor, child); |
| 270 // m_opener is a weak reference. |
| 271 frame->m_openedFrameTracker->traceFrames(visitor); |
| 272 #endif |
| 273 } |
| 274 |
| 275 void WebFrame::clearWeakFrames(Visitor* visitor, WebFrame* frame) |
| 276 { |
| 277 #if ENABLE(OILPAN) |
| 278 ASSERT(frame); |
| 279 if (frame->m_opener && !isAlive(visitor, frame->m_opener)) |
| 280 frame->m_opener = nullptr; |
| 281 #endif |
| 282 } |
| 283 |
250 } // namespace blink | 284 } // namespace blink |
OLD | NEW |