Changeset 104372 in webkit


Ignore:
Timestamp:
Jan 6, 2012 7:12:01 PM (12 years ago)
Author:
abarth@webkit.org
Message:

DOMWindow should be a FrameDestructionObserver
https://bugs.webkit.org/show_bug.cgi?id=75697

Reviewed by Alexey Proskuryakov.

DOMWindow plays exactly the role of a FrameDestructionObserver, just
with special-case code. It should just use the general-case code.

  • page/DOMWindow.cpp:

(WebCore::DOMWindow::DOMWindow):
(WebCore::DOMWindow::~DOMWindow):
(WebCore::DOMWindow::frameDestroyed):

  • page/DOMWindow.h:
  • page/Frame.cpp:

(WebCore::Frame::~Frame):
(WebCore::Frame::clearDOMWindow):
(WebCore::Frame::setDOMWindow):

  • page/Frame.h:
Location:
trunk/Source/WebCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r104371 r104372  
     12012-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
    1222012-01-06  Joseph Pecoraro  <pecoraro@apple.com>
    223
  • trunk/Source/WebCore/page/DOMWindow.cpp

    r104005 r104372  
    398398
    399399DOMWindow::DOMWindow(Frame* frame)
    400     : m_shouldPrintWhenFinishedLoading(false)
    401     , m_frame(frame)
     400    : FrameDestructionObserver(frame)
     401    , m_shouldPrintWhenFinishedLoading(false)
    402402{
    403403}
     
    405405DOMWindow::~DOMWindow()
    406406{
    407     if (m_frame)
    408         m_frame->clearFormerDOMWindow(this);
    409 
    410407    ASSERT(!m_screen);
    411408    ASSERT(!m_selection);
     
    474471}
    475472
    476 void DOMWindow::disconnectFrame()
    477 {
    478     m_frame = 0;
     473void DOMWindow::frameDestroyed()
     474{
     475    FrameDestructionObserver::frameDestroyed();
    479476    clear();
    480477}
  • trunk/Source/WebCore/page/DOMWindow.h

    r102961 r104372  
    2929
    3030#include "EventTarget.h"
     31#include "FrameDestructionObserver.h"
    3132#include "KURL.h"
    3233
     
    8182    enum SetLocationLocking { LockHistoryBasedOnGestureState, LockHistoryAndBackForwardList };
    8283
    83     class DOMWindow : public RefCounted<DOMWindow>, public EventTarget {
     84    class DOMWindow : public RefCounted<DOMWindow>, public EventTarget, public FrameDestructionObserver {
    8485    public:
    8586        static PassRefPtr<DOMWindow> create(Frame* frame) { return adoptRef(new DOMWindow(frame)); }
     
    9192        virtual DOMWindow* toDOMWindow();
    9293
    93         Frame* frame() const { return m_frame; }
    94         void disconnectFrame();
     94        virtual void frameDestroyed() OVERRIDE;
    9595
    9696        void clear();
     
    416416
    417417    private:
    418         DOMWindow(Frame*);
     418        explicit DOMWindow(Frame*);
    419419
    420420        // FIXME: When this DOMWindow is no longer the active DOMWindow (i.e.,
     
    438438
    439439        bool m_shouldPrintWhenFinishedLoading;
    440         Frame* m_frame;
    441440        mutable RefPtr<Screen> m_screen;
    442441        mutable RefPtr<DOMSelection> m_selection;
  • trunk/Source/WebCore/page/Frame.cpp

    r104344 r104372  
    220220    disconnectOwnerElement();
    221221
    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 
    229222    HashSet<FrameDestructionObserver*>::iterator stop = m_destructionObservers.end();
    230223    for (HashSet<FrameDestructionObserver*>::iterator it = m_destructionObservers.begin(); it != stop; ++it)
     
    577570void Frame::clearDOMWindow()
    578571{
    579     if (m_domWindow) {
    580         m_liveFormerWindows.add(m_domWindow.get());
     572    if (m_domWindow)
    581573        m_domWindow->clear();
    582     }
    583574    m_domWindow = 0;
    584575}
     
    645636void Frame::setDOMWindow(DOMWindow* domWindow)
    646637{
    647     if (m_domWindow) {
    648         m_liveFormerWindows.add(m_domWindow.get());
     638    if (m_domWindow)
    649639        m_domWindow->clear();
    650     }
    651640    m_domWindow = domWindow;
    652641}
     
    668657
    669658    return m_domWindow.get();
    670 }
    671 
    672 void Frame::clearFormerDOMWindow(DOMWindow* window)
    673 {
    674     m_liveFormerWindows.remove(window);
    675659}
    676660
  • trunk/Source/WebCore/page/Frame.h

    r104344 r104372  
    134134        DOMWindow* existingDOMWindow() { return m_domWindow.get(); }
    135135        void setDOMWindow(DOMWindow*);
    136         void clearFormerDOMWindow(DOMWindow*);
    137136        void clearDOMWindow();
    138137
     
    213212
    214213        mutable RefPtr<DOMWindow> m_domWindow;
    215         HashSet<DOMWindow*> m_liveFormerWindows;
    216214
    217215        HTMLFrameOwnerElement* m_ownerElement;
Note: See TracChangeset for help on using the changeset viewer.