Changeset 141984 in webkit


Ignore:
Timestamp:
Feb 6, 2013 3:57:01 AM (11 years ago)
Author:
tommyw@google.com
Message:

MediaStream API: Implement DTMF support in RTCPeerConnection
https://bugs.webkit.org/show_bug.cgi?id=106782

Reviewed by Adam Barth.

Source/Platform:

The WebRTC specification have added support for DTMF:
http://dev.w3.org/2011/webrtc/editor/webrtc.html#peer-to-peer-dtmf

Implementation wise this is implemented using the same pattern as RTCDataChannel;
where a RTCDTMFSenderHandler is created by the UA through a new method on
RTCPeerConnectionHandler.

  • Platform.gypi:
  • chromium/public/WebMediaStreamTrack.h:

(WebMediaStreamTrack):

  • chromium/public/WebRTCDTMFSenderHandler.h: Copied from Source/Platform/chromium/public/WebMediaStreamTrack.h.

(WebKit):
(WebRTCDTMFSenderHandler):
(WebKit::WebRTCDTMFSenderHandler::~WebRTCDTMFSenderHandler):

  • chromium/public/WebRTCDTMFSenderHandlerClient.h: Copied from Source/Platform/chromium/public/WebMediaStreamTrack.h.

(WebKit):
(WebRTCDTMFSenderHandlerClient):
(WebKit::WebRTCDTMFSenderHandlerClient::~WebRTCDTMFSenderHandlerClient):

  • chromium/public/WebRTCPeerConnectionHandler.h:

(WebKit):
(WebKit::WebRTCPeerConnectionHandler::createDTMFSender):

Source/WebCore:

The WebRTC specification have added support for DTMF:
http://dev.w3.org/2011/webrtc/editor/webrtc.html#peer-to-peer-dtmf

Implementation wise this is implemented using the same pattern as RTCDataChannel;
where a RTCDTMFSenderHandler is created by the UA through a new method on
RTCPeerConnectionHandler.

Test: fast/mediastream/RTCPeerConnection-dtmf.html

  • CMakeLists.txt:
  • GNUmakefile.list.am:
  • Modules/mediastream/RTCDTMFSender.cpp: Added.

(WebCore):
(WebCore::RTCDTMFSender::create):
(WebCore::RTCDTMFSender::RTCDTMFSender):
(WebCore::RTCDTMFSender::~RTCDTMFSender):
(WebCore::RTCDTMFSender::canInsertDTMF):
(WebCore::RTCDTMFSender::track):
(WebCore::RTCDTMFSender::toneBuffer):
(WebCore::RTCDTMFSender::insertDTMF):
(WebCore::RTCDTMFSender::didPlayTone):
(WebCore::RTCDTMFSender::interfaceName):
(WebCore::RTCDTMFSender::scriptExecutionContext):
(WebCore::RTCDTMFSender::stop):
(WebCore::RTCDTMFSender::eventTargetData):
(WebCore::RTCDTMFSender::ensureEventTargetData):
(WebCore::RTCDTMFSender::scheduleDispatchEvent):
(WebCore::RTCDTMFSender::scheduledEventTimerFired):

  • Modules/mediastream/RTCDTMFSender.h: Added.

(WebCore):
(RTCDTMFSender):
(WebCore::RTCDTMFSender::duration):
(WebCore::RTCDTMFSender::interToneGap):

  • Modules/mediastream/RTCDTMFSender.idl: Added.
  • Modules/mediastream/RTCDTMFToneChangeEvent.cpp: Copied from Source/Platform/chromium/public/WebMediaStreamTrack.h.

(WebCore):
(WebCore::RTCDTMFToneChangeEvent::create):
(WebCore::RTCDTMFToneChangeEvent::RTCDTMFToneChangeEvent):
(WebCore::RTCDTMFToneChangeEvent::~RTCDTMFToneChangeEvent):
(WebCore::RTCDTMFToneChangeEvent::tone):
(WebCore::RTCDTMFToneChangeEvent::interfaceName):

  • Modules/mediastream/RTCDTMFToneChangeEvent.h: Copied from Source/Platform/chromium/public/WebMediaStreamTrack.h.

(WebCore):
(RTCDTMFToneChangeEventInit):
(RTCDTMFToneChangeEvent):

  • Modules/mediastream/RTCDTMFToneChangeEvent.idl: Added.
  • Modules/mediastream/RTCPeerConnection.cpp:

(WebCore::RTCPeerConnection::createDataChannel):
(WebCore):
(WebCore::RTCPeerConnection::getStreamByTrackId):
(WebCore::RTCPeerConnection::createDTMFSender):

  • Modules/mediastream/RTCPeerConnection.h:

(WebCore):
(RTCPeerConnection):

  • Modules/mediastream/RTCPeerConnection.idl:
  • WebCore.gypi:
  • dom/EventNames.h:

(WebCore):

  • dom/EventNames.in:
  • dom/EventTargetFactory.in:
  • platform/chromium/support/WebMediaStreamTrack.cpp:

(WebKit::WebMediaStreamTrack::WebMediaStreamTrack):
(WebKit):

  • platform/mediastream/RTCDTMFSenderHandler.h: Copied from Source/Platform/chromium/public/WebMediaStreamTrack.h.

(WebCore):
(RTCDTMFSenderHandler):
(WebCore::RTCDTMFSenderHandler::~RTCDTMFSenderHandler):

  • platform/mediastream/RTCDTMFSenderHandlerClient.h: Copied from Source/Platform/chromium/public/WebMediaStreamTrack.h.

(WebCore):
(RTCDTMFSenderHandlerClient):
(WebCore::RTCDTMFSenderHandlerClient::~RTCDTMFSenderHandlerClient):

  • platform/mediastream/RTCPeerConnectionHandler.h:

(WebCore):
(RTCPeerConnectionHandler):

  • platform/mediastream/chromium/RTCDTMFSenderHandlerChromium.cpp: Copied from Source/Platform/chromium/public/WebMediaStreamTrack.h.

(WebCore):
(WebCore::RTCDTMFSenderHandlerChromium::create):
(WebCore::RTCDTMFSenderHandlerChromium::RTCDTMFSenderHandlerChromium):
(WebCore::RTCDTMFSenderHandlerChromium::~RTCDTMFSenderHandlerChromium):
(WebCore::RTCDTMFSenderHandlerChromium::setClient):
(WebCore::RTCDTMFSenderHandlerChromium::currentToneBuffer):
(WebCore::RTCDTMFSenderHandlerChromium::canInsertDTMF):
(WebCore::RTCDTMFSenderHandlerChromium::insertDTMF):
(WebCore::RTCDTMFSenderHandlerChromium::didPlayTone):

  • platform/mediastream/chromium/RTCDTMFSenderHandlerChromium.h: Copied from Source/Platform/chromium/public/WebMediaStreamTrack.h.

(WebCore):
(RTCDTMFSenderHandlerChromium):

  • platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.cpp:

(WebCore::RTCPeerConnectionHandlerChromium::createDTMFSender):
(WebCore):

  • platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.h:

(RTCPeerConnectionHandlerChromium):

Tools:

Adding Mock functionality for the DTMFSender.

  • DumpRenderTree/DumpRenderTree.gypi:
  • DumpRenderTree/chromium/MockWebRTCDTMFSenderHandler.cpp: Added.

(DTMFSenderToneTask):
(DTMFSenderToneTask::DTMFSenderToneTask):
(MockWebRTCDTMFSenderHandler::MockWebRTCDTMFSenderHandler):
(MockWebRTCDTMFSenderHandler::setClient):
(MockWebRTCDTMFSenderHandler::currentToneBuffer):
(MockWebRTCDTMFSenderHandler::canInsertDTMF):
(MockWebRTCDTMFSenderHandler::insertDTMF):

  • DumpRenderTree/chromium/MockWebRTCDTMFSenderHandler.h: Copied from Source/Platform/chromium/public/WebMediaStreamTrack.h.

(MockWebRTCDTMFSenderHandler):
(MockWebRTCDTMFSenderHandler::taskList):
(MockWebRTCDTMFSenderHandler::clearToneBuffer):

  • DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:

(MockWebRTCPeerConnectionHandler::createDTMFSender):

  • DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h:

(MockWebRTCPeerConnectionHandler):

LayoutTests:

  • fast/mediastream/RTCPeerConnection-dtmf-expected.txt: Added.
  • fast/mediastream/RTCPeerConnection-dtmf.html: Added.
Location:
trunk
Files:
16 added
23 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r141982 r141984  
     12013-02-06  Tommy Widenflycht  <tommyw@google.com>
     2
     3        MediaStream API: Implement DTMF support in RTCPeerConnection
     4        https://bugs.webkit.org/show_bug.cgi?id=106782
     5
     6        Reviewed by Adam Barth.
     7
     8        * fast/mediastream/RTCPeerConnection-dtmf-expected.txt: Added.
     9        * fast/mediastream/RTCPeerConnection-dtmf.html: Added.
     10
    1112013-02-06  Mihai Maerean  <mmaerean@adobe.com>
    212
  • trunk/Source/Platform/ChangeLog

    r141943 r141984  
     12013-02-06  Tommy Widenflycht  <tommyw@google.com>
     2
     3        MediaStream API: Implement DTMF support in RTCPeerConnection
     4        https://bugs.webkit.org/show_bug.cgi?id=106782
     5
     6        Reviewed by Adam Barth.
     7
     8        The WebRTC specification have added support for DTMF:
     9        http://dev.w3.org/2011/webrtc/editor/webrtc.html#peer-to-peer-dtmf
     10
     11        Implementation wise this is implemented using the same pattern as RTCDataChannel;
     12        where a RTCDTMFSenderHandler is created by the UA through a new method on
     13        RTCPeerConnectionHandler.
     14
     15        * Platform.gypi:
     16        * chromium/public/WebMediaStreamTrack.h:
     17        (WebMediaStreamTrack):
     18        * chromium/public/WebRTCDTMFSenderHandler.h: Copied from Source/Platform/chromium/public/WebMediaStreamTrack.h.
     19        (WebKit):
     20        (WebRTCDTMFSenderHandler):
     21        (WebKit::WebRTCDTMFSenderHandler::~WebRTCDTMFSenderHandler):
     22        * chromium/public/WebRTCDTMFSenderHandlerClient.h: Copied from Source/Platform/chromium/public/WebMediaStreamTrack.h.
     23        (WebKit):
     24        (WebRTCDTMFSenderHandlerClient):
     25        (WebKit::WebRTCDTMFSenderHandlerClient::~WebRTCDTMFSenderHandlerClient):
     26        * chromium/public/WebRTCPeerConnectionHandler.h:
     27        (WebKit):
     28        (WebKit::WebRTCPeerConnectionHandler::createDTMFSender):
     29
    1302013-02-05  Dana Jansens  <danakj@chromium.org>
    231
  • trunk/Source/Platform/Platform.gypi

    r141444 r141984  
    103103            'chromium/public/WebPrivatePtr.h',
    104104            'chromium/public/WebRTCConfiguration.h',
     105            'chromium/public/WebRTCDTMFSenderHandler.h',
     106            'chromium/public/WebRTCDTMFSenderHandlerClient.h',
    105107            'chromium/public/WebRTCDataChannelHandler.h',
    106108            'chromium/public/WebRTCDataChannelHandlerClient.h',
  • trunk/Source/Platform/chromium/public/WebMediaStreamTrack.h

    r141444 r141984  
    6262
    6363#if WEBKIT_IMPLEMENTATION
     64    WebMediaStreamTrack(PassRefPtr<WebCore::MediaStreamComponent>);
    6465    WebMediaStreamTrack(WebCore::MediaStreamComponent*);
    6566    WebMediaStreamTrack& operator=(WebCore::MediaStreamComponent*);
  • trunk/Source/Platform/chromium/public/WebRTCPeerConnectionHandler.h

    r141444 r141984  
    3535class WebMediaConstraints;
    3636class WebMediaStream;
     37class WebMediaStreamTrack;
    3738class WebRTCConfiguration;
     39class WebRTCDTMFSenderHandler;
    3840class WebRTCDataChannelHandler;
    3941class WebRTCICECandidate;
     
    6466    virtual void getStats(const WebRTCStatsRequest&) { }
    6567    virtual WebRTCDataChannelHandler* createDataChannel(const WebString& label, bool reliable) { return 0; }
     68    virtual WebRTCDTMFSenderHandler* createDTMFSender(const WebMediaStreamTrack& track) { return 0; }
    6669    virtual void stop() = 0;
    6770};
  • trunk/Source/WebCore/CMakeLists.txt

    r141973 r141984  
    223223    Modules/mediastream/NavigatorUserMediaErrorCallback.idl
    224224    Modules/mediastream/NavigatorUserMediaSuccessCallback.idl
     225    Modules/mediastream/RTCDTMFSender.idl
     226    Modules/mediastream/RTCDTMFToneChangeEvent.idl
    225227    Modules/mediastream/RTCDataChannel.idl
    226228    Modules/mediastream/RTCDataChannelEvent.idl
     
    864866    Modules/mediastream/MediaStreamTrackEvent.cpp
    865867    Modules/mediastream/NavigatorMediaStream.cpp
     868    Modules/mediastream/RTCDTMFSender.cpp
     869    Modules/mediastream/RTCDTMFToneChangeEvent.cpp
    866870    Modules/mediastream/RTCDataChannel.cpp
    867871    Modules/mediastream/RTCDataChannelEvent.cpp
  • trunk/Source/WebCore/ChangeLog

    r141983 r141984  
     12013-02-06  Tommy Widenflycht  <tommyw@google.com>
     2
     3        MediaStream API: Implement DTMF support in RTCPeerConnection
     4        https://bugs.webkit.org/show_bug.cgi?id=106782
     5
     6        Reviewed by Adam Barth.
     7
     8        The WebRTC specification have added support for DTMF:
     9        http://dev.w3.org/2011/webrtc/editor/webrtc.html#peer-to-peer-dtmf
     10
     11        Implementation wise this is implemented using the same pattern as RTCDataChannel;
     12        where a RTCDTMFSenderHandler is created by the UA through a new method on
     13        RTCPeerConnectionHandler.
     14
     15        Test: fast/mediastream/RTCPeerConnection-dtmf.html
     16
     17        * CMakeLists.txt:
     18        * GNUmakefile.list.am:
     19        * Modules/mediastream/RTCDTMFSender.cpp: Added.
     20        (WebCore):
     21        (WebCore::RTCDTMFSender::create):
     22        (WebCore::RTCDTMFSender::RTCDTMFSender):
     23        (WebCore::RTCDTMFSender::~RTCDTMFSender):
     24        (WebCore::RTCDTMFSender::canInsertDTMF):
     25        (WebCore::RTCDTMFSender::track):
     26        (WebCore::RTCDTMFSender::toneBuffer):
     27        (WebCore::RTCDTMFSender::insertDTMF):
     28        (WebCore::RTCDTMFSender::didPlayTone):
     29        (WebCore::RTCDTMFSender::interfaceName):
     30        (WebCore::RTCDTMFSender::scriptExecutionContext):
     31        (WebCore::RTCDTMFSender::stop):
     32        (WebCore::RTCDTMFSender::eventTargetData):
     33        (WebCore::RTCDTMFSender::ensureEventTargetData):
     34        (WebCore::RTCDTMFSender::scheduleDispatchEvent):
     35        (WebCore::RTCDTMFSender::scheduledEventTimerFired):
     36        * Modules/mediastream/RTCDTMFSender.h: Added.
     37        (WebCore):
     38        (RTCDTMFSender):
     39        (WebCore::RTCDTMFSender::duration):
     40        (WebCore::RTCDTMFSender::interToneGap):
     41        * Modules/mediastream/RTCDTMFSender.idl: Added.
     42        * Modules/mediastream/RTCDTMFToneChangeEvent.cpp: Copied from Source/Platform/chromium/public/WebMediaStreamTrack.h.
     43        (WebCore):
     44        (WebCore::RTCDTMFToneChangeEvent::create):
     45        (WebCore::RTCDTMFToneChangeEvent::RTCDTMFToneChangeEvent):
     46        (WebCore::RTCDTMFToneChangeEvent::~RTCDTMFToneChangeEvent):
     47        (WebCore::RTCDTMFToneChangeEvent::tone):
     48        (WebCore::RTCDTMFToneChangeEvent::interfaceName):
     49        * Modules/mediastream/RTCDTMFToneChangeEvent.h: Copied from Source/Platform/chromium/public/WebMediaStreamTrack.h.
     50        (WebCore):
     51        (RTCDTMFToneChangeEventInit):
     52        (RTCDTMFToneChangeEvent):
     53        * Modules/mediastream/RTCDTMFToneChangeEvent.idl: Added.
     54        * Modules/mediastream/RTCPeerConnection.cpp:
     55        (WebCore::RTCPeerConnection::createDataChannel):
     56        (WebCore):
     57        (WebCore::RTCPeerConnection::getStreamByTrackId):
     58        (WebCore::RTCPeerConnection::createDTMFSender):
     59        * Modules/mediastream/RTCPeerConnection.h:
     60        (WebCore):
     61        (RTCPeerConnection):
     62        * Modules/mediastream/RTCPeerConnection.idl:
     63        * WebCore.gypi:
     64        * dom/EventNames.h:
     65        (WebCore):
     66        * dom/EventNames.in:
     67        * dom/EventTargetFactory.in:
     68        * platform/chromium/support/WebMediaStreamTrack.cpp:
     69        (WebKit::WebMediaStreamTrack::WebMediaStreamTrack):
     70        (WebKit):
     71        * platform/mediastream/RTCDTMFSenderHandler.h: Copied from Source/Platform/chromium/public/WebMediaStreamTrack.h.
     72        (WebCore):
     73        (RTCDTMFSenderHandler):
     74        (WebCore::RTCDTMFSenderHandler::~RTCDTMFSenderHandler):
     75        * platform/mediastream/RTCDTMFSenderHandlerClient.h: Copied from Source/Platform/chromium/public/WebMediaStreamTrack.h.
     76        (WebCore):
     77        (RTCDTMFSenderHandlerClient):
     78        (WebCore::RTCDTMFSenderHandlerClient::~RTCDTMFSenderHandlerClient):
     79        * platform/mediastream/RTCPeerConnectionHandler.h:
     80        (WebCore):
     81        (RTCPeerConnectionHandler):
     82        * platform/mediastream/chromium/RTCDTMFSenderHandlerChromium.cpp: Copied from Source/Platform/chromium/public/WebMediaStreamTrack.h.
     83        (WebCore):
     84        (WebCore::RTCDTMFSenderHandlerChromium::create):
     85        (WebCore::RTCDTMFSenderHandlerChromium::RTCDTMFSenderHandlerChromium):
     86        (WebCore::RTCDTMFSenderHandlerChromium::~RTCDTMFSenderHandlerChromium):
     87        (WebCore::RTCDTMFSenderHandlerChromium::setClient):
     88        (WebCore::RTCDTMFSenderHandlerChromium::currentToneBuffer):
     89        (WebCore::RTCDTMFSenderHandlerChromium::canInsertDTMF):
     90        (WebCore::RTCDTMFSenderHandlerChromium::insertDTMF):
     91        (WebCore::RTCDTMFSenderHandlerChromium::didPlayTone):
     92        * platform/mediastream/chromium/RTCDTMFSenderHandlerChromium.h: Copied from Source/Platform/chromium/public/WebMediaStreamTrack.h.
     93        (WebCore):
     94        (RTCDTMFSenderHandlerChromium):
     95        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.cpp:
     96        (WebCore::RTCPeerConnectionHandlerChromium::createDTMFSender):
     97        (WebCore):
     98        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.h:
     99        (RTCPeerConnectionHandlerChromium):
     100
    11012013-02-04  Kentaro Hara  <haraken@chromium.org>
    2102
  • trunk/Source/WebCore/GNUmakefile.list.am

    r141973 r141984  
    632632        DerivedSources/WebCore/JSRGBColor.cpp \
    633633        DerivedSources/WebCore/JSRGBColor.h \
     634        DerivedSources/WebCore/JSRTCDTMFSender.cpp \
     635        DerivedSources/WebCore/JSRTCDTMFSender.h \
     636        DerivedSources/WebCore/JSRTCDTMFToneChangeEvent.cpp \
     637        DerivedSources/WebCore/JSRTCDTMFToneChangeEvent.h \
    634638        DerivedSources/WebCore/JSRTCDataChannel.cpp \
    635639        DerivedSources/WebCore/JSRTCDataChannel.h \
     
    12441248        $(WebCore)/Modules/mediastream/NavigatorUserMediaErrorCallback.idl \
    12451249        $(WebCore)/Modules/mediastream/NavigatorUserMediaSuccessCallback.idl \
     1250        $(WebCore)/Modules/mediastream/RTCDTMFSender.idl \
     1251        $(WebCore)/Modules/mediastream/RTCDTMFToneChangeEvent.idl \
    12461252        $(WebCore)/Modules/mediastream/RTCDataChannel.idl \
    12471253        $(WebCore)/Modules/mediastream/RTCDataChannelEvent.idl \
     
    19381944        Source/WebCore/Modules/mediastream/NavigatorUserMediaErrorCallback.h \
    19391945        Source/WebCore/Modules/mediastream/NavigatorUserMediaSuccessCallback.h \
     1946        Source/WebCore/Modules/mediastream/RTCDTMFSender.cpp \
     1947        Source/WebCore/Modules/mediastream/RTCDTMFSender.h \
     1948        Source/WebCore/Modules/mediastream/RTCDTMFToneChangeEvent.cpp \
     1949        Source/WebCore/Modules/mediastream/RTCDTMFToneChangeEvent.h \
    19401950        Source/WebCore/Modules/mediastream/RTCDataChannel.cpp \
    19411951        Source/WebCore/Modules/mediastream/RTCDataChannel.h \
     
    57635773        Source/WebCore/platform/mediastream/MediaStreamSourcesQueryClient.h \
    57645774        Source/WebCore/platform/mediastream/RTCConfiguration.h \
     5775        Source/WebCore/platform/mediastream/RTCDTMFSenderHandler.h \
     5776        Source/WebCore/platform/mediastream/RTCDTMFSenderHandlerClient.h \
    57655777        Source/WebCore/platform/mediastream/RTCDataChannelHandler.h \
    57665778        Source/WebCore/platform/mediastream/RTCDataChannelHandlerClient.h \
  • trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp

    r141871 r141984  
    4444#include "MediaStreamEvent.h"
    4545#include "RTCConfiguration.h"
     46#include "RTCDTMFSender.h"
    4647#include "RTCDataChannel.h"
    4748#include "RTCDataChannelEvent.h"
     
    452453}
    453454
     455bool RTCPeerConnection::hasLocalStreamWithTrackId(const String& trackId)
     456{
     457    for (MediaStreamVector::iterator iter = m_localStreams.begin(); iter != m_localStreams.end(); ++iter) {
     458        if ((*iter)->getTrackById(trackId))
     459            return true;
     460    }
     461    return false;
     462}
     463
     464PassRefPtr<RTCDTMFSender> RTCPeerConnection::createDTMFSender(PassRefPtr<MediaStreamTrack> prpTrack, ExceptionCode& ec)
     465{
     466    if (m_signalingState == SignalingStateClosed) {
     467        ec = INVALID_STATE_ERR;
     468        return 0;
     469    }
     470
     471    if (!prpTrack) {
     472        ec = TypeError;
     473        return 0;
     474    }
     475
     476    RefPtr<MediaStreamTrack> track = prpTrack;
     477
     478    if (!hasLocalStreamWithTrackId(track->id())) {
     479        ec = SYNTAX_ERR;
     480        return 0;
     481    }
     482
     483    RefPtr<RTCDTMFSender> dtmfSender = RTCDTMFSender::create(scriptExecutionContext(), m_peerHandler.get(), track.release(), ec);
     484    if (ec)
     485        return 0;
     486    return dtmfSender.release();
     487}
     488
    454489void RTCPeerConnection::close(ExceptionCode& ec)
    455490{
  • trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.h

    r141871 r141984  
    5050class MediaStreamTrack;
    5151class RTCConfiguration;
     52class RTCDTMFSender;
    5253class RTCDataChannel;
    5354class RTCErrorCallback;
     
    9798    PassRefPtr<RTCDataChannel> createDataChannel(String label, const Dictionary& dataChannelDict, ExceptionCode&);
    9899
     100    PassRefPtr<RTCDTMFSender> createDTMFSender(PassRefPtr<MediaStreamTrack>, ExceptionCode&);
     101
    99102    void close(ExceptionCode&);
    100103
     
    134137    void scheduleDispatchEvent(PassRefPtr<Event>);
    135138    void scheduledEventTimerFired(Timer<RTCPeerConnection>*);
     139    bool hasLocalStreamWithTrackId(const String& trackId);
    136140
    137141    // EventTarget implementation.
  • trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.idl

    r141871 r141984  
    8080         raises(DOMException);
    8181
     82    RTCDTMFSender createDTMFSender(in MediaStreamTrack track)
     83         raises(DOMException);
     84
    8285    void close()
    8386        raises(DOMException);
  • trunk/Source/WebCore/WebCore.gypi

    r141973 r141984  
    7272            'Modules/mediastream/NavigatorUserMediaErrorCallback.idl',
    7373            'Modules/mediastream/NavigatorUserMediaSuccessCallback.idl',
     74            'Modules/mediastream/RTCDTMFSender.idl',
     75            'Modules/mediastream/RTCDTMFToneChangeEvent.idl',
    7476            'Modules/mediastream/RTCDataChannel.idl',
    7577            'Modules/mediastream/RTCDataChannelEvent.idl',
     
    818820            'Modules/mediastream/NavigatorUserMediaErrorCallback.h',
    819821            'Modules/mediastream/NavigatorUserMediaSuccessCallback.h',
     822            'Modules/mediastream/RTCDTMFSender.cpp',
     823            'Modules/mediastream/RTCDTMFSender.h',
     824            'Modules/mediastream/RTCDTMFToneChangeEvent.cpp',
     825            'Modules/mediastream/RTCDTMFToneChangeEvent.h',
     826            'Modules/mediastream/RTCDataChannel.cpp',
    820827            'Modules/mediastream/RTCDataChannel.h',
    821             'Modules/mediastream/RTCDataChannel.cpp',
     828            'Modules/mediastream/RTCDataChannelEvent.cpp',
    822829            'Modules/mediastream/RTCDataChannelEvent.h',
    823             'Modules/mediastream/RTCDataChannelEvent.cpp',
    824830            'Modules/mediastream/RTCErrorCallback.h',
    825831            'Modules/mediastream/RTCIceCandidate.cpp',
     
    43804386            'platform/mediastream/MediaStreamSource.h',
    43814387            'platform/mediastream/RTCConfiguration.h',
     4388            'platform/mediastream/RTCDTMFSenderHandler.h',
     4389            'platform/mediastream/RTCDTMFSenderHandlerClient.h',
    43824390            'platform/mediastream/RTCDataChannelHandler.h',
    43834391            'platform/mediastream/RTCDataChannelHandlerClient.h',
     
    43934401            'platform/mediastream/chromium/MediaStreamCenterChromium.cpp',
    43944402            'platform/mediastream/chromium/MediaStreamCenterChromium.h',
     4403            'platform/mediastream/chromium/RTCDTMFSenderHandlerChromium.cpp',
     4404            'platform/mediastream/chromium/RTCDTMFSenderHandlerChromium.h',
    43954405            'platform/mediastream/chromium/RTCDataChannelHandlerChromium.cpp',
    43964406            'platform/mediastream/chromium/RTCDataChannelHandlerChromium.h',
  • trunk/Source/WebCore/dom/EventNames.h

    r139918 r141984  
    235235    macro(datachannel) \
    236236    macro(gatheringchange) \
     237    macro(tonechange) \
    237238    \
    238239    macro(show) \
  • trunk/Source/WebCore/dom/EventNames.in

    r141578 r141984  
    3535RTCIceCandidateEvent conditional=MEDIA_STREAM
    3636RTCDataChannelEvent conditional=MEDIA_STREAM
     37RTCDTMFToneChangeEvent conditional=MEDIA_STREAM
    3738SpeechInputEvent conditional=INPUT_SPEECH
    3839SpeechRecognitionError conditional=SCRIPTED_SPEECH
  • trunk/Source/WebCore/dom/EventTargetFactory.in

    r141013 r141984  
    2525Performance conditional=WEB_TIMING
    2626RTCDataChannel conditional=MEDIA_STREAM
     27RTCDTMFSender conditional=MEDIA_STREAM
    2728RTCPeerConnection conditional=MEDIA_STREAM
    2829SharedWorker conditional=SHARED_WORKERS
  • trunk/Source/WebCore/platform/chromium/support/WebMediaStreamTrack.cpp

    r141444 r141984  
    3838
    3939namespace WebKit {
     40
     41WebMediaStreamTrack::WebMediaStreamTrack(PassRefPtr<WebCore::MediaStreamComponent> mediaStreamComponent)
     42    : m_private(mediaStreamComponent)
     43{
     44}
    4045
    4146WebMediaStreamTrack::WebMediaStreamTrack(WebCore::MediaStreamComponent* mediaStreamComponent)
  • trunk/Source/WebCore/platform/mediastream/RTCPeerConnectionHandler.h

    r137441 r141984  
    4141
    4242class MediaConstraints;
     43class MediaStreamComponent;
    4344class RTCConfiguration;
     45class RTCDTMFSenderHandler;
    4446class RTCDataChannelHandler;
    4547class RTCIceCandidateDescriptor;
     
    6870    virtual void removeStream(PassRefPtr<MediaStreamDescriptor>) = 0;
    6971    virtual void getStats(PassRefPtr<RTCStatsRequest>) = 0;
     72    virtual PassOwnPtr<RTCDataChannelHandler> createDataChannel(const String& label, bool reliable) = 0;
     73    virtual PassOwnPtr<RTCDTMFSenderHandler> createDTMFSender(PassRefPtr<MediaStreamComponent>) = 0;
    7074    virtual void stop() = 0;
    71 
    72     // RTCDataChannel
    73     virtual PassOwnPtr<RTCDataChannelHandler> createDataChannel(const String& label, bool reliable) = 0;
    7475
    7576protected:
  • trunk/Source/WebCore/platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.cpp

    r141444 r141984  
    3636
    3737#include "MediaConstraints.h"
     38#include "MediaStreamComponent.h"
    3839#include "RTCConfiguration.h"
     40#include "RTCDTMFSenderHandler.h"
     41#include "RTCDTMFSenderHandlerChromium.h"
    3942#include "RTCDataChannelHandlerChromium.h"
    4043#include "RTCDataChannelHandlerClient.h"
     
    4851#include <public/WebMediaConstraints.h>
    4952#include <public/WebMediaStream.h>
     53#include <public/WebMediaStreamTrack.h>
    5054#include <public/WebRTCConfiguration.h>
     55#include <public/WebRTCDTMFSenderHandler.h>
    5156#include <public/WebRTCDataChannelHandler.h>
    5257#include <public/WebRTCICECandidate.h>
     
    159164}
    160165
     166PassOwnPtr<RTCDTMFSenderHandler> RTCPeerConnectionHandlerChromium::createDTMFSender(PassRefPtr<MediaStreamComponent> track)
     167{
     168    WebKit::WebRTCDTMFSenderHandler* webHandler = m_webHandler->createDTMFSender(track);
     169    if (!webHandler)
     170        return nullptr;
     171
     172    return RTCDTMFSenderHandlerChromium::create(webHandler);
     173}
     174
    161175void RTCPeerConnectionHandlerChromium::stop()
    162176{
  • trunk/Source/WebCore/platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.h

    r141444 r141984  
    7171    virtual void getStats(PassRefPtr<RTCStatsRequest>) OVERRIDE;
    7272    virtual PassOwnPtr<RTCDataChannelHandler> createDataChannel(const String& label, bool reliable) OVERRIDE;
     73    virtual PassOwnPtr<RTCDTMFSenderHandler> createDTMFSender(PassRefPtr<MediaStreamComponent>) OVERRIDE;
    7374    virtual void stop() OVERRIDE;
    7475
  • trunk/Tools/ChangeLog

    r141975 r141984  
     12013-02-06  Tommy Widenflycht  <tommyw@google.com>
     2
     3        MediaStream API: Implement DTMF support in RTCPeerConnection
     4        https://bugs.webkit.org/show_bug.cgi?id=106782
     5
     6        Reviewed by Adam Barth.
     7
     8        Adding Mock functionality for the DTMFSender.
     9
     10        * DumpRenderTree/DumpRenderTree.gypi:
     11        * DumpRenderTree/chromium/MockWebRTCDTMFSenderHandler.cpp: Added.
     12        (DTMFSenderToneTask):
     13        (DTMFSenderToneTask::DTMFSenderToneTask):
     14        (MockWebRTCDTMFSenderHandler::MockWebRTCDTMFSenderHandler):
     15        (MockWebRTCDTMFSenderHandler::setClient):
     16        (MockWebRTCDTMFSenderHandler::currentToneBuffer):
     17        (MockWebRTCDTMFSenderHandler::canInsertDTMF):
     18        (MockWebRTCDTMFSenderHandler::insertDTMF):
     19        * DumpRenderTree/chromium/MockWebRTCDTMFSenderHandler.h: Copied from Source/Platform/chromium/public/WebMediaStreamTrack.h.
     20        (MockWebRTCDTMFSenderHandler):
     21        (MockWebRTCDTMFSenderHandler::taskList):
     22        (MockWebRTCDTMFSenderHandler::clearToneBuffer):
     23        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
     24        (MockWebRTCPeerConnectionHandler::createDTMFSender):
     25        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h:
     26        (MockWebRTCPeerConnectionHandler):
     27
    1282013-02-06  Christophe Dumez  <ch.dumez@sisa.samsung.com>
    229
  • trunk/Tools/DumpRenderTree/DumpRenderTree.gypi

    r141823 r141984  
    1919            'chromium/MockWebRTCPeerConnectionHandler.cpp',
    2020            'chromium/MockWebRTCPeerConnectionHandler.h',
     21            'chromium/MockWebRTCDTMFSenderHandler.cpp',
     22            'chromium/MockWebRTCDTMFSenderHandler.h',
    2123            'chromium/MockWebRTCDataChannelHandler.cpp',
    2224            'chromium/MockWebRTCDataChannelHandler.h',
  • trunk/Tools/DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp

    r141444 r141984  
    3535
    3636#include "MockConstraints.h"
     37#include "MockWebRTCDTMFSenderHandler.h"
    3738#include "MockWebRTCDataChannelHandler.h"
    3839#include "Task.h"
     
    294295}
    295296
     297WebRTCDTMFSenderHandler* MockWebRTCPeerConnectionHandler::createDTMFSender(const WebMediaStreamComponent& track)
     298{
     299    return new MockWebRTCDTMFSenderHandler(track);
     300}
     301
    296302void MockWebRTCPeerConnectionHandler::stop()
    297303{
  • trunk/Tools/DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h

    r141444 r141984  
    6262    virtual void getStats(const WebKit::WebRTCStatsRequest&) OVERRIDE;
    6363    virtual WebKit::WebRTCDataChannelHandler* createDataChannel(const WebKit::WebString& label, bool reliable) OVERRIDE;
     64    virtual WebKit::WebRTCDTMFSenderHandler* createDTMFSender(const WebKit::WebMediaStreamTrack&) OVERRIDE;
    6465    virtual void stop() OVERRIDE;
    6566
Note: See TracChangeset for help on using the changeset viewer.