| 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 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 268 , m_readyStateMaximum(HAVE_NOTHING) | 268 , m_readyStateMaximum(HAVE_NOTHING) |
| 269 , m_volume(1.0f) | 269 , m_volume(1.0f) |
| 270 , m_lastSeekTime(0) | 270 , m_lastSeekTime(0) |
| 271 , m_previousProgressTime(numeric_limits<double>::max()) | 271 , m_previousProgressTime(numeric_limits<double>::max()) |
| 272 , m_duration(numeric_limits<double>::quiet_NaN()) | 272 , m_duration(numeric_limits<double>::quiet_NaN()) |
| 273 , m_lastTimeUpdateEventWallTime(0) | 273 , m_lastTimeUpdateEventWallTime(0) |
| 274 , m_lastTimeUpdateEventMovieTime(numeric_limits<double>::max()) | 274 , m_lastTimeUpdateEventMovieTime(numeric_limits<double>::max()) |
| 275 , m_loadState(WaitingForSource) | 275 , m_loadState(WaitingForSource) |
| 276 , m_webLayer(0) | 276 , m_webLayer(0) |
| 277 , m_opaque(false) | 277 , m_opaque(false) |
| 278 , m_restrictions(NoRestrictions) | |
| 279 , m_preload(MediaPlayer::Auto) | 278 , m_preload(MediaPlayer::Auto) |
| 280 , m_displayMode(Unknown) | 279 , m_displayMode(Unknown) |
| 281 , m_cachedTime(MediaPlayer::invalidTime()) | 280 , m_cachedTime(MediaPlayer::invalidTime()) |
| 282 , m_cachedTimeWallClockUpdateTime(0) | 281 , m_cachedTimeWallClockUpdateTime(0) |
| 283 , m_minimumWallClockTimeToCacheMediaTime(0) | 282 , m_minimumWallClockTimeToCacheMediaTime(0) |
| 284 , m_fragmentStartTime(MediaPlayer::invalidTime()) | 283 , m_fragmentStartTime(MediaPlayer::invalidTime()) |
| 285 , m_fragmentEndTime(MediaPlayer::invalidTime()) | 284 , m_fragmentEndTime(MediaPlayer::invalidTime()) |
| 286 , m_pendingActionFlags(0) | 285 , m_pendingActionFlags(0) |
| 286 , m_userGestureRequiredForPlay(false) |
| 287 , m_playing(false) | 287 , m_playing(false) |
| 288 , m_shouldDelayLoadEvent(false) | 288 , m_shouldDelayLoadEvent(false) |
| 289 , m_haveFiredLoadedData(false) | 289 , m_haveFiredLoadedData(false) |
| 290 , m_active(true) | 290 , m_active(true) |
| 291 , m_autoplaying(true) | 291 , m_autoplaying(true) |
| 292 , m_muted(false) | 292 , m_muted(false) |
| 293 , m_paused(true) | 293 , m_paused(true) |
| 294 , m_seeking(false) | 294 , m_seeking(false) |
| 295 , m_sentStalledEvent(false) | 295 , m_sentStalledEvent(false) |
| 296 , m_sentEndEvent(false) | 296 , m_sentEndEvent(false) |
| (...skipping 10 matching lines...) Expand all Loading... |
| 307 #if ENABLE(WEB_AUDIO) | 307 #if ENABLE(WEB_AUDIO) |
| 308 , m_audioSourceNode(0) | 308 , m_audioSourceNode(0) |
| 309 #endif | 309 #endif |
| 310 , m_emeMode(EmeModeNotSelected) | 310 , m_emeMode(EmeModeNotSelected) |
| 311 { | 311 { |
| 312 ASSERT(RuntimeEnabledFeatures::mediaEnabled()); | 312 ASSERT(RuntimeEnabledFeatures::mediaEnabled()); |
| 313 | 313 |
| 314 WTF_LOG(Media, "HTMLMediaElement::HTMLMediaElement"); | 314 WTF_LOG(Media, "HTMLMediaElement::HTMLMediaElement"); |
| 315 ScriptWrappable::init(this); | 315 ScriptWrappable::init(this); |
| 316 | 316 |
| 317 if (document.settings()) { | 317 if (document.settings() && document.settings()->mediaPlaybackRequiresUserGes
ture()) |
| 318 if (document.settings()->mediaPlaybackRequiresUserGesture()) | 318 m_userGestureRequiredForPlay = true; |
| 319 addBehaviorRestriction(RequireUserGestureForPlayRestriction); | |
| 320 } | |
| 321 | 319 |
| 322 // We must always have a ShadowRoot so children like <source> will not rende
r | 320 // We must always have a ShadowRoot so children like <source> will not rende
r |
| 323 // as they never have an insertion point. | 321 // as they never have an insertion point. |
| 324 ensureUserAgentShadowRoot(); | 322 ensureUserAgentShadowRoot(); |
| 325 setHasCustomStyleCallbacks(); | 323 setHasCustomStyleCallbacks(); |
| 326 addElementToDocumentMap(this, &document); | 324 addElementToDocumentMap(this, &document); |
| 327 } | 325 } |
| 328 | 326 |
| 329 HTMLMediaElement::~HTMLMediaElement() | 327 HTMLMediaElement::~HTMLMediaElement() |
| 330 { | 328 { |
| (...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 614 return canPlay; | 612 return canPlay; |
| 615 } | 613 } |
| 616 | 614 |
| 617 void HTMLMediaElement::load() | 615 void HTMLMediaElement::load() |
| 618 { | 616 { |
| 619 RefPtr<HTMLMediaElement> protect(this); // loadInternal may result in a 'bef
oreload' event, which can make arbitrary DOM mutations. | 617 RefPtr<HTMLMediaElement> protect(this); // loadInternal may result in a 'bef
oreload' event, which can make arbitrary DOM mutations. |
| 620 | 618 |
| 621 WTF_LOG(Media, "HTMLMediaElement::load()"); | 619 WTF_LOG(Media, "HTMLMediaElement::load()"); |
| 622 | 620 |
| 623 if (UserGestureIndicator::processingUserGesture()) | 621 if (UserGestureIndicator::processingUserGesture()) |
| 624 removeBehaviorsRestrictionsAfterFirstUserGesture(); | 622 m_userGestureRequiredForPlay = false; |
| 625 | 623 |
| 626 prepareForLoad(); | 624 prepareForLoad(); |
| 627 loadInternal(); | 625 loadInternal(); |
| 628 prepareToPlay(); | 626 prepareToPlay(); |
| 629 } | 627 } |
| 630 | 628 |
| 631 void HTMLMediaElement::prepareForLoad() | 629 void HTMLMediaElement::prepareForLoad() |
| 632 { | 630 { |
| 633 WTF_LOG(Media, "HTMLMediaElement::prepareForLoad"); | 631 WTF_LOG(Media, "HTMLMediaElement::prepareForLoad"); |
| 634 | 632 |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 851 m_muted = true; | 849 m_muted = true; |
| 852 updateVolume(); | 850 updateVolume(); |
| 853 | 851 |
| 854 ASSERT(!m_mediaSource); | 852 ASSERT(!m_mediaSource); |
| 855 | 853 |
| 856 bool attemptLoad = true; | 854 bool attemptLoad = true; |
| 857 | 855 |
| 858 if (url.protocolIs(mediaSourceBlobProtocol)) { | 856 if (url.protocolIs(mediaSourceBlobProtocol)) { |
| 859 if (isMediaStreamURL(url.string())) { | 857 if (isMediaStreamURL(url.string())) { |
| 860 loadType = blink::WebMediaPlayer::LoadTypeMediaStream; | 858 loadType = blink::WebMediaPlayer::LoadTypeMediaStream; |
| 861 removeBehaviorRestriction(RequireUserGestureForPlayRestriction); | 859 m_userGestureRequiredForPlay = false; |
| 862 } else { | 860 } else { |
| 863 m_mediaSource = HTMLMediaSource::lookup(url.string()); | 861 m_mediaSource = HTMLMediaSource::lookup(url.string()); |
| 864 | 862 |
| 865 if (m_mediaSource) { | 863 if (m_mediaSource) { |
| 866 loadType = blink::WebMediaPlayer::LoadTypeMediaSource; | 864 loadType = blink::WebMediaPlayer::LoadTypeMediaSource; |
| 867 | 865 |
| 868 if (!m_mediaSource->attachToElement(this)) { | 866 if (!m_mediaSource->attachToElement(this)) { |
| 869 // Forget our reference to the MediaSource, so we leave it a
lone | 867 // Forget our reference to the MediaSource, so we leave it a
lone |
| 870 // while processing remainder of load failure. | 868 // while processing remainder of load failure. |
| 871 m_mediaSource = nullptr; | 869 m_mediaSource = nullptr; |
| (...skipping 729 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1601 shouldUpdateDisplayState = true; | 1599 shouldUpdateDisplayState = true; |
| 1602 } | 1600 } |
| 1603 | 1601 |
| 1604 if (m_readyState == HAVE_ENOUGH_DATA && oldState < HAVE_ENOUGH_DATA && track
sAreReady) { | 1602 if (m_readyState == HAVE_ENOUGH_DATA && oldState < HAVE_ENOUGH_DATA && track
sAreReady) { |
| 1605 if (oldState <= HAVE_CURRENT_DATA) { | 1603 if (oldState <= HAVE_CURRENT_DATA) { |
| 1606 scheduleEvent(EventTypeNames::canplay); | 1604 scheduleEvent(EventTypeNames::canplay); |
| 1607 if (isPotentiallyPlaying) | 1605 if (isPotentiallyPlaying) |
| 1608 scheduleEvent(EventTypeNames::playing); | 1606 scheduleEvent(EventTypeNames::playing); |
| 1609 } | 1607 } |
| 1610 | 1608 |
| 1611 if (m_autoplaying && m_paused && autoplay() && !document().isSandboxed(S
andboxAutomaticFeatures) && !userGestureRequiredForPlay()) { | 1609 if (m_autoplaying && m_paused && autoplay() && !document().isSandboxed(S
andboxAutomaticFeatures) && !m_userGestureRequiredForPlay) { |
| 1612 m_paused = false; | 1610 m_paused = false; |
| 1613 invalidateCachedTime(); | 1611 invalidateCachedTime(); |
| 1614 scheduleEvent(EventTypeNames::play); | 1612 scheduleEvent(EventTypeNames::play); |
| 1615 scheduleEvent(EventTypeNames::playing); | 1613 scheduleEvent(EventTypeNames::playing); |
| 1616 } | 1614 } |
| 1617 | 1615 |
| 1618 scheduleEvent(EventTypeNames::canplaythrough); | 1616 scheduleEvent(EventTypeNames::canplaythrough); |
| 1619 | 1617 |
| 1620 shouldUpdateDisplayState = true; | 1618 shouldUpdateDisplayState = true; |
| 1621 } | 1619 } |
| (...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2119 void HTMLMediaElement::setPreload(const AtomicString& preload) | 2117 void HTMLMediaElement::setPreload(const AtomicString& preload) |
| 2120 { | 2118 { |
| 2121 WTF_LOG(Media, "HTMLMediaElement::setPreload(%s)", preload.utf8().data()); | 2119 WTF_LOG(Media, "HTMLMediaElement::setPreload(%s)", preload.utf8().data()); |
| 2122 setAttribute(preloadAttr, preload); | 2120 setAttribute(preloadAttr, preload); |
| 2123 } | 2121 } |
| 2124 | 2122 |
| 2125 void HTMLMediaElement::play() | 2123 void HTMLMediaElement::play() |
| 2126 { | 2124 { |
| 2127 WTF_LOG(Media, "HTMLMediaElement::play()"); | 2125 WTF_LOG(Media, "HTMLMediaElement::play()"); |
| 2128 | 2126 |
| 2129 if (userGestureRequiredForPlay() && !UserGestureIndicator::processingUserGes
ture()) | 2127 if (m_userGestureRequiredForPlay && !UserGestureIndicator::processingUserGes
ture()) |
| 2130 return; | 2128 return; |
| 2131 if (UserGestureIndicator::processingUserGesture()) | 2129 if (UserGestureIndicator::processingUserGesture()) |
| 2132 removeBehaviorsRestrictionsAfterFirstUserGesture(); | 2130 m_userGestureRequiredForPlay = false; |
| 2133 | 2131 |
| 2134 playInternal(); | 2132 playInternal(); |
| 2135 } | 2133 } |
| 2136 | 2134 |
| 2137 void HTMLMediaElement::playInternal() | 2135 void HTMLMediaElement::playInternal() |
| 2138 { | 2136 { |
| 2139 WTF_LOG(Media, "HTMLMediaElement::playInternal"); | 2137 WTF_LOG(Media, "HTMLMediaElement::playInternal"); |
| 2140 | 2138 |
| 2141 // 4.8.10.9. Playing the media resource | 2139 // 4.8.10.9. Playing the media resource |
| 2142 if (!m_player || m_networkState == NETWORK_EMPTY) | 2140 if (!m_player || m_networkState == NETWORK_EMPTY) |
| (...skipping 1723 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3866 MediaPlayerClient::CORSMode HTMLMediaElement::mediaPlayerCORSMode() const | 3864 MediaPlayerClient::CORSMode HTMLMediaElement::mediaPlayerCORSMode() const |
| 3867 { | 3865 { |
| 3868 const AtomicString& crossOriginMode = fastGetAttribute(crossoriginAttr); | 3866 const AtomicString& crossOriginMode = fastGetAttribute(crossoriginAttr); |
| 3869 if (crossOriginMode.isNull()) | 3867 if (crossOriginMode.isNull()) |
| 3870 return Unspecified; | 3868 return Unspecified; |
| 3871 if (equalIgnoringCase(crossOriginMode, "use-credentials")) | 3869 if (equalIgnoringCase(crossOriginMode, "use-credentials")) |
| 3872 return UseCredentials; | 3870 return UseCredentials; |
| 3873 return Anonymous; | 3871 return Anonymous; |
| 3874 } | 3872 } |
| 3875 | 3873 |
| 3876 void HTMLMediaElement::removeBehaviorsRestrictionsAfterFirstUserGesture() | |
| 3877 { | |
| 3878 m_restrictions = NoRestrictions; | |
| 3879 } | |
| 3880 | |
| 3881 void HTMLMediaElement::mediaPlayerSetWebLayer(blink::WebLayer* webLayer) | 3874 void HTMLMediaElement::mediaPlayerSetWebLayer(blink::WebLayer* webLayer) |
| 3882 { | 3875 { |
| 3883 if (webLayer == m_webLayer) | 3876 if (webLayer == m_webLayer) |
| 3884 return; | 3877 return; |
| 3885 | 3878 |
| 3886 // If either of the layers is null we need to enable or disable compositing.
This is done by triggering a style recalc. | 3879 // If either of the layers is null we need to enable or disable compositing.
This is done by triggering a style recalc. |
| 3887 if (!m_webLayer || !webLayer) | 3880 if (!m_webLayer || !webLayer) |
| 3888 scheduleLayerUpdate(); | 3881 scheduleLayerUpdate(); |
| 3889 | 3882 |
| 3890 if (m_webLayer) | 3883 if (m_webLayer) |
| (...skipping 16 matching lines...) Expand all Loading... |
| 3907 { | 3900 { |
| 3908 m_mediaSource->setWebMediaSourceAndOpen(adoptPtr(webMediaSource)); | 3901 m_mediaSource->setWebMediaSourceAndOpen(adoptPtr(webMediaSource)); |
| 3909 } | 3902 } |
| 3910 | 3903 |
| 3911 bool HTMLMediaElement::isInteractiveContent() const | 3904 bool HTMLMediaElement::isInteractiveContent() const |
| 3912 { | 3905 { |
| 3913 return fastHasAttribute(controlsAttr); | 3906 return fastHasAttribute(controlsAttr); |
| 3914 } | 3907 } |
| 3915 | 3908 |
| 3916 } | 3909 } |
| OLD | NEW |