Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(22)

Side by Side Diff: Source/WebCore/dom/Document.cpp

Issue 8218020: Merge 95371 - Don't detach elements from the render tree when entering fullscreen mode (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/874/
Patch Set: Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011 Apple Inc. All rights reserved. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011 Apple Inc. All rights reserved.
7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
8 * Copyright (C) 2008, 2009 Google Inc. All rights reserved. 8 * Copyright (C) 2008, 2009 Google Inc. All rights reserved.
9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) 9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
10 * 10 *
(...skipping 4864 matching lines...) Expand 10 before | Expand all | Expand 10 after
4875 return; 4875 return;
4876 4876
4877 page()->chrome()->client()->exitFullScreenForElement(m_fullScreenElement.get ()); 4877 page()->chrome()->client()->exitFullScreenForElement(m_fullScreenElement.get ());
4878 } 4878 }
4879 4879
4880 void Document::webkitWillEnterFullScreenForElement(Element* element) 4880 void Document::webkitWillEnterFullScreenForElement(Element* element)
4881 { 4881 {
4882 ASSERT(element); 4882 ASSERT(element);
4883 ASSERT(page() && page()->settings()->fullScreenEnabled()); 4883 ASSERT(page() && page()->settings()->fullScreenEnabled());
4884 4884
4885 if (m_fullScreenRenderer)
4886 m_fullScreenRenderer->unwrapRenderer();
4887
4885 m_fullScreenElement = element; 4888 m_fullScreenElement = element;
4886 4889
4887 // Create a placeholder block for a the full-screen element, to keep the pag e from reflowing 4890 // Create a placeholder block for a the full-screen element, to keep the pag e from reflowing
4888 // when the element is removed from the normal flow. Only do this for a Ren derBox, as only 4891 // when the element is removed from the normal flow. Only do this for a Ren derBox, as only
4889 // a box will have a frameRect. The placeholder will be created in setFullS creenRenderer() 4892 // a box will have a frameRect. The placeholder will be created in setFullS creenRenderer()
4890 // during layout. 4893 // during layout.
4891 RenderObject* renderer = m_fullScreenElement->renderer(); 4894 RenderObject* renderer = m_fullScreenElement->renderer();
4892 bool shouldCreatePlaceholder = renderer && renderer->isBox(); 4895 bool shouldCreatePlaceholder = renderer && renderer->isBox();
4893 if (shouldCreatePlaceholder) { 4896 if (shouldCreatePlaceholder) {
4894 m_savedPlaceholderFrameRect = toRenderBox(renderer)->frameRect(); 4897 m_savedPlaceholderFrameRect = toRenderBox(renderer)->frameRect();
4895 m_savedPlaceholderRenderStyle = RenderStyle::clone(renderer->style()); 4898 m_savedPlaceholderRenderStyle = RenderStyle::clone(renderer->style());
4896 } 4899 }
4897 4900
4898 if (m_fullScreenElement != documentElement()) 4901 if (m_fullScreenElement != documentElement())
4899 m_fullScreenElement->detach(); 4902 RenderFullScreen::wrapRenderer(renderer, this);
4900 4903
4901 m_fullScreenElement->setContainsFullScreenElementOnAncestorsCrossingFrameBou ndaries(true); 4904 m_fullScreenElement->setContainsFullScreenElementOnAncestorsCrossingFrameBou ndaries(true);
4902 4905
4903 recalcStyle(Force); 4906 recalcStyle(Force);
4904 4907
4905 if (m_fullScreenRenderer) { 4908 if (m_fullScreenRenderer) {
4906 setAnimatingFullScreen(true); 4909 setAnimatingFullScreen(true);
4907 #if USE(ACCELERATED_COMPOSITING) 4910 #if USE(ACCELERATED_COMPOSITING)
4908 view()->updateCompositingLayers(); 4911 view()->updateCompositingLayers();
4909 if (m_fullScreenRenderer->layer() && m_fullScreenRenderer->layer()->isCo mposited()) 4912 if (m_fullScreenRenderer->layer() && m_fullScreenRenderer->layer()->isCo mposited())
(...skipping 30 matching lines...) Expand all
4940 if (m_fullScreenRenderer->layer() && m_fullScreenRenderer->layer()->isCo mposited()) 4943 if (m_fullScreenRenderer->layer() && m_fullScreenRenderer->layer()->isCo mposited())
4941 page()->chrome()->client()->setRootFullScreenLayer(m_fullScreenRende rer->layer()->backing()->graphicsLayer()); 4944 page()->chrome()->client()->setRootFullScreenLayer(m_fullScreenRende rer->layer()->backing()->graphicsLayer());
4942 #endif 4945 #endif
4943 } 4946 }
4944 } 4947 }
4945 4948
4946 void Document::webkitDidExitFullScreenForElement(Element*) 4949 void Document::webkitDidExitFullScreenForElement(Element*)
4947 { 4950 {
4948 m_areKeysEnabledInFullScreen = false; 4951 m_areKeysEnabledInFullScreen = false;
4949 setAnimatingFullScreen(false); 4952 setAnimatingFullScreen(false);
4950 4953
4951 if (m_fullScreenRenderer) 4954 if (m_fullScreenRenderer)
4952 m_fullScreenRenderer->remove(); 4955 m_fullScreenRenderer->unwrapRenderer();
4953
4954 if (m_fullScreenElement != documentElement())
4955 m_fullScreenElement->detach();
4956 4956
4957 m_fullScreenChangeEventTargetQueue.append(m_fullScreenElement.release()); 4957 m_fullScreenChangeEventTargetQueue.append(m_fullScreenElement.release());
4958 setFullScreenRenderer(0);
4959 #if USE(ACCELERATED_COMPOSITING) 4958 #if USE(ACCELERATED_COMPOSITING)
4960 page()->chrome()->client()->setRootFullScreenLayer(0); 4959 page()->chrome()->client()->setRootFullScreenLayer(0);
4961 #endif 4960 #endif
4962 scheduleForcedStyleRecalc(); 4961 scheduleForcedStyleRecalc();
4963 4962
4964 m_fullScreenChangeDelayTimer.startOneShot(0); 4963 m_fullScreenChangeDelayTimer.startOneShot(0);
4965 } 4964 }
4966 4965
4967 void Document::setFullScreenRenderer(RenderFullScreen* renderer) 4966 void Document::setFullScreenRenderer(RenderFullScreen* renderer)
4968 { 4967 {
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
5168 if (!loader) 5167 if (!loader)
5169 return 0; 5168 return 0;
5170 5169
5171 if (m_frame->document() != this) 5170 if (m_frame->document() != this)
5172 return 0; 5171 return 0;
5173 5172
5174 return loader; 5173 return loader;
5175 } 5174 }
5176 5175
5177 } // namespace WebCore 5176 } // namespace WebCore
OLDNEW
« no previous file with comments | « LayoutTests/plugins/fullscreen-plugins-dont-reload-expected.txt ('k') | Source/WebCore/dom/NodeRenderingContext.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698