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

Side by Side Diff: Source/core/dom/FullscreenElementStack.cpp

Issue 262093006: Oilpan: Make the Node hierarchy RefCountedGarbageCollected instead of TreeShared. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Another build fix. Created 6 years, 7 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 | Annotate | Revision Log
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, 2010, 2012 Apple Inc. All r ights reserved. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 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) 2010 Nokia Corporation and/or its subsidiary(-ies) 8 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
9 * Copyright (C) 2013 Google Inc. All rights reserved. 9 * Copyright (C) 2013 Google Inc. All rights reserved.
10 * 10 *
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 { 261 {
262 // The Mozilla "cancelFullScreen()" API behaves like the W3C "fully exit ful lscreen" behavior, which 262 // The Mozilla "cancelFullScreen()" API behaves like the W3C "fully exit ful lscreen" behavior, which
263 // is defined as: 263 // is defined as:
264 // "To fully exit fullscreen act as if the exitFullscreen() method was invok ed on the top-level browsing 264 // "To fully exit fullscreen act as if the exitFullscreen() method was invok ed on the top-level browsing
265 // context's document and subsequently empty that document's fullscreen elem ent stack." 265 // context's document and subsequently empty that document's fullscreen elem ent stack."
266 if (!fullscreenElementFrom(document()->topDocument())) 266 if (!fullscreenElementFrom(document()->topDocument()))
267 return; 267 return;
268 268
269 // To achieve that aim, remove all the elements from the top document's stac k except for the first before 269 // To achieve that aim, remove all the elements from the top document's stac k except for the first before
270 // calling webkitExitFullscreen(): 270 // calling webkitExitFullscreen():
271 Vector<RefPtr<Element> > replacementFullscreenElementStack; 271 WillBeHeapVector<RefPtrWillBeMember<Element> > replacementFullscreenElementS tack;
272 replacementFullscreenElementStack.append(fullscreenElementFrom(document()->t opDocument())); 272 replacementFullscreenElementStack.append(fullscreenElementFrom(document()->t opDocument()));
273 FullscreenElementStack& topFullscreenElementStack = from(document()->topDocu ment()); 273 FullscreenElementStack& topFullscreenElementStack = from(document()->topDocu ment());
274 topFullscreenElementStack.m_fullScreenElementStack.swap(replacementFullscree nElementStack); 274 topFullscreenElementStack.m_fullScreenElementStack.swap(replacementFullscree nElementStack);
275 topFullscreenElementStack.webkitExitFullscreen(); 275 topFullscreenElementStack.webkitExitFullscreen();
276 } 276 }
277 277
278 void FullscreenElementStack::webkitExitFullscreen() 278 void FullscreenElementStack::webkitExitFullscreen()
279 { 279 {
280 // The exitFullscreen() method must run these steps: 280 // The exitFullscreen() method must run these steps:
281 281
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 void FullscreenElementStack::fullScreenRendererDestroyed() 470 void FullscreenElementStack::fullScreenRendererDestroyed()
471 { 471 {
472 m_fullScreenRenderer = 0; 472 m_fullScreenRenderer = 0;
473 } 473 }
474 474
475 void FullscreenElementStack::fullScreenChangeDelayTimerFired(Timer<FullscreenEle mentStack>*) 475 void FullscreenElementStack::fullScreenChangeDelayTimerFired(Timer<FullscreenEle mentStack>*)
476 { 476 {
477 // Since we dispatch events in this function, it's possible that the 477 // Since we dispatch events in this function, it's possible that the
478 // document will be detached and GC'd. We protect it here to make sure we 478 // document will be detached and GC'd. We protect it here to make sure we
479 // can finish the function successfully. 479 // can finish the function successfully.
480 RefPtr<Document> protectDocument(document()); 480 RefPtrWillBeRawPtr<Document> protectDocument(document());
481 Deque<RefPtr<Node> > changeQueue; 481 WillBeHeapDeque<RefPtrWillBeMember<Node> > changeQueue;
482 m_fullScreenChangeEventTargetQueue.swap(changeQueue); 482 m_fullScreenChangeEventTargetQueue.swap(changeQueue);
483 Deque<RefPtr<Node> > errorQueue; 483 WillBeHeapDeque<RefPtrWillBeMember<Node> > errorQueue;
484 m_fullScreenErrorEventTargetQueue.swap(errorQueue); 484 m_fullScreenErrorEventTargetQueue.swap(errorQueue);
485 485
486 while (!changeQueue.isEmpty()) { 486 while (!changeQueue.isEmpty()) {
487 RefPtr<Node> node = changeQueue.takeFirst(); 487 RefPtrWillBeRawPtr<Node> node = changeQueue.takeFirst();
488 if (!node) 488 if (!node)
489 node = document()->documentElement(); 489 node = document()->documentElement();
490 // The dispatchEvent below may have blown away our documentElement. 490 // The dispatchEvent below may have blown away our documentElement.
491 if (!node) 491 if (!node)
492 continue; 492 continue;
493 493
494 // If the element was removed from our tree, also message the documentEl ement. Since we may 494 // If the element was removed from our tree, also message the documentEl ement. Since we may
495 // have a document hierarchy, check that node isn't in another document. 495 // have a document hierarchy, check that node isn't in another document.
496 if (!document()->contains(node.get()) && !node->inDocument()) 496 if (!document()->contains(node.get()) && !node->inDocument())
497 changeQueue.append(document()->documentElement()); 497 changeQueue.append(document()->documentElement());
498 498
499 node->dispatchEvent(Event::createBubble(EventTypeNames::webkitfullscreen change)); 499 node->dispatchEvent(Event::createBubble(EventTypeNames::webkitfullscreen change));
500 } 500 }
501 501
502 while (!errorQueue.isEmpty()) { 502 while (!errorQueue.isEmpty()) {
503 RefPtr<Node> node = errorQueue.takeFirst(); 503 RefPtrWillBeRawPtr<Node> node = errorQueue.takeFirst();
504 if (!node) 504 if (!node)
505 node = document()->documentElement(); 505 node = document()->documentElement();
506 // The dispatchEvent below may have blown away our documentElement. 506 // The dispatchEvent below may have blown away our documentElement.
507 if (!node) 507 if (!node)
508 continue; 508 continue;
509 509
510 // If the element was removed from our tree, also message the documentEl ement. Since we may 510 // If the element was removed from our tree, also message the documentEl ement. Since we may
511 // have a document hierarchy, check that node isn't in another document. 511 // have a document hierarchy, check that node isn't in another document.
512 if (!document()->contains(node.get()) && !node->inDocument()) 512 if (!document()->contains(node.get()) && !node->inDocument())
513 errorQueue.append(document()->documentElement()); 513 errorQueue.append(document()->documentElement());
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 target = fullscreen->webkitFullscreenElement(); 568 target = fullscreen->webkitFullscreenElement();
569 if (!target) 569 if (!target)
570 target = fullscreen->webkitCurrentFullScreenElement(); 570 target = fullscreen->webkitCurrentFullScreenElement();
571 } 571 }
572 572
573 if (!target) 573 if (!target)
574 target = doc; 574 target = doc;
575 m_fullScreenChangeEventTargetQueue.append(target); 575 m_fullScreenChangeEventTargetQueue.append(target);
576 } 576 }
577 577
578 void FullscreenElementStack::trace(Visitor* visitor)
579 {
580 visitor->trace(m_fullScreenElement);
581 visitor->trace(m_fullScreenElementStack);
582 visitor->trace(m_fullScreenChangeEventTargetQueue);
583 visitor->trace(m_fullScreenErrorEventTargetQueue);
584 }
585
578 } // namespace WebCore 586 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698