Changeset 217311 in webkit


Ignore:
Timestamp:
May 23, 2017 5:07:21 PM (7 years ago)
Author:
eric.carlson@apple.com
Message:

[MediaStream] Allow transition from autoplay to play when a capture stream begins.
https://bugs.webkit.org/show_bug.cgi?id=172391
<rdar://problem/32304934>

Reviewed by Youenn Fablet.

Manual testing. Regression testing to be added as a follow-up.

  • dom/Document.cpp:

(WebCore::Document::updateIsPlayingMedia): Call mediaStreamCaptureStateChanged when capture
state changes.
(WebCore::Document::registerForMediaStreamStateChangeCallbacks):
(WebCore::Document::unregisterForMediaStreamStateChangeCallbacks):
(WebCore::Document::mediaStreamCaptureStateChanged): Call all registered elements.

  • dom/Document.h:
  • html/HTMLMediaElement.cpp:

(WebCore::HTMLMediaElement::registerWithDocument): Register for capture state changes.
(WebCore::HTMLMediaElement::unregisterWithDocument): Unregister for capture state changes.
(WebCore::HTMLMediaElement::mediaStreamCaptureStateChanged): Attempt autoplay as necessary.

  • html/HTMLMediaElement.h:
Location:
trunk/Source/WebCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r217310 r217311  
     12017-05-23  Eric Carlson  <eric.carlson@apple.com>
     2
     3        [MediaStream] Allow transition from autoplay to play when a capture stream begins.
     4        https://bugs.webkit.org/show_bug.cgi?id=172391
     5        <rdar://problem/32304934>
     6
     7        Reviewed by Youenn Fablet.
     8
     9        Manual testing. Regression testing to be added as a follow-up.
     10
     11        * dom/Document.cpp:
     12        (WebCore::Document::updateIsPlayingMedia): Call mediaStreamCaptureStateChanged when capture
     13        state changes.
     14        (WebCore::Document::registerForMediaStreamStateChangeCallbacks):
     15        (WebCore::Document::unregisterForMediaStreamStateChangeCallbacks):
     16        (WebCore::Document::mediaStreamCaptureStateChanged): Call all registered elements.
     17        * dom/Document.h:
     18        * html/HTMLMediaElement.cpp:
     19        (WebCore::HTMLMediaElement::registerWithDocument): Register for capture state changes.
     20        (WebCore::HTMLMediaElement::unregisterWithDocument): Unregister for capture state changes.
     21        (WebCore::HTMLMediaElement::mediaStreamCaptureStateChanged): Attempt autoplay as necessary.
     22        * html/HTMLMediaElement.h:
     23
    1242017-05-15  Matt Rajca  <mrajca@apple.com>
    225
  • trunk/Source/WebCore/dom/Document.cpp

    r217239 r217311  
    34843484        return;
    34853485
     3486#if ENABLE(MEDIA_STREAM)
     3487    bool captureStateChanged = MediaProducer::isCapturing(m_mediaState) != MediaProducer::isCapturing(state);
     3488#endif
     3489   
    34863490    m_mediaState = state;
    34873491
    34883492    if (page())
    34893493        page()->updateIsPlayingMedia(sourceElementID);
     3494
     3495#if ENABLE(MEDIA_STREAM)
     3496    if (captureStateChanged)
     3497        mediaStreamCaptureStateChanged();
     3498#endif
    34903499}
    34913500
     
    70127021    });
    70137022}
     7023
     7024void Document::registerForMediaStreamStateChangeCallbacks(HTMLMediaElement& element)
     7025{
     7026    m_mediaStreamStateChangeElements.add(&element);
     7027}
     7028
     7029void Document::unregisterForMediaStreamStateChangeCallbacks(HTMLMediaElement& element)
     7030{
     7031    m_mediaStreamStateChangeElements.remove(&element);
     7032}
     7033
     7034void Document::mediaStreamCaptureStateChanged()
     7035{
     7036    for (auto* mediaElement : m_mediaStreamStateChangeElements)
     7037        mediaElement->mediaStreamCaptureStateChanged();
     7038}
    70147039#endif
    70157040
  • trunk/Source/WebCore/dom/Document.h

    r217054 r217311  
    12841284    String deviceIDHashSalt() const { return m_idHashSalt; }
    12851285    void stopMediaCapture();
     1286    void registerForMediaStreamStateChangeCallbacks(HTMLMediaElement&);
     1287    void unregisterForMediaStreamStateChangeCallbacks(HTMLMediaElement&);
     1288    void mediaStreamCaptureStateChanged();
    12861289#endif
    12871290
     
    17661769
    17671770#if ENABLE(MEDIA_STREAM)
     1771    HashSet<HTMLMediaElement*> m_mediaStreamStateChangeElements;
    17681772    String m_idHashSalt;
    17691773    bool m_hasHadActiveMediaStreamTrack { false };
  • trunk/Source/WebCore/html/HTMLMediaElement.cpp

    r217310 r217311  
    687687    document.addAudioProducer(this);
    688688    addElementToDocumentMap(*this, document);
     689
     690#if ENABLE(MEDIA_STREAM)
     691    document.registerForMediaStreamStateChangeCallbacks(*this);
     692#endif
    689693}
    690694
     
    722726    document.removeAudioProducer(this);
    723727    removeElementFromDocumentMap(*this, document);
     728
     729#if ENABLE(MEDIA_STREAM)
     730    document.unregisterForMediaStreamStateChangeCallbacks(*this);
     731#endif
     732
    724733}
    725734
     
    74787487}
    74797488
    7480 }
    7481 
    7482 #endif
     7489#if ENABLE(MEDIA_STREAM)
     7490void HTMLMediaElement::mediaStreamCaptureStateChanged()
     7491{
     7492    resumeAutoplaying();
     7493}
     7494#endif
     7495
     7496}
     7497
     7498#endif
  • trunk/Source/WebCore/html/HTMLMediaElement.h

    r216886 r217311  
    516516
    517517#if ENABLE(MEDIA_STREAM)
     518    void mediaStreamCaptureStateChanged();
    518519    bool hasMediaStreamSrcObject() const { return !!m_mediaStreamSrcObject; }
    519520#endif
Note: See TracChangeset for help on using the changeset viewer.