Changeset 104372 in webkit
- Timestamp:
- Jan 6, 2012 7:12:01 PM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r104371 r104372 1 2012-01-06 Adam Barth <abarth@webkit.org> 2 3 DOMWindow should be a FrameDestructionObserver 4 https://bugs.webkit.org/show_bug.cgi?id=75697 5 6 Reviewed by Alexey Proskuryakov. 7 8 DOMWindow plays exactly the role of a FrameDestructionObserver, just 9 with special-case code. It should just use the general-case code. 10 11 * page/DOMWindow.cpp: 12 (WebCore::DOMWindow::DOMWindow): 13 (WebCore::DOMWindow::~DOMWindow): 14 (WebCore::DOMWindow::frameDestroyed): 15 * page/DOMWindow.h: 16 * page/Frame.cpp: 17 (WebCore::Frame::~Frame): 18 (WebCore::Frame::clearDOMWindow): 19 (WebCore::Frame::setDOMWindow): 20 * page/Frame.h: 21 1 22 2012-01-06 Joseph Pecoraro <pecoraro@apple.com> 2 23 -
trunk/Source/WebCore/page/DOMWindow.cpp
r104005 r104372 398 398 399 399 DOMWindow::DOMWindow(Frame* frame) 400 : m_shouldPrintWhenFinishedLoading(false)401 , m_ frame(frame)400 : FrameDestructionObserver(frame) 401 , m_shouldPrintWhenFinishedLoading(false) 402 402 { 403 403 } … … 405 405 DOMWindow::~DOMWindow() 406 406 { 407 if (m_frame)408 m_frame->clearFormerDOMWindow(this);409 410 407 ASSERT(!m_screen); 411 408 ASSERT(!m_selection); … … 474 471 } 475 472 476 void DOMWindow:: disconnectFrame()477 { 478 m_frame = 0;473 void DOMWindow::frameDestroyed() 474 { 475 FrameDestructionObserver::frameDestroyed(); 479 476 clear(); 480 477 } -
trunk/Source/WebCore/page/DOMWindow.h
r102961 r104372 29 29 30 30 #include "EventTarget.h" 31 #include "FrameDestructionObserver.h" 31 32 #include "KURL.h" 32 33 … … 81 82 enum SetLocationLocking { LockHistoryBasedOnGestureState, LockHistoryAndBackForwardList }; 82 83 83 class DOMWindow : public RefCounted<DOMWindow>, public EventTarget {84 class DOMWindow : public RefCounted<DOMWindow>, public EventTarget, public FrameDestructionObserver { 84 85 public: 85 86 static PassRefPtr<DOMWindow> create(Frame* frame) { return adoptRef(new DOMWindow(frame)); } … … 91 92 virtual DOMWindow* toDOMWindow(); 92 93 93 Frame* frame() const { return m_frame; } 94 void disconnectFrame(); 94 virtual void frameDestroyed() OVERRIDE; 95 95 96 96 void clear(); … … 416 416 417 417 private: 418 DOMWindow(Frame*);418 explicit DOMWindow(Frame*); 419 419 420 420 // FIXME: When this DOMWindow is no longer the active DOMWindow (i.e., … … 438 438 439 439 bool m_shouldPrintWhenFinishedLoading; 440 Frame* m_frame;441 440 mutable RefPtr<Screen> m_screen; 442 441 mutable RefPtr<DOMSelection> m_selection; -
trunk/Source/WebCore/page/Frame.cpp
r104344 r104372 220 220 disconnectOwnerElement(); 221 221 222 if (m_domWindow)223 m_domWindow->disconnectFrame();224 225 HashSet<DOMWindow*>::iterator end = m_liveFormerWindows.end();226 for (HashSet<DOMWindow*>::iterator it = m_liveFormerWindows.begin(); it != end; ++it)227 (*it)->disconnectFrame();228 229 222 HashSet<FrameDestructionObserver*>::iterator stop = m_destructionObservers.end(); 230 223 for (HashSet<FrameDestructionObserver*>::iterator it = m_destructionObservers.begin(); it != stop; ++it) … … 577 570 void Frame::clearDOMWindow() 578 571 { 579 if (m_domWindow) { 580 m_liveFormerWindows.add(m_domWindow.get()); 572 if (m_domWindow) 581 573 m_domWindow->clear(); 582 }583 574 m_domWindow = 0; 584 575 } … … 645 636 void Frame::setDOMWindow(DOMWindow* domWindow) 646 637 { 647 if (m_domWindow) { 648 m_liveFormerWindows.add(m_domWindow.get()); 638 if (m_domWindow) 649 639 m_domWindow->clear(); 650 }651 640 m_domWindow = domWindow; 652 641 } … … 668 657 669 658 return m_domWindow.get(); 670 }671 672 void Frame::clearFormerDOMWindow(DOMWindow* window)673 {674 m_liveFormerWindows.remove(window);675 659 } 676 660 -
trunk/Source/WebCore/page/Frame.h
r104344 r104372 134 134 DOMWindow* existingDOMWindow() { return m_domWindow.get(); } 135 135 void setDOMWindow(DOMWindow*); 136 void clearFormerDOMWindow(DOMWindow*);137 136 void clearDOMWindow(); 138 137 … … 213 212 214 213 mutable RefPtr<DOMWindow> m_domWindow; 215 HashSet<DOMWindow*> m_liveFormerWindows;216 214 217 215 HTMLFrameOwnerElement* m_ownerElement;
Note: See TracChangeset
for help on using the changeset viewer.