OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights | 2 * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights |
3 * reserved. | 3 * reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 3544 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3555 return true; | 3555 return true; |
3556 } | 3556 } |
3557 | 3557 |
3558 return false; | 3558 return false; |
3559 } | 3559 } |
3560 | 3560 |
3561 bool HTMLMediaElement::textTracksVisible() const { | 3561 bool HTMLMediaElement::textTracksVisible() const { |
3562 return m_textTracksVisible; | 3562 return m_textTracksVisible; |
3563 } | 3563 } |
3564 | 3564 |
3565 static void assertShadowRootChildren(ShadowRoot& shadowRoot) { | 3565 // static |
| 3566 void HTMLMediaElement::assertShadowRootChildren(ShadowRoot& shadowRoot) { |
3566 #if DCHECK_IS_ON() | 3567 #if DCHECK_IS_ON() |
3567 // There can be up to two children, either or both of the text | 3568 // There can be up to three children: media remoting interstitial, text track |
3568 // track container and media controls. If both are present, the | 3569 // container, media controls. The mediaControls has to be the last child if |
3569 // text track container must be the first child. | 3570 // present, and has to be the next sibling of the text track container if both |
| 3571 // present. |
3570 unsigned numberOfChildren = shadowRoot.countChildren(); | 3572 unsigned numberOfChildren = shadowRoot.countChildren(); |
3571 DCHECK_LE(numberOfChildren, 2u); | 3573 DCHECK_LE(numberOfChildren, 3u); |
3572 Node* firstChild = shadowRoot.firstChild(); | 3574 Node* firstChild = shadowRoot.firstChild(); |
3573 Node* lastChild = shadowRoot.lastChild(); | 3575 Node* lastChild = shadowRoot.lastChild(); |
3574 if (numberOfChildren == 1) { | 3576 if (numberOfChildren == 1) { |
3575 DCHECK(firstChild->isTextTrackContainer() || firstChild->isMediaControls()); | 3577 DCHECK(firstChild->isTextTrackContainer() || |
| 3578 firstChild->isMediaControls() || |
| 3579 firstChild->isMediaRemotingInterstitial()); |
3576 } else if (numberOfChildren == 2) { | 3580 } else if (numberOfChildren == 2) { |
3577 DCHECK(firstChild->isTextTrackContainer()); | 3581 DCHECK(firstChild->isTextTrackContainer() || |
| 3582 firstChild->isMediaRemotingInterstitial()); |
| 3583 DCHECK(lastChild->isTextTrackContainer() || lastChild->isMediaControls()); |
| 3584 if (firstChild->isTextTrackContainer()) |
| 3585 DCHECK(lastChild->isMediaControls()); |
| 3586 } else if (numberOfChildren == 3) { |
| 3587 Node* secondChild = firstChild->nextSibling(); |
| 3588 DCHECK(firstChild->isMediaRemotingInterstitial()); |
| 3589 DCHECK(secondChild->isTextTrackContainer()); |
3578 DCHECK(lastChild->isMediaControls()); | 3590 DCHECK(lastChild->isMediaControls()); |
3579 } | 3591 } |
3580 #endif | 3592 #endif |
3581 } | 3593 } |
3582 | 3594 |
3583 TextTrackContainer& HTMLMediaElement::ensureTextTrackContainer() { | 3595 TextTrackContainer& HTMLMediaElement::ensureTextTrackContainer() { |
3584 ShadowRoot& shadowRoot = ensureUserAgentShadowRoot(); | 3596 ShadowRoot& shadowRoot = ensureUserAgentShadowRoot(); |
3585 assertShadowRootChildren(shadowRoot); | 3597 assertShadowRootChildren(shadowRoot); |
3586 | 3598 |
3587 Node* firstChild = shadowRoot.firstChild(); | 3599 Node* firstChild = shadowRoot.firstChild(); |
3588 if (firstChild && firstChild->isTextTrackContainer()) | 3600 if (firstChild && firstChild->isTextTrackContainer()) |
3589 return toTextTrackContainer(*firstChild); | 3601 return toTextTrackContainer(*firstChild); |
| 3602 Node* toBeInsertedBefore = firstChild; |
| 3603 |
| 3604 if (firstChild->isMediaRemotingInterstitial()) { |
| 3605 Node* secondChild = firstChild->nextSibling(); |
| 3606 if (secondChild && secondChild->isTextTrackContainer()) |
| 3607 return toTextTrackContainer(*secondChild); |
| 3608 toBeInsertedBefore = secondChild; |
| 3609 } |
3590 | 3610 |
3591 TextTrackContainer* textTrackContainer = | 3611 TextTrackContainer* textTrackContainer = |
3592 TextTrackContainer::create(document()); | 3612 TextTrackContainer::create(document()); |
3593 | 3613 |
3594 // The text track container should be inserted before the media controls, | 3614 // The text track container should be inserted before the media controls, |
3595 // so that they are rendered behind them. | 3615 // so that they are rendered behind them. |
3596 shadowRoot.insertBefore(textTrackContainer, firstChild); | 3616 shadowRoot.insertBefore(textTrackContainer, toBeInsertedBefore); |
3597 | 3617 |
3598 assertShadowRootChildren(shadowRoot); | 3618 assertShadowRootChildren(shadowRoot); |
3599 | 3619 |
3600 return *textTrackContainer; | 3620 return *textTrackContainer; |
3601 } | 3621 } |
3602 | 3622 |
3603 void HTMLMediaElement::updateTextTrackDisplay() { | 3623 void HTMLMediaElement::updateTextTrackDisplay() { |
3604 BLINK_MEDIA_LOG << "updateTextTrackDisplay(" << (void*)this << ")"; | 3624 BLINK_MEDIA_LOG << "updateTextTrackDisplay(" << (void*)this << ")"; |
3605 | 3625 |
3606 ensureTextTrackContainer().updateDisplay( | 3626 ensureTextTrackContainer().updateDisplay( |
(...skipping 585 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4192 kMostlyFillViewportBecomeStableSeconds, BLINK_FROM_HERE); | 4212 kMostlyFillViewportBecomeStableSeconds, BLINK_FROM_HERE); |
4193 } | 4213 } |
4194 | 4214 |
4195 void HTMLMediaElement::viewportFillDebouncerTimerFired(TimerBase*) { | 4215 void HTMLMediaElement::viewportFillDebouncerTimerFired(TimerBase*) { |
4196 m_mostlyFillingViewport = true; | 4216 m_mostlyFillingViewport = true; |
4197 if (m_webMediaPlayer) | 4217 if (m_webMediaPlayer) |
4198 m_webMediaPlayer->becameDominantVisibleContent(m_mostlyFillingViewport); | 4218 m_webMediaPlayer->becameDominantVisibleContent(m_mostlyFillingViewport); |
4199 } | 4219 } |
4200 | 4220 |
4201 } // namespace blink | 4221 } // namespace blink |
OLD | NEW |