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

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

Issue 1810513002: Media element resource selection algorithm should "await a stable state" Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase and microtask changes Created 4 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 | « third_party/WebKit/Source/core/html/HTMLMediaElement.h ('k') | no next file » | 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 370 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 381
382 bool HTMLMediaElement::isMediaStreamURL(const String& url) 382 bool HTMLMediaElement::isMediaStreamURL(const String& url)
383 { 383 {
384 return s_mediaStreamRegistry ? s_mediaStreamRegistry->contains(url) : false; 384 return s_mediaStreamRegistry ? s_mediaStreamRegistry->contains(url) : false;
385 } 385 }
386 386
387 HTMLMediaElement::HTMLMediaElement(const QualifiedName& tagName, Document& docum ent) 387 HTMLMediaElement::HTMLMediaElement(const QualifiedName& tagName, Document& docum ent)
388 : HTMLElement(tagName, document) 388 : HTMLElement(tagName, document)
389 , ActiveScriptWrappable(this) 389 , ActiveScriptWrappable(this)
390 , ActiveDOMObject(&document) 390 , ActiveDOMObject(&document)
391 , m_loadTimer(this, &HTMLMediaElement::loadTimerFired) 391 , m_textTrackLoadTimer(this, &HTMLMediaElement::textTrackLoadTimerFired)
392 , m_progressEventTimer(this, &HTMLMediaElement::progressEventTimerFired) 392 , m_progressEventTimer(this, &HTMLMediaElement::progressEventTimerFired)
393 , m_playbackProgressTimer(this, &HTMLMediaElement::playbackProgressTimerFire d) 393 , m_playbackProgressTimer(this, &HTMLMediaElement::playbackProgressTimerFire d)
394 , m_audioTracksTimer(this, &HTMLMediaElement::audioTracksTimerFired) 394 , m_audioTracksTimer(this, &HTMLMediaElement::audioTracksTimerFired)
395 , m_playedTimeRanges() 395 , m_playedTimeRanges()
396 , m_asyncEventQueue(GenericEventQueue::create(this)) 396 , m_asyncEventQueue(GenericEventQueue::create(this))
397 , m_playbackRate(1.0f) 397 , m_playbackRate(1.0f)
398 , m_defaultPlaybackRate(1.0f) 398 , m_defaultPlaybackRate(1.0f)
399 , m_networkState(kNetworkEmpty) 399 , m_networkState(kNetworkEmpty)
400 , m_readyState(kHaveNothing) 400 , m_readyState(kHaveNothing)
401 , m_readyStateMaximum(kHaveNothing) 401 , m_readyStateMaximum(kHaveNothing)
402 , m_volume(1.0f) 402 , m_volume(1.0f)
403 , m_lastSeekTime(0) 403 , m_lastSeekTime(0)
404 , m_previousProgressTime(std::numeric_limits<double>::max()) 404 , m_previousProgressTime(std::numeric_limits<double>::max())
405 , m_duration(std::numeric_limits<double>::quiet_NaN()) 405 , m_duration(std::numeric_limits<double>::quiet_NaN())
406 , m_lastTimeUpdateEventWallTime(0) 406 , m_lastTimeUpdateEventWallTime(0)
407 , m_lastTimeUpdateEventMovieTime(0) 407 , m_lastTimeUpdateEventMovieTime(0)
408 , m_defaultPlaybackStartPosition(0) 408 , m_defaultPlaybackStartPosition(0)
409 , m_loadState(WaitingForSource) 409 , m_loadState(WaitingForSource)
410 , m_deferredLoadState(NotDeferred) 410 , m_deferredLoadState(NotDeferred)
411 , m_deferredLoadTimer(this, &HTMLMediaElement::deferredLoadTimerFired) 411 , m_deferredLoadTimer(this, &HTMLMediaElement::deferredLoadTimerFired)
412 , m_webLayer(nullptr) 412 , m_webLayer(nullptr)
413 , m_displayMode(Unknown) 413 , m_displayMode(Unknown)
414 , m_cachedTime(std::numeric_limits<double>::quiet_NaN()) 414 , m_cachedTime(std::numeric_limits<double>::quiet_NaN())
415 , m_fragmentEndTime(std::numeric_limits<double>::quiet_NaN()) 415 , m_fragmentEndTime(std::numeric_limits<double>::quiet_NaN())
416 , m_pendingActionFlags(0)
417 , m_lockedPendingUserGesture(false) 416 , m_lockedPendingUserGesture(false)
418 , m_playing(false) 417 , m_playing(false)
419 , m_shouldDelayLoadEvent(false) 418 , m_shouldDelayLoadEvent(false)
420 , m_haveFiredLoadedData(false) 419 , m_haveFiredLoadedData(false)
421 , m_autoplaying(true) 420 , m_autoplaying(true)
422 , m_muted(false) 421 , m_muted(false)
423 , m_paused(true) 422 , m_paused(true)
424 , m_seeking(false) 423 , m_seeking(false)
425 , m_sentStalledEvent(false) 424 , m_sentStalledEvent(false)
426 , m_ignorePreloadNone(false) 425 , m_ignorePreloadNone(false)
427 , m_textTracksVisible(false) 426 , m_textTracksVisible(false)
428 , m_shouldPerformAutomaticTrackSelection(true) 427 , m_shouldPerformAutomaticTrackSelection(true)
429 , m_tracksAreReady(true) 428 , m_tracksAreReady(true)
430 , m_processingPreferenceChange(false) 429 , m_processingPreferenceChange(false)
431 , m_remoteRoutesAvailable(false) 430 , m_remoteRoutesAvailable(false)
432 , m_playingRemotely(false) 431 , m_playingRemotely(false)
433 , m_inOverlayFullscreenVideo(false) 432 , m_inOverlayFullscreenVideo(false)
434 , m_audioTracks(AudioTrackList::create(*this)) 433 , m_audioTracks(AudioTrackList::create(*this))
435 , m_videoTracks(VideoTrackList::create(*this)) 434 , m_videoTracks(VideoTrackList::create(*this))
436 , m_textTracks(nullptr) 435 , m_textTracks(nullptr)
437 , m_playPromiseResolveTask(CancellableTaskFactory::create(this, &HTMLMediaEl ement::resolveScheduledPlayPromises)) 436 , m_playPromiseResolveTask(CancellableTaskFactory::create(this, &HTMLMediaEl ement::resolveScheduledPlayPromises))
438 , m_playPromiseRejectTask(CancellableTaskFactory::create(this, &HTMLMediaEle ment::rejectScheduledPlayPromises)) 437 , m_playPromiseRejectTask(CancellableTaskFactory::create(this, &HTMLMediaEle ment::rejectScheduledPlayPromises))
438 , m_resourceSelectionAlgorithmContinuationTask(CancellableTaskFactory::creat e(this, &HTMLMediaElement::continueResourceSelectionAlgorithm))
439 , m_loadNextSourceChildAfterErrorTask(CancellableTaskFactory::create(this, & HTMLMediaElement::loadNextSourceChildAfterError))
439 , m_audioSourceNode(nullptr) 440 , m_audioSourceNode(nullptr)
440 , m_autoplayHelperClient(AutoplayHelperClientImpl::create(this)) 441 , m_autoplayHelperClient(AutoplayHelperClientImpl::create(this))
441 , m_autoplayHelper(AutoplayExperimentHelper::create(m_autoplayHelperClient.g et())) 442 , m_autoplayHelper(AutoplayExperimentHelper::create(m_autoplayHelperClient.g et()))
442 , m_autoplayUmaHelper(AutoplayUmaHelper::create(this)) 443 , m_autoplayUmaHelper(AutoplayUmaHelper::create(this))
443 , m_remotePlaybackClient(nullptr) 444 , m_remotePlaybackClient(nullptr)
444 , m_autoplayVisibilityObserver(nullptr) 445 , m_autoplayVisibilityObserver(nullptr)
445 { 446 {
446 ThreadState::current()->registerPreFinalizer(this); 447 ThreadState::current()->registerPreFinalizer(this);
447 448
448 BLINK_MEDIA_LOG << "HTMLMediaElement(" << (void*)this << ")"; 449 BLINK_MEDIA_LOG << "HTMLMediaElement(" << (void*)this << ")";
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
628 void HTMLMediaElement::didRecalcStyle(StyleRecalcChange) 629 void HTMLMediaElement::didRecalcStyle(StyleRecalcChange)
629 { 630 {
630 if (layoutObject()) 631 if (layoutObject())
631 layoutObject()->updateFromElement(); 632 layoutObject()->updateFromElement();
632 } 633 }
633 634
634 void HTMLMediaElement::scheduleTextTrackResourceLoad() 635 void HTMLMediaElement::scheduleTextTrackResourceLoad()
635 { 636 {
636 BLINK_MEDIA_LOG << "scheduleTextTrackResourceLoad(" << (void*)this << ")"; 637 BLINK_MEDIA_LOG << "scheduleTextTrackResourceLoad(" << (void*)this << ")";
637 638
638 m_pendingActionFlags |= LoadTextTrackResource; 639 if (!m_textTrackLoadTimer.isActive())
639 640 m_textTrackLoadTimer.startOneShot(0, BLINK_FROM_HERE);
640 if (!m_loadTimer.isActive())
641 m_loadTimer.startOneShot(0, BLINK_FROM_HERE);
642 }
643
644 void HTMLMediaElement::scheduleNextSourceChild()
645 {
646 // Schedule the timer to try the next <source> element WITHOUT resetting sta te ala invokeLoadAlgorithm.
647 m_pendingActionFlags |= LoadMediaResource;
648 m_loadTimer.startOneShot(0, BLINK_FROM_HERE);
649 } 641 }
650 642
651 void HTMLMediaElement::scheduleEvent(const AtomicString& eventName) 643 void HTMLMediaElement::scheduleEvent(const AtomicString& eventName)
652 { 644 {
653 scheduleEvent(Event::createCancelable(eventName)); 645 scheduleEvent(Event::createCancelable(eventName));
654 } 646 }
655 647
656 void HTMLMediaElement::scheduleEvent(Event* event) 648 void HTMLMediaElement::scheduleEvent(Event* event)
657 { 649 {
658 #if LOG_MEDIA_EVENTS 650 #if LOG_MEDIA_EVENTS
659 BLINK_MEDIA_LOG << "scheduleEvent(" << (void*)this << ")" << " - scheduling '" << event->type() << "'"; 651 BLINK_MEDIA_LOG << "scheduleEvent(" << (void*)this << ")" << " - scheduling '" << event->type() << "'";
660 #endif 652 #endif
661 m_asyncEventQueue->enqueueEvent(event); 653 m_asyncEventQueue->enqueueEvent(event);
662 } 654 }
663 655
664 void HTMLMediaElement::loadTimerFired(TimerBase*) 656 void HTMLMediaElement::textTrackLoadTimerFired(TimerBase*)
665 { 657 {
666 if (m_pendingActionFlags & LoadTextTrackResource) 658 BLINK_MEDIA_LOG << "HTMLMediaElement::textTrackLoadTimerFired(" << (void*)th is << ")";
667 honorUserPreferencesForAutomaticTextTrackSelection(); 659 honorUserPreferencesForAutomaticTextTrackSelection();
668
669 if (m_pendingActionFlags & LoadMediaResource) {
670 if (m_loadState == LoadingFromSourceElement)
671 loadNextSourceChild();
672 else
673 loadInternal();
674 }
675
676 m_pendingActionFlags = 0;
677 } 660 }
678 661
679 MediaError* HTMLMediaElement::error() const 662 MediaError* HTMLMediaElement::error() const
680 { 663 {
681 return m_error; 664 return m_error;
682 } 665 }
683 666
684 void HTMLMediaElement::setSrc(const AtomicString& url) 667 void HTMLMediaElement::setSrc(const AtomicString& url)
685 { 668 {
686 setAttribute(srcAttr, url); 669 setAttribute(srcAttr, url);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
734 // TODO(srirama.m): Currently m_ignorePreloadNone is reset before calling 717 // TODO(srirama.m): Currently m_ignorePreloadNone is reset before calling
735 // invokeLoadAlgorithm() in all places except load(). Move it inside here 718 // invokeLoadAlgorithm() in all places except load(). Move it inside here
736 // once microtask is implemented for "Await a stable state" step 719 // once microtask is implemented for "Await a stable state" step
737 // in resource selection algorithm. 720 // in resource selection algorithm.
738 void HTMLMediaElement::invokeLoadAlgorithm() 721 void HTMLMediaElement::invokeLoadAlgorithm()
739 { 722 {
740 BLINK_MEDIA_LOG << "invokeLoadAlgorithm(" << (void*)this << ")"; 723 BLINK_MEDIA_LOG << "invokeLoadAlgorithm(" << (void*)this << ")";
741 724
742 // Perform the cleanup required for the resource load algorithm to run. 725 // Perform the cleanup required for the resource load algorithm to run.
743 stopPeriodicTimers(); 726 stopPeriodicTimers();
744 m_loadTimer.stop();
745 cancelDeferredLoad(); 727 cancelDeferredLoad();
746 // FIXME: Figure out appropriate place to reset LoadTextTrackResource if nec essary and set m_pendingActionFlags to 0 here.
747 m_pendingActionFlags &= ~LoadMediaResource;
748 m_sentStalledEvent = false; 728 m_sentStalledEvent = false;
749 m_haveFiredLoadedData = false; 729 m_haveFiredLoadedData = false;
750 m_displayMode = Unknown; 730 m_displayMode = Unknown;
751 731
752 // 1 - Abort any already-running instance of the resource selection algorith m for this element. 732 // 1 - Abort any already-running instance of the resource selection algorith m for this element.
733 m_resourceSelectionAlgorithmContinuationTask->cancel();
734 m_loadNextSourceChildAfterErrorTask->cancel();
753 m_loadState = WaitingForSource; 735 m_loadState = WaitingForSource;
754 m_currentSourceNode = nullptr; 736 m_currentSourceNode = nullptr;
755 737
756 // 2 - Let pending tasks be a list of tasks from the media element's media 738 // 2 - Let pending tasks be a list of tasks from the media element's media
757 // element task source in one of the task queues. 739 // element task source in one of the task queues.
758 // 740 //
759 // 3 - For each task in the pending tasks that would run resolve pending 741 // 3 - For each task in the pending tasks that would run resolve pending
760 // play promises or project pending play prmoises algorithms, immediately 742 // play promises or project pending play prmoises algorithms, immediately
761 // resolve or reject those promises in the order the corresponding tasks 743 // resolve or reject those promises in the order the corresponding tasks
762 // were queued. 744 // were queued.
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
863 // so they are closer to the relevant spec steps. 845 // so they are closer to the relevant spec steps.
864 m_lastSeekTime = 0; 846 m_lastSeekTime = 0;
865 m_duration = std::numeric_limits<double>::quiet_NaN(); 847 m_duration = std::numeric_limits<double>::quiet_NaN();
866 848
867 // 3 - Set the media element's delaying-the-load-event flag to true (this de lays the load event) 849 // 3 - Set the media element's delaying-the-load-event flag to true (this de lays the load event)
868 setShouldDelayLoadEvent(true); 850 setShouldDelayLoadEvent(true);
869 if (mediaControls()) 851 if (mediaControls())
870 mediaControls()->reset(); 852 mediaControls()->reset();
871 853
872 // 4 - Await a stable state, allowing the task that invoked this algorithm t o continue 854 // 4 - Await a stable state, allowing the task that invoked this algorithm t o continue
873 // TODO(srirama.m): Remove scheduleNextSourceChild() and post a microtask in stead. 855 Platform::current()->currentThread()->getWebTaskRunner()->postTask(BLINK_FRO M_HERE, m_resourceSelectionAlgorithmContinuationTask->cancelAndCreate());
foolip 2016/09/02 10:31:00 Just to be clear, this and the below use of Platfo
874 // See http://crbug.com/593289 for more details. 856 }
875 scheduleNextSourceChild(); 857
858 void HTMLMediaElement::continueResourceSelectionAlgorithm()
859 {
860 BLINK_MEDIA_LOG << "HTMLMediaElement::continueResourceSelectionAlgorithm(" < < (void*)this << ")";
861 loadInternal();
876 } 862 }
877 863
878 void HTMLMediaElement::loadInternal() 864 void HTMLMediaElement::loadInternal()
879 { 865 {
880 // HTMLMediaElement::textTracksAreReady will need "... the text tracks whose mode was not in the 866 // HTMLMediaElement::textTracksAreReady will need "... the text tracks whose mode was not in the
881 // disabled state when the element's resource selection algorithm last start ed". 867 // disabled state when the element's resource selection algorithm last start ed".
882 m_textTracksWhenResourceSelectionBegan.clear(); 868 m_textTracksWhenResourceSelectionBegan.clear();
883 if (m_textTracks) { 869 if (m_textTracks) {
884 for (unsigned i = 0; i < m_textTracks->length(); ++i) { 870 for (unsigned i = 0; i < m_textTracks->length(); ++i) {
885 TextTrack* track = m_textTracks->anonymousIndexedGetter(i); 871 TextTrack* track = m_textTracks->anonymousIndexedGetter(i);
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
995 return; 981 return;
996 } 982 }
997 983
998 // Reset the MediaPlayer and MediaSource if any 984 // Reset the MediaPlayer and MediaSource if any
999 resetMediaPlayerAndMediaSource(); 985 resetMediaPlayerAndMediaSource();
1000 986
1001 m_loadState = LoadingFromSourceElement; 987 m_loadState = LoadingFromSourceElement;
1002 loadResource(WebMediaPlayerSource(WebURL(mediaURL)), contentType); 988 loadResource(WebMediaPlayerSource(WebURL(mediaURL)), contentType);
1003 } 989 }
1004 990
991 void HTMLMediaElement::loadNextSourceChildAfterError()
992 {
993 // 9.Otherwise.11 - Forget the media element's media-resource-specific track s.
994 forgetResourceSpecificTracks();
995 loadNextSourceChild();
996 }
997
1005 void HTMLMediaElement::loadResource(const WebMediaPlayerSource& source, const Co ntentType& contentType) 998 void HTMLMediaElement::loadResource(const WebMediaPlayerSource& source, const Co ntentType& contentType)
1006 { 999 {
1007 DCHECK(isMainThread()); 1000 DCHECK(isMainThread());
1008 KURL url; 1001 KURL url;
1009 if (source.isURL()) { 1002 if (source.isURL()) {
1010 url = source.getAsURL(); 1003 url = source.getAsURL();
1011 DCHECK(isSafeToLoadURL(url, Complain)); 1004 DCHECK(isSafeToLoadURL(url, Complain));
1012 BLINK_MEDIA_LOG << "loadResource(" << (void*)this << ", " << urlForLoggi ngMedia(url) << ", " << contentType.raw() << ")"; 1005 BLINK_MEDIA_LOG << "loadResource(" << (void*)this << ", " << urlForLoggi ngMedia(url) << ", " << contentType.raw() << ")";
1013 } 1006 }
1014 1007
(...skipping 418 matching lines...) Expand 10 before | Expand all | Expand 10 after
1433 if (m_readyState < kHaveMetadata && m_loadState == LoadingFromSourceElement) { 1426 if (m_readyState < kHaveMetadata && m_loadState == LoadingFromSourceElement) {
1434 1427
1435 // resource selection algorithm 1428 // resource selection algorithm
1436 // Step 9.Otherwise.9 - Failed with elements: Queue a task, using the DO M manipulation task source, to fire a simple event named error at the candidate element. 1429 // Step 9.Otherwise.9 - Failed with elements: Queue a task, using the DO M manipulation task source, to fire a simple event named error at the candidate element.
1437 if (m_currentSourceNode) 1430 if (m_currentSourceNode)
1438 m_currentSourceNode->scheduleErrorEvent(); 1431 m_currentSourceNode->scheduleErrorEvent();
1439 else 1432 else
1440 BLINK_MEDIA_LOG << "setNetworkState(" << (void*)this << ") - error e vent not sent, <source> was removed"; 1433 BLINK_MEDIA_LOG << "setNetworkState(" << (void*)this << ") - error e vent not sent, <source> was removed";
1441 1434
1442 // 9.Otherwise.10 - Asynchronously await a stable state. The synchronous section consists of all the remaining steps of this algorithm until the algorit hm says the synchronous section has ended. 1435 // 9.Otherwise.10 - Asynchronously await a stable state. The synchronous section consists of all the remaining steps of this algorithm until the algorit hm says the synchronous section has ended.
1443
1444 // 9.Otherwise.11 - Forget the media element's media-resource-specific t racks.
1445 forgetResourceSpecificTracks();
1446
1447 if (havePotentialSourceChild()) { 1436 if (havePotentialSourceChild()) {
1448 BLINK_MEDIA_LOG << "setNetworkState(" << (void*)this << ") - schedul ing next <source>"; 1437 BLINK_MEDIA_LOG << "setNetworkState(" << (void*)this << ") - schedul ing next <source>";
1449 scheduleNextSourceChild(); 1438 Platform::current()->currentThread()->getWebTaskRunner()->postTask(B LINK_FROM_HERE, m_loadNextSourceChildAfterErrorTask->cancelAndCreate());
1450 } else { 1439 } else {
1451 BLINK_MEDIA_LOG << "setNetworkState(" << (void*)this << ") - no more <source> elements, waiting"; 1440 BLINK_MEDIA_LOG << "setNetworkState(" << (void*)this << ") - no more <source> elements, waiting";
1452 waitForSourceChange(); 1441 waitForSourceChange();
1453 } 1442 }
1454 1443
1455 return; 1444 return;
1456 } 1445 }
1457 1446
1458 if (error == WebMediaPlayer::NetworkStateNetworkError && m_readyState >= kHa veMetadata) 1447 if (error == WebMediaPlayer::NetworkStateNetworkError && m_readyState >= kHa veMetadata)
1459 mediaEngineError(MediaError::create(MediaError::kMediaErrNetwork)); 1448 mediaEngineError(MediaError::create(MediaError::kMediaErrNetwork));
(...skipping 1388 matching lines...) Expand 10 before | Expand all | Expand 10 after
2848 // 22. Asynchronously await a stable state... 2837 // 22. Asynchronously await a stable state...
2849 // 23. Set the element's delaying-the-load-event flag back to true (this del ays the load event again, in case 2838 // 23. Set the element's delaying-the-load-event flag back to true (this del ays the load event again, in case
2850 // it hasn't been fired yet). 2839 // it hasn't been fired yet).
2851 setShouldDelayLoadEvent(true); 2840 setShouldDelayLoadEvent(true);
2852 2841
2853 // 24. Set the networkState back to NETWORK_LOADING. 2842 // 24. Set the networkState back to NETWORK_LOADING.
2854 setNetworkState(kNetworkLoading); 2843 setNetworkState(kNetworkLoading);
2855 2844
2856 // 25. Jump back to the find next candidate step above. 2845 // 25. Jump back to the find next candidate step above.
2857 m_nextChildNodeToConsider = source; 2846 m_nextChildNodeToConsider = source;
2858 scheduleNextSourceChild(); 2847 loadNextSourceChild();
2859 } 2848 }
2860 2849
2861 void HTMLMediaElement::sourceWasRemoved(HTMLSourceElement* source) 2850 void HTMLMediaElement::sourceWasRemoved(HTMLSourceElement* source)
2862 { 2851 {
2863 BLINK_MEDIA_LOG << "sourceWasRemoved(" << (void*)this << ", " << source << " )"; 2852 BLINK_MEDIA_LOG << "sourceWasRemoved(" << (void*)this << ", " << source << " )";
2864 2853
2865 KURL url = source->getNonEmptyURLAttribute(srcAttr); 2854 KURL url = source->getNonEmptyURLAttribute(srcAttr);
2866 BLINK_MEDIA_LOG << "sourceWasRemoved(" << (void*)this << ") - 'src' is " << urlForLoggingMedia(url); 2855 BLINK_MEDIA_LOG << "sourceWasRemoved(" << (void*)this << ") - 'src' is " << urlForLoggingMedia(url);
2867 2856
2868 if (source != m_currentSourceNode && source != m_nextChildNodeToConsider) 2857 if (source != m_currentSourceNode && source != m_nextChildNodeToConsider)
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
3196 closeMediaSource(); 3185 closeMediaSource();
3197 3186
3198 cancelDeferredLoad(); 3187 cancelDeferredLoad();
3199 3188
3200 { 3189 {
3201 AudioSourceProviderClientLockScope scope(*this); 3190 AudioSourceProviderClientLockScope scope(*this);
3202 clearMediaPlayerAndAudioSourceProviderClientWithoutLocking(); 3191 clearMediaPlayerAndAudioSourceProviderClientWithoutLocking();
3203 } 3192 }
3204 3193
3205 stopPeriodicTimers(); 3194 stopPeriodicTimers();
3206 m_loadTimer.stop(); 3195 m_textTrackLoadTimer.stop();
3207 3196
3208 m_pendingActionFlags = 0;
3209 m_loadState = WaitingForSource; 3197 m_loadState = WaitingForSource;
3210 3198
3211 // We can't cast if we don't have a media player. 3199 // We can't cast if we don't have a media player.
3212 m_remoteRoutesAvailable = false; 3200 m_remoteRoutesAvailable = false;
3213 m_playingRemotely = false; 3201 m_playingRemotely = false;
3214 if (mediaControls()) 3202 if (mediaControls())
3215 mediaControls()->refreshCastButtonVisibilityWithoutUpdate(); 3203 mediaControls()->refreshCastButtonVisibilityWithoutUpdate();
3216 3204
3217 if (layoutObject()) 3205 if (layoutObject())
3218 layoutObject()->setShouldDoFullPaintInvalidation(); 3206 layoutObject()->setShouldDoFullPaintInvalidation();
(...skipping 803 matching lines...) Expand 10 before | Expand all | Expand 10 after
4022 4010
4023 IntRect HTMLMediaElement::AutoplayHelperClientImpl::absoluteBoundingBoxRect() co nst 4011 IntRect HTMLMediaElement::AutoplayHelperClientImpl::absoluteBoundingBoxRect() co nst
4024 { 4012 {
4025 IntRect result; 4013 IntRect result;
4026 if (LayoutObject* object = m_element->layoutObject()) 4014 if (LayoutObject* object = m_element->layoutObject())
4027 result = object->absoluteBoundingBoxRect(); 4015 result = object->absoluteBoundingBoxRect();
4028 return result; 4016 return result;
4029 } 4017 }
4030 4018
4031 } // namespace blink 4019 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/html/HTMLMediaElement.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698