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 591 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
602 configureMediaControls(); | 602 configureMediaControls(); |
603 if (m_networkState > NETWORK_EMPTY) | 603 if (m_networkState > NETWORK_EMPTY) |
604 pause(); | 604 pause(); |
605 } | 605 } |
606 } | 606 } |
607 | 607 |
608 void HTMLMediaElement::attach(const AttachContext& context) | 608 void HTMLMediaElement::attach(const AttachContext& context) |
609 { | 609 { |
610 HTMLElement::attach(context); | 610 HTMLElement::attach(context); |
611 | 611 |
612 if (renderer()) | 612 if (layoutObject()) |
613 renderer()->updateFromElement(); | 613 layoutObject()->updateFromElement(); |
614 } | 614 } |
615 | 615 |
616 void HTMLMediaElement::didRecalcStyle(StyleRecalcChange) | 616 void HTMLMediaElement::didRecalcStyle(StyleRecalcChange) |
617 { | 617 { |
618 if (renderer()) | 618 if (layoutObject()) |
619 renderer()->updateFromElement(); | 619 layoutObject()->updateFromElement(); |
620 } | 620 } |
621 | 621 |
622 void HTMLMediaElement::scheduleDelayedAction(DelayedActionType actionType) | 622 void HTMLMediaElement::scheduleDelayedAction(DelayedActionType actionType) |
623 { | 623 { |
624 WTF_LOG(Media, "HTMLMediaElement::scheduleDelayedAction(%p)", this); | 624 WTF_LOG(Media, "HTMLMediaElement::scheduleDelayedAction(%p)", this); |
625 | 625 |
626 if ((actionType & LoadMediaResource) && !(m_pendingActionFlags & LoadMediaRe
source)) { | 626 if ((actionType & LoadMediaResource) && !(m_pendingActionFlags & LoadMediaRe
source)) { |
627 prepareForLoad(); | 627 prepareForLoad(); |
628 m_pendingActionFlags |= LoadMediaResource; | 628 m_pendingActionFlags |= LoadMediaResource; |
629 } | 629 } |
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
995 startPlayerLoad(); | 995 startPlayerLoad(); |
996 } | 996 } |
997 } else { | 997 } else { |
998 mediaLoadingFailed(WebMediaPlayer::NetworkStateFormatError); | 998 mediaLoadingFailed(WebMediaPlayer::NetworkStateFormatError); |
999 } | 999 } |
1000 | 1000 |
1001 // If there is no poster to display, allow the media engine to render video
frames as soon as | 1001 // If there is no poster to display, allow the media engine to render video
frames as soon as |
1002 // they are available. | 1002 // they are available. |
1003 updateDisplayState(); | 1003 updateDisplayState(); |
1004 | 1004 |
1005 if (renderer()) | 1005 if (layoutObject()) |
1006 renderer()->updateFromElement(); | 1006 layoutObject()->updateFromElement(); |
1007 } | 1007 } |
1008 | 1008 |
1009 void HTMLMediaElement::startPlayerLoad() | 1009 void HTMLMediaElement::startPlayerLoad() |
1010 { | 1010 { |
1011 // Filter out user:pass as those two URL components aren't | 1011 // Filter out user:pass as those two URL components aren't |
1012 // considered for media resource fetches (including for the CORS | 1012 // considered for media resource fetches (including for the CORS |
1013 // use-credentials mode.) That behavior aligns with Gecko, with IE | 1013 // use-credentials mode.) That behavior aligns with Gecko, with IE |
1014 // being more restrictive and not allowing fetches to such URLs. | 1014 // being more restrictive and not allowing fetches to such URLs. |
1015 // | 1015 // |
1016 // Spec reference: http://whatwg.org/c/#concept-media-load-resource | 1016 // Spec reference: http://whatwg.org/c/#concept-media-load-resource |
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1213 m_loadState = WaitingForSource; | 1213 m_loadState = WaitingForSource; |
1214 | 1214 |
1215 // 6.17 - Waiting: Set the element's networkState attribute to the NETWORK_N
O_SOURCE value | 1215 // 6.17 - Waiting: Set the element's networkState attribute to the NETWORK_N
O_SOURCE value |
1216 m_networkState = NETWORK_NO_SOURCE; | 1216 m_networkState = NETWORK_NO_SOURCE; |
1217 | 1217 |
1218 // 6.18 - Set the element's delaying-the-load-event flag to false. This stop
s delaying the load event. | 1218 // 6.18 - Set the element's delaying-the-load-event flag to false. This stop
s delaying the load event. |
1219 setShouldDelayLoadEvent(false); | 1219 setShouldDelayLoadEvent(false); |
1220 | 1220 |
1221 updateDisplayState(); | 1221 updateDisplayState(); |
1222 | 1222 |
1223 if (renderer()) | 1223 if (layoutObject()) |
1224 renderer()->updateFromElement(); | 1224 layoutObject()->updateFromElement(); |
1225 } | 1225 } |
1226 | 1226 |
1227 void HTMLMediaElement::noneSupported() | 1227 void HTMLMediaElement::noneSupported() |
1228 { | 1228 { |
1229 WTF_LOG(Media, "HTMLMediaElement::noneSupported(%p)", this); | 1229 WTF_LOG(Media, "HTMLMediaElement::noneSupported(%p)", this); |
1230 | 1230 |
1231 stopPeriodicTimers(); | 1231 stopPeriodicTimers(); |
1232 m_loadState = WaitingForSource; | 1232 m_loadState = WaitingForSource; |
1233 m_currentSourceNode = nullptr; | 1233 m_currentSourceNode = nullptr; |
1234 | 1234 |
(...skipping 17 matching lines...) Expand all Loading... |
1252 closeMediaSource(); | 1252 closeMediaSource(); |
1253 | 1253 |
1254 // 8 - Set the element's delaying-the-load-event flag to false. This stops d
elaying the load event. | 1254 // 8 - Set the element's delaying-the-load-event flag to false. This stops d
elaying the load event. |
1255 setShouldDelayLoadEvent(false); | 1255 setShouldDelayLoadEvent(false); |
1256 | 1256 |
1257 // 9 - Abort these steps. Until the load() method is invoked or the src attr
ibute is changed, | 1257 // 9 - Abort these steps. Until the load() method is invoked or the src attr
ibute is changed, |
1258 // the element won't attempt to load another resource. | 1258 // the element won't attempt to load another resource. |
1259 | 1259 |
1260 updateDisplayState(); | 1260 updateDisplayState(); |
1261 | 1261 |
1262 if (renderer()) | 1262 if (layoutObject()) |
1263 renderer()->updateFromElement(); | 1263 layoutObject()->updateFromElement(); |
1264 } | 1264 } |
1265 | 1265 |
1266 void HTMLMediaElement::mediaEngineError(PassRefPtrWillBeRawPtr<MediaError> err) | 1266 void HTMLMediaElement::mediaEngineError(PassRefPtrWillBeRawPtr<MediaError> err) |
1267 { | 1267 { |
1268 ASSERT(m_readyState >= HAVE_METADATA); | 1268 ASSERT(m_readyState >= HAVE_METADATA); |
1269 WTF_LOG(Media, "HTMLMediaElement::mediaEngineError(%p, %d)", this, static_ca
st<int>(err->code())); | 1269 WTF_LOG(Media, "HTMLMediaElement::mediaEngineError(%p, %d)", this, static_ca
st<int>(err->code())); |
1270 | 1270 |
1271 // 1 - The user agent should cancel the fetching process. | 1271 // 1 - The user agent should cancel the fetching process. |
1272 stopPeriodicTimers(); | 1272 stopPeriodicTimers(); |
1273 m_loadState = WaitingForSource; | 1273 m_loadState = WaitingForSource; |
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1492 | 1492 |
1493 if (m_mediaController) { | 1493 if (m_mediaController) { |
1494 if (jumped && initialPlaybackPosition > m_mediaController->currentTi
me()) | 1494 if (jumped && initialPlaybackPosition > m_mediaController->currentTi
me()) |
1495 m_mediaController->setCurrentTime(initialPlaybackPosition); | 1495 m_mediaController->setCurrentTime(initialPlaybackPosition); |
1496 else | 1496 else |
1497 seek(m_mediaController->currentTime()); | 1497 seek(m_mediaController->currentTime()); |
1498 } | 1498 } |
1499 | 1499 |
1500 if (mediaControls()) | 1500 if (mediaControls()) |
1501 mediaControls()->reset(); | 1501 mediaControls()->reset(); |
1502 if (renderer()) | 1502 if (layoutObject()) |
1503 renderer()->updateFromElement(); | 1503 layoutObject()->updateFromElement(); |
1504 } | 1504 } |
1505 | 1505 |
1506 bool shouldUpdateDisplayState = false; | 1506 bool shouldUpdateDisplayState = false; |
1507 | 1507 |
1508 if (m_readyState >= HAVE_CURRENT_DATA && oldState < HAVE_CURRENT_DATA && !m_
haveFiredLoadedData) { | 1508 if (m_readyState >= HAVE_CURRENT_DATA && oldState < HAVE_CURRENT_DATA && !m_
haveFiredLoadedData) { |
1509 m_haveFiredLoadedData = true; | 1509 m_haveFiredLoadedData = true; |
1510 shouldUpdateDisplayState = true; | 1510 shouldUpdateDisplayState = true; |
1511 scheduleEvent(EventTypeNames::loadeddata); | 1511 scheduleEvent(EventTypeNames::loadeddata); |
1512 setShouldDelayLoadEvent(false); | 1512 setShouldDelayLoadEvent(false); |
1513 } | 1513 } |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1559 if (m_networkState != NETWORK_LOADING) | 1559 if (m_networkState != NETWORK_LOADING) |
1560 return; | 1560 return; |
1561 | 1561 |
1562 double time = WTF::currentTime(); | 1562 double time = WTF::currentTime(); |
1563 double timedelta = time - m_previousProgressTime; | 1563 double timedelta = time - m_previousProgressTime; |
1564 | 1564 |
1565 if (webMediaPlayer() && webMediaPlayer()->didLoadingProgress()) { | 1565 if (webMediaPlayer() && webMediaPlayer()->didLoadingProgress()) { |
1566 scheduleEvent(EventTypeNames::progress); | 1566 scheduleEvent(EventTypeNames::progress); |
1567 m_previousProgressTime = time; | 1567 m_previousProgressTime = time; |
1568 m_sentStalledEvent = false; | 1568 m_sentStalledEvent = false; |
1569 if (renderer()) | 1569 if (layoutObject()) |
1570 renderer()->updateFromElement(); | 1570 layoutObject()->updateFromElement(); |
1571 } else if (timedelta > 3.0 && !m_sentStalledEvent) { | 1571 } else if (timedelta > 3.0 && !m_sentStalledEvent) { |
1572 scheduleEvent(EventTypeNames::stalled); | 1572 scheduleEvent(EventTypeNames::stalled); |
1573 m_sentStalledEvent = true; | 1573 m_sentStalledEvent = true; |
1574 setShouldDelayLoadEvent(false); | 1574 setShouldDelayLoadEvent(false); |
1575 } | 1575 } |
1576 } | 1576 } |
1577 | 1577 |
1578 void HTMLMediaElement::addPlayedRange(double start, double end) | 1578 void HTMLMediaElement::addPlayedRange(double start, double end) |
1579 { | 1579 { |
1580 WTF_LOG(Media, "HTMLMediaElement::addPlayedRange(%p, %f, %f)", this, start,
end); | 1580 WTF_LOG(Media, "HTMLMediaElement::addPlayedRange(%p, %f, %f)", this, start,
end); |
(...skipping 1154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2735 // Abort if duration unchanged. | 2735 // Abort if duration unchanged. |
2736 if (m_duration == duration) | 2736 if (m_duration == duration) |
2737 return; | 2737 return; |
2738 | 2738 |
2739 WTF_LOG(Media, "HTMLMediaElement::durationChanged(%p) : %f -> %f", this, m_d
uration, duration); | 2739 WTF_LOG(Media, "HTMLMediaElement::durationChanged(%p) : %f -> %f", this, m_d
uration, duration); |
2740 m_duration = duration; | 2740 m_duration = duration; |
2741 scheduleEvent(EventTypeNames::durationchange); | 2741 scheduleEvent(EventTypeNames::durationchange); |
2742 | 2742 |
2743 if (mediaControls()) | 2743 if (mediaControls()) |
2744 mediaControls()->reset(); | 2744 mediaControls()->reset(); |
2745 if (renderer()) | 2745 if (layoutObject()) |
2746 renderer()->updateFromElement(); | 2746 layoutObject()->updateFromElement(); |
2747 | 2747 |
2748 if (requestSeek) | 2748 if (requestSeek) |
2749 seek(duration); | 2749 seek(duration); |
2750 } | 2750 } |
2751 | 2751 |
2752 void HTMLMediaElement::mediaPlayerPlaybackStateChanged() | 2752 void HTMLMediaElement::mediaPlayerPlaybackStateChanged() |
2753 { | 2753 { |
2754 WTF_LOG(Media, "HTMLMediaElement::mediaPlayerPlaybackStateChanged(%p)", this
); | 2754 WTF_LOG(Media, "HTMLMediaElement::mediaPlayerPlaybackStateChanged(%p)", this
); |
2755 | 2755 |
2756 if (!webMediaPlayer()) | 2756 if (!webMediaPlayer()) |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2804 mediaControls()->stoppedCasting(); | 2804 mediaControls()->stoppedCasting(); |
2805 } | 2805 } |
2806 | 2806 |
2807 // MediaPlayerPresentation methods | 2807 // MediaPlayerPresentation methods |
2808 void HTMLMediaElement::mediaPlayerRepaint() | 2808 void HTMLMediaElement::mediaPlayerRepaint() |
2809 { | 2809 { |
2810 if (m_webLayer) | 2810 if (m_webLayer) |
2811 m_webLayer->invalidate(); | 2811 m_webLayer->invalidate(); |
2812 | 2812 |
2813 updateDisplayState(); | 2813 updateDisplayState(); |
2814 if (renderer()) | 2814 if (layoutObject()) |
2815 renderer()->setShouldDoFullPaintInvalidation(); | 2815 layoutObject()->setShouldDoFullPaintInvalidation(); |
2816 } | 2816 } |
2817 | 2817 |
2818 void HTMLMediaElement::mediaPlayerSizeChanged() | 2818 void HTMLMediaElement::mediaPlayerSizeChanged() |
2819 { | 2819 { |
2820 WTF_LOG(Media, "HTMLMediaElement::mediaPlayerSizeChanged(%p)", this); | 2820 WTF_LOG(Media, "HTMLMediaElement::mediaPlayerSizeChanged(%p)", this); |
2821 | 2821 |
2822 ASSERT(hasVideo()); // "resize" makes no sense absent video. | 2822 ASSERT(hasVideo()); // "resize" makes no sense absent video. |
2823 if (m_readyState > HAVE_NOTHING && isHTMLVideoElement()) | 2823 if (m_readyState > HAVE_NOTHING && isHTMLVideoElement()) |
2824 scheduleEvent(EventTypeNames::resize); | 2824 scheduleEvent(EventTypeNames::resize); |
2825 | 2825 |
2826 if (renderer()) | 2826 if (layoutObject()) |
2827 renderer()->updateFromElement(); | 2827 layoutObject()->updateFromElement(); |
2828 } | 2828 } |
2829 | 2829 |
2830 PassRefPtrWillBeRawPtr<TimeRanges> HTMLMediaElement::buffered() const | 2830 PassRefPtrWillBeRawPtr<TimeRanges> HTMLMediaElement::buffered() const |
2831 { | 2831 { |
2832 if (m_mediaSource) | 2832 if (m_mediaSource) |
2833 return m_mediaSource->buffered(); | 2833 return m_mediaSource->buffered(); |
2834 | 2834 |
2835 if (!webMediaPlayer()) | 2835 if (!webMediaPlayer()) |
2836 return TimeRanges::create(); | 2836 return TimeRanges::create(); |
2837 | 2837 |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2955 | 2955 |
2956 if (couldPlayIfEnoughData()) | 2956 if (couldPlayIfEnoughData()) |
2957 prepareToPlay(); | 2957 prepareToPlay(); |
2958 | 2958 |
2959 if (mediaControls()) | 2959 if (mediaControls()) |
2960 mediaControls()->playbackStopped(); | 2960 mediaControls()->playbackStopped(); |
2961 } | 2961 } |
2962 | 2962 |
2963 updateMediaController(); | 2963 updateMediaController(); |
2964 | 2964 |
2965 if (renderer()) | 2965 if (layoutObject()) |
2966 renderer()->updateFromElement(); | 2966 layoutObject()->updateFromElement(); |
2967 } | 2967 } |
2968 | 2968 |
2969 void HTMLMediaElement::stopPeriodicTimers() | 2969 void HTMLMediaElement::stopPeriodicTimers() |
2970 { | 2970 { |
2971 m_progressEventTimer.stop(); | 2971 m_progressEventTimer.stop(); |
2972 m_playbackProgressTimer.stop(); | 2972 m_playbackProgressTimer.stop(); |
2973 } | 2973 } |
2974 | 2974 |
2975 void HTMLMediaElement::userCancelledLoad() | 2975 void HTMLMediaElement::userCancelledLoad() |
2976 { | 2976 { |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3061 if (m_playing && m_initialPlayWithoutUserGestures) | 3061 if (m_playing && m_initialPlayWithoutUserGestures) |
3062 gesturelessInitialPlayHalted(); | 3062 gesturelessInitialPlayHalted(); |
3063 | 3063 |
3064 userCancelledLoad(); | 3064 userCancelledLoad(); |
3065 | 3065 |
3066 // Stop the playback without generating events | 3066 // Stop the playback without generating events |
3067 m_playing = false; | 3067 m_playing = false; |
3068 m_paused = true; | 3068 m_paused = true; |
3069 m_seeking = false; | 3069 m_seeking = false; |
3070 | 3070 |
3071 if (renderer()) | 3071 if (layoutObject()) |
3072 renderer()->updateFromElement(); | 3072 layoutObject()->updateFromElement(); |
3073 | 3073 |
3074 stopPeriodicTimers(); | 3074 stopPeriodicTimers(); |
3075 cancelPendingEventsAndCallbacks(); | 3075 cancelPendingEventsAndCallbacks(); |
3076 | 3076 |
3077 m_asyncEventQueue->close(); | 3077 m_asyncEventQueue->close(); |
3078 | 3078 |
3079 // Ensure that hasPendingActivity() is not preventing garbage collection, si
nce otherwise this | 3079 // Ensure that hasPendingActivity() is not preventing garbage collection, si
nce otherwise this |
3080 // media element will simply leak. | 3080 // media element will simply leak. |
3081 ASSERT(!hasPendingActivity()); | 3081 ASSERT(!hasPendingActivity()); |
3082 } | 3082 } |
(...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3595 | 3595 |
3596 #if ENABLE(WEB_AUDIO) | 3596 #if ENABLE(WEB_AUDIO) |
3597 void HTMLMediaElement::clearWeakMembers(Visitor* visitor) | 3597 void HTMLMediaElement::clearWeakMembers(Visitor* visitor) |
3598 { | 3598 { |
3599 if (!visitor->isAlive(m_audioSourceNode) && audioSourceProvider()) | 3599 if (!visitor->isAlive(m_audioSourceNode) && audioSourceProvider()) |
3600 audioSourceProvider()->setClient(nullptr); | 3600 audioSourceProvider()->setClient(nullptr); |
3601 } | 3601 } |
3602 #endif | 3602 #endif |
3603 | 3603 |
3604 } | 3604 } |
OLD | NEW |