Changeset 222831 in webkit


Ignore:
Timestamp:
Oct 3, 2017 11:54:20 PM (7 years ago)
Author:
Antti Koivisto
Message:

Use WeakPtr in RenderFullScreen
https://bugs.webkit.org/show_bug.cgi?id=177827

Reviewed by Zalan Bujtas.

Make Document::m_fullScreenRenderer RenderFullScreen::m_placeholder WeakPtrs
and get rid of the custom nulling code.

  • dom/Document.cpp:

(WebCore::Document::destroyRenderTree):
(WebCore::Document::webkitWillEnterFullScreenForElement):
(WebCore::Document::webkitDidExitFullScreenForElement):
(WebCore::Document::setFullScreenRenderer):
(WebCore::Document::fullScreenRendererDestroyed): Deleted.

  • dom/Document.h:

(WebCore::Document::fullScreenRenderer const):

  • rendering/RenderFullScreen.cpp:

(WebCore::RenderFullScreen::RenderFullScreen):
(WebCore::RenderFullScreen::willBeDestroyed):
(WebCore::RenderFullScreen::createPlaceholder):
(WebCore::RenderFullScreenPlaceholder::willBeDestroyed): Deleted.
(WebCore::RenderFullScreen::setPlaceholder): Deleted.

  • rendering/RenderFullScreen.h:
Location:
trunk/Source/WebCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r222830 r222831  
     12017-10-03  Antti Koivisto  <antti@apple.com>
     2
     3        Use WeakPtr in RenderFullScreen
     4        https://bugs.webkit.org/show_bug.cgi?id=177827
     5
     6        Reviewed by Zalan Bujtas.
     7
     8        Make Document::m_fullScreenRenderer RenderFullScreen::m_placeholder WeakPtrs
     9        and get rid of the custom nulling code.
     10
     11        * dom/Document.cpp:
     12        (WebCore::Document::destroyRenderTree):
     13        (WebCore::Document::webkitWillEnterFullScreenForElement):
     14        (WebCore::Document::webkitDidExitFullScreenForElement):
     15        (WebCore::Document::setFullScreenRenderer):
     16        (WebCore::Document::fullScreenRendererDestroyed): Deleted.
     17        * dom/Document.h:
     18        (WebCore::Document::fullScreenRenderer const):
     19        * rendering/RenderFullScreen.cpp:
     20        (WebCore::RenderFullScreen::RenderFullScreen):
     21        (WebCore::RenderFullScreen::willBeDestroyed):
     22        (WebCore::RenderFullScreen::createPlaceholder):
     23        (WebCore::RenderFullScreenPlaceholder::willBeDestroyed): Deleted.
     24        (WebCore::RenderFullScreen::setPlaceholder): Deleted.
     25        * rendering/RenderFullScreen.h:
     26
    1272017-10-03  Ryosuke Niwa  <rniwa@webkit.org>
    228
  • trunk/Source/WebCore/dom/Document.cpp

    r222740 r222831  
    22482248        view()->willDestroyRenderTree();
    22492249
    2250 #if ENABLE(FULLSCREEN_API)
    2251     if (m_fullScreenRenderer)
    2252         setFullScreenRenderer(nullptr);
    2253 #endif
    2254 
    22552250    if (m_documentElement)
    22562251        RenderTreeUpdater::tearDownRenderers(*m_documentElement);
     
    60296024    ASSERT(page()->settings().fullScreenEnabled());
    60306025
    6031     unwrapFullScreenRenderer(m_fullScreenRenderer, m_fullScreenElement.get());
     6026    unwrapFullScreenRenderer(m_fullScreenRenderer.get(), m_fullScreenElement.get());
    60326027
    60336028    if (element)
     
    60966091    m_areKeysEnabledInFullScreen = false;
    60976092
    6098     unwrapFullScreenRenderer(m_fullScreenRenderer, m_fullScreenElement.get());
     6093    unwrapFullScreenRenderer(m_fullScreenRenderer.get(), m_fullScreenElement.get());
    60996094
    61006095    m_fullScreenElement = nullptr;
     
    61156110        return;
    61166111
    6117     if (renderer && m_savedPlaceholderRenderStyle)
    6118         renderer->createPlaceholder(WTFMove(m_savedPlaceholderRenderStyle), m_savedPlaceholderFrameRect);
    6119     else if (renderer && m_fullScreenRenderer && m_fullScreenRenderer->placeholder()) {
    6120         RenderBlock* placeholder = m_fullScreenRenderer->placeholder();
    6121         renderer->createPlaceholder(RenderStyle::clonePtr(placeholder->style()), placeholder->frameRect());
     6112    if (renderer) {
     6113        if (m_savedPlaceholderRenderStyle)
     6114            renderer->createPlaceholder(WTFMove(m_savedPlaceholderRenderStyle), m_savedPlaceholderFrameRect);
     6115        else if (m_fullScreenRenderer && m_fullScreenRenderer->placeholder()) {
     6116            auto* placeholder = m_fullScreenRenderer->placeholder();
     6117            renderer->createPlaceholder(RenderStyle::clonePtr(placeholder->style()), placeholder->frameRect());
     6118        }
    61226119    }
    61236120
    61246121    if (m_fullScreenRenderer)
    6125         m_fullScreenRenderer->destroy();
     6122        m_fullScreenRenderer->removeFromParentAndDestroy();
    61266123    ASSERT(!m_fullScreenRenderer);
    61276124
    6128     m_fullScreenRenderer = renderer;
    6129 }
    6130 
    6131 void Document::fullScreenRendererDestroyed()
    6132 {
    6133     m_fullScreenRenderer = nullptr;
     6125    m_fullScreenRenderer = makeWeakPtr(renderer);
    61346126}
    61356127
  • trunk/Source/WebCore/dom/Document.h

    r222613 r222831  
    11041104   
    11051105    void setFullScreenRenderer(RenderFullScreen*);
    1106     RenderFullScreen* fullScreenRenderer() const { return m_fullScreenRenderer; }
    1107     void fullScreenRendererDestroyed();
    1108    
     1106    RenderFullScreen* fullScreenRenderer() const { return m_fullScreenRenderer.get(); }
     1107
    11091108    void fullScreenChangeDelayTimerFired();
    11101109    bool fullScreenIsAllowedForElement(Element*) const;
     
    16201619    RefPtr<Element> m_fullScreenElement;
    16211620    Vector<RefPtr<Element>> m_fullScreenElementStack;
    1622     RenderFullScreen* m_fullScreenRenderer { nullptr };
     1621    WeakPtr<RenderFullScreen> m_fullScreenRenderer { nullptr };
    16231622    Timer m_fullScreenChangeDelayTimer;
    16241623    Deque<RefPtr<Node>> m_fullScreenChangeEventTargetQueue;
  • trunk/Source/WebCore/rendering/RenderFullScreen.cpp

    r222726 r222831  
    3737class RenderFullScreenPlaceholder final : public RenderBlockFlow {
    3838public:
    39     RenderFullScreenPlaceholder(RenderFullScreen& owner, RenderStyle&& style)
    40         : RenderBlockFlow(owner.document(), WTFMove(style))
    41         , m_owner(owner)
     39    RenderFullScreenPlaceholder(Document& document, RenderStyle&& style)
     40        : RenderBlockFlow(document, WTFMove(style))
    4241    {
    4342    }
     
    4544private:
    4645    bool isRenderFullScreenPlaceholder() const override { return true; }
    47     void willBeDestroyed() override;
    48     RenderFullScreen& m_owner;
    4946};
    50 
    51 void RenderFullScreenPlaceholder::willBeDestroyed()
    52 {
    53     m_owner.setPlaceholder(0);
    54     RenderBlockFlow::willBeDestroyed();
    55 }
    5647
    5748RenderFullScreen::RenderFullScreen(Document& document, RenderStyle&& style)
    5849    : RenderFlexibleBox(document, WTFMove(style))
    59     , m_placeholder(0)
    6050{
    6151    setReplaced(false);
     
    6555{
    6656    if (m_placeholder) {
    67         if (!m_placeholder->beingDestroyed())
    68             m_placeholder->destroy();
     57        m_placeholder->removeFromParentAndDestroy();
    6958        ASSERT(!m_placeholder);
    7059    }
    71 
    72     // RenderObjects are unretained, so notify the document (which holds a pointer to a RenderFullScreen)
    73     // if it's RenderFullScreen is destroyed.
    74     if (document().fullScreenRenderer() == this)
    75         document().fullScreenRendererDestroyed();
    7660
    7761    RenderFlexibleBox::willBeDestroyed();
     
    195179}
    196180
    197 void RenderFullScreen::setPlaceholder(RenderBlock* placeholder)
    198 {
    199     m_placeholder = placeholder;
    200 }
    201 
    202181void RenderFullScreen::createPlaceholder(std::unique_ptr<RenderStyle> style, const LayoutRect& frameRect)
    203182{
     
    215194        return;
    216195
    217     auto newPlaceholder = createRenderer<RenderFullScreenPlaceholder>(*this, WTFMove(*style));
     196    auto newPlaceholder = createRenderer<RenderFullScreenPlaceholder>(document(), WTFMove(*style));
    218197    newPlaceholder->initializeStyle();
    219198
    220     m_placeholder = newPlaceholder.get();
     199    m_placeholder = makeWeakPtr(*newPlaceholder);
    221200
    222201    parent()->addChild(WTFMove(newPlaceholder), this);
  • trunk/Source/WebCore/rendering/RenderFullScreen.h

    r222679 r222831  
    3737    const char* renderName() const override { return "RenderFullScreen"; }
    3838
    39     void setPlaceholder(RenderBlock*);
    40     RenderBlock* placeholder() { return m_placeholder; }
     39    RenderBlock* placeholder() { return m_placeholder.get(); }
    4140    void createPlaceholder(std::unique_ptr<RenderStyle>, const LayoutRect& frameRect);
    4241
     
    5352
    5453protected:
    55     RenderBlock* m_placeholder;
     54    WeakPtr<RenderBlock> m_placeholder;
    5655};
    5756
Note: See TracChangeset for help on using the changeset viewer.