Index: Source/WebCore/dom/Document.cpp |
=================================================================== |
--- Source/WebCore/dom/Document.cpp (revision 129270) |
+++ Source/WebCore/dom/Document.cpp (working copy) |
@@ -5743,6 +5743,10 @@ |
void Document::fullScreenChangeDelayTimerFired(Timer<Document>*) |
{ |
+ // Since we dispatch events in this function, it's possible that the |
+ // document will be detached and GC'd. We protect it here to make sure we |
+ // can finish the function successfully. |
+ RefPtr<Document> protectDocument(this); |
Deque<RefPtr<Node> > changeQueue; |
m_fullScreenChangeEventTargetQueue.swap(changeQueue); |
@@ -5750,6 +5754,9 @@ |
RefPtr<Node> node = changeQueue.takeFirst(); |
if (!node) |
node = documentElement(); |
+ // The dispatchEvent below may have blown away our documentElement. |
+ if (!node) |
+ continue; |
// 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. |
@@ -5766,6 +5773,9 @@ |
RefPtr<Node> node = errorQueue.takeFirst(); |
if (!node) |
node = documentElement(); |
+ // The dispatchEvent below may have blown away our documentElement. |
+ if (!node) |
+ continue; |
// 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. |