Changeset 222831 in webkit
- Timestamp:
- Oct 3, 2017, 11:54:20 PM (8 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r222830 r222831 1 2017-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 1 27 2017-10-03 Ryosuke Niwa <rniwa@webkit.org> 2 28 -
trunk/Source/WebCore/dom/Document.cpp
r222740 r222831 2248 2248 view()->willDestroyRenderTree(); 2249 2249 2250 #if ENABLE(FULLSCREEN_API)2251 if (m_fullScreenRenderer)2252 setFullScreenRenderer(nullptr);2253 #endif2254 2255 2250 if (m_documentElement) 2256 2251 RenderTreeUpdater::tearDownRenderers(*m_documentElement); … … 6029 6024 ASSERT(page()->settings().fullScreenEnabled()); 6030 6025 6031 unwrapFullScreenRenderer(m_fullScreenRenderer , m_fullScreenElement.get());6026 unwrapFullScreenRenderer(m_fullScreenRenderer.get(), m_fullScreenElement.get()); 6032 6027 6033 6028 if (element) … … 6096 6091 m_areKeysEnabledInFullScreen = false; 6097 6092 6098 unwrapFullScreenRenderer(m_fullScreenRenderer , m_fullScreenElement.get());6093 unwrapFullScreenRenderer(m_fullScreenRenderer.get(), m_fullScreenElement.get()); 6099 6094 6100 6095 m_fullScreenElement = nullptr; … … 6115 6110 return; 6116 6111 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 } 6122 6119 } 6123 6120 6124 6121 if (m_fullScreenRenderer) 6125 m_fullScreenRenderer-> destroy();6122 m_fullScreenRenderer->removeFromParentAndDestroy(); 6126 6123 ASSERT(!m_fullScreenRenderer); 6127 6124 6128 m_fullScreenRenderer = renderer; 6129 } 6130 6131 void Document::fullScreenRendererDestroyed() 6132 { 6133 m_fullScreenRenderer = nullptr; 6125 m_fullScreenRenderer = makeWeakPtr(renderer); 6134 6126 } 6135 6127 -
trunk/Source/WebCore/dom/Document.h
r222613 r222831 1104 1104 1105 1105 void setFullScreenRenderer(RenderFullScreen*); 1106 RenderFullScreen* fullScreenRenderer() const { return m_fullScreenRenderer; } 1107 void fullScreenRendererDestroyed(); 1108 1106 RenderFullScreen* fullScreenRenderer() const { return m_fullScreenRenderer.get(); } 1107 1109 1108 void fullScreenChangeDelayTimerFired(); 1110 1109 bool fullScreenIsAllowedForElement(Element*) const; … … 1620 1619 RefPtr<Element> m_fullScreenElement; 1621 1620 Vector<RefPtr<Element>> m_fullScreenElementStack; 1622 RenderFullScreen*m_fullScreenRenderer { nullptr };1621 WeakPtr<RenderFullScreen> m_fullScreenRenderer { nullptr }; 1623 1622 Timer m_fullScreenChangeDelayTimer; 1624 1623 Deque<RefPtr<Node>> m_fullScreenChangeEventTargetQueue; -
trunk/Source/WebCore/rendering/RenderFullScreen.cpp
r222726 r222831 37 37 class RenderFullScreenPlaceholder final : public RenderBlockFlow { 38 38 public: 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)) 42 41 { 43 42 } … … 45 44 private: 46 45 bool isRenderFullScreenPlaceholder() const override { return true; } 47 void willBeDestroyed() override;48 RenderFullScreen& m_owner;49 46 }; 50 51 void RenderFullScreenPlaceholder::willBeDestroyed()52 {53 m_owner.setPlaceholder(0);54 RenderBlockFlow::willBeDestroyed();55 }56 47 57 48 RenderFullScreen::RenderFullScreen(Document& document, RenderStyle&& style) 58 49 : RenderFlexibleBox(document, WTFMove(style)) 59 , m_placeholder(0)60 50 { 61 51 setReplaced(false); … … 65 55 { 66 56 if (m_placeholder) { 67 if (!m_placeholder->beingDestroyed()) 68 m_placeholder->destroy(); 57 m_placeholder->removeFromParentAndDestroy(); 69 58 ASSERT(!m_placeholder); 70 59 } 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();76 60 77 61 RenderFlexibleBox::willBeDestroyed(); … … 195 179 } 196 180 197 void RenderFullScreen::setPlaceholder(RenderBlock* placeholder)198 {199 m_placeholder = placeholder;200 }201 202 181 void RenderFullScreen::createPlaceholder(std::unique_ptr<RenderStyle> style, const LayoutRect& frameRect) 203 182 { … … 215 194 return; 216 195 217 auto newPlaceholder = createRenderer<RenderFullScreenPlaceholder>( *this, WTFMove(*style));196 auto newPlaceholder = createRenderer<RenderFullScreenPlaceholder>(document(), WTFMove(*style)); 218 197 newPlaceholder->initializeStyle(); 219 198 220 m_placeholder = newPlaceholder.get();199 m_placeholder = makeWeakPtr(*newPlaceholder); 221 200 222 201 parent()->addChild(WTFMove(newPlaceholder), this); -
trunk/Source/WebCore/rendering/RenderFullScreen.h
r222679 r222831 37 37 const char* renderName() const override { return "RenderFullScreen"; } 38 38 39 void setPlaceholder(RenderBlock*); 40 RenderBlock* placeholder() { return m_placeholder; } 39 RenderBlock* placeholder() { return m_placeholder.get(); } 41 40 void createPlaceholder(std::unique_ptr<RenderStyle>, const LayoutRect& frameRect); 42 41 … … 53 52 54 53 protected: 55 RenderBlock*m_placeholder;54 WeakPtr<RenderBlock> m_placeholder; 56 55 }; 57 56
Note:
See TracChangeset
for help on using the changeset viewer.