Changeset 182081 in webkit
- Timestamp:
- Mar 27, 2015 2:32:38 PM (9 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r182075 r182081 1 2015-03-27 Jer Noble <jer.noble@apple.com> 2 3 [Mac] Safari fails to fire page "load" event with video[preload=none] 4 https://bugs.webkit.org/show_bug.cgi?id=143147 5 6 Reviewed by Simon Fraser. 7 8 * media/video-page-load-preload-none-expected.txt: Added. 9 * media/video-page-load-preload-none.html: Added. 10 1 11 2015-03-27 Brent Fulgham <bfulgham@apple.com> 2 12 -
trunk/Source/WebCore/ChangeLog
r182077 r182081 1 2015-03-27 Jer Noble <jer.noble@apple.com> 2 3 [Mac] Safari fails to fire page "load" event with video[preload=none] 4 https://bugs.webkit.org/show_bug.cgi?id=143147 5 6 Reviewed by Simon Fraser. 7 8 Test: media/video-page-load-preload-none.html 9 10 When told to load() when preload == None, set the networkState to Idle. 11 This causes HTMLMediaElement to set the shouldDelayLoadEvent flag to 12 false, and allows the page's 'load' event to fire. 13 14 Drive-by fix: add setNetworkState() and setReadyState() methods to 15 MediaPlayerPrivateAVFoundation, reducing a bunch of code duplication. 16 17 * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp: 18 (WebCore::MediaPlayerPrivateAVFoundation::load): 19 (WebCore::MediaPlayerPrivateAVFoundation::setNetworkState): 20 (WebCore::MediaPlayerPrivateAVFoundation::setReadyState): 21 (WebCore::MediaPlayerPrivateAVFoundation::updateStates): 22 * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h: 23 1 24 2015-03-27 Alexey Proskuryakov <ap@apple.com> 2 25 -
trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp
r180839 r182081 168 168 LOG(Media, "MediaPlayerPrivateAVFoundation::load(%p)", this); 169 169 170 if (m_networkState != MediaPlayer::Loading) { 171 m_networkState = MediaPlayer::Loading; 172 m_player->networkStateChanged(); 173 } 174 if (m_readyState != MediaPlayer::HaveNothing) { 175 m_readyState = MediaPlayer::HaveNothing; 176 m_player->readyStateChanged(); 177 } 170 setNetworkState(m_preload == MediaPlayer::None ? MediaPlayer::Idle : MediaPlayer::Loading); 171 setReadyState(MediaPlayer::HaveNothing); 178 172 179 173 m_assetURL = url; … … 189 183 void MediaPlayerPrivateAVFoundation::load(const String&, MediaSourcePrivateClient*) 190 184 { 191 m_networkState = MediaPlayer::FormatError; 192 m_player->networkStateChanged(); 185 setNetworkState(MediaPlayer::FormatError); 193 186 } 194 187 #endif … … 357 350 } 358 351 352 void MediaPlayerPrivateAVFoundation::setNetworkState(MediaPlayer::NetworkState state) 353 { 354 if (state == m_networkState) 355 return; 356 357 m_networkState = state; 358 m_player->networkStateChanged(); 359 } 360 361 void MediaPlayerPrivateAVFoundation::setReadyState(MediaPlayer::ReadyState state) 362 { 363 if (state == m_readyState) 364 return; 365 366 m_readyState = state; 367 m_player->readyStateChanged(); 368 } 369 359 370 void MediaPlayerPrivateAVFoundation::characteristicsChanged() 360 371 { … … 479 490 return; 480 491 481 MediaPlayer::NetworkState oldNetworkState = m_networkState;482 MediaPlayer::ReadyState oldReadyState = m_readyState;492 MediaPlayer::NetworkState newNetworkState = m_networkState; 493 MediaPlayer::ReadyState newReadyState = m_readyState; 483 494 484 495 if (m_loadingMetadata) 485 m_networkState = MediaPlayer::Loading;496 newNetworkState = MediaPlayer::Loading; 486 497 else { 487 498 // -loadValuesAsynchronouslyForKeys:completionHandler: has invoked its handler; test status of keys and determine state. … … 493 504 if (m_assetIsPlayable) { 494 505 if (assetStatus >= MediaPlayerAVAssetStatusLoaded) 495 m_readyState = MediaPlayer::HaveMetadata;506 newReadyState = MediaPlayer::HaveMetadata; 496 507 if (itemStatus <= MediaPlayerAVPlayerItemStatusUnknown) { 497 508 if (assetStatus == MediaPlayerAVAssetStatusFailed || m_preload > MediaPlayer::MetaData || isLiveStream()) { 498 509 // The asset is playable but doesn't support inspection prior to playback (eg. streaming files), 499 510 // or we are supposed to prepare for playback immediately, so create the player item now. 500 m_networkState = MediaPlayer::Loading;511 newNetworkState = MediaPlayer::Loading; 501 512 prepareToPlay(); 502 513 } else 503 m_networkState = MediaPlayer::Idle;514 newNetworkState = MediaPlayer::Idle; 504 515 } 505 516 } else { 506 517 // FIX ME: fetch the error associated with the @"playable" key to distinguish between format 507 518 // and network errors. 508 m_networkState = MediaPlayer::FormatError;519 newNetworkState = MediaPlayer::FormatError; 509 520 } 510 521 } … … 522 533 // progress to LikelyToKeepUp. Set the readyState to HAVE_ENOUGH_DATA, on the 523 534 // presumption that if the playback buffer is full, playback will probably not stall. 524 m_readyState = MediaPlayer::HaveEnoughData;535 newReadyState = MediaPlayer::HaveEnoughData; 525 536 break; 526 537 527 538 case MediaPlayerAVPlayerItemStatusReadyToPlay: 528 539 if (m_readyState != MediaPlayer::HaveEnoughData && maxTimeLoaded() > currentMediaTime()) 529 m_readyState = MediaPlayer::HaveFutureData;540 newReadyState = MediaPlayer::HaveFutureData; 530 541 break; 531 542 532 543 case MediaPlayerAVPlayerItemStatusPlaybackBufferEmpty: 533 m_readyState = MediaPlayer::HaveCurrentData;544 newReadyState = MediaPlayer::HaveCurrentData; 534 545 break; 535 546 } 536 547 537 548 if (itemStatus == MediaPlayerAVPlayerItemStatusPlaybackBufferFull) 538 m_networkState = MediaPlayer::Idle;549 newNetworkState = MediaPlayer::Idle; 539 550 else if (itemStatus == MediaPlayerAVPlayerItemStatusFailed) 540 m_networkState = MediaPlayer::DecodeError;551 newNetworkState = MediaPlayer::DecodeError; 541 552 else if (itemStatus != MediaPlayerAVPlayerItemStatusPlaybackBufferFull && itemStatus >= MediaPlayerAVPlayerItemStatusReadyToPlay) 542 m_networkState = (maxTimeLoaded() == durationMediaTime()) ? MediaPlayer::Loaded : MediaPlayer::Loading;553 newNetworkState = (maxTimeLoaded() == durationMediaTime()) ? MediaPlayer::Loaded : MediaPlayer::Loading; 543 554 } 544 555 } … … 549 560 if (!m_haveReportedFirstVideoFrame && m_cachedHasVideo && hasAvailableVideoFrame()) { 550 561 if (m_readyState < MediaPlayer::HaveCurrentData) 551 m_readyState = MediaPlayer::HaveCurrentData;562 newReadyState = MediaPlayer::HaveCurrentData; 552 563 m_haveReportedFirstVideoFrame = true; 553 564 m_player->firstVideoFrameAvailable(); 554 565 } 555 566 556 if (m_networkState != oldNetworkState) 557 m_player->networkStateChanged(); 558 559 if (m_readyState != oldReadyState) 560 m_player->readyStateChanged(); 567 #if !LOG_DISABLED 568 if (m_networkState != newNetworkState || m_readyState != newReadyState) { 569 LOG(Media, "MediaPlayerPrivateAVFoundation::updateStates(%p) - entered with networkState = %i, readyState = %i, exiting with networkState = %i, readyState = %i", 570 this, static_cast<int>(m_networkState), static_cast<int>(m_readyState), static_cast<int>(newNetworkState), static_cast<int>(newReadyState)); 571 } 572 #endif 573 574 setNetworkState(newNetworkState); 575 setReadyState(newReadyState); 561 576 562 577 if (m_playWhenFramesAvailable && hasAvailableVideoFrame()) { … … 564 579 platformPlay(); 565 580 } 566 567 #if !LOG_DISABLED568 if (m_networkState != oldNetworkState || oldReadyState != m_readyState) {569 LOG(Media, "MediaPlayerPrivateAVFoundation::updateStates(%p) - entered with networkState = %i, readyState = %i, exiting with networkState = %i, readyState = %i",570 this, static_cast<int>(oldNetworkState), static_cast<int>(oldReadyState), static_cast<int>(m_networkState), static_cast<int>(m_readyState));571 }572 #endif573 581 } 574 582 -
trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h
r181153 r182081 271 271 void setNaturalSize(FloatSize); 272 272 bool isLiveStream() const { return std::isinf(duration()); } 273 void setNetworkState(MediaPlayer::NetworkState); 274 void setReadyState(MediaPlayer::ReadyState); 273 275 274 276 enum MediaRenderingMode { MediaRenderingNone, MediaRenderingToContext, MediaRenderingToLayer };
Note: See TracChangeset
for help on using the changeset viewer.