| Index: Source/WebCore/dom/Document.cpp
|
| ===================================================================
|
| --- Source/WebCore/dom/Document.cpp (revision 126049)
|
| +++ Source/WebCore/dom/Document.cpp (working copy)
|
| @@ -5,7 +5,7 @@
|
| * (C) 2006 Alexey Proskuryakov (ap@webkit.org)
|
| * 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));
|
|
|