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 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
317 , m_defaultPlaybackRate(1.0f) | 317 , m_defaultPlaybackRate(1.0f) |
318 , m_networkState(NETWORK_EMPTY) | 318 , m_networkState(NETWORK_EMPTY) |
319 , m_readyState(HAVE_NOTHING) | 319 , m_readyState(HAVE_NOTHING) |
320 , m_readyStateMaximum(HAVE_NOTHING) | 320 , m_readyStateMaximum(HAVE_NOTHING) |
321 , m_volume(1.0f) | 321 , m_volume(1.0f) |
322 , m_lastSeekTime(0) | 322 , m_lastSeekTime(0) |
323 , m_previousProgressTime(std::numeric_limits<double>::max()) | 323 , m_previousProgressTime(std::numeric_limits<double>::max()) |
324 , m_duration(std::numeric_limits<double>::quiet_NaN()) | 324 , m_duration(std::numeric_limits<double>::quiet_NaN()) |
325 , m_lastTimeUpdateEventWallTime(0) | 325 , m_lastTimeUpdateEventWallTime(0) |
326 , m_lastTimeUpdateEventMovieTime(std::numeric_limits<double>::max()) | 326 , m_lastTimeUpdateEventMovieTime(std::numeric_limits<double>::max()) |
327 , m_defaultPlaybackStartPosition(0) | |
327 , m_loadState(WaitingForSource) | 328 , m_loadState(WaitingForSource) |
328 , m_deferredLoadState(NotDeferred) | 329 , m_deferredLoadState(NotDeferred) |
329 , m_deferredLoadTimer(this, &HTMLMediaElement::deferredLoadTimerFired) | 330 , m_deferredLoadTimer(this, &HTMLMediaElement::deferredLoadTimerFired) |
330 , m_webLayer(0) | 331 , m_webLayer(0) |
331 , m_preload(MediaPlayer::Auto) | 332 , m_preload(MediaPlayer::Auto) |
332 , m_displayMode(Unknown) | 333 , m_displayMode(Unknown) |
333 , m_cachedTime(MediaPlayer::invalidTime()) | 334 , m_cachedTime(MediaPlayer::invalidTime()) |
334 , m_cachedTimeWallClockUpdateTime(0) | 335 , m_cachedTimeWallClockUpdateTime(0) |
335 , m_minimumWallClockTimeToCacheMediaTime(0) | 336 , m_minimumWallClockTimeToCacheMediaTime(0) |
336 , m_fragmentStartTime(MediaPlayer::invalidTime()) | 337 , m_fragmentStartTime(MediaPlayer::invalidTime()) |
(...skipping 1478 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1815 prepareMediaFragmentURI(); | 1816 prepareMediaFragmentURI(); |
1816 | 1817 |
1817 selectInitialTracksIfNecessary(); | 1818 selectInitialTracksIfNecessary(); |
1818 | 1819 |
1819 m_duration = duration(); | 1820 m_duration = duration(); |
1820 scheduleEvent(EventTypeNames::durationchange); | 1821 scheduleEvent(EventTypeNames::durationchange); |
1821 | 1822 |
1822 if (isHTMLVideoElement()) | 1823 if (isHTMLVideoElement()) |
1823 scheduleEvent(EventTypeNames::resize); | 1824 scheduleEvent(EventTypeNames::resize); |
1824 scheduleEvent(EventTypeNames::loadedmetadata); | 1825 scheduleEvent(EventTypeNames::loadedmetadata); |
1826 | |
1827 if (m_defaultPlaybackStartPosition > 0) { | |
1828 seek(m_defaultPlaybackStartPosition); | |
1829 m_defaultPlaybackStartPosition = 0; | |
1830 } | |
1831 | |
1825 if (hasMediaControls()) | 1832 if (hasMediaControls()) |
1826 mediaControls()->reset(); | 1833 mediaControls()->reset(); |
1827 if (renderer()) | 1834 if (renderer()) |
1828 renderer()->updateFromElement(); | 1835 renderer()->updateFromElement(); |
1829 } | 1836 } |
1830 | 1837 |
1831 bool shouldUpdateDisplayState = false; | 1838 bool shouldUpdateDisplayState = false; |
1832 | 1839 |
1833 if (m_readyState >= HAVE_CURRENT_DATA && oldState < HAVE_CURRENT_DATA && !m_ haveFiredLoadedData) { | 1840 if (m_readyState >= HAVE_CURRENT_DATA && oldState < HAVE_CURRENT_DATA && !m_ haveFiredLoadedData) { |
1834 m_haveFiredLoadedData = true; | 1841 m_haveFiredLoadedData = true; |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1915 { | 1922 { |
1916 WTF_LOG(Media, "HTMLMediaElement::prepareToPlay(%p)", this); | 1923 WTF_LOG(Media, "HTMLMediaElement::prepareToPlay(%p)", this); |
1917 if (m_havePreparedToPlay) | 1924 if (m_havePreparedToPlay) |
1918 return; | 1925 return; |
1919 m_havePreparedToPlay = true; | 1926 m_havePreparedToPlay = true; |
1920 | 1927 |
1921 if (loadIsDeferred()) | 1928 if (loadIsDeferred()) |
1922 startDeferredLoad(); | 1929 startDeferredLoad(); |
1923 } | 1930 } |
1924 | 1931 |
1925 void HTMLMediaElement::seek(double time, ExceptionState& exceptionState) | 1932 void HTMLMediaElement::seek(double time) |
1926 { | 1933 { |
1927 WTF_LOG(Media, "HTMLMediaElement::seek(%f)", time); | 1934 WTF_LOG(Media, "HTMLMediaElement::seek(%f)", time); |
1928 | 1935 |
1929 // 4.8.10.9 Seeking | 1936 // 4.8.10.9 Seeking |
1930 | 1937 |
amogh.bihani
2014/09/08 10:26:38
While working on media fragments URI it came out t
philipj_slow
2014/09/08 15:00:58
It sounds like the problem is that setting MediaCo
amogh.bihani
2014/09/09 05:30:52
Yes applyMediaFragmentURI seeks only the correspon
philipj_slow
2014/09/09 08:39:37
I think the root problem is that, regardless of me
| |
1931 // 1 - If the media element's readyState is HAVE_NOTHING, then raise an Inva lidStateError exception. | |
1932 if (m_readyState == HAVE_NOTHING) { | |
1933 exceptionState.throwDOMException(InvalidStateError, "The element's ready State is HAVE_NOTHING."); | |
1934 return; | |
1935 } | |
1936 | |
1937 // If the media engine has been told to postpone loading data, let it go ahe ad now. | 1938 // If the media engine has been told to postpone loading data, let it go ahe ad now. |
1938 if (m_preload < MediaPlayer::Auto && m_readyState < HAVE_FUTURE_DATA) | 1939 if (m_preload < MediaPlayer::Auto && m_readyState < HAVE_FUTURE_DATA) |
1939 prepareToPlay(); | 1940 prepareToPlay(); |
1940 | 1941 |
1941 // Get the current time before setting m_seeking, m_lastSeekTime is returned once it is set. | 1942 // Get the current time before setting m_seeking, m_lastSeekTime is returned once it is set. |
1942 refreshCachedTime(); | 1943 refreshCachedTime(); |
1943 double now = currentTime(); | 1944 double now = currentTime(); |
1944 | 1945 |
1945 // 2 - If the element's seeking IDL attribute is true, then another instance of this algorithm is | 1946 // 2 - If the element's seeking IDL attribute is true, then another instance of this algorithm is |
1946 // already running. Abort that other instance of the algorithm without waiti ng for the step that | 1947 // already running. Abort that other instance of the algorithm without waiti ng for the step that |
(...skipping 25 matching lines...) Expand all Loading... | |
1972 | 1973 |
1973 // 7 - If the (possibly now changed) new playback position is not in one of the ranges given in the | 1974 // 7 - If the (possibly now changed) new playback position is not in one of the ranges given in the |
1974 // seekable attribute, then let it be the position in one of the ranges give n in the seekable attribute | 1975 // seekable attribute, then let it be the position in one of the ranges give n in the seekable attribute |
1975 // that is the nearest to the new playback position. ... If there are no ran ges given in the seekable | 1976 // that is the nearest to the new playback position. ... If there are no ran ges given in the seekable |
1976 // attribute then set the seeking IDL attribute to false and abort these ste ps. | 1977 // attribute then set the seeking IDL attribute to false and abort these ste ps. |
1977 RefPtrWillBeRawPtr<TimeRanges> seekableRanges = seekable(); | 1978 RefPtrWillBeRawPtr<TimeRanges> seekableRanges = seekable(); |
1978 | 1979 |
1979 // Short circuit seeking to the current time by just firing the events if no seek is required. | 1980 // Short circuit seeking to the current time by just firing the events if no seek is required. |
1980 // Don't skip calling the media engine if we are in poster mode because a se ek should always | 1981 // Don't skip calling the media engine if we are in poster mode because a se ek should always |
1981 // cancel poster display. | 1982 // cancel poster display. |
1982 bool noSeekRequired = !seekableRanges->length() || (time == now && displayMo de() != Poster); | 1983 bool noSeekRequired = !seekableRanges->length() || (time == now && !m_defaul tPlaybackStartPosition && displayMode() != Poster); |
amogh.bihani
2014/09/04 13:44:06
Because of line 1944 we get time == now and hence
philipj_slow
2014/09/04 13:53:40
Ah, right, this is a bit tricky now. The spec has
amogh.bihani
2014/09/08 10:26:38
Should I add a TODO here that this condition shoul
philipj_slow
2014/09/08 15:00:58
If you want to work on official playback position
amogh.bihani
2014/09/09 05:30:52
Acknowledged.
| |
1983 | 1984 |
1984 if (noSeekRequired) { | 1985 if (noSeekRequired) { |
1985 if (time == now) { | 1986 if (time == now) { |
1986 scheduleEvent(EventTypeNames::seeking); | 1987 scheduleEvent(EventTypeNames::seeking); |
1987 if (previousSeekStillPending) | 1988 if (previousSeekStillPending) |
1988 return; | 1989 return; |
1989 // FIXME: There must be a stable state before timeupdate+seeked are dispatched and seeking | 1990 // FIXME: There must be a stable state before timeupdate+seeked are dispatched and seeking |
1990 // is reset to false. See http://crbug.com/266631 | 1991 // is reset to false. See http://crbug.com/266631 |
1991 scheduleTimeupdateEvent(false); | 1992 scheduleTimeupdateEvent(false); |
1992 scheduleEvent(EventTypeNames::seeked); | 1993 scheduleEvent(EventTypeNames::seeked); |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2067 m_cachedTime = MediaPlayer::invalidTime(); | 2068 m_cachedTime = MediaPlayer::invalidTime(); |
2068 } | 2069 } |
2069 | 2070 |
2070 // playback state | 2071 // playback state |
2071 double HTMLMediaElement::currentTime() const | 2072 double HTMLMediaElement::currentTime() const |
2072 { | 2073 { |
2073 #if LOG_CACHED_TIME_WARNINGS | 2074 #if LOG_CACHED_TIME_WARNINGS |
2074 static const double minCachedDeltaForWarning = 0.01; | 2075 static const double minCachedDeltaForWarning = 0.01; |
2075 #endif | 2076 #endif |
2076 | 2077 |
2078 if (m_defaultPlaybackStartPosition) | |
2079 return m_defaultPlaybackStartPosition; | |
2080 | |
2077 if (m_readyState == HAVE_NOTHING) | 2081 if (m_readyState == HAVE_NOTHING) |
2078 return 0; | 2082 return 0; |
2079 | 2083 |
2080 if (m_seeking) { | 2084 if (m_seeking) { |
2081 WTF_LOG(Media, "HTMLMediaElement::currentTime - seeking, returning %f", m_lastSeekTime); | 2085 WTF_LOG(Media, "HTMLMediaElement::currentTime - seeking, returning %f", m_lastSeekTime); |
2082 return m_lastSeekTime; | 2086 return m_lastSeekTime; |
2083 } | 2087 } |
2084 | 2088 |
2085 if (m_cachedTime != MediaPlayer::invalidTime() && m_paused) { | 2089 if (m_cachedTime != MediaPlayer::invalidTime() && m_paused) { |
2086 #if LOG_CACHED_TIME_WARNINGS | 2090 #if LOG_CACHED_TIME_WARNINGS |
2087 double delta = m_cachedTime - webMediaPlayer()->currentTime(); | 2091 double delta = m_cachedTime - webMediaPlayer()->currentTime(); |
2088 if (delta > minCachedDeltaForWarning) | 2092 if (delta > minCachedDeltaForWarning) |
2089 WTF_LOG(Media, "HTMLMediaElement::currentTime - WARNING, cached time is %f seconds off of media time when paused", delta); | 2093 WTF_LOG(Media, "HTMLMediaElement::currentTime - WARNING, cached time is %f seconds off of media time when paused", delta); |
2090 #endif | 2094 #endif |
2091 return m_cachedTime; | 2095 return m_cachedTime; |
2092 } | 2096 } |
2093 | 2097 |
2094 refreshCachedTime(); | 2098 refreshCachedTime(); |
2095 | 2099 |
2096 return m_cachedTime; | 2100 return m_cachedTime; |
2097 } | 2101 } |
2098 | 2102 |
2099 void HTMLMediaElement::setCurrentTime(double time, ExceptionState& exceptionStat e) | 2103 void HTMLMediaElement::setCurrentTime(double time, ExceptionState& exceptionStat e) |
2100 { | 2104 { |
2101 if (m_mediaController) { | 2105 if (m_mediaController) { |
2102 exceptionState.throwDOMException(InvalidStateError, "The element is slav ed to a MediaController."); | 2106 exceptionState.throwDOMException(InvalidStateError, "The element is slav ed to a MediaController."); |
2103 return; | 2107 return; |
2104 } | 2108 } |
2105 seek(time, exceptionState); | 2109 |
2110 // If the media element's readyState is HAVE_NOTHING, then set the default | |
2111 // playback start position to that time. | |
2112 if (m_readyState == HAVE_NOTHING) { | |
2113 m_defaultPlaybackStartPosition = time; | |
2114 return; | |
2115 } | |
2116 | |
2117 seek(time); | |
2106 } | 2118 } |
2107 | 2119 |
2108 double HTMLMediaElement::duration() const | 2120 double HTMLMediaElement::duration() const |
2109 { | 2121 { |
2110 // FIXME: remove m_player check once we figure out how m_player is going | 2122 // FIXME: remove m_player check once we figure out how m_player is going |
2111 // out of sync with readystate. m_player is cleared but readystate is not se t | 2123 // out of sync with readystate. m_player is cleared but readystate is not se t |
2112 // to HAVE_NOTHING | 2124 // to HAVE_NOTHING |
2113 if (!m_player || m_readyState < HAVE_METADATA) | 2125 if (!m_player || m_readyState < HAVE_METADATA) |
2114 return std::numeric_limits<double>::quiet_NaN(); | 2126 return std::numeric_limits<double>::quiet_NaN(); |
2115 | 2127 |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2234 | 2246 |
2235 void HTMLMediaElement::playInternal() | 2247 void HTMLMediaElement::playInternal() |
2236 { | 2248 { |
2237 WTF_LOG(Media, "HTMLMediaElement::playInternal"); | 2249 WTF_LOG(Media, "HTMLMediaElement::playInternal"); |
2238 | 2250 |
2239 // 4.8.10.9. Playing the media resource | 2251 // 4.8.10.9. Playing the media resource |
2240 if (!m_player || m_networkState == NETWORK_EMPTY) | 2252 if (!m_player || m_networkState == NETWORK_EMPTY) |
2241 scheduleDelayedAction(LoadMediaResource); | 2253 scheduleDelayedAction(LoadMediaResource); |
2242 | 2254 |
2243 if (endedPlayback()) | 2255 if (endedPlayback()) |
2244 seek(0, IGNORE_EXCEPTION); | 2256 seek(0); |
2245 | 2257 |
2246 if (m_mediaController) | 2258 if (m_mediaController) |
2247 m_mediaController->bringElementUpToSpeed(this); | 2259 m_mediaController->bringElementUpToSpeed(this); |
2248 | 2260 |
2249 if (m_paused) { | 2261 if (m_paused) { |
2250 m_paused = false; | 2262 m_paused = false; |
2251 invalidateCachedTime(); | 2263 invalidateCachedTime(); |
2252 scheduleEvent(EventTypeNames::play); | 2264 scheduleEvent(EventTypeNames::play); |
2253 | 2265 |
2254 if (m_readyState <= HAVE_CURRENT_DATA) | 2266 if (m_readyState <= HAVE_CURRENT_DATA) |
(...skipping 841 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3096 double now = currentTime(); | 3108 double now = currentTime(); |
3097 double dur = duration(); | 3109 double dur = duration(); |
3098 | 3110 |
3099 // When the current playback position reaches the end of the media resource when the direction of | 3111 // When the current playback position reaches the end of the media resource when the direction of |
3100 // playback is forwards, then the user agent must follow these steps: | 3112 // playback is forwards, then the user agent must follow these steps: |
3101 if (!std::isnan(dur) && dur && now >= dur && directionOfPlayback() == Forwar d) { | 3113 if (!std::isnan(dur) && dur && now >= dur && directionOfPlayback() == Forwar d) { |
3102 // If the media element has a loop attribute specified and does not have a current media controller, | 3114 // If the media element has a loop attribute specified and does not have a current media controller, |
3103 if (loop() && !m_mediaController) { | 3115 if (loop() && !m_mediaController) { |
3104 m_sentEndEvent = false; | 3116 m_sentEndEvent = false; |
3105 // then seek to the earliest possible position of the media resourc e and abort these steps. | 3117 // then seek to the earliest possible position of the media resourc e and abort these steps. |
3106 seek(0, IGNORE_EXCEPTION); | 3118 seek(0); |
3107 } else { | 3119 } else { |
3108 // If the media element does not have a current media controller, an d the media element | 3120 // If the media element does not have a current media controller, an d the media element |
3109 // has still ended playback, and the direction of playback is still forwards, and paused | 3121 // has still ended playback, and the direction of playback is still forwards, and paused |
3110 // is false, | 3122 // is false, |
3111 if (!m_mediaController && !m_paused) { | 3123 if (!m_mediaController && !m_paused) { |
3112 // changes paused to true and fires a simple event named pause a t the media element. | 3124 // changes paused to true and fires a simple event named pause a t the media element. |
3113 m_paused = true; | 3125 m_paused = true; |
3114 scheduleEvent(EventTypeNames::pause); | 3126 scheduleEvent(EventTypeNames::pause); |
3115 } | 3127 } |
3116 // Queue a task to fire a simple event named ended at the media elem ent. | 3128 // Queue a task to fire a simple event named ended at the media elem ent. |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3150 WTF_LOG(Media, "HTMLMediaElement::durationChanged : %f -> %f", m_duration, d uration); | 3162 WTF_LOG(Media, "HTMLMediaElement::durationChanged : %f -> %f", m_duration, d uration); |
3151 m_duration = duration; | 3163 m_duration = duration; |
3152 scheduleEvent(EventTypeNames::durationchange); | 3164 scheduleEvent(EventTypeNames::durationchange); |
3153 | 3165 |
3154 if (hasMediaControls()) | 3166 if (hasMediaControls()) |
3155 mediaControls()->reset(); | 3167 mediaControls()->reset(); |
3156 if (renderer()) | 3168 if (renderer()) |
3157 renderer()->updateFromElement(); | 3169 renderer()->updateFromElement(); |
3158 | 3170 |
3159 if (requestSeek) | 3171 if (requestSeek) |
3160 seek(duration, IGNORE_EXCEPTION); | 3172 seek(duration); |
3161 } | 3173 } |
3162 | 3174 |
3163 void HTMLMediaElement::mediaPlayerPlaybackStateChanged() | 3175 void HTMLMediaElement::mediaPlayerPlaybackStateChanged() |
3164 { | 3176 { |
3165 WTF_LOG(Media, "HTMLMediaElement::mediaPlayerPlaybackStateChanged"); | 3177 WTF_LOG(Media, "HTMLMediaElement::mediaPlayerPlaybackStateChanged"); |
3166 | 3178 |
3167 if (!m_player || m_pausedInternal) | 3179 if (!m_player || m_pausedInternal) |
3168 return; | 3180 return; |
3169 | 3181 |
3170 if (webMediaPlayer()->paused()) | 3182 if (webMediaPlayer()->paused()) |
(...skipping 10 matching lines...) Expand all Loading... | |
3181 // user interaction or when it is technically required to play the video. | 3193 // user interaction or when it is technically required to play the video. |
3182 UserGestureIndicator gestureIndicator(DefinitelyProcessingNewUserGesture); | 3194 UserGestureIndicator gestureIndicator(DefinitelyProcessingNewUserGesture); |
3183 | 3195 |
3184 enterFullscreen(); | 3196 enterFullscreen(); |
3185 } | 3197 } |
3186 | 3198 |
3187 void HTMLMediaElement::mediaPlayerRequestSeek(double time) | 3199 void HTMLMediaElement::mediaPlayerRequestSeek(double time) |
3188 { | 3200 { |
3189 // The player is the source of this seek request. | 3201 // The player is the source of this seek request. |
3190 if (m_mediaController) { | 3202 if (m_mediaController) { |
3191 m_mediaController->setCurrentTime(time, IGNORE_EXCEPTION); | 3203 m_mediaController->setCurrentTime(time); |
3192 return; | 3204 return; |
3193 } | 3205 } |
3194 setCurrentTime(time, IGNORE_EXCEPTION); | 3206 setCurrentTime(time, ASSERT_NO_EXCEPTION); |
3195 } | 3207 } |
3196 | 3208 |
3197 // MediaPlayerPresentation methods | 3209 // MediaPlayerPresentation methods |
3198 void HTMLMediaElement::mediaPlayerRepaint() | 3210 void HTMLMediaElement::mediaPlayerRepaint() |
3199 { | 3211 { |
3200 if (m_webLayer) | 3212 if (m_webLayer) |
3201 m_webLayer->invalidate(); | 3213 m_webLayer->invalidate(); |
3202 | 3214 |
3203 updateDisplayState(); | 3215 updateDisplayState(); |
3204 if (renderer()) | 3216 if (renderer()) |
(...skipping 677 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3882 | 3894 |
3883 if (m_fragmentStartTime != MediaPlayer::invalidTime() && m_readyState < HAVE _FUTURE_DATA) | 3895 if (m_fragmentStartTime != MediaPlayer::invalidTime() && m_readyState < HAVE _FUTURE_DATA) |
3884 prepareToPlay(); | 3896 prepareToPlay(); |
3885 } | 3897 } |
3886 | 3898 |
3887 void HTMLMediaElement::applyMediaFragmentURI() | 3899 void HTMLMediaElement::applyMediaFragmentURI() |
3888 { | 3900 { |
3889 if (m_fragmentStartTime != MediaPlayer::invalidTime()) { | 3901 if (m_fragmentStartTime != MediaPlayer::invalidTime()) { |
3890 m_sentEndEvent = false; | 3902 m_sentEndEvent = false; |
3891 UseCounter::count(document(), UseCounter::HTMLMediaElementSeekToFragment Start); | 3903 UseCounter::count(document(), UseCounter::HTMLMediaElementSeekToFragment Start); |
3892 seek(m_fragmentStartTime, IGNORE_EXCEPTION); | 3904 seek(m_fragmentStartTime); |
3893 } | 3905 } |
3894 } | 3906 } |
3895 | 3907 |
3896 WebMediaPlayer::CORSMode HTMLMediaElement::corsMode() const | 3908 WebMediaPlayer::CORSMode HTMLMediaElement::corsMode() const |
3897 { | 3909 { |
3898 const AtomicString& crossOriginMode = fastGetAttribute(crossoriginAttr); | 3910 const AtomicString& crossOriginMode = fastGetAttribute(crossoriginAttr); |
3899 if (crossOriginMode.isNull()) | 3911 if (crossOriginMode.isNull()) |
3900 return WebMediaPlayer::CORSModeUnspecified; | 3912 return WebMediaPlayer::CORSModeUnspecified; |
3901 if (equalIgnoringCase(crossOriginMode, "use-credentials")) | 3913 if (equalIgnoringCase(crossOriginMode, "use-credentials")) |
3902 return WebMediaPlayer::CORSModeUseCredentials; | 3914 return WebMediaPlayer::CORSModeUseCredentials; |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3989 | 4001 |
3990 #if ENABLE(WEB_AUDIO) | 4002 #if ENABLE(WEB_AUDIO) |
3991 void HTMLMediaElement::clearWeakMembers(Visitor* visitor) | 4003 void HTMLMediaElement::clearWeakMembers(Visitor* visitor) |
3992 { | 4004 { |
3993 if (!visitor->isAlive(m_audioSourceNode) && audioSourceProvider()) | 4005 if (!visitor->isAlive(m_audioSourceNode) && audioSourceProvider()) |
3994 audioSourceProvider()->setClient(0); | 4006 audioSourceProvider()->setClient(0); |
3995 } | 4007 } |
3996 #endif | 4008 #endif |
3997 | 4009 |
3998 } | 4010 } |
OLD | NEW |