Source code

Revision control

Copy as Markdown

Other Tools

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
/**
* Bugs 1938533 - ChatGPT voice mode does not always work.
*
* ChatGPT voice seems to be relying on peer reflexive candidates. It
* isn't giving Firefox any STUN/TURN servers in the RTCPeerConnection
* config which is a bit unusual. The following works around the issue.
*/
/* globals exportFunction */
console.info(
"RTCPeerConnection is being shimmed for compatibility reasons. See https://bugzilla.mozilla.org/show_bug.cgi?id=1938533 for details."
);
const win = window.wrappedJSObject;
const origRTCPeerConnection = win.RTCPeerConnection;
win.RTCPeerConnection = exportFunction(function (cfg = {}) {
const extra = [{ urls: "stun:stun.l.google.com:19302" }];
const merged = { ...cfg, iceServers: [...(cfg.iceServers || []), ...extra] };
const pc = new origRTCPeerConnection(merged);
pc.addEventListener("icecandidateerror", e => console.warn("ICE error", e));
pc.addEventListener("iceconnectionstatechange", () =>
console.log("iceConnectionState", pc.iceConnectionState)
);
return pc;
}, window);
win.RTCPeerConnection.prototype = origRTCPeerConnection.prototype;