Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1276)

Side by Side Diff: Source/WebCore/dom/Document.cpp

Issue 10969052: Merge 129270 - Crash in WebCore::Document::fullScreenChangeDelayTimerFired (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/1229/
Patch Set: Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r ights reserved. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r ights reserved.
7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. 8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved.
9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) 9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. 10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved.
(...skipping 5725 matching lines...) Expand 10 before | Expand all | Expand 10 after
5736 if (!m_fullScreenRenderer) 5736 if (!m_fullScreenRenderer)
5737 return; 5737 return;
5738 5738
5739 RefPtr<RenderStyle> newStyle = RenderStyle::clone(m_fullScreenRenderer->styl e()); 5739 RefPtr<RenderStyle> newStyle = RenderStyle::clone(m_fullScreenRenderer->styl e());
5740 newStyle->setBackgroundColor(backgroundColor); 5740 newStyle->setBackgroundColor(backgroundColor);
5741 m_fullScreenRenderer->setStyle(newStyle); 5741 m_fullScreenRenderer->setStyle(newStyle);
5742 } 5742 }
5743 5743
5744 void Document::fullScreenChangeDelayTimerFired(Timer<Document>*) 5744 void Document::fullScreenChangeDelayTimerFired(Timer<Document>*)
5745 { 5745 {
5746 // Since we dispatch events in this function, it's possible that the
5747 // document will be detached and GC'd. We protect it here to make sure we
5748 // can finish the function successfully.
5749 RefPtr<Document> protectDocument(this);
5746 Deque<RefPtr<Node> > changeQueue; 5750 Deque<RefPtr<Node> > changeQueue;
5747 m_fullScreenChangeEventTargetQueue.swap(changeQueue); 5751 m_fullScreenChangeEventTargetQueue.swap(changeQueue);
5748 5752
5749 while (!changeQueue.isEmpty()) { 5753 while (!changeQueue.isEmpty()) {
5750 RefPtr<Node> node = changeQueue.takeFirst(); 5754 RefPtr<Node> node = changeQueue.takeFirst();
5751 if (!node) 5755 if (!node)
5752 node = documentElement(); 5756 node = documentElement();
5757 // The dispatchEvent below may have blown away our documentElement.
5758 if (!node)
5759 continue;
5753 5760
5754 // If the element was removed from our tree, also message the documentEl ement. Since we may 5761 // If the element was removed from our tree, also message the documentEl ement. Since we may
5755 // have a document hierarchy, check that node isn't in another document. 5762 // have a document hierarchy, check that node isn't in another document.
5756 if (!contains(node.get()) && !node->inDocument()) 5763 if (!contains(node.get()) && !node->inDocument())
5757 changeQueue.append(documentElement()); 5764 changeQueue.append(documentElement());
5758 5765
5759 node->dispatchEvent(Event::create(eventNames().webkitfullscreenchangeEve nt, true, false)); 5766 node->dispatchEvent(Event::create(eventNames().webkitfullscreenchangeEve nt, true, false));
5760 } 5767 }
5761 5768
5762 Deque<RefPtr<Node> > errorQueue; 5769 Deque<RefPtr<Node> > errorQueue;
5763 m_fullScreenErrorEventTargetQueue.swap(errorQueue); 5770 m_fullScreenErrorEventTargetQueue.swap(errorQueue);
5764 5771
5765 while (!errorQueue.isEmpty()) { 5772 while (!errorQueue.isEmpty()) {
5766 RefPtr<Node> node = errorQueue.takeFirst(); 5773 RefPtr<Node> node = errorQueue.takeFirst();
5767 if (!node) 5774 if (!node)
5768 node = documentElement(); 5775 node = documentElement();
5776 // The dispatchEvent below may have blown away our documentElement.
5777 if (!node)
5778 continue;
5769 5779
5770 // If the element was removed from our tree, also message the documentEl ement. Since we may 5780 // If the element was removed from our tree, also message the documentEl ement. Since we may
5771 // have a document hierarchy, check that node isn't in another document. 5781 // have a document hierarchy, check that node isn't in another document.
5772 if (!contains(node.get()) && !node->inDocument()) 5782 if (!contains(node.get()) && !node->inDocument())
5773 errorQueue.append(documentElement()); 5783 errorQueue.append(documentElement());
5774 5784
5775 node->dispatchEvent(Event::create(eventNames().webkitfullscreenerrorEven t, true, false)); 5785 node->dispatchEvent(Event::create(eventNames().webkitfullscreenerrorEven t, true, false));
5776 } 5786 }
5777 } 5787 }
5778 5788
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after
6152 #if ENABLE(UNDO_MANAGER) 6162 #if ENABLE(UNDO_MANAGER)
6153 PassRefPtr<UndoManager> Document::undoManager() 6163 PassRefPtr<UndoManager> Document::undoManager()
6154 { 6164 {
6155 if (!m_undoManager) 6165 if (!m_undoManager)
6156 m_undoManager = UndoManager::create(this); 6166 m_undoManager = UndoManager::create(this);
6157 return m_undoManager; 6167 return m_undoManager;
6158 } 6168 }
6159 #endif 6169 #endif
6160 6170
6161 } // namespace WebCore 6171 } // namespace WebCore
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698