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

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

Issue 517593003: Allow HTMLMediaElement.currentTime to be set before the transition to HAVE_METADATA (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: adding check for noSeekRequired Created 6 years, 3 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
« no previous file with comments | « Source/core/html/HTMLMediaElement.h ('k') | Source/core/html/MediaController.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 306 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « Source/core/html/HTMLMediaElement.h ('k') | Source/core/html/MediaController.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698