Chromium Code Reviews| Index: Source/core/dom/Fullscreen.cpp |
| diff --git a/Source/core/dom/Fullscreen.cpp b/Source/core/dom/Fullscreen.cpp |
| index 07161b2523d4083a4500da08d7fa22bdc7b64615..f1cead012f53579daf3a1eb8e323403eec014c3c 100644 |
| --- a/Source/core/dom/Fullscreen.cpp |
| +++ b/Source/core/dom/Fullscreen.cpp |
| @@ -28,8 +28,10 @@ |
| #include "config.h" |
| #include "core/dom/Fullscreen.h" |
| +#include "bindings/core/v8/ExceptionMessages.h" |
| #include "core/HTMLNames.h" |
| #include "core/dom/Document.h" |
| +#include "core/dom/ElementTraversal.h" |
| #include "core/events/Event.h" |
| #include "core/frame/FrameHost.h" |
| #include "core/frame/LocalFrame.h" |
| @@ -40,7 +42,9 @@ |
| #include "core/page/Chrome.h" |
| #include "core/page/ChromeClient.h" |
| #include "core/page/EventHandler.h" |
| -#include "core/rendering/RenderFullScreen.h" |
| +#include "core/page/Page.h" |
| +#include "core/rendering/RenderObject.h" |
| +#include "core/rendering/style/RenderStyle.h" |
| #include "platform/UserGestureIndicator.h" |
| namespace blink { |
| @@ -161,7 +165,6 @@ bool Fullscreen::isFullScreen(Document& document) |
| Fullscreen::Fullscreen(Document& document) |
| : DocumentLifecycleObserver(&document) |
| - , m_fullScreenRenderer(nullptr) |
| , m_eventQueueTimer(this, &Fullscreen::eventQueueTimerFired) |
| { |
| document.setHasFullscreenSupplement(); |
| @@ -180,9 +183,6 @@ void Fullscreen::documentWasDetached() |
| { |
| m_eventQueue.clear(); |
| - if (m_fullScreenRenderer) |
| - m_fullScreenRenderer->destroy(); |
| - |
| #if ENABLE(OILPAN) |
| m_fullScreenElement = nullptr; |
| m_fullScreenElementStack.clear(); |
| @@ -419,25 +419,10 @@ void Fullscreen::didEnterFullScreenForElement(Element* element) |
| if (!document()->isActive()) |
| return; |
| - 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()); |
| - |
| + // FIXME: Why can we get here without calling pushFullscreenElementStack? |
|
philipj_slow
2015/02/12 08:19:16
Not sure, but possibly it's when Chromium toggles
|
| + document()->addToTopLayer(m_fullScreenElement.get()); |
| m_fullScreenElement->setContainsFullScreenElementOnAncestorsCrossingFrameBoundaries(true); |
| // FIXME: This should not call updateStyleIfNeeded. |
| @@ -460,13 +445,11 @@ void Fullscreen::didExitFullScreenForElement(Element*) |
| if (!document()->isActive()) |
| return; |
| + document()->removeFromTopLayer(m_fullScreenElement.get()); |
| m_fullScreenElement->willStopBeingFullscreenElement(); |
| m_fullScreenElement->setContainsFullScreenElementOnAncestorsCrossingFrameBoundaries(false); |
| - if (m_fullScreenRenderer) |
| - m_fullScreenRenderer->unwrapRenderer(); |
| - |
| m_fullScreenElement = nullptr; |
| document()->setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTracing::create(StyleChangeReason::FullScreen)); |
| @@ -483,30 +466,6 @@ void Fullscreen::didExitFullScreenForElement(Element*) |
| from(*exitingDocument).m_eventQueueTimer.startOneShot(0, FROM_HERE); |
| } |
| -void Fullscreen::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->unwrapRenderer(); |
| - ASSERT(!m_fullScreenRenderer); |
| - |
| - m_fullScreenRenderer = renderer; |
| -} |
| - |
| -void Fullscreen::fullScreenRendererDestroyed() |
| -{ |
| - m_fullScreenRenderer = nullptr; |
| -} |
| - |
| void Fullscreen::enqueueChangeEvent(Document& document, RequestType requestType) |
| { |
| RefPtrWillBeRawPtr<Event> event; |
| @@ -593,19 +552,20 @@ void Fullscreen::popFullscreenElementStack() |
| if (m_fullScreenElementStack.isEmpty()) |
| return; |
| + document()->removeFromTopLayer(m_fullScreenElementStack.last().first.get()); |
| m_fullScreenElementStack.removeLast(); |
| } |
| void Fullscreen::pushFullscreenElementStack(Element& element, RequestType requestType) |
| { |
| m_fullScreenElementStack.append(std::make_pair(&element, requestType)); |
| + document()->addToTopLayer(&element); |
| } |
| void Fullscreen::trace(Visitor* visitor) |
| { |
| visitor->trace(m_fullScreenElement); |
| visitor->trace(m_fullScreenElementStack); |
| - visitor->trace(m_fullScreenRenderer); |
| visitor->trace(m_eventQueue); |
| DocumentSupplement::trace(visitor); |
| } |