Modified: branches/chromium/1229/Source/WebCore/dom/Document.cpp (126049 => 126050)
--- branches/chromium/1229/Source/WebCore/dom/Document.cpp 2012-08-20 18:55:12 UTC (rev 126049)
+++ branches/chromium/1229/Source/WebCore/dom/Document.cpp 2012-08-20 19:04:24 UTC (rev 126050)
@@ -5,7 +5,7 @@
* (C) 2006 Alexey Proskuryakov ([email protected])
* Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All rights reserved.
* Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
- * Copyright (C) 2008, 2009, 2011 Google Inc. All rights reserved.
+ * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved.
* Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
* Copyright (C) Research In Motion Limited 2010-2011. All rights reserved.
*
@@ -5540,15 +5540,14 @@
// 2. Queue a task to fire an event named fullscreenchange with its bubbles attribute set to true
// on doc.
- Node* target = currentDoc->m_fullScreenElement.get();
- if (!target)
- target = currentDoc;
addDocumentToFullScreenChangeEventQueue(currentDoc);
// 3. If doc's fullscreen element stack is empty and doc's browsing context has a browsing context
// container, set doc to that browsing context container's node document.
- if (!newTop && currentDoc->ownerElement())
+ if (!newTop && currentDoc->ownerElement()) {
currentDoc = currentDoc->ownerElement()->document();
+ continue;
+ }
// 4. Otherwise, set doc to null.
currentDoc = 0;
@@ -5661,7 +5660,13 @@
m_fullScreenElement = 0;
scheduleForcedStyleRecalc();
- m_fullScreenChangeDelayTimer.startOneShot(0);
+ // When webkitCancelFullScreen is called, we call webkitExitFullScreen on the topDocument(). That
+ // means that the events will be queued there. So if we have no events here, start the timer on
+ // the exiting document.
+ Document* exitingDocument = this;
+ if (m_fullScreenChangeEventTargetQueue.isEmpty() && m_fullScreenErrorEventTargetQueue.isEmpty())
+ exitingDocument = topDocument();
+ exitingDocument->m_fullScreenChangeDelayTimer.startOneShot(0);
}
void Document::setFullScreenRenderer(RenderFullScreen* renderer)
@@ -5732,8 +5737,9 @@
if (!node)
node = documentElement();
- // If the element was removed from our tree, also message the documentElement.
- if (!contains(node.get()))
+ // If the element was removed from our tree, also message the documentElement. Since we may
+ // have a document hierarchy, check that node isn't in another document.
+ if (!contains(node.get()) && !node->inDocument())
changeQueue.append(documentElement());
node->dispatchEvent(Event::create(eventNames().webkitfullscreenchangeEvent, true, false));
@@ -5747,8 +5753,9 @@
if (!node)
node = documentElement();
- // If the node was removed from our tree, also message the documentElement.
- if (!contains(node.get()))
+ // If the element was removed from our tree, also message the documentElement. Since we may
+ // have a document hierarchy, check that node isn't in another document.
+ if (!contains(node.get()) && !node->inDocument())
errorQueue.append(documentElement());
node->dispatchEvent(Event::create(eventNames().webkitfullscreenerrorEvent, true, false));