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

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

Issue 179163004: Have Document::topDocument() return a reference (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 10 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 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
250 // 7. Optionally, display a message indicating how the user can exit dis playing the context object fullscreen. 250 // 7. Optionally, display a message indicating how the user can exit dis playing the context object fullscreen.
251 return; 251 return;
252 } while (0); 252 } while (0);
253 253
254 m_fullScreenErrorEventTargetQueue.append(element ? element : document()->doc umentElement()); 254 m_fullScreenErrorEventTargetQueue.append(element ? element : document()->doc umentElement());
255 m_fullScreenChangeDelayTimer.startOneShot(0); 255 m_fullScreenChangeDelayTimer.startOneShot(0);
256 } 256 }
257 257
258 void FullscreenElementStack::webkitCancelFullScreen() 258 void FullscreenElementStack::webkitCancelFullScreen()
259 { 259 {
260 ASSERT(document()->topDocument());
261 // The Mozilla "cancelFullScreen()" API behaves like the W3C "fully exit ful lscreen" behavior, which 260 // The Mozilla "cancelFullScreen()" API behaves like the W3C "fully exit ful lscreen" behavior, which
262 // is defined as: 261 // is defined as:
263 // "To fully exit fullscreen act as if the exitFullscreen() method was invok ed on the top-level browsing 262 // "To fully exit fullscreen act as if the exitFullscreen() method was invok ed on the top-level browsing
264 // context's document and subsequently empty that document's fullscreen elem ent stack." 263 // context's document and subsequently empty that document's fullscreen elem ent stack."
265 if (!fullscreenElementFrom(*document()->topDocument())) 264 if (!fullscreenElementFrom(document()->topDocument()))
266 return; 265 return;
267 266
268 // To achieve that aim, remove all the elements from the top document's stac k except for the first before 267 // To achieve that aim, remove all the elements from the top document's stac k except for the first before
269 // calling webkitExitFullscreen(): 268 // calling webkitExitFullscreen():
270 Vector<RefPtr<Element> > replacementFullscreenElementStack; 269 Vector<RefPtr<Element> > replacementFullscreenElementStack;
271 replacementFullscreenElementStack.append(fullscreenElementFrom(*document()-> topDocument())); 270 replacementFullscreenElementStack.append(fullscreenElementFrom(document()->t opDocument()));
272 FullscreenElementStack& topFullscreenElementStack = from(*document()->topDoc ument()); 271 FullscreenElementStack& topFullscreenElementStack = from(document()->topDocu ment());
273 topFullscreenElementStack.m_fullScreenElementStack.swap(replacementFullscree nElementStack); 272 topFullscreenElementStack.m_fullScreenElementStack.swap(replacementFullscree nElementStack);
274 topFullscreenElementStack.webkitExitFullscreen(); 273 topFullscreenElementStack.webkitExitFullscreen();
275 } 274 }
276 275
277 void FullscreenElementStack::webkitExitFullscreen() 276 void FullscreenElementStack::webkitExitFullscreen()
278 { 277 {
279 // The exitFullscreen() method must run these steps: 278 // The exitFullscreen() method must run these steps:
280 279
281 // 1. Let doc be the context object. (i.e. "this") 280 // 1. Let doc be the context object. (i.e. "this")
282 Document* currentDoc = document(); 281 Document* currentDoc = document();
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 m_fullScreenRenderer->unwrapRenderer(); 437 m_fullScreenRenderer->unwrapRenderer();
439 438
440 m_fullScreenElement = nullptr; 439 m_fullScreenElement = nullptr;
441 document()->setNeedsStyleRecalc(SubtreeStyleChange); 440 document()->setNeedsStyleRecalc(SubtreeStyleChange);
442 441
443 // When webkitCancelFullScreen is called, we call webkitExitFullScreen on th e topDocument(). That 442 // When webkitCancelFullScreen is called, we call webkitExitFullScreen on th e topDocument(). That
444 // means that the events will be queued there. So if we have no events here, start the timer on 443 // means that the events will be queued there. So if we have no events here, start the timer on
445 // the exiting document. 444 // the exiting document.
446 Document* exitingDocument = document(); 445 Document* exitingDocument = document();
447 if (m_fullScreenChangeEventTargetQueue.isEmpty() && m_fullScreenErrorEventTa rgetQueue.isEmpty()) 446 if (m_fullScreenChangeEventTargetQueue.isEmpty() && m_fullScreenErrorEventTa rgetQueue.isEmpty())
448 exitingDocument = document()->topDocument(); 447 exitingDocument = &document()->topDocument();
449 ASSERT(exitingDocument); 448 ASSERT(exitingDocument);
450 from(*exitingDocument).m_fullScreenChangeDelayTimer.startOneShot(0); 449 from(*exitingDocument).m_fullScreenChangeDelayTimer.startOneShot(0);
451 } 450 }
452 451
453 void FullscreenElementStack::setFullScreenRenderer(RenderFullScreen* renderer) 452 void FullscreenElementStack::setFullScreenRenderer(RenderFullScreen* renderer)
454 { 453 {
455 if (renderer == m_fullScreenRenderer) 454 if (renderer == m_fullScreenRenderer)
456 return; 455 return;
457 456
458 if (renderer && m_savedPlaceholderRenderStyle) { 457 if (renderer && m_savedPlaceholderRenderStyle) {
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
571 if (!target) 570 if (!target)
572 target = fullscreen->webkitCurrentFullScreenElement(); 571 target = fullscreen->webkitCurrentFullScreenElement();
573 } 572 }
574 573
575 if (!target) 574 if (!target)
576 target = doc; 575 target = doc;
577 m_fullScreenChangeEventTargetQueue.append(target); 576 m_fullScreenChangeEventTargetQueue.append(target);
578 } 577 }
579 578
580 } // namespace WebCore 579 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698