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

Unified Diff: Source/core/dom/FullscreenElementStack.cpp

Issue 18896003: [WIP] Migrate Fullscreen to use top layer instead of RenderFullScreen (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: fix some failing tests Created 6 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/dom/Document.cpp ('k') | Source/core/dom/RenderTreeBuilder.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/dom/FullscreenElementStack.cpp
diff --git a/Source/core/dom/FullscreenElementStack.cpp b/Source/core/dom/FullscreenElementStack.cpp
index 03f1982866201014a82f54c660e3f7cd74725317..ab4442f516af5a292468e6e6a8bc54bc1cdb109f 100644
--- a/Source/core/dom/FullscreenElementStack.cpp
+++ b/Source/core/dom/FullscreenElementStack.cpp
@@ -119,9 +119,6 @@ void FullscreenElementStack::documentWasDetached()
{
m_fullScreenChangeEventTargetQueue.clear();
m_fullScreenErrorEventTargetQueue.clear();
-
- if (m_fullScreenRenderer)
- setFullScreenRenderer(0);
}
void FullscreenElementStack::documentWasDisposed()
@@ -264,6 +261,13 @@ void FullscreenElementStack::webkitCancelFullScreen()
Vector<RefPtr<Element> > replacementFullscreenElementStack;
replacementFullscreenElementStack.append(fullscreenElementFrom(document()->topDocument()));
FullscreenElementStack* topFullscreenElementStack = from(document()->topDocument());
+ Vector<RefPtr<Element> >::iterator end = topFullscreenElementStack->m_fullScreenElementStack.end();
+ // FIXME: This will remove a modal full screen dialog from the top layer. Do
+ // we care about this case? Really we shouldn't have separate vectors for
+ // full screen element stack and top layer.
+ for (Vector<RefPtr<Element> >::iterator iter = topFullscreenElementStack->m_fullScreenElementStack.begin(); iter + 1 < end; ++iter) {
+ topFullscreenElementStack->document()->removeFromTopLayer(iter->get());
+ }
topFullscreenElementStack->m_fullScreenElementStack.swap(replacementFullscreenElementStack);
topFullscreenElementStack->webkitExitFullscreen();
}
@@ -358,25 +362,8 @@ void FullscreenElementStack::webkitWillEnterFullScreenForElement(Element* elemen
ASSERT(document()->settings()); // If we're active we must have settings.
ASSERT(document()->settings()->fullScreenEnabled());
- if (m_fullScreenRenderer)
- m_fullScreenRenderer->unwrapRenderer();
-
m_fullScreenElement = element;
-
- // Create a placeholder block for a the full-screen element, to keep the page from reflowing
- // when the element is removed from the normal flow. Only do this for a RenderBox, as only
- // a box will have a frameRect. The placeholder will be created in setFullScreenRenderer()
- // during layout.
- RenderObject* renderer = m_fullScreenElement->renderer();
- bool shouldCreatePlaceholder = renderer && renderer->isBox();
- if (shouldCreatePlaceholder) {
- m_savedPlaceholderFrameRect = toRenderBox(renderer)->frameRect();
- m_savedPlaceholderRenderStyle = RenderStyle::clone(renderer->style());
- }
-
- if (m_fullScreenElement != document()->documentElement())
- RenderFullScreen::wrapRenderer(renderer, renderer ? renderer->parent() : 0, document());
-
+ document()->addToTopLayer(element);
m_fullScreenElement->setContainsFullScreenElementOnAncestorsCrossingFrameBoundaries(true);
document()->recalcStyle(Force);
@@ -403,6 +390,7 @@ void FullscreenElementStack::webkitWillExitFullScreenForElement(Element*)
if (!document()->isActive())
return;
+ document()->removeFromTopLayer(m_fullScreenElement.get());
m_fullScreenElement->willStopBeingFullscreenElement();
}
@@ -418,9 +406,6 @@ void FullscreenElementStack::webkitDidExitFullScreenForElement(Element*)
m_areKeysEnabledInFullScreen = false;
- if (m_fullScreenRenderer)
- m_fullScreenRenderer->unwrapRenderer();
-
m_fullScreenElement = 0;
document()->setNeedsStyleRecalc();
@@ -433,30 +418,6 @@ void FullscreenElementStack::webkitDidExitFullScreenForElement(Element*)
from(exitingDocument)->m_fullScreenChangeDelayTimer.startOneShot(0);
}
-void FullscreenElementStack::setFullScreenRenderer(RenderFullScreen* renderer)
-{
- if (renderer == m_fullScreenRenderer)
- return;
-
- if (renderer && m_savedPlaceholderRenderStyle) {
- renderer->createPlaceholder(m_savedPlaceholderRenderStyle.release(), m_savedPlaceholderFrameRect);
- } else if (renderer && m_fullScreenRenderer && m_fullScreenRenderer->placeholder()) {
- RenderBlock* placeholder = m_fullScreenRenderer->placeholder();
- renderer->createPlaceholder(RenderStyle::clone(placeholder->style()), placeholder->frameRect());
- }
-
- if (m_fullScreenRenderer)
- m_fullScreenRenderer->destroy();
- ASSERT(!m_fullScreenRenderer);
-
- m_fullScreenRenderer = renderer;
-}
-
-void FullscreenElementStack::fullScreenRendererDestroyed()
-{
- m_fullScreenRenderer = 0;
-}
-
void FullscreenElementStack::fullScreenChangeDelayTimerFired(Timer<FullscreenElementStack>*)
{
// Since we dispatch events in this function, it's possible that the
@@ -528,6 +489,9 @@ void FullscreenElementStack::removeFullScreenElementOfSubtree(Node* node, bool a
void FullscreenElementStack::clearFullscreenElementStack()
{
+ Vector<RefPtr<Element> >::iterator end = m_fullScreenElementStack.end();
+ for (Vector<RefPtr<Element> >::iterator iter = m_fullScreenElementStack.begin(); iter != end; ++iter)
+ document()->removeFromTopLayer(iter->get());
m_fullScreenElementStack.clear();
}
@@ -536,11 +500,14 @@ void FullscreenElementStack::popFullscreenElementStack()
if (m_fullScreenElementStack.isEmpty())
return;
+ RefPtr<Element> element = m_fullScreenElementStack.last();
m_fullScreenElementStack.removeLast();
+ document()->removeFromTopLayer(element.get());
}
void FullscreenElementStack::pushFullscreenElementStack(Element* element)
{
+ document()->addToTopLayer(element);
m_fullScreenElementStack.append(element);
}
« no previous file with comments | « Source/core/dom/Document.cpp ('k') | Source/core/dom/RenderTreeBuilder.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698