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

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

Issue 426593010: Set fullscreenEnabled to false when fullscreen is not supported. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase against tot Created 6 years, 4 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 | « LayoutTests/fullscreen/full-screen-not-enabled-when-unsupported-expected.txt ('k') | 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, 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 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 { 50 {
51 for (const HTMLFrameOwnerElement* owner = document.ownerElement(); owner; ow ner = owner->document().ownerElement()) { 51 for (const HTMLFrameOwnerElement* owner = document.ownerElement(); owner; ow ner = owner->document().ownerElement()) {
52 if (!isHTMLIFrameElement(owner)) 52 if (!isHTMLIFrameElement(owner))
53 return false; 53 return false;
54 if (!owner->hasAttribute(allowfullscreenAttr)) 54 if (!owner->hasAttribute(allowfullscreenAttr))
55 return false; 55 return false;
56 } 56 }
57 return true; 57 return true;
58 } 58 }
59 59
60 static bool fullscreenIsSupported(const Document& document)
61 {
62 // Fullscreen is supported if there is no previously-established user prefer ence,
63 // security risk, or platform limitation.
64 return document.settings()->fullscreenSupported();
65 }
66
67 static bool fullscreenIsSupported(const Document& document, const Element& eleme nt)
68 {
69 if (document.settings()->disallowFullscreenForNonMediaElements() && !isHTMLM ediaElement(element))
70 return false;
71 return fullscreenIsSupported(document);
72 }
73
60 static PassRefPtrWillBeRawPtr<Event> createEvent(const AtomicString& type, Event Target& target) 74 static PassRefPtrWillBeRawPtr<Event> createEvent(const AtomicString& type, Event Target& target)
61 { 75 {
62 RefPtrWillBeRawPtr<Event> event = Event::createBubble(type); 76 RefPtrWillBeRawPtr<Event> event = Event::createBubble(type);
63 event->setTarget(&target); 77 event->setTarget(&target);
64 return event; 78 return event;
65 } 79 }
66 80
67 const char* FullscreenElementStack::supplementName() 81 const char* FullscreenElementStack::supplementName()
68 { 82 {
69 return "FullscreenElementStack"; 83 return "FullscreenElementStack";
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 break; 220 break;
207 } 221 }
208 222
209 // This algorithm is not allowed to show a pop-up: 223 // This algorithm is not allowed to show a pop-up:
210 // An algorithm is allowed to show a pop-up if, in the task in which t he algorithm is running, either: 224 // An algorithm is allowed to show a pop-up if, in the task in which t he algorithm is running, either:
211 // - an activation behavior is currently being processed whose click e vent was trusted, or 225 // - an activation behavior is currently being processed whose click e vent was trusted, or
212 // - the event listener for a trusted click event is being handled. 226 // - the event listener for a trusted click event is being handled.
213 if (!UserGestureIndicator::processingUserGesture()) 227 if (!UserGestureIndicator::processingUserGesture())
214 break; 228 break;
215 229
216 // There is a previously-established user preference, security risk, or platform limitation. 230 // Fullscreen is not supported.
217 if (!document()->settings()->fullscreenSupported()) 231 if (!fullscreenIsSupported(element.document(), element))
218 break;
219 if (document()->settings()->disallowFullscreenForNonMediaElements() && ! isHTMLMediaElement(element))
220 break; 232 break;
221 233
222 // 2. Let doc be element's node document. (i.e. "this") 234 // 2. Let doc be element's node document. (i.e. "this")
223 Document* currentDoc = document(); 235 Document* currentDoc = document();
224 236
225 // 3. Let docs be all doc's ancestor browsing context's documents (if an y) and doc. 237 // 3. Let docs be all doc's ancestor browsing context's documents (if an y) and doc.
226 Deque<Document*> docs; 238 Deque<Document*> docs;
227 239
228 do { 240 do {
229 docs.prepend(currentDoc); 241 docs.prepend(currentDoc);
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
370 host->chrome().client().exitFullScreenForElement(m_fullScreenElement.get ()); 382 host->chrome().client().exitFullScreenForElement(m_fullScreenElement.get ());
371 return; 383 return;
372 } 384 }
373 385
374 // Otherwise, notify the chrome of the new full screen element. 386 // Otherwise, notify the chrome of the new full screen element.
375 host->chrome().client().enterFullScreenForElement(newTop); 387 host->chrome().client().enterFullScreenForElement(newTop);
376 } 388 }
377 389
378 bool FullscreenElementStack::fullscreenEnabled(Document& document) 390 bool FullscreenElementStack::fullscreenEnabled(Document& document)
379 { 391 {
380 // 4. The fullscreenEnabled attribute must return true if the context object and all ancestor 392 // 4. The fullscreenEnabled attribute must return true if the context object has its
381 // browsing context's documents have their fullscreen enabled flag set, or f alse otherwise. 393 // fullscreen enabled flag set and fullscreen is supported, and false oth erwise.
382 394
383 // Top-level browsing contexts are implied to have their allowFullScreen att ribute set. 395 // Top-level browsing contexts are implied to have their allowFullScreen att ribute set.
384 return fullscreenIsAllowedForAllOwners(document); 396 return fullscreenIsAllowedForAllOwners(document) && fullscreenIsSupported(do cument);
385 } 397 }
386 398
387 void FullscreenElementStack::willEnterFullScreenForElement(Element* element) 399 void FullscreenElementStack::willEnterFullScreenForElement(Element* element)
388 { 400 {
389 ASSERT(element); 401 ASSERT(element);
390 if (!document()->isActive()) 402 if (!document()->isActive())
391 return; 403 return;
392 404
393 if (m_fullScreenRenderer) 405 if (m_fullScreenRenderer)
394 m_fullScreenRenderer->unwrapRenderer(); 406 m_fullScreenRenderer->unwrapRenderer();
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 590
579 void FullscreenElementStack::trace(Visitor* visitor) 591 void FullscreenElementStack::trace(Visitor* visitor)
580 { 592 {
581 visitor->trace(m_fullScreenElement); 593 visitor->trace(m_fullScreenElement);
582 visitor->trace(m_fullScreenElementStack); 594 visitor->trace(m_fullScreenElementStack);
583 visitor->trace(m_eventQueue); 595 visitor->trace(m_eventQueue);
584 DocumentSupplement::trace(visitor); 596 DocumentSupplement::trace(visitor);
585 } 597 }
586 598
587 } // namespace blink 599 } // namespace blink
OLDNEW
« no previous file with comments | « LayoutTests/fullscreen/full-screen-not-enabled-when-unsupported-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698