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

Side by Side Diff: third_party/WebKit/Source/core/html/HTMLMediaElement.cpp

Issue 1377353002: Update poster code as per https://html.spec.whatwg.org/#show-poster-flag Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: update "show poster" flag as per spec Created 5 years, 2 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
OLDNEW
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 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 , m_lastSeekTime(0) 307 , m_lastSeekTime(0)
308 , m_previousProgressTime(std::numeric_limits<double>::max()) 308 , m_previousProgressTime(std::numeric_limits<double>::max())
309 , m_duration(std::numeric_limits<double>::quiet_NaN()) 309 , m_duration(std::numeric_limits<double>::quiet_NaN())
310 , m_lastTimeUpdateEventWallTime(0) 310 , m_lastTimeUpdateEventWallTime(0)
311 , m_lastTimeUpdateEventMovieTime(0) 311 , m_lastTimeUpdateEventMovieTime(0)
312 , m_defaultPlaybackStartPosition(0) 312 , m_defaultPlaybackStartPosition(0)
313 , m_loadState(WaitingForSource) 313 , m_loadState(WaitingForSource)
314 , m_deferredLoadState(NotDeferred) 314 , m_deferredLoadState(NotDeferred)
315 , m_deferredLoadTimer(this, &HTMLMediaElement::deferredLoadTimerFired) 315 , m_deferredLoadTimer(this, &HTMLMediaElement::deferredLoadTimerFired)
316 , m_webLayer(nullptr) 316 , m_webLayer(nullptr)
317 , m_displayMode(Unknown)
318 , m_cachedTime(std::numeric_limits<double>::quiet_NaN()) 317 , m_cachedTime(std::numeric_limits<double>::quiet_NaN())
319 , m_fragmentEndTime(std::numeric_limits<double>::quiet_NaN()) 318 , m_fragmentEndTime(std::numeric_limits<double>::quiet_NaN())
320 , m_pendingActionFlags(0) 319 , m_pendingActionFlags(0)
321 , m_userGestureRequiredForPlay(false) 320 , m_userGestureRequiredForPlay(false)
322 , m_playing(false) 321 , m_playing(false)
323 , m_shouldDelayLoadEvent(false) 322 , m_shouldDelayLoadEvent(false)
324 , m_haveFiredLoadedData(false) 323 , m_haveFiredLoadedData(false)
325 , m_autoplaying(true) 324 , m_autoplaying(true)
326 , m_muted(false) 325 , m_muted(false)
327 , m_paused(true) 326 , m_paused(true)
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after
730 stopPeriodicTimers(); 729 stopPeriodicTimers();
731 m_loadTimer.stop(); 730 m_loadTimer.stop();
732 cancelDeferredLoad(); 731 cancelDeferredLoad();
733 // FIXME: Figure out appropriate place to reset LoadTextTrackResource if nec essary and set m_pendingActionFlags to 0 here. 732 // FIXME: Figure out appropriate place to reset LoadTextTrackResource if nec essary and set m_pendingActionFlags to 0 here.
734 m_pendingActionFlags &= ~LoadMediaResource; 733 m_pendingActionFlags &= ~LoadMediaResource;
735 m_sentEndEvent = false; 734 m_sentEndEvent = false;
736 m_sentStalledEvent = false; 735 m_sentStalledEvent = false;
737 m_haveFiredLoadedData = false; 736 m_haveFiredLoadedData = false;
738 m_completelyLoaded = false; 737 m_completelyLoaded = false;
739 m_havePreparedToPlay = false; 738 m_havePreparedToPlay = false;
740 m_displayMode = Unknown;
741 739
742 // 1 - Abort any already-running instance of the resource selection algorith m for this element. 740 // 1 - Abort any already-running instance of the resource selection algorith m for this element.
743 m_loadState = WaitingForSource; 741 m_loadState = WaitingForSource;
744 m_currentSourceNode = nullptr; 742 m_currentSourceNode = nullptr;
745 743
746 // 2 - If there are any tasks from the media element's media element event t ask source in 744 // 2 - If there are any tasks from the media element's media element event t ask source in
747 // one of the task queues, then remove those tasks. 745 // one of the task queues, then remove those tasks.
748 cancelPendingEventsAndCallbacks(); 746 cancelPendingEventsAndCallbacks();
749 747
750 // 3 - If the media element's networkState is set to NETWORK_LOADING or NETW ORK_IDLE, queue 748 // 3 - If the media element's networkState is set to NETWORK_LOADING or NETW ORK_IDLE, queue
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
797 795
798 // 6 - Set the error attribute to null and the autoplaying flag to true. 796 // 6 - Set the error attribute to null and the autoplaying flag to true.
799 m_error = nullptr; 797 m_error = nullptr;
800 m_autoplaying = true; 798 m_autoplaying = true;
801 799
802 // 7 - Invoke the media element's resource selection algorithm. 800 // 7 - Invoke the media element's resource selection algorithm.
803 801
804 // 8 - Note: Playback of any previously playing media resource for this elem ent stops. 802 // 8 - Note: Playback of any previously playing media resource for this elem ent stops.
805 803
806 // The resource selection algorithm 804 // The resource selection algorithm
807 // 1 - Set the networkState to NETWORK_NO_SOURCE 805 // 1 - Set the element's networkState attribute to the NETWORK_NO_SOURCE val ue.
808 m_networkState = NETWORK_NO_SOURCE; 806 m_networkState = NETWORK_NO_SOURCE;
809 807
810 // 2 - Asynchronously await a stable state. 808 // 2 - Set the element's show poster flag to true.
809 setShowPoster(true);
811 810
812 m_playedTimeRanges = TimeRanges::create(); 811 m_playedTimeRanges = TimeRanges::create();
813 812
814 // FIXME: Investigate whether these can be moved into m_networkState != NETW ORK_EMPTY block above 813 // FIXME: Investigate whether these can be moved into m_networkState != NETW ORK_EMPTY block above
815 // so they are closer to the relevant spec steps. 814 // so they are closer to the relevant spec steps.
816 m_lastSeekTime = 0; 815 m_lastSeekTime = 0;
817 m_duration = std::numeric_limits<double>::quiet_NaN(); 816 m_duration = std::numeric_limits<double>::quiet_NaN();
818 817
819 // The spec doesn't say to block the load event until we actually run the as ynchronous section 818 // 3 - Set the media element's delaying-the-load-event flag to true (this de lays the load event).
820 // algorithm, but do it now because we won't start that until after the time r fires and the
821 // event may have already fired by then.
822 setShouldDelayLoadEvent(true); 819 setShouldDelayLoadEvent(true);
823 if (mediaControls()) 820 if (mediaControls())
824 mediaControls()->reset(); 821 mediaControls()->reset();
822
823 // 4 - Await a stable state, allowing the task that invoked this algorithm t o continue.
825 } 824 }
826 825
827 void HTMLMediaElement::loadInternal() 826 void HTMLMediaElement::loadInternal()
828 { 827 {
829 // HTMLMediaElement::textTracksAreReady will need "... the text tracks whose mode was not in the 828 // HTMLMediaElement::textTracksAreReady will need "... the text tracks whose mode was not in the
830 // disabled state when the element's resource selection algorithm last start ed". 829 // disabled state when the element's resource selection algorithm last start ed".
831 m_textTracksWhenResourceSelectionBegan.clear(); 830 m_textTracksWhenResourceSelectionBegan.clear();
832 if (m_textTracks) { 831 if (m_textTracks) {
833 for (unsigned i = 0; i < m_textTracks->length(); ++i) { 832 for (unsigned i = 0; i < m_textTracks->length(); ++i) {
834 TextTrack* track = m_textTracks->item(i); 833 TextTrack* track = m_textTracks->item(i);
(...skipping 21 matching lines...) Expand all
856 mode = children; 855 mode = children;
857 m_nextChildNodeToConsider = element; 856 m_nextChildNodeToConsider = element;
858 m_currentSourceNode = nullptr; 857 m_currentSourceNode = nullptr;
859 } else { 858 } else {
860 // Otherwise the media element has neither a src attribute nor a sou rce element 859 // Otherwise the media element has neither a src attribute nor a sou rce element
861 // child: set the networkState to NETWORK_EMPTY, and abort these ste ps; the 860 // child: set the networkState to NETWORK_EMPTY, and abort these ste ps; the
862 // synchronous section ends. 861 // synchronous section ends.
863 m_loadState = WaitingForSource; 862 m_loadState = WaitingForSource;
864 setShouldDelayLoadEvent(false); 863 setShouldDelayLoadEvent(false);
865 m_networkState = NETWORK_EMPTY; 864 m_networkState = NETWORK_EMPTY;
866 updateDisplayState();
867 865
868 WTF_LOG(Media, "HTMLMediaElement::selectMediaResource(%p), nothing t o load", this); 866 WTF_LOG(Media, "HTMLMediaElement::selectMediaResource(%p), nothing t o load", this);
869 return; 867 return;
870 } 868 }
871 } 869 }
872 870
873 // 4 - Set the media element's delaying-the-load-event flag to true (this de lays the load event), 871 // 4 - Set the media element's delaying-the-load-event flag to true (this de lays the load event),
874 // and set its networkState to NETWORK_LOADING. 872 // and set its networkState to NETWORK_LOADING.
875 setShouldDelayLoadEvent(true); 873 setShouldDelayLoadEvent(true);
876 m_networkState = NETWORK_LOADING; 874 m_networkState = NETWORK_LOADING;
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
947 945
948 #if ENABLE(WEB_AUDIO) 946 #if ENABLE(WEB_AUDIO)
949 if (m_audioSourceNode) 947 if (m_audioSourceNode)
950 m_audioSourceNode->onCurrentSrcChanged(m_currentSrc); 948 m_audioSourceNode->onCurrentSrcChanged(m_currentSrc);
951 #endif 949 #endif
952 950
953 WTF_LOG(Media, "HTMLMediaElement::loadResource(%p) - m_currentSrc -> %s", th is, urlForLoggingMedia(m_currentSrc).utf8().data()); 951 WTF_LOG(Media, "HTMLMediaElement::loadResource(%p) - m_currentSrc -> %s", th is, urlForLoggingMedia(m_currentSrc).utf8().data());
954 952
955 startProgressEventTimer(); 953 startProgressEventTimer();
956 954
957 // Reset display mode to force a recalculation of what to show because we ar e resetting the player.
958 setDisplayMode(Unknown);
959
960 setPlayerPreload(); 955 setPlayerPreload();
961 956
962 if (fastHasAttribute(mutedAttr)) 957 if (fastHasAttribute(mutedAttr))
963 m_muted = true; 958 m_muted = true;
964 updateVolume(); 959 updateVolume();
965 960
966 ASSERT(!m_mediaSource); 961 ASSERT(!m_mediaSource);
967 962
968 bool attemptLoad = true; 963 bool attemptLoad = true;
969 964
(...skipping 20 matching lines...) Expand all
990 if (!m_havePreparedToPlay && !autoplay() && preloadType() == WebMediaPla yer::PreloadNone) { 985 if (!m_havePreparedToPlay && !autoplay() && preloadType() == WebMediaPla yer::PreloadNone) {
991 WTF_LOG(Media, "HTMLMediaElement::loadResource(%p) : Delaying load b ecause preload == 'none'", this); 986 WTF_LOG(Media, "HTMLMediaElement::loadResource(%p) : Delaying load b ecause preload == 'none'", this);
992 deferLoad(); 987 deferLoad();
993 } else { 988 } else {
994 startPlayerLoad(); 989 startPlayerLoad();
995 } 990 }
996 } else { 991 } else {
997 mediaLoadingFailed(WebMediaPlayer::NetworkStateFormatError); 992 mediaLoadingFailed(WebMediaPlayer::NetworkStateFormatError);
998 } 993 }
999 994
1000 // If there is no poster to display, allow the media engine to render video frames as soon as
1001 // they are available.
1002 updateDisplayState();
1003
1004 if (layoutObject()) 995 if (layoutObject())
1005 layoutObject()->updateFromElement(); 996 layoutObject()->updateFromElement();
1006 } 997 }
1007 998
1008 void HTMLMediaElement::startPlayerLoad() 999 void HTMLMediaElement::startPlayerLoad()
1009 { 1000 {
1010 ASSERT(!m_webMediaPlayer); 1001 ASSERT(!m_webMediaPlayer);
1011 // Filter out user:pass as those two URL components aren't 1002 // Filter out user:pass as those two URL components aren't
1012 // considered for media resource fetches (including for the CORS 1003 // considered for media resource fetches (including for the CORS
1013 // use-credentials mode.) That behavior aligns with Gecko, with IE 1004 // use-credentials mode.) That behavior aligns with Gecko, with IE
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
1241 void HTMLMediaElement::waitForSourceChange() 1232 void HTMLMediaElement::waitForSourceChange()
1242 { 1233 {
1243 WTF_LOG(Media, "HTMLMediaElement::waitForSourceChange(%p)", this); 1234 WTF_LOG(Media, "HTMLMediaElement::waitForSourceChange(%p)", this);
1244 1235
1245 stopPeriodicTimers(); 1236 stopPeriodicTimers();
1246 m_loadState = WaitingForSource; 1237 m_loadState = WaitingForSource;
1247 1238
1248 // 6.17 - Waiting: Set the element's networkState attribute to the NETWORK_N O_SOURCE value 1239 // 6.17 - Waiting: Set the element's networkState attribute to the NETWORK_N O_SOURCE value
1249 m_networkState = NETWORK_NO_SOURCE; 1240 m_networkState = NETWORK_NO_SOURCE;
1250 1241
1251 // 6.18 - Set the element's delaying-the-load-event flag to false. This stop s delaying the load event. 1242 // 6.18 - Set the element's show poster flag to true
1243 setShowPoster(true);
1244
1245 // 6.19 - Queue a task to set the element's delaying-the-load-event flag to false. This stops delaying the load event.
1252 setShouldDelayLoadEvent(false); 1246 setShouldDelayLoadEvent(false);
1253 1247
1254 updateDisplayState();
1255
1256 if (layoutObject()) 1248 if (layoutObject())
1257 layoutObject()->updateFromElement(); 1249 layoutObject()->updateFromElement();
1258 } 1250 }
1259 1251
1260 void HTMLMediaElement::noneSupported() 1252 void HTMLMediaElement::noneSupported()
1261 { 1253 {
1262 WTF_LOG(Media, "HTMLMediaElement::noneSupported(%p)", this); 1254 WTF_LOG(Media, "HTMLMediaElement::noneSupported(%p)", this);
1263 1255
1264 stopPeriodicTimers(); 1256 stopPeriodicTimers();
1265 m_loadState = WaitingForSource; 1257 m_loadState = WaitingForSource;
1266 m_currentSourceNode = nullptr; 1258 m_currentSourceNode = nullptr;
1267 1259
1268 // 4.8.10.5 1260 // 4.8.13.5
1269 // 6 - Reaching this step indicates that the media resource failed to load o r that the given 1261 // 6 - Reaching this step indicates that the media resource failed to load o r that the given
1270 // URL could not be resolved. In one atomic operation, run the following ste ps: 1262 // URL could not be resolved. Queue a task to run the dedicated media sourc e failure steps.
1271 1263
1272 // 6.1 - Set the error attribute to a new MediaError object whose code attri bute is set to 1264 // 6.1 - Set the error attribute to a new MediaError object whose code attri bute is set to
1273 // MEDIA_ERR_SRC_NOT_SUPPORTED. 1265 // MEDIA_ERR_SRC_NOT_SUPPORTED.
1274 m_error = MediaError::create(MediaError::MEDIA_ERR_SRC_NOT_SUPPORTED); 1266 m_error = MediaError::create(MediaError::MEDIA_ERR_SRC_NOT_SUPPORTED);
1275 1267
1276 // 6.2 - Forget the media element's media-resource-specific text tracks. 1268 // 6.2 - Forget the media element's media-resource-specific tracks.
1277 forgetResourceSpecificTracks(); 1269 forgetResourceSpecificTracks();
1278 1270
1279 // 6.3 - Set the element's networkState attribute to the NETWORK_NO_SOURCE v alue. 1271 // 6.3 - Set the element's networkState attribute to the NETWORK_NO_SOURCE v alue.
1280 m_networkState = NETWORK_NO_SOURCE; 1272 m_networkState = NETWORK_NO_SOURCE;
1281 1273
1282 // 7 - Queue a task to fire a simple event named error at the media element. 1274 // 6.4 - Set the element's show poster flag to true.
1275 setShowPoster(true);
1276
1277 // 6.5 - Fire a simple event named error at the media element.
1283 scheduleEvent(EventTypeNames::error); 1278 scheduleEvent(EventTypeNames::error);
1284 1279
1285 closeMediaSource(); 1280 closeMediaSource();
1286 1281
1287 // 8 - Set the element's delaying-the-load-event flag to false. This stops d elaying the load event. 1282 // 6.6 - Set the element's delaying-the-load-event flag to false. This stops delaying the load event.
1288 setShouldDelayLoadEvent(false); 1283 setShouldDelayLoadEvent(false);
1289 1284
1290 // 9 - Abort these steps. Until the load() method is invoked or the src attr ibute is changed, 1285 // 7 - Wait for the task queued by the previous step to have executed.
1291 // the element won't attempt to load another resource.
1292 1286
1293 updateDisplayState(); 1287 // 8 - Abort these steps. The element won't attempt to load
1288 // another resource until this algorithm is triggered again.
1294 1289
1295 if (layoutObject()) 1290 if (layoutObject())
1296 layoutObject()->updateFromElement(); 1291 layoutObject()->updateFromElement();
1297 } 1292 }
1298 1293
1299 void HTMLMediaElement::mediaEngineError(MediaError* err) 1294 void HTMLMediaElement::mediaEngineError(MediaError* err)
1300 { 1295 {
1301 ASSERT(m_readyState >= HAVE_METADATA); 1296 ASSERT(m_readyState >= HAVE_METADATA);
1302 WTF_LOG(Media, "HTMLMediaElement::mediaEngineError(%p, %d)", this, static_ca st<int>(err->code())); 1297 WTF_LOG(Media, "HTMLMediaElement::mediaEngineError(%p, %d)", this, static_ca st<int>(err->code()));
1303 1298
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
1369 1364
1370 if (error == WebMediaPlayer::NetworkStateNetworkError && m_readyState >= HAV E_METADATA) 1365 if (error == WebMediaPlayer::NetworkStateNetworkError && m_readyState >= HAV E_METADATA)
1371 mediaEngineError(MediaError::create(MediaError::MEDIA_ERR_NETWORK)); 1366 mediaEngineError(MediaError::create(MediaError::MEDIA_ERR_NETWORK));
1372 else if (error == WebMediaPlayer::NetworkStateDecodeError) 1367 else if (error == WebMediaPlayer::NetworkStateDecodeError)
1373 mediaEngineError(MediaError::create(MediaError::MEDIA_ERR_DECODE)); 1368 mediaEngineError(MediaError::create(MediaError::MEDIA_ERR_DECODE));
1374 else if ((error == WebMediaPlayer::NetworkStateFormatError 1369 else if ((error == WebMediaPlayer::NetworkStateFormatError
1375 || error == WebMediaPlayer::NetworkStateNetworkError) 1370 || error == WebMediaPlayer::NetworkStateNetworkError)
1376 && m_loadState == LoadingFromSrcAttr) 1371 && m_loadState == LoadingFromSrcAttr)
1377 noneSupported(); 1372 noneSupported();
1378 1373
1379 updateDisplayState();
1380 if (mediaControls()) 1374 if (mediaControls())
1381 mediaControls()->reset(); 1375 mediaControls()->reset();
1382 } 1376 }
1383 1377
1384 void HTMLMediaElement::setNetworkState(WebMediaPlayer::NetworkState state) 1378 void HTMLMediaElement::setNetworkState(WebMediaPlayer::NetworkState state)
1385 { 1379 {
1386 WTF_LOG(Media, "HTMLMediaElement::setNetworkState(%p, %d) - current state is %d", this, static_cast<int>(state), static_cast<int>(m_networkState)); 1380 WTF_LOG(Media, "HTMLMediaElement::setNetworkState(%p, %d) - current state is %d", this, static_cast<int>(state), static_cast<int>(m_networkState));
1387 1381
1388 if (state == WebMediaPlayer::NetworkStateEmpty) { 1382 if (state == WebMediaPlayer::NetworkStateEmpty) {
1389 // Just update the cached state and leave, we can't do anything. 1383 // Just update the cached state and leave, we can't do anything.
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
1561 } 1555 }
1562 1556
1563 // Check for autoplay, and record metrics about it if needed. 1557 // Check for autoplay, and record metrics about it if needed.
1564 if (shouldAutoplay(RecordMetricsBehavior::DoRecord)) { 1558 if (shouldAutoplay(RecordMetricsBehavior::DoRecord)) {
1565 // If the autoplay experiment says that it's okay to play now, 1559 // If the autoplay experiment says that it's okay to play now,
1566 // then don't require a user gesture. 1560 // then don't require a user gesture.
1567 m_autoplayHelper.becameReadyToPlay(); 1561 m_autoplayHelper.becameReadyToPlay();
1568 1562
1569 if (!m_userGestureRequiredForPlay) { 1563 if (!m_userGestureRequiredForPlay) {
1570 m_paused = false; 1564 m_paused = false;
1565 setShowPoster(false);
1571 invalidateCachedTime(); 1566 invalidateCachedTime();
1572 scheduleEvent(EventTypeNames::play); 1567 scheduleEvent(EventTypeNames::play);
1573 scheduleEvent(EventTypeNames::playing); 1568 scheduleEvent(EventTypeNames::playing);
1574 } 1569 }
1575 } 1570 }
1576 1571
1577 scheduleEvent(EventTypeNames::canplaythrough); 1572 scheduleEvent(EventTypeNames::canplaythrough);
1578 1573
1579 shouldUpdateDisplayState = true; 1574 shouldUpdateDisplayState = true;
1580 } 1575 }
1581 1576
1582 if (shouldUpdateDisplayState) { 1577 if (shouldUpdateDisplayState) {
1583 updateDisplayState();
1584 if (mediaControls()) 1578 if (mediaControls())
1585 mediaControls()->refreshClosedCaptionsButtonVisibility(); 1579 mediaControls()->refreshClosedCaptionsButtonVisibility();
1586 } 1580 }
1587 1581
1588 updatePlayState(); 1582 updatePlayState();
1589 updateMediaController(); 1583 updateMediaController();
1590 cueTimeline().updateActiveCues(currentTime()); 1584 cueTimeline().updateActiveCues(currentTime());
1591 } 1585 }
1592 1586
1593 void HTMLMediaElement::progressEventTimerFired(Timer<HTMLMediaElement>*) 1587 void HTMLMediaElement::progressEventTimerFired(Timer<HTMLMediaElement>*)
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1632 m_havePreparedToPlay = true; 1626 m_havePreparedToPlay = true;
1633 1627
1634 if (loadIsDeferred()) 1628 if (loadIsDeferred())
1635 startDeferredLoad(); 1629 startDeferredLoad();
1636 } 1630 }
1637 1631
1638 void HTMLMediaElement::seek(double time) 1632 void HTMLMediaElement::seek(double time)
1639 { 1633 {
1640 WTF_LOG(Media, "HTMLMediaElement::seek(%p, %f)", this, time); 1634 WTF_LOG(Media, "HTMLMediaElement::seek(%p, %f)", this, time);
1641 1635
1636 // 1 - Set the media element's show poster flag to false.
1637 setShowPoster(false);
1642 // 2 - If the media element's readyState is HAVE_NOTHING, abort these steps. 1638 // 2 - If the media element's readyState is HAVE_NOTHING, abort these steps.
1643 if (m_readyState == HAVE_NOTHING) 1639 if (m_readyState == HAVE_NOTHING)
1644 return; 1640 return;
1645 1641
1646 // If the media engine has been told to postpone loading data, let it go ahe ad now. 1642 // If the media engine has been told to postpone loading data, let it go ahe ad now.
1647 if (preloadType() < WebMediaPlayer::PreloadAuto && m_readyState < HAVE_FUTUR E_DATA) 1643 if (preloadType() < WebMediaPlayer::PreloadAuto && m_readyState < HAVE_FUTUR E_DATA)
1648 prepareToPlay(); 1644 prepareToPlay();
1649 1645
1650 // Get the current time before setting m_seeking, m_lastSeekTime is returned once it is set. 1646 // Get the current time before setting m_seeking, m_lastSeekTime is returned once it is set.
1651 refreshCachedTime(); 1647 refreshCachedTime();
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
1714 WTF_LOG(Media, "HTMLMediaElement::finishSeek(%p)", this); 1710 WTF_LOG(Media, "HTMLMediaElement::finishSeek(%p)", this);
1715 1711
1716 // 14 - Set the seeking IDL attribute to false. 1712 // 14 - Set the seeking IDL attribute to false.
1717 m_seeking = false; 1713 m_seeking = false;
1718 1714
1719 // 16 - Queue a task to fire a simple event named timeupdate at the element. 1715 // 16 - Queue a task to fire a simple event named timeupdate at the element.
1720 scheduleTimeupdateEvent(false); 1716 scheduleTimeupdateEvent(false);
1721 1717
1722 // 17 - Queue a task to fire a simple event named seeked at the element. 1718 // 17 - Queue a task to fire a simple event named seeked at the element.
1723 scheduleEvent(EventTypeNames::seeked); 1719 scheduleEvent(EventTypeNames::seeked);
1724
1725 setDisplayMode(Video);
1726 } 1720 }
1727 1721
1728 HTMLMediaElement::ReadyState HTMLMediaElement::readyState() const 1722 HTMLMediaElement::ReadyState HTMLMediaElement::readyState() const
1729 { 1723 {
1730 return m_readyState; 1724 return m_readyState;
1731 } 1725 }
1732 1726
1733 bool HTMLMediaElement::hasAudio() const 1727 bool HTMLMediaElement::hasAudio() const
1734 { 1728 {
1735 return webMediaPlayer() && webMediaPlayer()->hasAudio(); 1729 return webMediaPlayer() && webMediaPlayer()->hasAudio();
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
2003 // is ignored to seek back to start in case loop was set after playback 1997 // is ignored to seek back to start in case loop was set after playback
2004 // ended. See http://crbug.com/364442 1998 // ended. See http://crbug.com/364442
2005 if (endedPlayback(LoopCondition::Ignored)) 1999 if (endedPlayback(LoopCondition::Ignored))
2006 seek(0); 2000 seek(0);
2007 2001
2008 if (m_mediaController) 2002 if (m_mediaController)
2009 m_mediaController->bringElementUpToSpeed(this); 2003 m_mediaController->bringElementUpToSpeed(this);
2010 2004
2011 if (m_paused) { 2005 if (m_paused) {
2012 m_paused = false; 2006 m_paused = false;
2007 setShowPoster(false);
2013 invalidateCachedTime(); 2008 invalidateCachedTime();
2014 scheduleEvent(EventTypeNames::play); 2009 scheduleEvent(EventTypeNames::play);
2015 2010
2016 if (m_readyState <= HAVE_CURRENT_DATA) 2011 if (m_readyState <= HAVE_CURRENT_DATA)
2017 scheduleEvent(EventTypeNames::waiting); 2012 scheduleEvent(EventTypeNames::waiting);
2018 else if (m_readyState >= HAVE_FUTURE_DATA) 2013 else if (m_readyState >= HAVE_FUTURE_DATA)
2019 scheduleEvent(EventTypeNames::playing); 2014 scheduleEvent(EventTypeNames::playing);
2020 } 2015 }
2021 m_autoplaying = false; 2016 m_autoplaying = false;
2022 2017
(...skipping 845 matching lines...) Expand 10 before | Expand all | Expand 10 after
2868 if (mediaControls()) 2863 if (mediaControls())
2869 mediaControls()->stoppedCasting(); 2864 mediaControls()->stoppedCasting();
2870 } 2865 }
2871 2866
2872 // MediaPlayerPresentation methods 2867 // MediaPlayerPresentation methods
2873 void HTMLMediaElement::repaint() 2868 void HTMLMediaElement::repaint()
2874 { 2869 {
2875 if (m_webLayer) 2870 if (m_webLayer)
2876 m_webLayer->invalidate(); 2871 m_webLayer->invalidate();
2877 2872
2878 updateDisplayState();
2879 if (layoutObject()) 2873 if (layoutObject())
2880 layoutObject()->setShouldDoFullPaintInvalidation(); 2874 layoutObject()->setShouldDoFullPaintInvalidation();
2881 } 2875 }
2882 2876
2883 void HTMLMediaElement::sizeChanged() 2877 void HTMLMediaElement::sizeChanged()
2884 { 2878 {
2885 WTF_LOG(Media, "HTMLMediaElement::mediaPlayerSizeChanged(%p)", this); 2879 WTF_LOG(Media, "HTMLMediaElement::mediaPlayerSizeChanged(%p)", this);
2886 2880
2887 ASSERT(hasVideo()); // "resize" makes no sense absent video. 2881 ASSERT(hasVideo()); // "resize" makes no sense absent video.
2888 if (m_readyState > HAVE_NOTHING && isHTMLVideoElement()) 2882 if (m_readyState > HAVE_NOTHING && isHTMLVideoElement())
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
2981 2975
2982 void HTMLMediaElement::updatePlayState() 2976 void HTMLMediaElement::updatePlayState()
2983 { 2977 {
2984 bool isPlaying = webMediaPlayer() && !webMediaPlayer()->paused(); 2978 bool isPlaying = webMediaPlayer() && !webMediaPlayer()->paused();
2985 bool shouldBePlaying = potentiallyPlaying(); 2979 bool shouldBePlaying = potentiallyPlaying();
2986 2980
2987 WTF_LOG(Media, "HTMLMediaElement::updatePlayState(%p) - shouldBePlaying = %s , isPlaying = %s", 2981 WTF_LOG(Media, "HTMLMediaElement::updatePlayState(%p) - shouldBePlaying = %s , isPlaying = %s",
2988 this, boolString(shouldBePlaying), boolString(isPlaying)); 2982 this, boolString(shouldBePlaying), boolString(isPlaying));
2989 2983
2990 if (shouldBePlaying) { 2984 if (shouldBePlaying) {
2991 setDisplayMode(Video);
2992 invalidateCachedTime(); 2985 invalidateCachedTime();
2993 2986
2994 if (!isPlaying) { 2987 if (!isPlaying) {
2995 // Set rate, muted before calling play in case they were set before the media engine was setup. 2988 // Set rate, muted before calling play in case they were set before the media engine was setup.
2996 // The media engine should just stash the rate and muted values sinc e it isn't already playing. 2989 // The media engine should just stash the rate and muted values sinc e it isn't already playing.
2997 webMediaPlayer()->setRate(effectivePlaybackRate()); 2990 webMediaPlayer()->setRate(effectivePlaybackRate());
2998 updateVolume(); 2991 updateVolume();
2999 webMediaPlayer()->play(); 2992 webMediaPlayer()->play();
3000 } 2993 }
3001 2994
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
3046 3039
3047 if (m_networkState == NETWORK_EMPTY || m_completelyLoaded || m_isFinalizing) 3040 if (m_networkState == NETWORK_EMPTY || m_completelyLoaded || m_isFinalizing)
3048 return; 3041 return;
3049 3042
3050 // 2 - Set the error attribute to a new MediaError object whose code attribu te is set to MEDIA_ERR_ABORTED. 3043 // 2 - Set the error attribute to a new MediaError object whose code attribu te is set to MEDIA_ERR_ABORTED.
3051 m_error = MediaError::create(MediaError::MEDIA_ERR_ABORTED); 3044 m_error = MediaError::create(MediaError::MEDIA_ERR_ABORTED);
3052 3045
3053 // 3 - Queue a task to fire a simple event named error at the media element. 3046 // 3 - Queue a task to fire a simple event named error at the media element.
3054 scheduleEvent(EventTypeNames::abort); 3047 scheduleEvent(EventTypeNames::abort);
3055 3048
3056 // 4 - If the media element's readyState attribute has a value equal to HAVE _NOTHING, set the 3049 // 4 - If the media element's readyState attribute has a value equal to HAVE _NOTHING,
3057 // element's networkState attribute to the NETWORK_EMPTY value and queue a t ask to fire a 3050 // set the element's networkState attribute to the NETWORK_EMPTY value set t he element's
3058 // simple event named emptied at the element. Otherwise, set the element's n etworkState 3051 // show poster flag to true, and fire a simple event named emptied at the el ement.
3059 // attribute to the NETWORK_IDLE value. 3052 // Otherwise, set the element's networkState attribute to the NETWORK_IDLE v alue.
3060 if (m_readyState == HAVE_NOTHING) { 3053 if (m_readyState == HAVE_NOTHING) {
3061 m_networkState = NETWORK_EMPTY; 3054 m_networkState = NETWORK_EMPTY;
3055 setShowPoster(true);
3062 scheduleEvent(EventTypeNames::emptied); 3056 scheduleEvent(EventTypeNames::emptied);
3063 } else { 3057 } else {
3064 m_networkState = NETWORK_IDLE; 3058 m_networkState = NETWORK_IDLE;
3065 } 3059 }
3066 3060
3067 // 5 - Set the element's delaying-the-load-event flag to false. This stops d elaying the load event. 3061 // 5 - Set the element's delaying-the-load-event flag to false. This stops d elaying the load event.
3068 setShouldDelayLoadEvent(false); 3062 setShouldDelayLoadEvent(false);
3069 3063
3070 // 6 - Abort the overall resource selection algorithm. 3064 // 6 - Abort the overall resource selection algorithm.
3071 m_currentSourceNode = nullptr; 3065 m_currentSourceNode = nullptr;
(...skipping 742 matching lines...) Expand 10 before | Expand all | Expand 10 after
3814 visitor->trace(m_client); 3808 visitor->trace(m_client);
3815 } 3809 }
3816 3810
3817 DEFINE_TRACE(HTMLMediaElement::AudioSourceProviderImpl) 3811 DEFINE_TRACE(HTMLMediaElement::AudioSourceProviderImpl)
3818 { 3812 {
3819 visitor->trace(m_client); 3813 visitor->trace(m_client);
3820 } 3814 }
3821 #endif 3815 #endif
3822 3816
3823 } 3817 }
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/html/HTMLMediaElement.h ('k') | third_party/WebKit/Source/core/html/HTMLVideoElement.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698