LGTM2 to proceed with a flag and that shim linked from release notes.

On Mon, Sep 21, 2026 at 12:05 PM Guido Urdaneta <[email protected]> wrote:

>
>
> On Wed, Sep 16, 2026 at 5:13 PM Philip Jägenstedt <[email protected]>
> wrote:
>
>> First a point of clarification, the API is *createDTMFSender*,
>> not createDTMF, right?
>>
>>
> Yes, it is *createDTMFSender*. Sorry for that mistake.
>
>
>
>> Here's the code snipped from https://github.com/webrtc/samples/pull/873:
>>
>> ```js
>> function enableDtmfSender() {
>>   dtmfStatusDiv.textContent = 'DTMF activated';
>>   if (localStream !== null) {
>>     var localAudioTrack = localStream.getAudioTracks()[0];
>>     dtmfSender = pc1.createDTMFSender(localAudioTrack);
>>     trace('Created DTMFSender:\n');
>>     dtmfSender.ontonechange = dtmfOnToneChange;
>>   } else {
>>     trace('No local stream to create DTMF Sender\n');
>>   }
>> }
>> ```
>>
>> If there's an old migration guide somewhere that can be referenced, that
>> would be good enough I think. Failing that, can the guidance be written in
>> a few sentences and included in the release blog post?
>>
>>
> In addition to the documents Philipp Hancke referenced, we can add the
> following shim to the notes, which should work in the vast majority of cases
> (tested with Chrome, Chrome without createDTMFSender and Firefox). Note
> that the SyntaxError exceptions look a bit weird, but they match Chromium's
> C++ implementation
> <https://crsrc.org/c/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc;l=2526>
> .
>
> if (window.RTCPeerConnection &&
> !RTCPeerConnection.prototype.createDTMFSender && window.RTCRtpSender &&
> 'dtmf' in RTCRtpSender.prototype) {
>   RTCPeerConnection.prototype.createDTMFSender = function(track) {
>     if (!(track instanceof MediaStreamTrack)) {
>       throw new TypeError(
>         "Failed to execute 'createDTMFSender' on 'RTCPeerConnection':
> parameter 1 is not of type 'MediaStreamTrack'."
>       );
>     }
>     if (this.signalingState === 'closed') {
>       throw new DOMException(
>         "Failed to execute 'createDTMFSender' on 'RTCPeerConnection': The
> RTCPeerConnection's signalingState is 'closed'.",
>         'InvalidStateError'
>       );
>     }
>     if (track.kind !== 'audio') {
>       throw new DOMException(
>         "Failed to execute 'createDTMFSender' on 'RTCPeerConnection':
> track.kind is not 'audio'.",
>         'SyntaxError'
>       );
>     }
>     const sender = this.getSenders().find(s => s.track === track);
>     if (!sender) {
>       throw new DOMException(
>         "Failed to execute 'createDTMFSender' on 'RTCPeerConnection': No
> RTCRtpSender is available for the track provided.",
>         'SyntaxError'
>       );
>     }
>     if (!sender.dtmf) {
>       throw new DOMException(
>         "Failed to execute 'createDTMFSender' on 'RTCPeerConnection':
> Unable to create DTMF sender for track",
>         'SyntaxError'
>       );
>     }
>     return sender.dtmf;
>   };
> }
>
>
>
>
>
>> On Wed, Sep 16, 2026 at 4:44 PM Rick Byers <[email protected]> wrote:
>>
>>> Do we have any published guidance for developers relying on this API
>>> today? Like, to what extent does a library / API exist somewhere as a
>>> drop-in replacement? From a quick search, does RTCDTMFSender
>>> <https://developer.mozilla.org/en-US/docs/Web/API/RTCDTMFSender> accomplish
>>> all the same things this old API did, and so makes for an easy drop-in
>>> replacement? If you were a developer for one such call center app and
>>> started getting these exceptions with no idea what they meant, what
>>> resources would you likely find in a web search?
>>>
>>> I'm definitely supportive of removing this non-standard API, we just
>>> need to show we've done what we reasonably can to make it easy for people
>>> to understand and migrate to standards-based alternatives.
>>>
>>> Thanks,
>>>    Rick
>>>
>>> On Mon, Sep 14, 2026 at 5:16 PM Alex Russell <[email protected]>
>>> wrote:
>>>
>>>> LGTM1 contingent on Philip's suggestion of a feature flagged rollout
>>>> and the requested reviews.
>>>>
>>>> On Wednesday, September 9, 2026 at 8:22:41 AM UTC-7 Philip Jägenstedt
>>>> wrote:
>>>>
>>>>> Can you upgrade the chromestatus entry to the "ship" state and fill
>>>>> out all of the reviews, notably the enterprise review chip?
>>>>>
>>>>> The use counter is at
>>>>> https://chromestatus.com/metrics/feature/timeline/popularity/1642 and
>>>>> is around 0.001-0.003%.
>>>>>
>>>>> The compat risk is that code that calls pc.createDTMFSender() would
>>>>> start throwing an exception, and the size of the breakage depends on
>>>>> whether the exception is caught and where in the code it happens.
>>>>>
>>>>> Given the very low usage it doesn't seem helpful to have a deprecation
>>>>> period first, but it will be important to use a runtime flag for this so
>>>>> that can be turned back on with Finch if there's a problem.
>>>>>
>>>>> On Wed, Sep 9, 2026 at 1:19 PM 'Philipp Hancke' via blink-dev <
>>>>> [email protected]> wrote:
>>>>>
>>>>>>   https://github.com/webrtc/samples/pull/873
>>>>>> removed the sample for createDTMF nine years ago. Anyone who has not
>>>>>> updated...
>>>>>> The usual suspects (sipjs, jssip and twilio's JS) prefer the spec
>>>>>> variant so this should be safe.
>>>>>>
>>>>>> Compared to setRemoteDescription the usage of DTMF is marginal:
>>>>>>
>>>>>> https://webrtchacks.github.io/chromestatus/?buckets=1642,2381,3451&start=2026-01-01
>>>>>> The RTCRtpSender.dtmf isn't clearly winning but at least it is ahead.
>>>>>>
>>>>>> The use counters can not tell you about callcenters running
>>>>>> Chromebooks and still using the chrome-only method though.
>>>>>>
>>>>>> Am Mi., 9. Sept. 2026 um 12:52 Uhr schrieb Yoav Weiss (@Shopify) <
>>>>>> [email protected]>:
>>>>>>
>>>>>>> Generally it'd be good to expand a bit about the compatibility risk
>>>>>>> here. It'd odd that the section is missing.
>>>>>>>
>>>>>>> On Wednesday, September 9, 2026 at 12:51:34 PM UTC+2 Yoav Weiss
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Are there any usecounters indicating usage? (Or another method of
>>>>>>>> estimating potential breakage)
>>>>>>>>
>>>>>>>> On Friday, September 4, 2026 at 12:21:47 PM UTC+2 Chromestatus
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> *Contact emails*
>>>>>>>>> [email protected]
>>>>>>>>>
>>>>>>>>> *Explainer*
>>>>>>>>> *No information provided*
>>>>>>>>>
>>>>>>>>> *Specification*
>>>>>>>>> https://w3c.github.io/webrtc-pc/#dom-rtcpeerconnection
>>>>>>>>>
>>>>>>>>> *Summary*
>>>>>>>>> This is a legacy and obsolete method that does not exist in the
>>>>>>>>> WebRTC spec and the only major engine implementing it is Blink. 
>>>>>>>>> Removing it
>>>>>>>>> is part of Interop 2026.
>>>>>>>>>
>>>>>>>>> *Blink component*
>>>>>>>>> Blink>WebRTC>PeerConnection
>>>>>>>>> <https://issues.chromium.org/issues?q=customfield1222907:%22Blink%3EWebRTC%3EPeerConnection%22>
>>>>>>>>>
>>>>>>>>> *Web Feature ID*
>>>>>>>>> webrtc <https://webstatus.dev/features/webrtc>
>>>>>>>>>
>>>>>>>>> *Motivation*
>>>>>>>>> This is a legacy and obsolete method that does not exist in the
>>>>>>>>> WebRTC spec and the only major engine implementing it is Blink. 
>>>>>>>>> Removing it
>>>>>>>>> is part of Interop 2026.
>>>>>>>>>
>>>>>>>>> *Initial public proposal*
>>>>>>>>> *No information provided*
>>>>>>>>>
>>>>>>>>> *Goals for experimentation*
>>>>>>>>> None
>>>>>>>>>
>>>>>>>>> *Debuggability*
>>>>>>>>> N/A
>>>>>>>>>
>>>>>>>>> *Requires code in //chrome?*
>>>>>>>>> False
>>>>>>>>>
>>>>>>>>> *Tracking bug*
>>>>>>>>> http://crbug.com/553274713
>>>>>>>>>
>>>>>>>>> *Measurement*
>>>>>>>>> https://chromestatus.com/metrics/feature/timeline/popularity/1642
>>>>>>>>>
>>>>>>>>> *Estimated milestones*
>>>>>>>>> Shipping on desktop 160
>>>>>>>>> Shipping on Android 160
>>>>>>>>> Shipping on WebView 160
>>>>>>>>>
>>>>>>>>> *Link to entry on the Chrome Platform Status*
>>>>>>>>>
>>>>>>>>> https://chromestatus.com/feature/5160724576993280?gate=5985122343059456
>>>>>>>>>
>>>>>>>>> This intent message was generated by Chrome Platform Status
>>>>>>>>> <https://chromestatus.com>.
>>>>>>>>>
>>>>>>>> --
>>>>>>> You received this message because you are subscribed to the Google
>>>>>>> Groups "blink-dev" group.
>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>> send an email to [email protected].
>>>>>>> To view this discussion visit
>>>>>>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/af35054b-bf48-43fd-9bcb-bb6a6cfc5682n%40chromium.org
>>>>>>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/af35054b-bf48-43fd-9bcb-bb6a6cfc5682n%40chromium.org?utm_medium=email&utm_source=footer>
>>>>>>> .
>>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "blink-dev" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>> send an email to [email protected].
>>>>>>
>>>>> To view this discussion visit
>>>>>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CADxkKiJa6SqiyekJvCXw8qWZrn-O5KYcDnhsLGHvbT1URardHA%40mail.gmail.com
>>>>>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CADxkKiJa6SqiyekJvCXw8qWZrn-O5KYcDnhsLGHvbT1URardHA%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>>> .
>>>>>>
>>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "blink-dev" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> To view this discussion visit
>>>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/87d9ae6f-ec0e-40ec-83d5-af43a5956f22n%40chromium.org
>>>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/87d9ae6f-ec0e-40ec-83d5-af43a5956f22n%40chromium.org?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>>

-- 
You received this message because you are subscribed to the Google Groups 
"blink-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAARdPYdzsOJT098k_A8ZX1MBd4Ei%2BGud%2BeCLAy8sg4ko%2BLOn-A%40mail.gmail.com.

Reply via email to