Index: Source/core/dom/FullscreenElementStack.cpp |
diff --git a/Source/core/dom/FullscreenElementStack.cpp b/Source/core/dom/FullscreenElementStack.cpp |
index 075c6f486ed48db1c41c59a0752adaf3678371c1..22449065918835c60cda2064a3584e8f24dc2f2f 100644 |
--- a/Source/core/dom/FullscreenElementStack.cpp |
+++ b/Source/core/dom/FullscreenElementStack.cpp |
@@ -556,29 +556,27 @@ void FullscreenElementStack::eventQueueTimerFired(Timer<FullscreenElementStack>* |
} |
} |
-void FullscreenElementStack::fullScreenElementRemoved() |
+void FullscreenElementStack::elementRemoved(Element& element) |
{ |
- m_fullScreenElement->setContainsFullScreenElementOnAncestorsCrossingFrameBoundaries(false); |
- fullyExitFullscreen(); |
-} |
- |
-void FullscreenElementStack::removeFullScreenElementOfSubtree(Node* node, bool amongChildrenOnly) |
-{ |
- if (!m_fullScreenElement) |
- return; |
+ // If an element |element| in a fullscreen element stack is removed from a document |document|, |
+ // run these steps: |
- // If the node isn't in a document it can't have a fullscreen'd child. |
- if (!node->inDocument()) |
+ // 1. If |element| was at the top of |document|'s fullscreen element stack, act as if the |
+ // exitFullscreen() method was invoked on that document. |
+ if (fullscreenElement() == &element) { |
+ exitFullscreen(); |
return; |
+ } |
- bool elementInSubtree = false; |
- if (amongChildrenOnly) |
- elementInSubtree = m_fullScreenElement->isDescendantOf(node); |
- else |
- elementInSubtree = (m_fullScreenElement == node) || m_fullScreenElement->isDescendantOf(node); |
+ // 2. Otherwise, remove |element| from |document|'s fullscreen element stack. |
+ for (size_t i = 0; i < m_fullScreenElementStack.size(); ++i) { |
+ if (m_fullScreenElementStack[i].first.get() == &element) { |
+ m_fullScreenElementStack.remove(i); |
+ return; |
+ } |
+ } |
- if (elementInSubtree) |
- fullScreenElementRemoved(); |
+ // NOTE: |element| was not in the fullscreen element stack. |
} |
void FullscreenElementStack::clearFullscreenElementStack() |