Bug 989936 - fire the onsignalingstatechanged event if close was called locally. r=jesup

This commit is contained in:
Nils Ohlmeier [:drno] 2014-04-16 18:02:00 +02:00
parent e58299ef89
commit eda0ff85ea
4 changed files with 36 additions and 8 deletions

View File

@ -493,12 +493,21 @@ function PeerConnectionTest(options) {
PeerConnectionTest.prototype.close = function PCT_close(onSuccess) {
info("Closing peer connections. Connection state=" + this.connected);
function signalingstatechangeClose(state) {
info("'onsignalingstatechange' event '" + state + "' received");
is(state, "closed", "onsignalingstatechange event is closed");
}
// There is no onclose event for the remote peer existent yet. So close it
// side-by-side with the local peer.
if (this.pcLocal)
if (this.pcLocal) {
this.pcLocal.onsignalingstatechange = signalingstatechangeClose;
this.pcLocal.close();
if (this.pcRemote)
}
if (this.pcRemote) {
this.pcRemote.onsignalingstatechange = signalingstatechangeClose;
this.pcRemote.close();
}
this.connected = false;
onSuccess();
@ -585,8 +594,9 @@ function PCT_setLocalDescription(peer, desc, onSuccess) {
}
}
peer.onsignalingstatechange = function () {
info(peer + ": 'onsignalingstatechange' event registered, signalingState: " + peer.signalingState);
peer.onsignalingstatechange = function (state) {
//info(peer + ": 'onsignalingstatechange' event registered, signalingState: " + peer.signalingState);
info(peer + ": 'onsignalingstatechange' event '" + state + "' received");
eventFired = true;
check_next_test();
@ -646,8 +656,8 @@ function PCT_setRemoteDescription(peer, desc, onSuccess) {
}
}
peer.onsignalingstatechange = function () {
info(peer + ": 'onsignalingstatechange' event registered, signalingState: " + peer.signalingState);
peer.onsignalingstatechange = function (state) {
info(peer + ": 'onsignalingstatechange' event '" + state + "' received");
eventFired = true;
check_next_test();
@ -1168,7 +1178,9 @@ function PeerConnectionWrapper(label, configuration) {
this._pc.onsignalingstatechange = function (aEvent) {
info(self + ": 'onsignalingstatechange' event fired");
self.onsignalingstatechange();
// this calls the eventhandler only once and then overwrites it with the
// default unexpectedEvent handler
self.onsignalingstatechange(aEvent);
self.onsignalingstatechange = unexpectedEventAndFinish(self, 'onsignalingstatechange');
};
}

View File

@ -56,6 +56,11 @@
var description;
var exception = null;
// handle the event which the close() triggers
test.pcLocal.onsignalingstatechange = function (state) {
is(state, "closed", "Received expected onsignalingstatechange event 'closed'");
}
test.pcLocal.close();
try { description = test.pcLocal.localDescription; } catch (e) { exception = e; }
@ -66,6 +71,11 @@
ok(exception, "Attempt to access remoteDescription of pcLocal after close throws exception");
exception = null;
// handle the event which the close() triggers
test.pcRemote.onsignalingstatechange = function (state) {
is(state, "closed", "Received expected onsignalingstatechange event 'closed'");
}
test.pcRemote.close();
try { description = test.pcRemote.localDescription; } catch (e) { exception = e; }

View File

@ -49,6 +49,8 @@
exception = null;
try { pconnects.createOffer(step1, failed, { mandatory: { OfferToReceiveVideo: false, OfferToReceiveAudio: true, MozDontOfferDataChannel: true}, optional: [{ VoiceActivityDetection: true }, { FooBar: "42" }] }); } catch (e) { exception = e; }
ok(!exception, "createOffer(step1, failed, { mandatory: { OfferToReceiveVideo: false, OfferToReceiveAudio: true, MozDontOfferDataChannel: true}, optional: [{ VoiceActivityDetection: true }, { FooBar: \"42\" }] }) succeeds");
pconnect.close();
pconnects.close();
pconnect = null;
pconnects = null;
SimpleTest.finish();

View File

@ -1600,7 +1600,11 @@ PeerConnectionImpl::Close()
CSFLogDebug(logTag, "%s: for %s", __FUNCTION__, mHandle.c_str());
PC_AUTO_ENTER_API_CALL_NO_CHECK();
return CloseInt();
nsresult res = CloseInt();
SetSignalingState_m(PCImplSignalingState::SignalingClosed);
return res;
}