зеркало из https://github.com/mozilla/gecko-dev.git
Backed out 3 changesets (bug 1232082) for wpt bustage in rtcpeerconnection-idl.html
Backed out changeset ec89afa7163c (bug 1232082) Backed out changeset 47de4d036349 (bug 1232082) Backed out changeset a595577a8247 (bug 1232082) --HG-- extra : commitid : 6KuHiKS94jA
This commit is contained in:
Родитель
241c9dbf7c
Коммит
cadac86336
|
@ -449,9 +449,6 @@ const kEventConstructors = {
|
|||
return new RTCPeerConnectionIceEvent(aName, aProps);
|
||||
},
|
||||
},
|
||||
RTCTrackEvent: {
|
||||
// Difficult to test required arguments.
|
||||
},
|
||||
ScrollAreaEvent: { create: function (aName, aProps) {
|
||||
var e = document.createEvent("scrollareaevent");
|
||||
e.initScrollAreaEvent(aName, aProps.bubbles, aProps.cancelable,
|
||||
|
|
|
@ -405,9 +405,8 @@ RTCPeerConnection.prototype = {
|
|||
"InvalidStateError");
|
||||
}
|
||||
|
||||
this.makeGetterSetterEH("ontrack");
|
||||
this.makeLegacyGetterSetterEH("onaddstream", "Use peerConnection.ontrack instead.");
|
||||
this.makeLegacyGetterSetterEH("onaddtrack", "Use peerConnection.ontrack instead.");
|
||||
this.makeGetterSetterEH("onaddstream");
|
||||
this.makeGetterSetterEH("onaddtrack");
|
||||
this.makeGetterSetterEH("onicecandidate");
|
||||
this.makeGetterSetterEH("onnegotiationneeded");
|
||||
this.makeGetterSetterEH("onsignalingstatechange");
|
||||
|
@ -664,18 +663,6 @@ RTCPeerConnection.prototype = {
|
|||
});
|
||||
},
|
||||
|
||||
makeLegacyGetterSetterEH: function(name, msg) {
|
||||
Object.defineProperty(this, name,
|
||||
{
|
||||
get:function() { return this.getEH(name); },
|
||||
set:function(h) {
|
||||
this.logWarning(name + " is deprecated! " + msg,
|
||||
null, 0);
|
||||
return this.setEH(name, h);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
_addIdentityAssertion: function(sdpPromise, origin) {
|
||||
if (!this._localIdp.enabled) {
|
||||
return sdpPromise;
|
||||
|
@ -1366,16 +1353,15 @@ PeerConnectionObserver.prototype = {
|
|||
// STUN requests.
|
||||
|
||||
handleIceConnectionStateChange: function(iceConnectionState) {
|
||||
let pc = this._dompc;
|
||||
if (pc.iceConnectionState === 'new') {
|
||||
if (this._dompc.iceConnectionState === 'new') {
|
||||
var checking_histogram = Services.telemetry.getHistogramById("WEBRTC_ICE_CHECKING_RATE");
|
||||
if (iceConnectionState === 'checking') {
|
||||
checking_histogram.add(true);
|
||||
} else if (iceConnectionState === 'failed') {
|
||||
checking_histogram.add(false);
|
||||
}
|
||||
} else if (pc.iceConnectionState === 'checking') {
|
||||
var success_histogram = Services.telemetry.getHistogramById(pc._isLoop ?
|
||||
} else if (this._dompc.iceConnectionState === 'checking') {
|
||||
var success_histogram = Services.telemetry.getHistogramById(this._dompc._isLoop ?
|
||||
"LOOP_ICE_SUCCESS_RATE" : "WEBRTC_ICE_SUCCESS_RATE");
|
||||
if (iceConnectionState === 'completed' ||
|
||||
iceConnectionState === 'connected') {
|
||||
|
@ -1386,10 +1372,10 @@ PeerConnectionObserver.prototype = {
|
|||
}
|
||||
|
||||
if (iceConnectionState === 'failed') {
|
||||
pc.logError("ICE failed, see about:webrtc for more details", null, 0);
|
||||
this._dompc.logError("ICE failed, see about:webrtc for more details", null, 0);
|
||||
}
|
||||
|
||||
pc.changeIceConnectionState(iceConnectionState);
|
||||
this._dompc.changeIceConnectionState(iceConnectionState);
|
||||
},
|
||||
|
||||
// This method is responsible for updating iceGatheringState. This
|
||||
|
@ -1444,11 +1430,11 @@ PeerConnectionObserver.prototype = {
|
|||
},
|
||||
|
||||
onGetStatsSuccess: function(dict) {
|
||||
let pc = this._dompc;
|
||||
let chromeobj = new RTCStatsReport(pc._win, dict);
|
||||
let webidlobj = pc._win.RTCStatsReport._create(pc._win, chromeobj);
|
||||
let chromeobj = new RTCStatsReport(this._dompc._win, dict);
|
||||
let webidlobj = this._dompc._win.RTCStatsReport._create(this._dompc._win,
|
||||
chromeobj);
|
||||
chromeobj.makeStatsPublic();
|
||||
pc._onGetStatsSuccess(webidlobj);
|
||||
this._dompc._onGetStatsSuccess(webidlobj);
|
||||
},
|
||||
|
||||
onGetStatsError: function(code, message) {
|
||||
|
@ -1461,34 +1447,20 @@ PeerConnectionObserver.prototype = {
|
|||
this.dispatchEvent(ev);
|
||||
},
|
||||
|
||||
onRemoveStream: function(stream) {
|
||||
onRemoveStream: function(stream, type) {
|
||||
this.dispatchEvent(new this._dompc._win.MediaStreamEvent("removestream",
|
||||
{ stream: stream }));
|
||||
},
|
||||
|
||||
onAddTrack: function(track, streams) {
|
||||
let pc = this._dompc;
|
||||
let receiver = pc._win.RTCRtpReceiver._create(pc._win,
|
||||
new RTCRtpReceiver(this,
|
||||
track));
|
||||
pc._receivers.push(receiver);
|
||||
let ev = new pc._win.RTCTrackEvent("track",
|
||||
{ receiver: receiver,
|
||||
track: track,
|
||||
streams: streams });
|
||||
this.dispatchEvent(ev);
|
||||
|
||||
// Fire legacy event as well for a little bit.
|
||||
ev = new pc._win.MediaStreamTrackEvent("addtrack", { track: track });
|
||||
onAddTrack: function(track) {
|
||||
let ev = new this._dompc._win.MediaStreamTrackEvent("addtrack",
|
||||
{ track: track });
|
||||
this.dispatchEvent(ev);
|
||||
},
|
||||
|
||||
onRemoveTrack: function(track) {
|
||||
let pc = this._dompc;
|
||||
let i = pc._receivers.findIndex(receiver => receiver.track == track);
|
||||
if (i >= 0) {
|
||||
pc._receivers.splice(i, 1);
|
||||
}
|
||||
onRemoveTrack: function(track, type) {
|
||||
this.dispatchEvent(new this._dompc._win.MediaStreamTrackEvent("removetrack",
|
||||
{ track: track }));
|
||||
},
|
||||
|
||||
onReplaceTrackSuccess: function() {
|
||||
|
@ -1562,7 +1534,7 @@ RTCRtpSender.prototype = {
|
|||
};
|
||||
|
||||
function RTCRtpReceiver(pc, track) {
|
||||
this._pc = pc;
|
||||
this.pc = pc;
|
||||
this.track = track;
|
||||
}
|
||||
RTCRtpReceiver.prototype = {
|
||||
|
|
|
@ -1393,9 +1393,6 @@ PeerConnectionWrapper.prototype = {
|
|||
var rtpStatsKey = Object.keys(stats)
|
||||
.find(key => !stats[key].isRemote && stats[key].type.endsWith("boundrtp"));
|
||||
ok(rtpStatsKey, "Should have RTP stats for track " + track.id);
|
||||
if (!rtpStatsKey) {
|
||||
return false;
|
||||
}
|
||||
var rtp = stats[rtpStatsKey];
|
||||
var nrPackets = rtp[rtp.type == "outboundrtp" ? "packetsSent"
|
||||
: "packetsReceived"];
|
||||
|
@ -1404,12 +1401,21 @@ PeerConnectionWrapper.prototype = {
|
|||
return nrPackets > 0;
|
||||
};
|
||||
|
||||
return new Promise(resolve => {
|
||||
info("Checking RTP packet flow for track " + track.id);
|
||||
|
||||
var retry = () => this._pc.getStats(track)
|
||||
.then(stats => hasFlow(stats)? ok(true, "RTP flowing for track " + track.id) :
|
||||
wait(200).then(retry));
|
||||
return retry();
|
||||
var waitForFlow = () => {
|
||||
this._pc.getStats(track).then(stats => {
|
||||
if (hasFlow(stats)) {
|
||||
ok(true, "RTP flowing for track " + track.id);
|
||||
resolve();
|
||||
} else {
|
||||
wait(200).then(waitForFlow);
|
||||
}
|
||||
});
|
||||
};
|
||||
waitForFlow();
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
|
|
|
@ -15,33 +15,19 @@
|
|||
var pc1 = new RTCPeerConnection();
|
||||
var pc2 = new RTCPeerConnection();
|
||||
|
||||
var add = (pc, can, failed) => can && pc.addIceCandidate(can).catch(failed);
|
||||
pc1.onicecandidate = e => add(pc2, e.candidate, generateErrorCallback());
|
||||
pc2.onicecandidate = e => add(pc1, e.candidate, generateErrorCallback());
|
||||
var pc2_haveRemoteOffer = new Promise(resolve => pc2.onsignalingstatechange =
|
||||
e => (e.target.signalingState == "have-remote-offer") && resolve());
|
||||
var pc1_stable = new Promise(resolve => pc1.onsignalingstatechange =
|
||||
e => (e.target.signalingState == "stable") && resolve());
|
||||
|
||||
function mustThrowWith(msg, reason, f) {
|
||||
try {
|
||||
f();
|
||||
ok(false, msg + " must throw");
|
||||
} catch (e) {
|
||||
is(e.name, reason, msg + " must throw: " + e.message);
|
||||
}
|
||||
};
|
||||
pc1.onicecandidate = e => pc2_haveRemoteOffer.then(() => !e.candidate ||
|
||||
pc2.addIceCandidate(e.candidate)).catch(generateErrorCallback());
|
||||
pc2.onicecandidate = e => pc1_stable.then(() => !e.candidate ||
|
||||
pc1.addIceCandidate(e.candidate)).catch(generateErrorCallback());
|
||||
|
||||
var v1, v2;
|
||||
var delivered = new Promise(resolve => pc2.ontrack = e => {
|
||||
// Test RTCTrackEvent here.
|
||||
ok(e.streams.length > 0, "has streams");
|
||||
ok(e.streams[0].getTracks().some(track => track == e.track), "has track");
|
||||
ok(pc2.getReceivers().some(receiver => receiver == e.receiver), "has receiver");
|
||||
if (e.streams[0].getTracks().length == 2) {
|
||||
// Test RTCTrackEvent required args here.
|
||||
mustThrowWith("RTCTrackEvent wo/required args",
|
||||
"TypeError", () => new RTCTrackEvent("track", {}));
|
||||
v2.srcObject = e.streams[0];
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
var delivered = new Promise(resolve =>
|
||||
pc2.onaddstream = e => resolve(v2.srcObject = e.stream));
|
||||
|
||||
runNetworkTest(function() {
|
||||
v1 = createMediaElement('video', 'v1');
|
||||
|
@ -51,7 +37,7 @@
|
|||
is(v2.currentTime, 0, "v2.currentTime is zero at outset");
|
||||
|
||||
navigator.mediaDevices.getUserMedia({ video: true, audio: true })
|
||||
.then(stream => (v1.srcObject = stream).getTracks().forEach(t => pc1.addTrack(t, stream)))
|
||||
.then(stream => pc1.addStream(v1.srcObject = stream))
|
||||
.then(() => pc1.createOffer({})) // check that createOffer accepts arg.
|
||||
.then(offer => pc1.setLocalDescription(offer))
|
||||
.then(() => pc2.setRemoteDescription(pc1.localDescription))
|
||||
|
|
|
@ -19,13 +19,6 @@
|
|||
.some(sn => sn.track == t))) // that's being sent over |pc|.
|
||||
}
|
||||
|
||||
function allRemoteStreamsHaveReceiver(pc) {
|
||||
return pc.getRemoteStreams()
|
||||
.every(s => s.getTracks() // Every remote stream,
|
||||
.some(t => pc.getReceivers() // should have some track,
|
||||
.some(sn => sn.track == t))) // that's being received over |pc|.
|
||||
}
|
||||
|
||||
function replacetest(wrapper) {
|
||||
var pc = wrapper._pc;
|
||||
var oldSenderCount = pc.getSenders().length;
|
||||
|
@ -33,9 +26,7 @@
|
|||
var oldTrack = sender.track;
|
||||
ok(sender, "We have a sender for video");
|
||||
ok(allLocalStreamsHaveSender(pc),
|
||||
"Shouldn't have any local streams without a corresponding sender");
|
||||
ok(allRemoteStreamsHaveReceiver(pc),
|
||||
"Shouldn't have any remote streams without a corresponding receiver");
|
||||
"Shouldn't have any streams without a corresponding sender");
|
||||
|
||||
var newTrack;
|
||||
var audiotrack;
|
||||
|
|
|
@ -997,8 +997,6 @@ var interfaceNamesInGlobalScope =
|
|||
"RTCSessionDescription",
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
"RTCStatsReport",
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
"RTCTrackEvent",
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
"Screen",
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
|
|
|
@ -42,6 +42,6 @@ interface PeerConnectionObserver
|
|||
/* Changes to MediaStreamTracks */
|
||||
void onAddStream(MediaStream stream);
|
||||
void onRemoveStream(MediaStream stream);
|
||||
void onAddTrack(MediaStreamTrack track, sequence<MediaStream> streams);
|
||||
void onAddTrack(MediaStreamTrack track);
|
||||
void onRemoveTrack(MediaStreamTrack track);
|
||||
};
|
||||
|
|
|
@ -141,9 +141,8 @@ interface RTCPeerConnection : EventTarget {
|
|||
attribute EventHandler onnegotiationneeded;
|
||||
attribute EventHandler onicecandidate;
|
||||
attribute EventHandler onsignalingstatechange;
|
||||
attribute EventHandler onaddstream; // obsolete
|
||||
attribute EventHandler onaddtrack; // obsolete
|
||||
attribute EventHandler ontrack; // replaces onaddtrack and onaddstream.
|
||||
attribute EventHandler onaddstream;
|
||||
attribute EventHandler onaddtrack; // replaces onaddstream; see AddTrackEvent
|
||||
attribute EventHandler onremovestream;
|
||||
attribute EventHandler oniceconnectionstatechange;
|
||||
|
||||
|
|
|
@ -1,27 +0,0 @@
|
|||
/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* 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/.
|
||||
*
|
||||
* The origin of this IDL file is
|
||||
* http://w3c.github.io/webrtc-pc/#idl-def-RTCTrackEvent
|
||||
*/
|
||||
|
||||
dictionary RTCTrackEventInit : EventInit {
|
||||
required RTCRtpReceiver receiver;
|
||||
required MediaStreamTrack track;
|
||||
sequence<MediaStream> streams = [];
|
||||
};
|
||||
|
||||
[Pref="media.peerconnection.enabled",
|
||||
Constructor(DOMString type, RTCTrackEventInit eventInitDict)]
|
||||
interface RTCTrackEvent : Event {
|
||||
readonly attribute RTCRtpReceiver receiver;
|
||||
readonly attribute MediaStreamTrack track;
|
||||
|
||||
// TODO: Use FrozenArray once available. (Bug 1236777)
|
||||
// readonly attribute FrozenArray<MediaStream> streams;
|
||||
|
||||
[Frozen, Cached, Pure]
|
||||
readonly attribute sequence<MediaStream> streams; // workaround
|
||||
};
|
|
@ -836,7 +836,6 @@ if CONFIG['MOZ_WEBRTC']:
|
|||
'MediaStreamTrackEvent.webidl',
|
||||
'RTCDataChannelEvent.webidl',
|
||||
'RTCPeerConnectionIceEvent.webidl',
|
||||
'RTCTrackEvent.webidl',
|
||||
]
|
||||
|
||||
if CONFIG['MOZ_WEBSPEECH']:
|
||||
|
|
|
@ -187,7 +187,6 @@ public:
|
|||
virtual void NotifyTracksAvailable(DOMMediaStream* aStream) override
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
MOZ_ASSERT(aStream);
|
||||
|
||||
PeerConnectionWrapper wrapper(mPcHandle);
|
||||
|
||||
|
@ -201,13 +200,6 @@ public:
|
|||
std::string streamId = PeerConnectionImpl::GetStreamId(*aStream);
|
||||
bool notifyStream = true;
|
||||
|
||||
Sequence<OwningNonNull<DOMMediaStream>> streams;
|
||||
if (!streams.AppendElement(OwningNonNull<DOMMediaStream>(*aStream),
|
||||
fallible)) {
|
||||
MOZ_ASSERT(false);
|
||||
return;
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < tracks.Length(); i++) {
|
||||
std::string trackId;
|
||||
// This is the first chance we get to set the string track id on this
|
||||
|
@ -239,7 +231,7 @@ public:
|
|||
|
||||
JSErrorResult jrv;
|
||||
CSFLogInfo(logTag, "Calling OnAddTrack(%s)", trackId.c_str());
|
||||
mObserver->OnAddTrack(*tracks[i], streams, jrv);
|
||||
mObserver->OnAddTrack(*tracks[i], jrv);
|
||||
if (jrv.Failed()) {
|
||||
CSFLogError(logTag, ": OnAddTrack(%u) failed! Error: %u",
|
||||
static_cast<unsigned>(i),
|
||||
|
@ -1868,31 +1860,19 @@ PeerConnectionImpl::SetRemoteDescription(int32_t action, const char* aSDP)
|
|||
mJsepSession->GetRemoteTracksRemoved();
|
||||
|
||||
for (auto i = removedTracks.begin(); i != removedTracks.end(); ++i) {
|
||||
const std::string& streamId = (*i)->GetStreamId();
|
||||
const std::string& trackId = (*i)->GetTrackId();
|
||||
|
||||
RefPtr<RemoteSourceStreamInfo> info = mMedia->GetRemoteStreamById(streamId);
|
||||
RefPtr<RemoteSourceStreamInfo> info =
|
||||
mMedia->GetRemoteStreamById((*i)->GetStreamId());
|
||||
if (!info) {
|
||||
MOZ_ASSERT(false, "A stream/track was removed that wasn't in PCMedia. "
|
||||
"This is a bug.");
|
||||
continue;
|
||||
}
|
||||
|
||||
mMedia->RemoveRemoteTrack(streamId, trackId);
|
||||
|
||||
DOMMediaStream* stream = info->GetMediaStream();
|
||||
nsTArray<RefPtr<MediaStreamTrack>> tracks;
|
||||
stream->GetTracks(tracks);
|
||||
for (auto& track : tracks) {
|
||||
if (PeerConnectionImpl::GetTrackId(*track) == trackId) {
|
||||
pco->OnRemoveTrack(*track, jrv);
|
||||
break;
|
||||
}
|
||||
}
|
||||
mMedia->RemoveRemoteTrack((*i)->GetStreamId(), (*i)->GetTrackId());
|
||||
|
||||
// We might be holding the last ref, but that's ok.
|
||||
if (!info->GetTrackCount()) {
|
||||
pco->OnRemoveStream(*stream, jrv);
|
||||
pco->OnRemoveStream(*info->GetMediaStream(), jrv);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче