| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2008, 2010 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2008, 2010 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) | 3 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 263 return frame() && allowPopUp(*frame()); | 263 return frame() && allowPopUp(*frame()); |
| 264 } | 264 } |
| 265 | 265 |
| 266 LocalDOMWindow::LocalDOMWindow(LocalFrame& frame) | 266 LocalDOMWindow::LocalDOMWindow(LocalFrame& frame) |
| 267 : m_frameObserver(WindowFrameObserver::create(this, frame)) | 267 : m_frameObserver(WindowFrameObserver::create(this, frame)) |
| 268 , m_shouldPrintWhenFinishedLoading(false) | 268 , m_shouldPrintWhenFinishedLoading(false) |
| 269 #if ENABLE(ASSERT) | 269 #if ENABLE(ASSERT) |
| 270 , m_hasBeenReset(false) | 270 , m_hasBeenReset(false) |
| 271 #endif | 271 #endif |
| 272 { | 272 { |
| 273 #if ENABLE(OILPAN) |
| 274 ThreadState::current()->registerPreFinalizer(*this); |
| 275 #endif |
| 273 } | 276 } |
| 274 | 277 |
| 275 void LocalDOMWindow::clearDocument() | 278 void LocalDOMWindow::clearDocument() |
| 276 { | 279 { |
| 277 if (!m_document) | 280 if (!m_document) |
| 278 return; | 281 return; |
| 279 | 282 |
| 280 ASSERT(!m_document->isActive()); | 283 ASSERT(!m_document->isActive()); |
| 281 | 284 |
| 282 // FIXME: This should be part of ActiveDOMObject shutdown | 285 // FIXME: This should be part of ActiveDOMObject shutdown |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 410 enqueuePopstateEvent(stateObject); | 413 enqueuePopstateEvent(stateObject); |
| 411 else | 414 else |
| 412 m_pendingStateObject = stateObject; | 415 m_pendingStateObject = stateObject; |
| 413 } | 416 } |
| 414 | 417 |
| 415 LocalDOMWindow::~LocalDOMWindow() | 418 LocalDOMWindow::~LocalDOMWindow() |
| 416 { | 419 { |
| 417 #if ENABLE(OILPAN) | 420 #if ENABLE(OILPAN) |
| 418 // Cleared when detaching document. | 421 // Cleared when detaching document. |
| 419 ASSERT(!m_eventQueue); | 422 ASSERT(!m_eventQueue); |
| 420 | |
| 421 // Oilpan: should the LocalDOMWindow be GCed along with its LocalFrame witho
ut the | |
| 422 // frame having first notified its observers of imminent destruction, the | |
| 423 // LocalDOMWindow will not have had an opportunity to remove event listeners
. | |
| 424 // | |
| 425 // Non-Oilpan, LocalDOMWindow::reset() will always be invoked, the last oppo
rtunity | |
| 426 // being via ~LocalFrame's setDOMWindow() call. Asserted for below. | |
| 427 if (frame()) | |
| 428 removeAllEventListeners(); | |
| 429 #else | 423 #else |
| 430 ASSERT(m_hasBeenReset); | 424 ASSERT(m_hasBeenReset); |
| 431 ASSERT(m_document->isStopped()); | 425 ASSERT(m_document->isStopped()); |
| 432 clearDocument(); | 426 clearDocument(); |
| 433 #endif | 427 #endif |
| 434 } | 428 } |
| 435 | 429 |
| 430 void LocalDOMWindow::dispose() |
| 431 { |
| 432 // Oilpan: should the LocalDOMWindow be GCed along with its LocalFrame witho
ut the |
| 433 // frame having first notified its observers of imminent destruction, the |
| 434 // LocalDOMWindow will not have had an opportunity to remove event listeners
. |
| 435 // |
| 436 // Arrange for that removal to happen using a prefinalizer action. Making Lo
calDOMWindow |
| 437 // eager finalizable is problematic as other eagerly finalized objects may w
ell |
| 438 // want to access their associated LocalDOMWindow from their destructors. |
| 439 // |
| 440 // (Non-Oilpan, LocalDOMWindow::reset() will always be invoked, the last opp
ortunity |
| 441 // being via ~LocalFrame's setDOMWindow() call. Asserted for in the destruct
or.) |
| 442 if (!frame()) |
| 443 return; |
| 444 |
| 445 removeAllEventListeners(); |
| 446 } |
| 447 |
| 436 ExecutionContext* LocalDOMWindow::executionContext() const | 448 ExecutionContext* LocalDOMWindow::executionContext() const |
| 437 { | 449 { |
| 438 return m_document.get(); | 450 return m_document.get(); |
| 439 } | 451 } |
| 440 | 452 |
| 441 LocalDOMWindow* LocalDOMWindow::toDOMWindow() | 453 LocalDOMWindow* LocalDOMWindow::toDOMWindow() |
| 442 { | 454 { |
| 443 return this; | 455 return this; |
| 444 } | 456 } |
| 445 | 457 |
| (...skipping 1067 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1513 DOMWindow::trace(visitor); | 1525 DOMWindow::trace(visitor); |
| 1514 DOMWindowLifecycleNotifier::trace(visitor); | 1526 DOMWindowLifecycleNotifier::trace(visitor); |
| 1515 } | 1527 } |
| 1516 | 1528 |
| 1517 LocalFrame* LocalDOMWindow::frame() const | 1529 LocalFrame* LocalDOMWindow::frame() const |
| 1518 { | 1530 { |
| 1519 return m_frameObserver->frame(); | 1531 return m_frameObserver->frame(); |
| 1520 } | 1532 } |
| 1521 | 1533 |
| 1522 } // namespace blink | 1534 } // namespace blink |
| OLD | NEW |