| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights
reserved. | 2 * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights
reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 810 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 821 | 821 |
| 822 // FIXME: Investigate whether these can be moved into m_networkState != NETW
ORK_EMPTY block above | 822 // FIXME: Investigate whether these can be moved into m_networkState != NETW
ORK_EMPTY block above |
| 823 // so they are closer to the relevant spec steps. | 823 // so they are closer to the relevant spec steps. |
| 824 m_lastSeekTime = 0; | 824 m_lastSeekTime = 0; |
| 825 m_duration = std::numeric_limits<double>::quiet_NaN(); | 825 m_duration = std::numeric_limits<double>::quiet_NaN(); |
| 826 | 826 |
| 827 // The spec doesn't say to block the load event until we actually run the as
ynchronous section | 827 // The spec doesn't say to block the load event until we actually run the as
ynchronous section |
| 828 // algorithm, but do it now because we won't start that until after the time
r fires and the | 828 // algorithm, but do it now because we won't start that until after the time
r fires and the |
| 829 // event may have already fired by then. | 829 // event may have already fired by then. |
| 830 setShouldDelayLoadEvent(true); | 830 setShouldDelayLoadEvent(true); |
| 831 if (hasMediaControls()) | 831 if (mediaControls()) |
| 832 mediaControls()->reset(); | 832 mediaControls()->reset(); |
| 833 } | 833 } |
| 834 | 834 |
| 835 void HTMLMediaElement::loadInternal() | 835 void HTMLMediaElement::loadInternal() |
| 836 { | 836 { |
| 837 // HTMLMediaElement::textTracksAreReady will need "... the text tracks whose
mode was not in the | 837 // HTMLMediaElement::textTracksAreReady will need "... the text tracks whose
mode was not in the |
| 838 // disabled state when the element's resource selection algorithm last start
ed". | 838 // disabled state when the element's resource selection algorithm last start
ed". |
| 839 m_textTracksWhenResourceSelectionBegan.clear(); | 839 m_textTracksWhenResourceSelectionBegan.clear(); |
| 840 if (m_textTracks) { | 840 if (m_textTracks) { |
| 841 for (unsigned i = 0; i < m_textTracks->length(); ++i) { | 841 for (unsigned i = 0; i < m_textTracks->length(); ++i) { |
| (...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1137 | 1137 |
| 1138 void HTMLMediaElement::textTrackReadyStateChanged(TextTrack* track) | 1138 void HTMLMediaElement::textTrackReadyStateChanged(TextTrack* track) |
| 1139 { | 1139 { |
| 1140 if (webMediaPlayer()&& m_textTracksWhenResourceSelectionBegan.contains(track
)) { | 1140 if (webMediaPlayer()&& m_textTracksWhenResourceSelectionBegan.contains(track
)) { |
| 1141 if (track->readinessState() != TextTrack::Loading) | 1141 if (track->readinessState() != TextTrack::Loading) |
| 1142 setReadyState(static_cast<ReadyState>(webMediaPlayer()->readyState()
)); | 1142 setReadyState(static_cast<ReadyState>(webMediaPlayer()->readyState()
)); |
| 1143 } else { | 1143 } else { |
| 1144 // The track readiness state might have changed as a result of the user | 1144 // The track readiness state might have changed as a result of the user |
| 1145 // clicking the captions button. In this case, a check whether all the | 1145 // clicking the captions button. In this case, a check whether all the |
| 1146 // resources have failed loading should be done in order to hide the CC
button. | 1146 // resources have failed loading should be done in order to hide the CC
button. |
| 1147 if (hasMediaControls() && track->readinessState() == TextTrack::FailedTo
Load) | 1147 if (mediaControls() && track->readinessState() == TextTrack::FailedToLoa
d) |
| 1148 mediaControls()->refreshClosedCaptionsButtonVisibility(); | 1148 mediaControls()->refreshClosedCaptionsButtonVisibility(); |
| 1149 } | 1149 } |
| 1150 } | 1150 } |
| 1151 | 1151 |
| 1152 void HTMLMediaElement::textTrackModeChanged(TextTrack* track) | 1152 void HTMLMediaElement::textTrackModeChanged(TextTrack* track) |
| 1153 { | 1153 { |
| 1154 if (track->trackType() == TextTrack::TrackElement) { | 1154 if (track->trackType() == TextTrack::TrackElement) { |
| 1155 // 4.8.10.12.3 Sourcing out-of-band text tracks | 1155 // 4.8.10.12.3 Sourcing out-of-band text tracks |
| 1156 // ... when a text track corresponding to a track element is created wit
h text track | 1156 // ... when a text track corresponding to a track element is created wit
h text track |
| 1157 // mode set to disabled and subsequently changes its text track mode to
hidden, showing, | 1157 // mode set to disabled and subsequently changes its text track mode to
hidden, showing, |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1367 if (error == WebMediaPlayer::NetworkStateNetworkError && m_readyState >= HAV
E_METADATA) | 1367 if (error == WebMediaPlayer::NetworkStateNetworkError && m_readyState >= HAV
E_METADATA) |
| 1368 mediaEngineError(MediaError::create(MediaError::MEDIA_ERR_NETWORK)); | 1368 mediaEngineError(MediaError::create(MediaError::MEDIA_ERR_NETWORK)); |
| 1369 else if (error == WebMediaPlayer::NetworkStateDecodeError) | 1369 else if (error == WebMediaPlayer::NetworkStateDecodeError) |
| 1370 mediaEngineError(MediaError::create(MediaError::MEDIA_ERR_DECODE)); | 1370 mediaEngineError(MediaError::create(MediaError::MEDIA_ERR_DECODE)); |
| 1371 else if ((error == WebMediaPlayer::NetworkStateFormatError | 1371 else if ((error == WebMediaPlayer::NetworkStateFormatError |
| 1372 || error == WebMediaPlayer::NetworkStateNetworkError) | 1372 || error == WebMediaPlayer::NetworkStateNetworkError) |
| 1373 && m_loadState == LoadingFromSrcAttr) | 1373 && m_loadState == LoadingFromSrcAttr) |
| 1374 noneSupported(); | 1374 noneSupported(); |
| 1375 | 1375 |
| 1376 updateDisplayState(); | 1376 updateDisplayState(); |
| 1377 if (hasMediaControls()) | 1377 if (mediaControls()) |
| 1378 mediaControls()->reset(); | 1378 mediaControls()->reset(); |
| 1379 } | 1379 } |
| 1380 | 1380 |
| 1381 void HTMLMediaElement::setNetworkState(WebMediaPlayer::NetworkState state) | 1381 void HTMLMediaElement::setNetworkState(WebMediaPlayer::NetworkState state) |
| 1382 { | 1382 { |
| 1383 WTF_LOG(Media, "HTMLMediaElement::setNetworkState(%p, %d) - current state is
%d", this, static_cast<int>(state), static_cast<int>(m_networkState)); | 1383 WTF_LOG(Media, "HTMLMediaElement::setNetworkState(%p, %d) - current state is
%d", this, static_cast<int>(state), static_cast<int>(m_networkState)); |
| 1384 | 1384 |
| 1385 if (state == WebMediaPlayer::NetworkStateEmpty) { | 1385 if (state == WebMediaPlayer::NetworkStateEmpty) { |
| 1386 // Just update the cached state and leave, we can't do anything. | 1386 // Just update the cached state and leave, we can't do anything. |
| 1387 m_networkState = NETWORK_EMPTY; | 1387 m_networkState = NETWORK_EMPTY; |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1520 jumped = true; | 1520 jumped = true; |
| 1521 } | 1521 } |
| 1522 | 1522 |
| 1523 if (m_mediaController) { | 1523 if (m_mediaController) { |
| 1524 if (jumped && initialPlaybackPosition > m_mediaController->currentTi
me()) | 1524 if (jumped && initialPlaybackPosition > m_mediaController->currentTi
me()) |
| 1525 m_mediaController->setCurrentTime(initialPlaybackPosition); | 1525 m_mediaController->setCurrentTime(initialPlaybackPosition); |
| 1526 else | 1526 else |
| 1527 seek(m_mediaController->currentTime()); | 1527 seek(m_mediaController->currentTime()); |
| 1528 } | 1528 } |
| 1529 | 1529 |
| 1530 if (hasMediaControls()) | 1530 if (mediaControls()) |
| 1531 mediaControls()->reset(); | 1531 mediaControls()->reset(); |
| 1532 if (renderer()) | 1532 if (renderer()) |
| 1533 renderer()->updateFromElement(); | 1533 renderer()->updateFromElement(); |
| 1534 } | 1534 } |
| 1535 | 1535 |
| 1536 bool shouldUpdateDisplayState = false; | 1536 bool shouldUpdateDisplayState = false; |
| 1537 | 1537 |
| 1538 if (m_readyState >= HAVE_CURRENT_DATA && oldState < HAVE_CURRENT_DATA && !m_
haveFiredLoadedData) { | 1538 if (m_readyState >= HAVE_CURRENT_DATA && oldState < HAVE_CURRENT_DATA && !m_
haveFiredLoadedData) { |
| 1539 m_haveFiredLoadedData = true; | 1539 m_haveFiredLoadedData = true; |
| 1540 shouldUpdateDisplayState = true; | 1540 shouldUpdateDisplayState = true; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1567 } | 1567 } |
| 1568 } | 1568 } |
| 1569 | 1569 |
| 1570 scheduleEvent(EventTypeNames::canplaythrough); | 1570 scheduleEvent(EventTypeNames::canplaythrough); |
| 1571 | 1571 |
| 1572 shouldUpdateDisplayState = true; | 1572 shouldUpdateDisplayState = true; |
| 1573 } | 1573 } |
| 1574 | 1574 |
| 1575 if (shouldUpdateDisplayState) { | 1575 if (shouldUpdateDisplayState) { |
| 1576 updateDisplayState(); | 1576 updateDisplayState(); |
| 1577 if (hasMediaControls()) | 1577 if (mediaControls()) |
| 1578 mediaControls()->refreshClosedCaptionsButtonVisibility(); | 1578 mediaControls()->refreshClosedCaptionsButtonVisibility(); |
| 1579 } | 1579 } |
| 1580 | 1580 |
| 1581 updatePlayState(); | 1581 updatePlayState(); |
| 1582 updateMediaController(); | 1582 updateMediaController(); |
| 1583 cueTimeline().updateActiveCues(currentTime()); | 1583 cueTimeline().updateActiveCues(currentTime()); |
| 1584 } | 1584 } |
| 1585 | 1585 |
| 1586 void HTMLMediaElement::progressEventTimerFired(Timer<HTMLMediaElement>*) | 1586 void HTMLMediaElement::progressEventTimerFired(Timer<HTMLMediaElement>*) |
| 1587 { | 1587 { |
| (...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2110 updateVolume(); | 2110 updateVolume(); |
| 2111 | 2111 |
| 2112 scheduleEvent(EventTypeNames::volumechange); | 2112 scheduleEvent(EventTypeNames::volumechange); |
| 2113 } | 2113 } |
| 2114 | 2114 |
| 2115 void HTMLMediaElement::updateVolume() | 2115 void HTMLMediaElement::updateVolume() |
| 2116 { | 2116 { |
| 2117 if (webMediaPlayer()) | 2117 if (webMediaPlayer()) |
| 2118 webMediaPlayer()->setVolume(effectiveMediaVolume()); | 2118 webMediaPlayer()->setVolume(effectiveMediaVolume()); |
| 2119 | 2119 |
| 2120 if (hasMediaControls()) | 2120 if (mediaControls()) |
| 2121 mediaControls()->updateVolume(); | 2121 mediaControls()->updateVolume(); |
| 2122 } | 2122 } |
| 2123 | 2123 |
| 2124 double HTMLMediaElement::effectiveMediaVolume() const | 2124 double HTMLMediaElement::effectiveMediaVolume() const |
| 2125 { | 2125 { |
| 2126 if (m_muted) | 2126 if (m_muted) |
| 2127 return 0; | 2127 return 0; |
| 2128 | 2128 |
| 2129 if (m_mediaController && m_mediaController->muted()) | 2129 if (m_mediaController && m_mediaController->muted()) |
| 2130 return 0; | 2130 return 0; |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2162 pause(); | 2162 pause(); |
| 2163 } | 2163 } |
| 2164 } | 2164 } |
| 2165 | 2165 |
| 2166 if (!m_seeking) | 2166 if (!m_seeking) |
| 2167 scheduleTimeupdateEvent(true); | 2167 scheduleTimeupdateEvent(true); |
| 2168 | 2168 |
| 2169 if (!effectivePlaybackRate()) | 2169 if (!effectivePlaybackRate()) |
| 2170 return; | 2170 return; |
| 2171 | 2171 |
| 2172 if (!m_paused && hasMediaControls()) | 2172 if (!m_paused && mediaControls()) |
| 2173 mediaControls()->playbackProgressed(); | 2173 mediaControls()->playbackProgressed(); |
| 2174 | 2174 |
| 2175 cueTimeline().updateActiveCues(currentTime()); | 2175 cueTimeline().updateActiveCues(currentTime()); |
| 2176 } | 2176 } |
| 2177 | 2177 |
| 2178 void HTMLMediaElement::scheduleTimeupdateEvent(bool periodicEvent) | 2178 void HTMLMediaElement::scheduleTimeupdateEvent(bool periodicEvent) |
| 2179 { | 2179 { |
| 2180 double now = WTF::currentTime(); | 2180 double now = WTF::currentTime(); |
| 2181 double movieTime = currentTime(); | 2181 double movieTime = currentTime(); |
| 2182 | 2182 |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2362 // passed to mediaPlayerDidAddTextTrack. | 2362 // passed to mediaPlayerDidAddTextTrack. |
| 2363 RefPtrWillBeRawPtr<InbandTextTrack> textTrack = static_cast<InbandTextTrack*
>(webTrack->client()); | 2363 RefPtrWillBeRawPtr<InbandTextTrack> textTrack = static_cast<InbandTextTrack*
>(webTrack->client()); |
| 2364 if (!textTrack) | 2364 if (!textTrack) |
| 2365 return; | 2365 return; |
| 2366 | 2366 |
| 2367 removeTextTrack(textTrack.get()); | 2367 removeTextTrack(textTrack.get()); |
| 2368 } | 2368 } |
| 2369 | 2369 |
| 2370 void HTMLMediaElement::textTracksChanged() | 2370 void HTMLMediaElement::textTracksChanged() |
| 2371 { | 2371 { |
| 2372 if (hasMediaControls()) | 2372 if (mediaControls()) |
| 2373 mediaControls()->refreshClosedCaptionsButtonVisibility(); | 2373 mediaControls()->refreshClosedCaptionsButtonVisibility(); |
| 2374 } | 2374 } |
| 2375 | 2375 |
| 2376 void HTMLMediaElement::addTextTrack(TextTrack* track) | 2376 void HTMLMediaElement::addTextTrack(TextTrack* track) |
| 2377 { | 2377 { |
| 2378 textTracks()->append(track); | 2378 textTracks()->append(track); |
| 2379 | 2379 |
| 2380 textTracksChanged(); | 2380 textTracksChanged(); |
| 2381 } | 2381 } |
| 2382 | 2382 |
| (...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2763 WTF_LOG(Media, "HTMLMediaElement::durationChanged(%p, %f, %d)", this, durati
on, requestSeek); | 2763 WTF_LOG(Media, "HTMLMediaElement::durationChanged(%p, %f, %d)", this, durati
on, requestSeek); |
| 2764 | 2764 |
| 2765 // Abort if duration unchanged. | 2765 // Abort if duration unchanged. |
| 2766 if (m_duration == duration) | 2766 if (m_duration == duration) |
| 2767 return; | 2767 return; |
| 2768 | 2768 |
| 2769 WTF_LOG(Media, "HTMLMediaElement::durationChanged(%p) : %f -> %f", this, m_d
uration, duration); | 2769 WTF_LOG(Media, "HTMLMediaElement::durationChanged(%p) : %f -> %f", this, m_d
uration, duration); |
| 2770 m_duration = duration; | 2770 m_duration = duration; |
| 2771 scheduleEvent(EventTypeNames::durationchange); | 2771 scheduleEvent(EventTypeNames::durationchange); |
| 2772 | 2772 |
| 2773 if (hasMediaControls()) | 2773 if (mediaControls()) |
| 2774 mediaControls()->reset(); | 2774 mediaControls()->reset(); |
| 2775 if (renderer()) | 2775 if (renderer()) |
| 2776 renderer()->updateFromElement(); | 2776 renderer()->updateFromElement(); |
| 2777 | 2777 |
| 2778 if (requestSeek) | 2778 if (requestSeek) |
| 2779 seek(duration); | 2779 seek(duration); |
| 2780 } | 2780 } |
| 2781 | 2781 |
| 2782 void HTMLMediaElement::mediaPlayerPlaybackStateChanged() | 2782 void HTMLMediaElement::mediaPlayerPlaybackStateChanged() |
| 2783 { | 2783 { |
| (...skipping 25 matching lines...) Expand all Loading... |
| 2809 if (m_mediaController) { | 2809 if (m_mediaController) { |
| 2810 m_mediaController->setCurrentTime(time); | 2810 m_mediaController->setCurrentTime(time); |
| 2811 return; | 2811 return; |
| 2812 } | 2812 } |
| 2813 setCurrentTime(time, ASSERT_NO_EXCEPTION); | 2813 setCurrentTime(time, ASSERT_NO_EXCEPTION); |
| 2814 } | 2814 } |
| 2815 | 2815 |
| 2816 void HTMLMediaElement::remoteRouteAvailabilityChanged(bool routesAvailable) | 2816 void HTMLMediaElement::remoteRouteAvailabilityChanged(bool routesAvailable) |
| 2817 { | 2817 { |
| 2818 m_remoteRoutesAvailable = routesAvailable; | 2818 m_remoteRoutesAvailable = routesAvailable; |
| 2819 if (hasMediaControls()) | 2819 if (mediaControls()) |
| 2820 mediaControls()->refreshCastButtonVisibility(); | 2820 mediaControls()->refreshCastButtonVisibility(); |
| 2821 } | 2821 } |
| 2822 | 2822 |
| 2823 void HTMLMediaElement::connectedToRemoteDevice() | 2823 void HTMLMediaElement::connectedToRemoteDevice() |
| 2824 { | 2824 { |
| 2825 m_playingRemotely = true; | 2825 m_playingRemotely = true; |
| 2826 if (hasMediaControls()) | 2826 if (mediaControls()) |
| 2827 mediaControls()->startedCasting(); | 2827 mediaControls()->startedCasting(); |
| 2828 } | 2828 } |
| 2829 | 2829 |
| 2830 void HTMLMediaElement::disconnectedFromRemoteDevice() | 2830 void HTMLMediaElement::disconnectedFromRemoteDevice() |
| 2831 { | 2831 { |
| 2832 m_playingRemotely = false; | 2832 m_playingRemotely = false; |
| 2833 if (hasMediaControls()) | 2833 if (mediaControls()) |
| 2834 mediaControls()->stoppedCasting(); | 2834 mediaControls()->stoppedCasting(); |
| 2835 } | 2835 } |
| 2836 | 2836 |
| 2837 // MediaPlayerPresentation methods | 2837 // MediaPlayerPresentation methods |
| 2838 void HTMLMediaElement::mediaPlayerRepaint() | 2838 void HTMLMediaElement::mediaPlayerRepaint() |
| 2839 { | 2839 { |
| 2840 if (m_webLayer) | 2840 if (m_webLayer) |
| 2841 m_webLayer->invalidate(); | 2841 m_webLayer->invalidate(); |
| 2842 | 2842 |
| 2843 updateDisplayState(); | 2843 updateDisplayState(); |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2960 invalidateCachedTime(); | 2960 invalidateCachedTime(); |
| 2961 | 2961 |
| 2962 if (!isPlaying) { | 2962 if (!isPlaying) { |
| 2963 // Set rate, muted before calling play in case they were set before
the media engine was setup. | 2963 // Set rate, muted before calling play in case they were set before
the media engine was setup. |
| 2964 // The media engine should just stash the rate and muted values sinc
e it isn't already playing. | 2964 // The media engine should just stash the rate and muted values sinc
e it isn't already playing. |
| 2965 webMediaPlayer()->setRate(effectivePlaybackRate()); | 2965 webMediaPlayer()->setRate(effectivePlaybackRate()); |
| 2966 updateVolume(); | 2966 updateVolume(); |
| 2967 webMediaPlayer()->play(); | 2967 webMediaPlayer()->play(); |
| 2968 } | 2968 } |
| 2969 | 2969 |
| 2970 if (hasMediaControls()) | 2970 if (mediaControls()) |
| 2971 mediaControls()->playbackStarted(); | 2971 mediaControls()->playbackStarted(); |
| 2972 startPlaybackProgressTimer(); | 2972 startPlaybackProgressTimer(); |
| 2973 m_playing = true; | 2973 m_playing = true; |
| 2974 | 2974 |
| 2975 } else { // Should not be playing right now | 2975 } else { // Should not be playing right now |
| 2976 if (isPlaying) | 2976 if (isPlaying) |
| 2977 webMediaPlayer()->pause(); | 2977 webMediaPlayer()->pause(); |
| 2978 refreshCachedTime(); | 2978 refreshCachedTime(); |
| 2979 | 2979 |
| 2980 m_playbackProgressTimer.stop(); | 2980 m_playbackProgressTimer.stop(); |
| 2981 m_playing = false; | 2981 m_playing = false; |
| 2982 double time = currentTime(); | 2982 double time = currentTime(); |
| 2983 if (time > m_lastSeekTime) | 2983 if (time > m_lastSeekTime) |
| 2984 addPlayedRange(m_lastSeekTime, time); | 2984 addPlayedRange(m_lastSeekTime, time); |
| 2985 | 2985 |
| 2986 if (couldPlayIfEnoughData()) | 2986 if (couldPlayIfEnoughData()) |
| 2987 prepareToPlay(); | 2987 prepareToPlay(); |
| 2988 | 2988 |
| 2989 if (hasMediaControls()) | 2989 if (mediaControls()) |
| 2990 mediaControls()->playbackStopped(); | 2990 mediaControls()->playbackStopped(); |
| 2991 } | 2991 } |
| 2992 | 2992 |
| 2993 updateMediaController(); | 2993 updateMediaController(); |
| 2994 | 2994 |
| 2995 if (renderer()) | 2995 if (renderer()) |
| 2996 renderer()->updateFromElement(); | 2996 renderer()->updateFromElement(); |
| 2997 } | 2997 } |
| 2998 | 2998 |
| 2999 void HTMLMediaElement::stopPeriodicTimers() | 2999 void HTMLMediaElement::stopPeriodicTimers() |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3070 | 3070 |
| 3071 stopPeriodicTimers(); | 3071 stopPeriodicTimers(); |
| 3072 m_loadTimer.stop(); | 3072 m_loadTimer.stop(); |
| 3073 | 3073 |
| 3074 m_pendingActionFlags &= ~flags; | 3074 m_pendingActionFlags &= ~flags; |
| 3075 m_loadState = WaitingForSource; | 3075 m_loadState = WaitingForSource; |
| 3076 | 3076 |
| 3077 // We can't cast if we don't have a media player. | 3077 // We can't cast if we don't have a media player. |
| 3078 m_remoteRoutesAvailable = false; | 3078 m_remoteRoutesAvailable = false; |
| 3079 m_playingRemotely = false; | 3079 m_playingRemotely = false; |
| 3080 if (hasMediaControls()) { | 3080 if (mediaControls()) |
| 3081 mediaControls()->refreshCastButtonVisibility(); | 3081 mediaControls()->refreshCastButtonVisibility(); |
| 3082 } | |
| 3083 | 3082 |
| 3084 if (m_textTracks) | 3083 if (m_textTracks) |
| 3085 configureTextTrackDisplay(AssumeNoVisibleChange); | 3084 configureTextTrackDisplay(AssumeNoVisibleChange); |
| 3086 } | 3085 } |
| 3087 | 3086 |
| 3088 void HTMLMediaElement::stop() | 3087 void HTMLMediaElement::stop() |
| 3089 { | 3088 { |
| 3090 WTF_LOG(Media, "HTMLMediaElement::stop(%p)", this); | 3089 WTF_LOG(Media, "HTMLMediaElement::stop(%p)", this); |
| 3091 | 3090 |
| 3092 if (m_playing && m_initialPlayWithoutUserGestures) | 3091 if (m_playing && m_initialPlayWithoutUserGestures) |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3168 | 3167 |
| 3169 void HTMLMediaElement::exitFullscreen() | 3168 void HTMLMediaElement::exitFullscreen() |
| 3170 { | 3169 { |
| 3171 WTF_LOG(Media, "HTMLMediaElement::exitFullscreen(%p)", this); | 3170 WTF_LOG(Media, "HTMLMediaElement::exitFullscreen(%p)", this); |
| 3172 | 3171 |
| 3173 Fullscreen::from(document()).exitFullscreen(); | 3172 Fullscreen::from(document()).exitFullscreen(); |
| 3174 } | 3173 } |
| 3175 | 3174 |
| 3176 void HTMLMediaElement::didBecomeFullscreenElement() | 3175 void HTMLMediaElement::didBecomeFullscreenElement() |
| 3177 { | 3176 { |
| 3178 if (hasMediaControls()) | 3177 if (mediaControls()) |
| 3179 mediaControls()->enteredFullscreen(); | 3178 mediaControls()->enteredFullscreen(); |
| 3180 if (RuntimeEnabledFeatures::overlayFullscreenVideoEnabled() && isHTMLVideoEl
ement()) | 3179 if (RuntimeEnabledFeatures::overlayFullscreenVideoEnabled() && isHTMLVideoEl
ement()) |
| 3181 document().renderView()->compositor()->setNeedsCompositingUpdate(Composi
tingUpdateRebuildTree); | 3180 document().renderView()->compositor()->setNeedsCompositingUpdate(Composi
tingUpdateRebuildTree); |
| 3182 } | 3181 } |
| 3183 | 3182 |
| 3184 void HTMLMediaElement::willStopBeingFullscreenElement() | 3183 void HTMLMediaElement::willStopBeingFullscreenElement() |
| 3185 { | 3184 { |
| 3186 if (hasMediaControls()) | 3185 if (mediaControls()) |
| 3187 mediaControls()->exitedFullscreen(); | 3186 mediaControls()->exitedFullscreen(); |
| 3188 if (RuntimeEnabledFeatures::overlayFullscreenVideoEnabled() && isHTMLVideoEl
ement()) | 3187 if (RuntimeEnabledFeatures::overlayFullscreenVideoEnabled() && isHTMLVideoEl
ement()) |
| 3189 document().renderView()->compositor()->setNeedsCompositingUpdate(Composi
tingUpdateRebuildTree); | 3188 document().renderView()->compositor()->setNeedsCompositingUpdate(Composi
tingUpdateRebuildTree); |
| 3190 } | 3189 } |
| 3191 | 3190 |
| 3192 blink::WebLayer* HTMLMediaElement::platformLayer() const | 3191 blink::WebLayer* HTMLMediaElement::platformLayer() const |
| 3193 { | 3192 { |
| 3194 return m_webLayer; | 3193 return m_webLayer; |
| 3195 } | 3194 } |
| 3196 | 3195 |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3288 m_shouldDelayLoadEvent = shouldDelay; | 3287 m_shouldDelayLoadEvent = shouldDelay; |
| 3289 if (shouldDelay) | 3288 if (shouldDelay) |
| 3290 document().incrementLoadEventDelayCount(); | 3289 document().incrementLoadEventDelayCount(); |
| 3291 else | 3290 else |
| 3292 document().decrementLoadEventDelayCount(); | 3291 document().decrementLoadEventDelayCount(); |
| 3293 } | 3292 } |
| 3294 | 3293 |
| 3295 | 3294 |
| 3296 MediaControls* HTMLMediaElement::mediaControls() const | 3295 MediaControls* HTMLMediaElement::mediaControls() const |
| 3297 { | 3296 { |
| 3298 return toMediaControls(closedShadowRoot()->firstChild()); | 3297 if (ShadowRoot* shadowRoot = closedShadowRoot()) { |
| 3299 } | 3298 // Note that |shadowRoot->firstChild()| may be null. |
| 3300 | 3299 return toMediaControls(shadowRoot->firstChild()); |
| 3301 bool HTMLMediaElement::hasMediaControls() const | |
| 3302 { | |
| 3303 if (ShadowRoot* userAgent = closedShadowRoot()) { | |
| 3304 Node* node = userAgent->firstChild(); | |
| 3305 ASSERT_WITH_SECURITY_IMPLICATION(!node || node->isMediaControls()); | |
| 3306 return node; | |
| 3307 } | 3300 } |
| 3308 | 3301 |
| 3309 return false; | 3302 return nullptr; |
| 3310 } | 3303 } |
| 3311 | 3304 |
| 3312 void HTMLMediaElement::ensureMediaControls() | 3305 void HTMLMediaElement::ensureMediaControls() |
| 3313 { | 3306 { |
| 3314 if (hasMediaControls()) | 3307 if (mediaControls()) |
| 3315 return; | 3308 return; |
| 3316 | 3309 |
| 3317 RefPtrWillBeRawPtr<MediaControls> mediaControls = MediaControls::create(*thi
s); | 3310 RefPtrWillBeRawPtr<MediaControls> mediaControls = MediaControls::create(*thi
s); |
| 3318 | 3311 |
| 3319 mediaControls->reset(); | 3312 mediaControls->reset(); |
| 3320 if (isFullscreen()) | 3313 if (isFullscreen()) |
| 3321 mediaControls->enteredFullscreen(); | 3314 mediaControls->enteredFullscreen(); |
| 3322 | 3315 |
| 3323 ensureClosedShadowRoot().appendChild(mediaControls); | 3316 ensureClosedShadowRoot().appendChild(mediaControls); |
| 3324 | 3317 |
| 3325 if (!shouldShowControls() || !inDocument()) | 3318 if (!shouldShowControls() || !inDocument()) |
| 3326 mediaControls->hide(); | 3319 mediaControls->hide(); |
| 3327 } | 3320 } |
| 3328 | 3321 |
| 3329 void HTMLMediaElement::configureMediaControls() | 3322 void HTMLMediaElement::configureMediaControls() |
| 3330 { | 3323 { |
| 3331 if (!inDocument()) { | 3324 if (!inDocument()) { |
| 3332 if (hasMediaControls()) | 3325 if (mediaControls()) |
| 3333 mediaControls()->hide(); | 3326 mediaControls()->hide(); |
| 3334 return; | 3327 return; |
| 3335 } | 3328 } |
| 3336 | 3329 |
| 3337 ensureMediaControls(); | 3330 ensureMediaControls(); |
| 3338 mediaControls()->reset(); | 3331 mediaControls()->reset(); |
| 3339 if (shouldShowControls()) | 3332 if (shouldShowControls()) |
| 3340 mediaControls()->show(); | 3333 mediaControls()->show(); |
| 3341 else | 3334 else |
| 3342 mediaControls()->hide(); | 3335 mediaControls()->hide(); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 3366 } | 3359 } |
| 3367 | 3360 |
| 3368 if (assumption == AssumeNoVisibleChange | 3361 if (assumption == AssumeNoVisibleChange |
| 3369 && m_haveVisibleTextTrack == haveVisibleTextTrack) { | 3362 && m_haveVisibleTextTrack == haveVisibleTextTrack) { |
| 3370 cueTimeline().updateActiveCues(currentTime()); | 3363 cueTimeline().updateActiveCues(currentTime()); |
| 3371 return; | 3364 return; |
| 3372 } | 3365 } |
| 3373 m_haveVisibleTextTrack = haveVisibleTextTrack; | 3366 m_haveVisibleTextTrack = haveVisibleTextTrack; |
| 3374 m_closedCaptionsVisible = m_haveVisibleTextTrack; | 3367 m_closedCaptionsVisible = m_haveVisibleTextTrack; |
| 3375 | 3368 |
| 3376 if (!m_haveVisibleTextTrack && !hasMediaControls()) | 3369 if (!m_haveVisibleTextTrack && !mediaControls()) |
| 3377 return; | 3370 return; |
| 3378 | 3371 |
| 3379 ensureMediaControls(); | 3372 ensureMediaControls(); |
| 3380 mediaControls()->changedClosedCaptionsVisibility(); | 3373 mediaControls()->changedClosedCaptionsVisibility(); |
| 3381 | 3374 |
| 3382 cueTimeline().updateActiveCues(currentTime()); | 3375 cueTimeline().updateActiveCues(currentTime()); |
| 3383 updateTextTrackDisplay(); | 3376 updateTextTrackDisplay(); |
| 3384 } | 3377 } |
| 3385 | 3378 |
| 3386 void* HTMLMediaElement::preDispatchEventHandler(Event* event) | 3379 void* HTMLMediaElement::preDispatchEventHandler(Event* event) |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3565 } | 3558 } |
| 3566 | 3559 |
| 3567 bool HTMLMediaElement::isInteractiveContent() const | 3560 bool HTMLMediaElement::isInteractiveContent() const |
| 3568 { | 3561 { |
| 3569 return fastHasAttribute(controlsAttr); | 3562 return fastHasAttribute(controlsAttr); |
| 3570 } | 3563 } |
| 3571 | 3564 |
| 3572 void HTMLMediaElement::defaultEventHandler(Event* event) | 3565 void HTMLMediaElement::defaultEventHandler(Event* event) |
| 3573 { | 3566 { |
| 3574 if (event->type() == EventTypeNames::focusin) { | 3567 if (event->type() == EventTypeNames::focusin) { |
| 3575 if (hasMediaControls()) | 3568 if (mediaControls()) |
| 3576 mediaControls()->mediaElementFocused(); | 3569 mediaControls()->mediaElementFocused(); |
| 3577 } | 3570 } |
| 3578 HTMLElement::defaultEventHandler(event); | 3571 HTMLElement::defaultEventHandler(event); |
| 3579 } | 3572 } |
| 3580 | 3573 |
| 3581 DEFINE_TRACE(HTMLMediaElement) | 3574 DEFINE_TRACE(HTMLMediaElement) |
| 3582 { | 3575 { |
| 3583 #if ENABLE(OILPAN) | 3576 #if ENABLE(OILPAN) |
| 3584 visitor->trace(m_playedTimeRanges); | 3577 visitor->trace(m_playedTimeRanges); |
| 3585 visitor->trace(m_asyncEventQueue); | 3578 visitor->trace(m_asyncEventQueue); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3632 | 3625 |
| 3633 #if ENABLE(WEB_AUDIO) | 3626 #if ENABLE(WEB_AUDIO) |
| 3634 void HTMLMediaElement::clearWeakMembers(Visitor* visitor) | 3627 void HTMLMediaElement::clearWeakMembers(Visitor* visitor) |
| 3635 { | 3628 { |
| 3636 if (!visitor->isAlive(m_audioSourceNode) && audioSourceProvider()) | 3629 if (!visitor->isAlive(m_audioSourceNode) && audioSourceProvider()) |
| 3637 audioSourceProvider()->setClient(nullptr); | 3630 audioSourceProvider()->setClient(nullptr); |
| 3638 } | 3631 } |
| 3639 #endif | 3632 #endif |
| 3640 | 3633 |
| 3641 } | 3634 } |
| OLD | NEW |