Changeset 95371 in webkit
- Timestamp:
- Sep 16, 2011 11:07:42 PM (13 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r95369 r95371 1 2011-09-16 Jeremy Apthorp <jeremya@chromium.org> and James Kozianski <koz@chromium.org> 2 3 Don't detach elements from the render tree when entering fullscreen mode 4 https://bugs.webkit.org/show_bug.cgi?id=66531 5 6 Test that the plugin is not reloaded when entering fullscreen. 7 8 Reviewed by James Robinson. 9 10 * plugins/fullscreen-plugins-dont-reload-expected.txt: Added. 11 * plugins/fullscreen-plugins-dont-reload.html: Added. 12 1 13 2011-09-16 Jochen Eisinger <jochen@chromium.org> 2 14 -
trunk/Source/WebCore/ChangeLog
r95369 r95371 1 2011-09-16 Jeremy Apthorp <jeremya@chromium.org> and James Kozianski <koz@chromium.org> 2 3 Don't detach elements from the render tree when entering fullscreen mode 4 https://bugs.webkit.org/show_bug.cgi?id=66531 5 6 This prevents plugin instances from being destroyed and reinstantiated 7 when entering fullscreen mode. 8 9 Reviewed by James Robinson. 10 11 Test: plugins/fullscreen-plugins-dont-reload.html 12 13 * dom/Document.cpp: 14 (WebCore::Document::webkitWillEnterFullScreenForElement): 15 (WebCore::Document::webkitDidExitFullScreenForElement): 16 * dom/NodeRenderingContext.cpp: 17 (WebCore::NodeRendererFactory::createRendererIfNeeded): 18 * rendering/RenderFullScreen.cpp: 19 (createFullScreenStyle): 20 (RenderFullScreen::wrapRenderer): 21 (RenderFullScreen::unwrapRenderer): 22 * rendering/RenderFullScreen.h: 23 1 24 2011-09-16 Jochen Eisinger <jochen@chromium.org> 2 25 -
trunk/Source/WebCore/dom/Document.cpp
r95271 r95371 4878 4878 ASSERT(page() && page()->settings()->fullScreenEnabled()); 4879 4879 4880 if (m_fullScreenRenderer) 4881 m_fullScreenRenderer->unwrapRenderer(); 4882 4880 4883 m_fullScreenElement = element; 4881 4884 … … 4892 4895 4893 4896 if (m_fullScreenElement != documentElement()) 4894 m_fullScreenElement->detach();4897 RenderFullScreen::wrapRenderer(renderer, this); 4895 4898 4896 4899 m_fullScreenElement->setContainsFullScreenElementOnAncestorsCrossingFrameBoundaries(true); … … 4943 4946 m_areKeysEnabledInFullScreen = false; 4944 4947 setAnimatingFullScreen(false); 4945 4948 4946 4949 if (m_fullScreenRenderer) 4947 m_fullScreenRenderer->remove(); 4948 4949 if (m_fullScreenElement != documentElement()) 4950 m_fullScreenElement->detach(); 4950 m_fullScreenRenderer->unwrapRenderer(); 4951 4951 4952 4952 m_fullScreenChangeEventTargetQueue.append(m_fullScreenElement.release()); 4953 setFullScreenRenderer(0);4954 4953 #if USE(ACCELERATED_COMPOSITING) 4955 4954 page()->chrome()->client()->setRootFullScreenLayer(0); -
trunk/Source/WebCore/dom/NodeRenderingContext.cpp
r94938 r95371 304 304 } 305 305 306 #if ENABLE(FULLSCREEN_API)307 static RenderObject* wrapWithRenderFullScreen(RenderObject* object, Document* document)308 {309 RenderFullScreen* fullscreenRenderer = new (document->renderArena()) RenderFullScreen(document);310 fullscreenRenderer->setStyle(RenderFullScreen::createFullScreenStyle());311 // It's possible that we failed to create the new render and end up wrapping nothing.312 // We'll end up displaying a black screen, but Jer says this is expected.313 if (object)314 fullscreenRenderer->addChild(object);315 document->setFullScreenRenderer(fullscreenRenderer);316 if (fullscreenRenderer->placeholder())317 return fullscreenRenderer->placeholder();318 return fullscreenRenderer;319 }320 #endif321 322 306 void NodeRendererFactory::createRendererIfNeeded() 323 307 { … … 356 340 #if ENABLE(FULLSCREEN_API) 357 341 if (document->webkitIsFullScreen() && document->webkitCurrentFullScreenElement() == node) 358 newRenderer = wrapWithRenderFullScreen(newRenderer, document);342 newRenderer = RenderFullScreen::wrapRenderer(newRenderer, document); 359 343 #endif 360 344 -
trunk/Source/WebCore/rendering/RenderFullScreen.cpp
r94513 r95371 80 80 } 81 81 82 PassRefPtr<RenderStyle> RenderFullScreen::createFullScreenStyle()82 static PassRefPtr<RenderStyle> createFullScreenStyle() 83 83 { 84 84 RefPtr<RenderStyle> fullscreenStyle = RenderStyle::createDefaultStyle(); … … 98 98 fullscreenStyle->setWidth(Length(100.0, Percent)); 99 99 fullscreenStyle->setHeight(Length(100.0, Percent)); 100 fullscreenStyle->setLeft(Length(0, Fixed));101 fullscreenStyle->setTop(Length(0, Fixed));100 fullscreenStyle->setLeft(Length(0, WebCore::Fixed)); 101 fullscreenStyle->setTop(Length(0, WebCore::Fixed)); 102 102 103 103 fullscreenStyle->setBackgroundColor(Color::black); 104 104 105 105 return fullscreenStyle.release(); 106 } 107 108 RenderObject* RenderFullScreen::wrapRenderer(RenderObject* object, Document* document) 109 { 110 RenderFullScreen* fullscreenRenderer = new (document->renderArena()) RenderFullScreen(document); 111 fullscreenRenderer->setStyle(createFullScreenStyle()); 112 if (object) { 113 if (RenderObject* parent = object->parent()) { 114 parent->addChild(fullscreenRenderer, object); 115 object->remove(); 116 } 117 fullscreenRenderer->addChild(object); 118 } 119 document->setFullScreenRenderer(fullscreenRenderer); 120 if (fullscreenRenderer->placeholder()) 121 return fullscreenRenderer->placeholder(); 122 return fullscreenRenderer; 123 } 124 125 void RenderFullScreen::unwrapRenderer() 126 { 127 RenderObject* wrappedRenderer = firstChild(); 128 if (wrappedRenderer) { 129 wrappedRenderer->remove(); 130 RenderObject* holder = placeholder() ? placeholder() : this; 131 RenderObject* parent = holder->parent(); 132 if (parent) 133 parent->addChild(wrappedRenderer, holder); 134 } 135 remove(); 136 document()->setFullScreenRenderer(0); 106 137 } 107 138 -
trunk/Source/WebCore/rendering/RenderFullScreen.h
r94513 r95371 42 42 void createPlaceholder(PassRefPtr<RenderStyle>, const IntRect& frameRect); 43 43 44 static PassRefPtr<RenderStyle> createFullScreenStyle(); 44 45 static RenderObject* wrapRenderer(RenderObject* renderer, Document*); 46 void unwrapRenderer(); 45 47 46 48 private:
Note: See TracChangeset
for help on using the changeset viewer.