Bug 1475004 - Enable ESLint for dom/presentation - automatic fixes. r=mccr8

This is based on the same rules as for the majority of the rest of mozilla-central.

MozReview-Commit-ID: 2O1jH8cNXIj

--HG--
extra : rebase_source : b6788a231f70521398ef8783bebce99384a344d9
This commit is contained in:
Mark Banner 2018-07-03 16:19:05 +01:00
parent f1b93a05ce
commit a0026662dd
53 changed files with 1856 additions and 1868 deletions

View file

@ -9,7 +9,7 @@ ChromeUtils.import("resource://gre/modules/Services.jsm");
// Bug 1228209 - plan to remove this eventually // Bug 1228209 - plan to remove this eventually
function log(aMsg) { function log(aMsg) {
//dump("-*- PresentationDataChannelSessionTransport.js : " + aMsg + "\n"); // dump("-*- PresentationDataChannelSessionTransport.js : " + aMsg + "\n");
} }
const PRESENTATIONTRANSPORT_CID = Components.ID("{dd2bbf2f-3399-4389-8f5f-d382afb8b2d6}"); const PRESENTATIONTRANSPORT_CID = Components.ID("{dd2bbf2f-3399-4389-8f5f-d382afb8b2d6}");
@ -50,7 +50,7 @@ PresentationTransportBuilder.prototype = {
Ci.nsIPresentationDataChannelSessionTransportBuilder, Ci.nsIPresentationDataChannelSessionTransportBuilder,
Ci.nsITimerCallback]), Ci.nsITimerCallback]),
buildDataChannelTransport: function(aRole, aWindow, aListener) { buildDataChannelTransport(aRole, aWindow, aListener) {
if (!aRole || !aWindow || !aListener) { if (!aRole || !aWindow || !aListener) {
log("buildDataChannelTransport with illegal parameters"); log("buildDataChannelTransport with illegal parameters");
throw Cr.NS_ERROR_ILLEGAL_VALUE; throw Cr.NS_ERROR_ILLEGAL_VALUE;
@ -85,7 +85,7 @@ PresentationTransportBuilder.prototype = {
.then(() => this._listener .then(() => this._listener
.sendOffer(new PresentationDataChannelDescription(this._peerConnection.localDescription))) .sendOffer(new PresentationDataChannelDescription(this._peerConnection.localDescription)))
.catch(e => this._reportError(e)); .catch(e => this._reportError(e));
} };
switch (this._role) { switch (this._role) {
case Ci.nsIPresentationService.ROLE_CONTROLLER: case Ci.nsIPresentationService.ROLE_CONTROLLER:
@ -99,7 +99,7 @@ PresentationTransportBuilder.prototype = {
// Ensure the binaryType of dataChannel is blob. // Ensure the binaryType of dataChannel is blob.
this._dataChannel.binaryType = "blob"; this._dataChannel.binaryType = "blob";
this._setDataChannel(); this._setDataChannel();
} };
break; break;
default: default:
throw Cr.NS_ERROR_ILLEGAL_VALUE; throw Cr.NS_ERROR_ILLEGAL_VALUE;
@ -114,18 +114,18 @@ PresentationTransportBuilder.prototype = {
this._timer.initWithCallback(this, timeout, this._timer.TYPE_ONE_SHOT); this._timer.initWithCallback(this, timeout, this._timer.TYPE_ONE_SHOT);
}, },
notify: function() { notify() {
if (!this._sessionTransport) { if (!this._sessionTransport) {
this._cleanup(Cr.NS_ERROR_NET_TIMEOUT); this._cleanup(Cr.NS_ERROR_NET_TIMEOUT);
} }
}, },
_reportError: function(aError) { _reportError(aError) {
log("report Error " + aError.name + ":" + aError.message); log("report Error " + aError.name + ":" + aError.message);
this._cleanup(Cr.NS_ERROR_FAILURE); this._cleanup(Cr.NS_ERROR_FAILURE);
}, },
_setDataChannel: function() { _setDataChannel() {
this._dataChannel.onopen = () => { this._dataChannel.onopen = () => {
log("data channel is open, notify the listener, role " + this._role); log("data channel is open, notify the listener, role " + this._role);
@ -146,10 +146,10 @@ PresentationTransportBuilder.prototype = {
this._dataChannel.onerror = aError => { this._dataChannel.onerror = aError => {
log("data channel onerror " + aError.name + ":" + aError.message); log("data channel onerror " + aError.name + ":" + aError.message);
this._cleanup(Cr.NS_ERROR_FAILURE); this._cleanup(Cr.NS_ERROR_FAILURE);
} };
}, },
_cleanup: function(aReason) { _cleanup(aReason) {
if (aReason != Cr.NS_OK) { if (aReason != Cr.NS_OK) {
this._listener.onError(aReason); this._listener.onError(aReason);
} }
@ -177,7 +177,7 @@ PresentationTransportBuilder.prototype = {
}, },
// nsIPresentationControlChannelListener // nsIPresentationControlChannelListener
onOffer: function(aOffer) { onOffer(aOffer) {
if (this._role !== Ci.nsIPresentationService.ROLE_RECEIVER || if (this._role !== Ci.nsIPresentationService.ROLE_RECEIVER ||
this._sessionTransport) { this._sessionTransport) {
log("onOffer status error"); log("onOffer status error");
@ -196,11 +196,11 @@ PresentationTransportBuilder.prototype = {
.then(() => { .then(() => {
this._isControlChannelNeeded = false; this._isControlChannelNeeded = false;
this._listener this._listener
.sendAnswer(new PresentationDataChannelDescription(this._peerConnection.localDescription)) .sendAnswer(new PresentationDataChannelDescription(this._peerConnection.localDescription));
}).catch(e => this._reportError(e)); }).catch(e => this._reportError(e));
}, },
onAnswer: function(aAnswer) { onAnswer(aAnswer) {
if (this._role !== Ci.nsIPresentationService.ROLE_CONTROLLER || if (this._role !== Ci.nsIPresentationService.ROLE_CONTROLLER ||
this._sessionTransport) { this._sessionTransport) {
log("onAnswer status error"); log("onAnswer status error");
@ -216,7 +216,7 @@ PresentationTransportBuilder.prototype = {
this._isControlChannelNeeded = false; this._isControlChannelNeeded = false;
}, },
onIceCandidate: function(aCandidate) { onIceCandidate(aCandidate) {
log("onIceCandidate: " + aCandidate + " with role " + this._role); log("onIceCandidate: " + aCandidate + " with role " + this._role);
if (!this._window || !this._peerConnection) { if (!this._window || !this._peerConnection) {
log("ignoring ICE candidate after connection"); log("ignoring ICE candidate after connection");
@ -226,7 +226,7 @@ PresentationTransportBuilder.prototype = {
this._peerConnection.addIceCandidate(candidate).catch(e => this._reportError(e)); this._peerConnection.addIceCandidate(candidate).catch(e => this._reportError(e));
}, },
notifyDisconnected: function(aReason) { notifyDisconnected(aReason) {
log("notifyDisconnected reason: " + aReason); log("notifyDisconnected reason: " + aReason);
if (aReason != Cr.NS_OK) { if (aReason != Cr.NS_OK) {
@ -247,7 +247,7 @@ PresentationTransport.prototype = {
contractID: PRESENTATIONTRANSPORT_CONTRACTID, contractID: PRESENTATIONTRANSPORT_CONTRACTID,
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationSessionTransport]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationSessionTransport]),
init: function(aPeerConnection, aDataChannel, aWindow) { init(aPeerConnection, aDataChannel, aWindow) {
log("initWithDataChannel"); log("initWithDataChannel");
this._enableDataNotification = false; this._enableDataNotification = false;
this._dataChannel = aDataChannel; this._dataChannel = aDataChannel;
@ -264,7 +264,7 @@ PresentationTransport.prototype = {
this._callback.notifyTransportClosed(this._closeReason); this._callback.notifyTransportClosed(this._closeReason);
} }
this._cleanup(); this._cleanup();
} };
this._dataChannel.onmessage = aEvent => { this._dataChannel.onmessage = aEvent => {
log("data channel onmessage " + aEvent.data); log("data channel onmessage " + aEvent.data);
@ -283,7 +283,7 @@ PresentationTransport.prototype = {
this._callback.notifyTransportClosed(Cr.NS_ERROR_FAILURE); this._callback.notifyTransportClosed(Cr.NS_ERROR_FAILURE);
} }
this._cleanup(); this._cleanup();
} };
}, },
// nsIPresentationTransport // nsIPresentationTransport
@ -299,12 +299,12 @@ PresentationTransport.prototype = {
this._callback = aCallback; this._callback = aCallback;
}, },
send: function(aData) { send(aData) {
log("send " + aData); log("send " + aData);
this._dataChannel.send(aData); this._dataChannel.send(aData);
}, },
sendBinaryMsg: function(aData) { sendBinaryMsg(aData) {
log("sendBinaryMsg"); log("sendBinaryMsg");
let array = new Uint8Array(aData.length); let array = new Uint8Array(aData.length);
@ -315,13 +315,13 @@ PresentationTransport.prototype = {
this._dataChannel.send(array); this._dataChannel.send(array);
}, },
sendBlob: function(aBlob) { sendBlob(aBlob) {
log("sendBlob"); log("sendBlob");
this._dataChannel.send(aBlob); this._dataChannel.send(aBlob);
}, },
enableDataNotification: function() { enableDataNotification() {
log("enableDataNotification"); log("enableDataNotification");
if (this._enableDataNotification) { if (this._enableDataNotification) {
return; return;
@ -337,13 +337,13 @@ PresentationTransport.prototype = {
this._messageQueue = []; this._messageQueue = [];
}, },
close: function(aReason) { close(aReason) {
this._closeReason = aReason; this._closeReason = aReason;
this._dataChannel.close(); this._dataChannel.close();
}, },
_cleanup: function() { _cleanup() {
this._dataChannel = null; this._dataChannel = null;
if (this._peerConnection) { if (this._peerConnection) {
@ -355,7 +355,7 @@ PresentationTransport.prototype = {
this._window = null; this._window = null;
}, },
_doNotifyData: function(aData) { _doNotifyData(aData) {
if (!this._callback) { if (!this._callback) {
throw Cr.NS_ERROR_NOT_AVAILABLE; throw Cr.NS_ERROR_NOT_AVAILABLE;
} }

View file

@ -16,7 +16,7 @@ PresentationNetworkHelper.prototype = {
classID: NETWORKHELPER_CID, classID: NETWORKHELPER_CID,
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationNetworkHelper]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationNetworkHelper]),
getWifiIPAddress: function(aListener) { getWifiIPAddress(aListener) {
EventDispatcher.instance.sendRequestForResult({type: "Wifi:GetIPAddress"}) EventDispatcher.instance.sendRequestForResult({type: "Wifi:GetIPAddress"})
.then(result => aListener.onGetWifiIPAddress(result), .then(result => aListener.onGetWifiIPAddress(result),
err => aListener.onError(err)); err => aListener.onError(err));

View file

@ -22,7 +22,7 @@ function log(str) {
function descriptionToString(aDescription) { function descriptionToString(aDescription) {
let json = {}; let json = {};
json.type = aDescription.type; json.type = aDescription.type;
switch(aDescription.type) { switch (aDescription.type) {
case Ci.nsIPresentationChannelDescription.TYPE_TCP: case Ci.nsIPresentationChannelDescription.TYPE_TCP:
let addresses = aDescription.tcpAddress.QueryInterface(Ci.nsIArray); let addresses = aDescription.tcpAddress.QueryInterface(Ci.nsIArray);
json.tcpAddress = []; json.tcpAddress = [];

View file

@ -96,8 +96,8 @@ ControllerStateMachine.prototype = {
if (this.state === State.CONNECTED) { if (this.state === State.CONNECTED) {
this._sendCommand({ this._sendCommand({
type: CommandType.LAUNCH, type: CommandType.LAUNCH,
presentationId: presentationId, presentationId,
url: url, url,
}); });
} }
}, },
@ -106,7 +106,7 @@ ControllerStateMachine.prototype = {
if (this.state === State.CONNECTED) { if (this.state === State.CONNECTED) {
this._sendCommand({ this._sendCommand({
type: CommandType.TERMINATE, type: CommandType.TERMINATE,
presentationId: presentationId, presentationId,
}); });
} }
}, },
@ -115,7 +115,7 @@ ControllerStateMachine.prototype = {
if (this.state === State.CONNECTED) { if (this.state === State.CONNECTED) {
this._sendCommand({ this._sendCommand({
type: CommandType.TERMINATE_ACK, type: CommandType.TERMINATE_ACK,
presentationId: presentationId, presentationId,
}); });
} }
}, },
@ -124,8 +124,8 @@ ControllerStateMachine.prototype = {
if (this.state === State.CONNECTED) { if (this.state === State.CONNECTED) {
this._sendCommand({ this._sendCommand({
type: CommandType.RECONNECT, type: CommandType.RECONNECT,
presentationId: presentationId, presentationId,
url: url, url,
}); });
} }
}, },
@ -134,7 +134,7 @@ ControllerStateMachine.prototype = {
if (this.state === State.CONNECTED) { if (this.state === State.CONNECTED) {
this._sendCommand({ this._sendCommand({
type: CommandType.OFFER, type: CommandType.OFFER,
offer: offer, offer,
}); });
} }
}, },
@ -148,7 +148,7 @@ ControllerStateMachine.prototype = {
if (this.state === State.CONNECTED) { if (this.state === State.CONNECTED) {
this._sendCommand({ this._sendCommand({
type: CommandType.ICE_CANDIDATE, type: CommandType.ICE_CANDIDATE,
candidate: candidate, candidate,
}); });
} }
}, },
@ -176,7 +176,7 @@ ControllerStateMachine.prototype = {
} else { } else {
this._sendCommand({ this._sendCommand({
type: CommandType.DISCONNECT, type: CommandType.DISCONNECT,
reason: reason reason
}); });
this.state = State.CLOSING; this.state = State.CLOSING;
this._closeReason = reason; this._closeReason = reason;
@ -203,7 +203,7 @@ ControllerStateMachine.prototype = {
}, },
_notifyDeviceConnected: function _notifyDeviceConnected() { _notifyDeviceConnected: function _notifyDeviceConnected() {
//XXX trigger following command // XXX trigger following command
this._channel.notifyDeviceConnected(); this._channel.notifyDeviceConnected();
}, },

View file

@ -50,9 +50,9 @@ PresentationControlService.prototype = {
*/ */
_controlChannels: [], _controlChannels: [],
startServer: function(aEncrypted, aPort) { startServer(aEncrypted, aPort) {
if (this._isServiceInit()) { if (this._isServiceInit()) {
DEBUG && log("PresentationControlService - server socket has been initialized"); // jshint ignore:line DEBUG && log("PresentationControlService - server socket has been initialized"); // jshint ignore:line
throw Cr.NS_ERROR_FAILURE; throw Cr.NS_ERROR_FAILURE;
} }
@ -67,8 +67,8 @@ PresentationControlService.prototype = {
let localCertService = Cc["@mozilla.org/security/local-cert-service;1"] let localCertService = Cc["@mozilla.org/security/local-cert-service;1"]
.getService(Ci.nsILocalCertService); .getService(Ci.nsILocalCertService);
localCertService.getOrCreateCert(kLocalCertName, { localCertService.getOrCreateCert(kLocalCertName, {
handleCert: function(aCert, aRv) { handleCert(aCert, aRv) {
DEBUG && log("PresentationControlService - handleCert"); // jshint ignore:line DEBUG && log("PresentationControlService - handleCert"); // jshint ignore:line
if (aRv) { if (aRv) {
self._notifyServerStopped(aRv); self._notifyServerStopped(aRv);
} else { } else {
@ -87,7 +87,7 @@ PresentationControlService.prototype = {
} }
}, },
_serverSocketInit: function(aPort, aCert) { _serverSocketInit(aPort, aCert) {
if (!this._serverSocket) { if (!this._serverSocket) {
DEBUG && log("PresentationControlService - create server socket fail."); // jshint ignore:line DEBUG && log("PresentationControlService - create server socket fail."); // jshint ignore:line
throw Cr.NS_ERROR_FAILURE; throw Cr.NS_ERROR_FAILURE;
@ -121,7 +121,7 @@ PresentationControlService.prototype = {
this._notifyServerReady(); this._notifyServerReady();
}, },
_notifyServerReady: function() { _notifyServerReady() {
Services.tm.dispatchToMainThread(() => { Services.tm.dispatchToMainThread(() => {
if (this._listener) { if (this._listener) {
this._listener.onServerReady(this._port, this.certFingerprint); this._listener.onServerReady(this._port, this.certFingerprint);
@ -129,7 +129,7 @@ PresentationControlService.prototype = {
}); });
}, },
_notifyServerStopped: function(aRv) { _notifyServerStopped(aRv) {
Services.tm.dispatchToMainThread(() => { Services.tm.dispatchToMainThread(() => {
if (this._listener) { if (this._listener) {
this._listener.onServerStopped(aRv); this._listener.onServerStopped(aRv);
@ -137,7 +137,7 @@ PresentationControlService.prototype = {
}); });
}, },
isCompatibleServer: function(aVersion) { isCompatibleServer(aVersion) {
// No compatibility issue for the first version of control protocol // No compatibility issue for the first version of control protocol
return this.version === aVersion; return this.version === aVersion;
}, },
@ -174,11 +174,11 @@ PresentationControlService.prototype = {
return this._listener; return this._listener;
}, },
_isServiceInit: function() { _isServiceInit() {
return this._serverSocket !== null; return this._serverSocket !== null;
}, },
connect: function(aDeviceInfo) { connect(aDeviceInfo) {
if (!this.id) { if (!this.id) {
DEBUG && log("PresentationControlService - Id has not initialized; connect fails"); // jshint ignore:line DEBUG && log("PresentationControlService - Id has not initialized; connect fails"); // jshint ignore:line
return null; return null;
@ -192,7 +192,7 @@ PresentationControlService.prototype = {
"sender"); "sender");
}, },
_attemptConnect: function(aDeviceInfo) { _attemptConnect(aDeviceInfo) {
let sts = Cc["@mozilla.org/network/socket-transport-service;1"] let sts = Cc["@mozilla.org/network/socket-transport-service;1"]
.getService(Ci.nsISocketTransportService); .getService(Ci.nsISocketTransportService);
@ -222,14 +222,14 @@ PresentationControlService.prototype = {
// Shorten the connection failure procedure. // Shorten the connection failure procedure.
socketTransport.setTimeout(Ci.nsISocketTransport.TIMEOUT_CONNECT, 2); socketTransport.setTimeout(Ci.nsISocketTransport.TIMEOUT_CONNECT, 2);
} catch (e) { } catch (e) {
DEBUG && log("PresentationControlService - createTransport throws: " + e); // jshint ignore:line DEBUG && log("PresentationControlService - createTransport throws: " + e); // jshint ignore:line
// Pop the exception to |TCPDevice.establishControlChannel| // Pop the exception to |TCPDevice.establishControlChannel|
throw Cr.NS_ERROR_FAILURE; throw Cr.NS_ERROR_FAILURE;
} }
return socketTransport; return socketTransport;
}, },
responseSession: function(aDeviceInfo, aSocketTransport) { responseSession(aDeviceInfo, aSocketTransport) {
if (!this._isServiceInit()) { if (!this._isServiceInit()) {
DEBUG && log("PresentationControlService - should never receive remote " + DEBUG && log("PresentationControlService - should never receive remote " +
"session request before server socket initialization"); // jshint ignore:line "session request before server socket initialization"); // jshint ignore:line
@ -244,7 +244,7 @@ PresentationControlService.prototype = {
}, },
// Triggered by TCPControlChannel // Triggered by TCPControlChannel
onSessionRequest: function(aDeviceInfo, aUrl, aPresentationId, aControlChannel) { onSessionRequest(aDeviceInfo, aUrl, aPresentationId, aControlChannel) {
DEBUG && log("PresentationControlService - onSessionRequest: " + DEBUG && log("PresentationControlService - onSessionRequest: " +
aDeviceInfo.address + ":" + aDeviceInfo.port); // jshint ignore:line aDeviceInfo.address + ":" + aDeviceInfo.port); // jshint ignore:line
if (!this.listener) { if (!this.listener) {
@ -259,7 +259,7 @@ PresentationControlService.prototype = {
this.releaseControlChannel(aControlChannel); this.releaseControlChannel(aControlChannel);
}, },
onSessionTerminate: function(aDeviceInfo, aPresentationId, aControlChannel, aIsFromReceiver) { onSessionTerminate(aDeviceInfo, aPresentationId, aControlChannel, aIsFromReceiver) {
DEBUG && log("TCPPresentationServer - onSessionTerminate: " + DEBUG && log("TCPPresentationServer - onSessionTerminate: " +
aDeviceInfo.address + ":" + aDeviceInfo.port); // jshint ignore:line aDeviceInfo.address + ":" + aDeviceInfo.port); // jshint ignore:line
if (!this.listener) { if (!this.listener) {
@ -274,7 +274,7 @@ PresentationControlService.prototype = {
this.releaseControlChannel(aControlChannel); this.releaseControlChannel(aControlChannel);
}, },
onSessionReconnect: function(aDeviceInfo, aUrl, aPresentationId, aControlChannel) { onSessionReconnect(aDeviceInfo, aUrl, aPresentationId, aControlChannel) {
DEBUG && log("TCPPresentationServer - onSessionReconnect: " + DEBUG && log("TCPPresentationServer - onSessionReconnect: " +
aDeviceInfo.address + ":" + aDeviceInfo.port); // jshint ignore:line aDeviceInfo.address + ":" + aDeviceInfo.port); // jshint ignore:line
if (!this.listener) { if (!this.listener) {
@ -290,18 +290,18 @@ PresentationControlService.prototype = {
}, },
// nsIServerSocketListener (Triggered by nsIServerSocket.init) // nsIServerSocketListener (Triggered by nsIServerSocket.init)
onSocketAccepted: function(aServerSocket, aClientSocket) { onSocketAccepted(aServerSocket, aClientSocket) {
DEBUG && log("PresentationControlService - onSocketAccepted: " + DEBUG && log("PresentationControlService - onSocketAccepted: " +
aClientSocket.host + ":" + aClientSocket.port); // jshint ignore:line aClientSocket.host + ":" + aClientSocket.port); // jshint ignore:line
let deviceInfo = new TCPDeviceInfo(aClientSocket.host, aClientSocket.port); let deviceInfo = new TCPDeviceInfo(aClientSocket.host, aClientSocket.port);
this.holdControlChannel(this.responseSession(deviceInfo, aClientSocket)); this.holdControlChannel(this.responseSession(deviceInfo, aClientSocket));
}, },
holdControlChannel: function(aControlChannel) { holdControlChannel(aControlChannel) {
this._controlChannels.push(aControlChannel); this._controlChannels.push(aControlChannel);
}, },
releaseControlChannel: function(aControlChannel) { releaseControlChannel(aControlChannel) {
let index = this._controlChannels.indexOf(aControlChannel); let index = this._controlChannels.indexOf(aControlChannel);
if (index !== -1) { if (index !== -1) {
delete this._controlChannels[index]; delete this._controlChannels[index];
@ -309,11 +309,11 @@ PresentationControlService.prototype = {
}, },
// nsIServerSocketListener (Triggered by nsIServerSocket.init) // nsIServerSocketListener (Triggered by nsIServerSocket.init)
onStopListening: function(aServerSocket, aStatus) { onStopListening(aServerSocket, aStatus) {
DEBUG && log("PresentationControlService - onStopListening: " + aStatus); // jshint ignore:line DEBUG && log("PresentationControlService - onStopListening: " + aStatus); // jshint ignore:line
}, },
close: function() { close() {
DEBUG && log("PresentationControlService - close"); // jshint ignore:line DEBUG && log("PresentationControlService - close"); // jshint ignore:line
if (this._isServiceInit()) { if (this._isServiceInit()) {
DEBUG && log("PresentationControlService - close server socket"); // jshint ignore:line DEBUG && log("PresentationControlService - close server socket"); // jshint ignore:line
@ -328,7 +328,7 @@ PresentationControlService.prototype = {
}, },
// nsIObserver // nsIObserver
observe: function(aSubject, aTopic, aData) { observe(aSubject, aTopic, aData) {
DEBUG && log("PresentationControlService - observe: " + aTopic); // jshint ignore:line DEBUG && log("PresentationControlService - observe: " + aTopic); // jshint ignore:line
switch (aTopic) { switch (aTopic) {
case "network:offline-status-changed": { case "network:offline-status-changed": {
@ -342,7 +342,7 @@ PresentationControlService.prototype = {
} }
}, },
_restartServer: function() { _restartServer() {
DEBUG && log("PresentationControlService - restart service"); // jshint ignore:line DEBUG && log("PresentationControlService - restart service"); // jshint ignore:line
// restart server socket // restart server socket
@ -358,9 +358,9 @@ PresentationControlService.prototype = {
}, },
classID: Components.ID("{f4079b8b-ede5-4b90-a112-5b415a931deb}"), classID: Components.ID("{f4079b8b-ede5-4b90-a112-5b415a931deb}"),
QueryInterface : ChromeUtils.generateQI([Ci.nsIServerSocketListener, QueryInterface: ChromeUtils.generateQI([Ci.nsIServerSocketListener,
Ci.nsIPresentationControlService, Ci.nsIPresentationControlService,
Ci.nsIObserver]), Ci.nsIObserver]),
}; };
function ChannelDescription(aInit) { function ChannelDescription(aInit) {
@ -414,7 +414,7 @@ ChannelDescription.prototype = {
function discriptionAsJson(aDescription) { function discriptionAsJson(aDescription) {
let json = {}; let json = {};
json.type = aDescription.type; json.type = aDescription.type;
switch(aDescription.type) { switch (aDescription.type) {
case Ci.nsIPresentationChannelDescription.TYPE_TCP: case Ci.nsIPresentationChannelDescription.TYPE_TCP:
let addresses = aDescription.tcpAddress.QueryInterface(Ci.nsIArray); let addresses = aDescription.tcpAddress.QueryInterface(Ci.nsIArray);
json.tcpAddress = []; json.tcpAddress = [];
@ -488,23 +488,23 @@ TCPControlChannel.prototype = {
_pendingCloseReason: null, _pendingCloseReason: null,
_pendingReconnect: false, _pendingReconnect: false,
sendOffer: function(aOffer) { sendOffer(aOffer) {
this._stateMachine.sendOffer(discriptionAsJson(aOffer)); this._stateMachine.sendOffer(discriptionAsJson(aOffer));
}, },
sendAnswer: function(aAnswer) { sendAnswer(aAnswer) {
this._stateMachine.sendAnswer(discriptionAsJson(aAnswer)); this._stateMachine.sendAnswer(discriptionAsJson(aAnswer));
}, },
sendIceCandidate: function(aCandidate) { sendIceCandidate(aCandidate) {
this._stateMachine.updateIceCandidate(aCandidate); this._stateMachine.updateIceCandidate(aCandidate);
}, },
launch: function(aPresentationId, aUrl) { launch(aPresentationId, aUrl) {
this._stateMachine.launch(aPresentationId, aUrl); this._stateMachine.launch(aPresentationId, aUrl);
}, },
terminate: function(aPresentationId) { terminate(aPresentationId) {
if (!this._terminatingId) { if (!this._terminatingId) {
this._terminatingId = aPresentationId; this._terminatingId = aPresentationId;
this._stateMachine.terminate(aPresentationId); this._stateMachine.terminate(aPresentationId);
@ -525,7 +525,7 @@ TCPControlChannel.prototype = {
} }
}, },
_flushOutgoing: function() { _flushOutgoing() {
if (!this._outgoingEnabled || this._outgoingMsgs.length === 0) { if (!this._outgoingEnabled || this._outgoingMsgs.length === 0) {
return; return;
} }
@ -534,7 +534,7 @@ TCPControlChannel.prototype = {
}, },
// may throw an exception // may throw an exception
_send: function(aMsg) { _send(aMsg) {
DEBUG && log("TCPControlChannel - Send: " + JSON.stringify(aMsg, null, 2)); // jshint ignore:line DEBUG && log("TCPControlChannel - Send: " + JSON.stringify(aMsg, null, 2)); // jshint ignore:line
/** /**
@ -547,13 +547,13 @@ TCPControlChannel.prototype = {
let message = JSON.stringify(aMsg).replace(["\n"], "") + "\n"; let message = JSON.stringify(aMsg).replace(["\n"], "") + "\n";
try { try {
this._output.write(message, message.length); this._output.write(message, message.length);
} catch(e) { } catch (e) {
DEBUG && log("TCPControlChannel - Failed to send message: " + e.name); // jshint ignore:line DEBUG && log("TCPControlChannel - Failed to send message: " + e.name); // jshint ignore:line
throw e; throw e;
} }
}, },
_setSecurityObserver: function(observer) { _setSecurityObserver(observer) {
if (this._transport && this._transport.securityInfo) { if (this._transport && this._transport.securityInfo) {
DEBUG && log("TCPControlChannel - setSecurityObserver: " + observer); // jshint ignore:line DEBUG && log("TCPControlChannel - setSecurityObserver: " + observer); // jshint ignore:line
let connectionInfo = this._transport.securityInfo let connectionInfo = this._transport.securityInfo
@ -563,7 +563,7 @@ TCPControlChannel.prototype = {
}, },
// nsITLSServerSecurityObserver // nsITLSServerSecurityObserver
onHandshakeDone: function(socket, clientStatus) { onHandshakeDone(socket, clientStatus) {
log("TCPControlChannel - onHandshakeDone: TLS version: " + clientStatus.tlsVersionUsed.toString(16)); log("TCPControlChannel - onHandshakeDone: TLS version: " + clientStatus.tlsVersionUsed.toString(16));
this._setSecurityObserver(null); this._setSecurityObserver(null);
@ -573,7 +573,7 @@ TCPControlChannel.prototype = {
}, },
// nsIAsyncOutputStream // nsIAsyncOutputStream
onOutputStreamReady: function() { onOutputStreamReady() {
DEBUG && log("TCPControlChannel - onOutputStreamReady"); // jshint ignore:line DEBUG && log("TCPControlChannel - onOutputStreamReady"); // jshint ignore:line
if (this._outgoingMsgs.length === 0) { if (this._outgoingMsgs.length === 0) {
return; return;
@ -596,7 +596,7 @@ TCPControlChannel.prototype = {
// nsIAsyncInputStream (Triggered by nsIInputStream.asyncWait) // nsIAsyncInputStream (Triggered by nsIInputStream.asyncWait)
// Only used for detecting connection refused // Only used for detecting connection refused
onInputStreamReady: function(aStream) { onInputStreamReady(aStream) {
DEBUG && log("TCPControlChannel - onInputStreamReady"); // jshint ignore:line DEBUG && log("TCPControlChannel - onInputStreamReady"); // jshint ignore:line
try { try {
aStream.available(); aStream.available();
@ -608,7 +608,7 @@ TCPControlChannel.prototype = {
}, },
// nsITransportEventSink (Triggered by nsISocketTransport.setEventSink) // nsITransportEventSink (Triggered by nsISocketTransport.setEventSink)
onTransportStatus: function(aTransport, aStatus) { onTransportStatus(aTransport, aStatus) {
DEBUG && log("TCPControlChannel - onTransportStatus: " + aStatus.toString(16) + DEBUG && log("TCPControlChannel - onTransportStatus: " + aStatus.toString(16) +
" with role: " + this._direction); // jshint ignore:line " with role: " + this._direction); // jshint ignore:line
if (aStatus === Ci.nsISocketTransport.STATUS_CONNECTED_TO) { if (aStatus === Ci.nsISocketTransport.STATUS_CONNECTED_TO) {
@ -618,21 +618,21 @@ TCPControlChannel.prototype = {
}, },
// nsIRequestObserver (Triggered by nsIInputStreamPump.asyncRead) // nsIRequestObserver (Triggered by nsIInputStreamPump.asyncRead)
onStartRequest: function() { onStartRequest() {
DEBUG && log("TCPControlChannel - onStartRequest with role: " + DEBUG && log("TCPControlChannel - onStartRequest with role: " +
this._direction); // jshint ignore:line this._direction); // jshint ignore:line
this._incomingEnabled = true; this._incomingEnabled = true;
}, },
// nsIRequestObserver (Triggered by nsIInputStreamPump.asyncRead) // nsIRequestObserver (Triggered by nsIInputStreamPump.asyncRead)
onStopRequest: function(aRequest, aContext, aStatus) { onStopRequest(aRequest, aContext, aStatus) {
DEBUG && log("TCPControlChannel - onStopRequest: " + aStatus + DEBUG && log("TCPControlChannel - onStopRequest: " + aStatus +
" with role: " + this._direction); // jshint ignore:line " with role: " + this._direction); // jshint ignore:line
this._stateMachine.onChannelClosed(aStatus, true); this._stateMachine.onChannelClosed(aStatus, true);
}, },
// nsIStreamListener (Triggered by nsIInputStreamPump.asyncRead) // nsIStreamListener (Triggered by nsIInputStreamPump.asyncRead)
onDataAvailable: function(aRequest, aContext, aInputStream) { onDataAvailable(aRequest, aContext, aInputStream) {
let data = NetUtil.readInputStreamToString(aInputStream, let data = NetUtil.readInputStreamToString(aInputStream,
aInputStream.available()); aInputStream.available());
DEBUG && log("TCPControlChannel - onDataAvailable: " + data); // jshint ignore:line DEBUG && log("TCPControlChannel - onDataAvailable: " + data); // jshint ignore:line
@ -652,7 +652,7 @@ TCPControlChannel.prototype = {
} }
}, },
_createInputStreamPump: function() { _createInputStreamPump() {
if (this._pump) { if (this._pump) {
return; return;
} }
@ -667,7 +667,7 @@ TCPControlChannel.prototype = {
}, },
// Handle command from remote side // Handle command from remote side
_handleMessage: function(aMsg) { _handleMessage(aMsg) {
DEBUG && log("TCPControlChannel - handleMessage from " + DEBUG && log("TCPControlChannel - handleMessage from " +
JSON.stringify(this._deviceInfo) + ": " + JSON.stringify(aMsg)); // jshint ignore:line JSON.stringify(this._deviceInfo) + ": " + JSON.stringify(aMsg)); // jshint ignore:line
this._stateMachine.onCommand(aMsg); this._stateMachine.onCommand(aMsg);
@ -724,7 +724,7 @@ TCPControlChannel.prototype = {
* These functions are designed to handle the interaction with listener * These functions are designed to handle the interaction with listener
* appropriately. |_FUNC| is to handle |this._listener.FUNC|. * appropriately. |_FUNC| is to handle |this._listener.FUNC|.
*/ */
_onOffer: function(aOffer) { _onOffer(aOffer) {
if (!this._incomingEnabled) { if (!this._incomingEnabled) {
return; return;
} }
@ -737,7 +737,7 @@ TCPControlChannel.prototype = {
this._listener.onOffer(new ChannelDescription(aOffer)); this._listener.onOffer(new ChannelDescription(aOffer));
}, },
_onAnswer: function(aAnswer) { _onAnswer(aAnswer) {
if (!this._incomingEnabled) { if (!this._incomingEnabled) {
return; return;
} }
@ -750,7 +750,7 @@ TCPControlChannel.prototype = {
this._listener.onAnswer(new ChannelDescription(aAnswer)); this._listener.onAnswer(new ChannelDescription(aAnswer));
}, },
_notifyConnected: function() { _notifyConnected() {
this._pendingClose = false; this._pendingClose = false;
this._pendingCloseReason = Cr.NS_OK; this._pendingCloseReason = Cr.NS_OK;
@ -764,7 +764,7 @@ TCPControlChannel.prototype = {
this._listener.notifyConnected(); this._listener.notifyConnected();
}, },
_notifyDisconnected: function(aReason) { _notifyDisconnected(aReason) {
this._pendingOpen = false; this._pendingOpen = false;
this._pendingOffer = null; this._pendingOffer = null;
this._pendingAnswer = null; this._pendingAnswer = null;
@ -785,7 +785,7 @@ TCPControlChannel.prototype = {
this._listener.notifyDisconnected(aReason); this._listener.notifyDisconnected(aReason);
}, },
_notifyReconnected: function() { _notifyReconnected() {
if (!this._listener) { if (!this._listener) {
this._pendingReconnect = true; this._pendingReconnect = true;
return; return;
@ -796,20 +796,20 @@ TCPControlChannel.prototype = {
this._listener.notifyReconnected(); this._listener.notifyReconnected();
}, },
_closeOutgoing: function() { _closeOutgoing() {
if (this._outgoingEnabled) { if (this._outgoingEnabled) {
this._output.close(); this._output.close();
this._outgoingEnabled = false; this._outgoingEnabled = false;
} }
}, },
_closeIncoming: function() { _closeIncoming() {
if (this._incomingEnabled) { if (this._incomingEnabled) {
this._pump = null; this._pump = null;
this._input.close(); this._input.close();
this._incomingEnabled = false; this._incomingEnabled = false;
} }
}, },
_closeTransport: function() { _closeTransport() {
if (this._disconnectTimer) { if (this._disconnectTimer) {
clearTimeout(this._disconnectTimer); clearTimeout(this._disconnectTimer);
delete this._disconnectTimer; delete this._disconnectTimer;
@ -829,7 +829,7 @@ TCPControlChannel.prototype = {
this._presentationService.releaseControlChannel(this); this._presentationService.releaseControlChannel(this);
}, },
disconnect: function(aReason) { disconnect(aReason) {
DEBUG && log("TCPControlChannel - disconnect with reason: " + aReason); // jshint ignore:line DEBUG && log("TCPControlChannel - disconnect with reason: " + aReason); // jshint ignore:line
// Pending disconnect during termination procedure. // Pending disconnect during termination procedure.
@ -855,7 +855,7 @@ TCPControlChannel.prototype = {
} }
}, },
reconnect: function(aPresentationId, aUrl) { reconnect(aPresentationId, aUrl) {
DEBUG && log("TCPControlChannel - reconnect with role: " + DEBUG && log("TCPControlChannel - reconnect with role: " +
this._direction); // jshint ignore:line this._direction); // jshint ignore:line
if (this._direction != "sender") { if (this._direction != "sender") {
@ -866,12 +866,12 @@ TCPControlChannel.prototype = {
}, },
// callback from state machine // callback from state machine
sendCommand: function(command) { sendCommand(command) {
this._outgoingMsgs.push(command); this._outgoingMsgs.push(command);
this._flushOutgoing(); this._flushOutgoing();
}, },
notifyDeviceConnected: function(deviceId) { notifyDeviceConnected(deviceId) {
switch (this._direction) { switch (this._direction) {
case "receiver": case "receiver":
this._deviceInfo.id = deviceId; this._deviceInfo.id = deviceId;
@ -880,12 +880,12 @@ TCPControlChannel.prototype = {
this._notifyConnected(); this._notifyConnected();
}, },
notifyDisconnected: function(reason) { notifyDisconnected(reason) {
this._closeTransport(); this._closeTransport();
this._notifyDisconnected(reason); this._notifyDisconnected(reason);
}, },
notifyLaunch: function(presentationId, url) { notifyLaunch(presentationId, url) {
switch (this._direction) { switch (this._direction) {
case "receiver": case "receiver":
this._presentationService.onSessionRequest(this._deviceInfo, this._presentationService.onSessionRequest(this._deviceInfo,
@ -896,7 +896,7 @@ TCPControlChannel.prototype = {
} }
}, },
notifyTerminate: function(presentationId) { notifyTerminate(presentationId) {
if (!this._terminatingId) { if (!this._terminatingId) {
this._terminatingId = presentationId; this._terminatingId = presentationId;
this._presentationService.onSessionTerminate(this._deviceInfo, this._presentationService.onSessionTerminate(this._deviceInfo,
@ -925,7 +925,7 @@ TCPControlChannel.prototype = {
} }
}, },
notifyReconnect: function(presentationId, url) { notifyReconnect(presentationId, url) {
switch (this._direction) { switch (this._direction) {
case "receiver": case "receiver":
this._presentationService.onSessionReconnect(this._deviceInfo, this._presentationService.onSessionReconnect(this._deviceInfo,
@ -939,15 +939,15 @@ TCPControlChannel.prototype = {
} }
}, },
notifyOffer: function(offer) { notifyOffer(offer) {
this._onOffer(offer); this._onOffer(offer);
}, },
notifyAnswer: function(answer) { notifyAnswer(answer) {
this._onAnswer(answer); this._onAnswer(answer);
}, },
notifyIceCandidate: function(candidate) { notifyIceCandidate(candidate) {
this._listener.onIceCandidate(candidate); this._listener.onIceCandidate(candidate);
}, },

View file

@ -113,7 +113,7 @@ ReceiverStateMachine.prototype = {
if (this.state === State.CONNECTED) { if (this.state === State.CONNECTED) {
this._sendCommand({ this._sendCommand({
type: CommandType.TERMINATE, type: CommandType.TERMINATE,
presentationId: presentationId, presentationId,
}); });
} }
}, },
@ -122,7 +122,7 @@ ReceiverStateMachine.prototype = {
if (this.state === State.CONNECTED) { if (this.state === State.CONNECTED) {
this._sendCommand({ this._sendCommand({
type: CommandType.TERMINATE_ACK, type: CommandType.TERMINATE_ACK,
presentationId: presentationId, presentationId,
}); });
} }
}, },
@ -140,7 +140,7 @@ ReceiverStateMachine.prototype = {
if (this.state === State.CONNECTED) { if (this.state === State.CONNECTED) {
this._sendCommand({ this._sendCommand({
type: CommandType.ANSWER, type: CommandType.ANSWER,
answer: answer, answer,
}); });
} }
}, },
@ -149,7 +149,7 @@ ReceiverStateMachine.prototype = {
if (this.state === State.CONNECTED) { if (this.state === State.CONNECTED) {
this._sendCommand({ this._sendCommand({
type: CommandType.ICE_CANDIDATE, type: CommandType.ICE_CANDIDATE,
candidate: candidate, candidate,
}); });
} }
}, },
@ -173,7 +173,7 @@ ReceiverStateMachine.prototype = {
} else { } else {
this._sendCommand({ this._sendCommand({
type: CommandType.DISCONNECT, type: CommandType.DISCONNECT,
reason: reason reason
}); });
this.state = State.CLOSING; this.state = State.CLOSING;
this._closeReason = reason; this._closeReason = reason;

View file

@ -1,28 +1,28 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* Any copyright is dedicated to the Public Domain. /* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */ http://creativecommons.org/publicdomain/zero/1.0/ */
'use strict'; "use strict";
const { XPCOMUtils } = ChromeUtils.import('resource://gre/modules/XPCOMUtils.jsm'); const { XPCOMUtils } = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
const manager = Cc['@mozilla.org/presentation-device/manager;1'] const manager = Cc["@mozilla.org/presentation-device/manager;1"]
.getService(Ci.nsIPresentationDeviceManager); .getService(Ci.nsIPresentationDeviceManager);
var testProvider = { var testProvider = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDeviceProvider]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDeviceProvider]),
forceDiscovery: function() { forceDiscovery() {
sendAsyncMessage('force-discovery'); sendAsyncMessage("force-discovery");
}, },
listener: null, listener: null,
}; };
var testDevice = { var testDevice = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDevice]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDevice]),
establishControlChannel: function() { establishControlChannel() {
return null; return null;
}, },
disconnect: function() {}, disconnect() {},
isRequestedUrlSupported: function(requestedUrl) { isRequestedUrlSupported(requestedUrl) {
return true; return true;
}, },
id: null, id: null,
@ -33,56 +33,56 @@ var testDevice = {
var testDevice1 = { var testDevice1 = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDevice]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDevice]),
id: 'dummyid', id: "dummyid",
name: 'dummyName', name: "dummyName",
type: 'dummyType', type: "dummyType",
establishControlChannel: function(url, presentationId) { establishControlChannel(url, presentationId) {
return null; return null;
}, },
disconnect: function() {}, disconnect() {},
isRequestedUrlSupported: function(requestedUrl) { isRequestedUrlSupported(requestedUrl) {
return true; return true;
}, },
}; };
var testDevice2 = { var testDevice2 = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDevice]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDevice]),
id: 'dummyid', id: "dummyid",
name: 'dummyName', name: "dummyName",
type: 'dummyType', type: "dummyType",
establishControlChannel: function(url, presentationId) { establishControlChannel(url, presentationId) {
return null; return null;
}, },
disconnect: function() {}, disconnect() {},
isRequestedUrlSupported: function(requestedUrl) { isRequestedUrlSupported(requestedUrl) {
return true; return true;
}, },
}; };
var mockedDeviceWithoutSupportedURL = { var mockedDeviceWithoutSupportedURL = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDevice]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDevice]),
id: 'dummyid', id: "dummyid",
name: 'dummyName', name: "dummyName",
type: 'dummyType', type: "dummyType",
establishControlChannel: function(url, presentationId) { establishControlChannel(url, presentationId) {
return null; return null;
}, },
disconnect: function() {}, disconnect() {},
isRequestedUrlSupported: function(requestedUrl) { isRequestedUrlSupported(requestedUrl) {
return false; return false;
}, },
}; };
var mockedDeviceSupportHttpsURL = { var mockedDeviceSupportHttpsURL = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDevice]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDevice]),
id: 'dummyid', id: "dummyid",
name: 'dummyName', name: "dummyName",
type: 'dummyType', type: "dummyType",
establishControlChannel: function(url, presentationId) { establishControlChannel(url, presentationId) {
return null; return null;
}, },
disconnect: function() {}, disconnect() {},
isRequestedUrlSupported: function(requestedUrl) { isRequestedUrlSupported(requestedUrl) {
if (requestedUrl.includes("https://")) { if (requestedUrl.includes("https://")) {
return true; return true;
} }
@ -90,57 +90,57 @@ var mockedDeviceSupportHttpsURL = {
}, },
}; };
addMessageListener('setup', function() { addMessageListener("setup", function() {
manager.addDeviceProvider(testProvider); manager.addDeviceProvider(testProvider);
sendAsyncMessage('setup-complete'); sendAsyncMessage("setup-complete");
}); });
addMessageListener('trigger-device-add', function(device) { addMessageListener("trigger-device-add", function(device) {
testDevice.id = device.id; testDevice.id = device.id;
testDevice.name = device.name; testDevice.name = device.name;
testDevice.type = device.type; testDevice.type = device.type;
manager.addDevice(testDevice); manager.addDevice(testDevice);
}); });
addMessageListener('trigger-add-unsupport-url-device', function() { addMessageListener("trigger-add-unsupport-url-device", function() {
manager.addDevice(mockedDeviceWithoutSupportedURL); manager.addDevice(mockedDeviceWithoutSupportedURL);
}); });
addMessageListener('trigger-add-multiple-devices', function() { addMessageListener("trigger-add-multiple-devices", function() {
manager.addDevice(testDevice1); manager.addDevice(testDevice1);
manager.addDevice(testDevice2); manager.addDevice(testDevice2);
}); });
addMessageListener('trigger-add-https-devices', function() { addMessageListener("trigger-add-https-devices", function() {
manager.addDevice(mockedDeviceSupportHttpsURL); manager.addDevice(mockedDeviceSupportHttpsURL);
}); });
addMessageListener('trigger-device-update', function(device) { addMessageListener("trigger-device-update", function(device) {
testDevice.id = device.id; testDevice.id = device.id;
testDevice.name = device.name; testDevice.name = device.name;
testDevice.type = device.type; testDevice.type = device.type;
manager.updateDevice(testDevice); manager.updateDevice(testDevice);
}); });
addMessageListener('trigger-device-remove', function() { addMessageListener("trigger-device-remove", function() {
manager.removeDevice(testDevice); manager.removeDevice(testDevice);
}); });
addMessageListener('trigger-remove-unsupported-device', function() { addMessageListener("trigger-remove-unsupported-device", function() {
manager.removeDevice(mockedDeviceWithoutSupportedURL); manager.removeDevice(mockedDeviceWithoutSupportedURL);
}); });
addMessageListener('trigger-remove-multiple-devices', function() { addMessageListener("trigger-remove-multiple-devices", function() {
manager.removeDevice(testDevice1); manager.removeDevice(testDevice1);
manager.removeDevice(testDevice2); manager.removeDevice(testDevice2);
}); });
addMessageListener('trigger-remove-https-devices', function() { addMessageListener("trigger-remove-https-devices", function() {
manager.removeDevice(mockedDeviceSupportHttpsURL); manager.removeDevice(mockedDeviceSupportHttpsURL);
}); });
addMessageListener('teardown', function() { addMessageListener("teardown", function() {
manager.removeDeviceProvider(testProvider); manager.removeDeviceProvider(testProvider);
}); });

View file

@ -1,13 +1,13 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* Any copyright is dedicated to the Public Domain. /* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */ http://creativecommons.org/publicdomain/zero/1.0/ */
'use strict'; "use strict";
const Cm = Components.manager; const Cm = Components.manager;
ChromeUtils.import('resource://gre/modules/XPCOMUtils.jsm'); ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
ChromeUtils.import('resource://gre/modules/Services.jsm'); ChromeUtils.import("resource://gre/modules/Services.jsm");
ChromeUtils.import('resource://gre/modules/Timer.jsm'); ChromeUtils.import("resource://gre/modules/Timer.jsm");
const uuidGenerator = Cc["@mozilla.org/uuid-generator;1"] const uuidGenerator = Cc["@mozilla.org/uuid-generator;1"]
.getService(Ci.nsIUUIDGenerator); .getService(Ci.nsIUUIDGenerator);
@ -30,11 +30,11 @@ function registerMockedFactory(contractId, mockedClassId, mockedFactory) {
registrar.registerFactory(mockedClassId, "", contractId, mockedFactory); registrar.registerFactory(mockedClassId, "", contractId, mockedFactory);
} }
return { contractId: contractId, return { contractId,
mockedClassId: mockedClassId, mockedClassId,
mockedFactory: mockedFactory, mockedFactory,
originalClassId: originalClassId, originalClassId,
originalFactory: originalFactory }; originalFactory };
} }
function registerOriginalFactory(contractId, mockedClassId, mockedFactory, originalClassId, originalFactory) { function registerOriginalFactory(contractId, mockedClassId, mockedFactory, originalClassId, originalFactory) {
@ -45,7 +45,7 @@ function registerOriginalFactory(contractId, mockedClassId, mockedFactory, origi
} }
} }
var sessionId = 'test-session-id-' + uuidGenerator.generateUUID().toString(); var sessionId = "test-session-id-" + uuidGenerator.generateUUID().toString();
const address = Cc["@mozilla.org/supports-cstring;1"] const address = Cc["@mozilla.org/supports-cstring;1"]
.createInstance(Ci.nsISupportsCString); .createInstance(Ci.nsISupportsCString);
@ -68,7 +68,7 @@ const mockedChannelDescription = {
const mockedServerSocket = { const mockedServerSocket = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIServerSocket, QueryInterface: ChromeUtils.generateQI([Ci.nsIServerSocket,
Ci.nsIFactory]), Ci.nsIFactory]),
createInstance: function(aOuter, aIID) { createInstance(aOuter, aIID) {
if (aOuter) { if (aOuter) {
throw Cr.NS_ERROR_NO_AGGREGATION; throw Cr.NS_ERROR_NO_AGGREGATION;
} }
@ -80,20 +80,20 @@ const mockedServerSocket = {
set listener(listener) { set listener(listener) {
this._listener = listener; this._listener = listener;
}, },
init: function(port, loopbackOnly, backLog) { init(port, loopbackOnly, backLog) {
if (port != -1) { if (port != -1) {
this._port = port; this._port = port;
} else { } else {
this._port = 5678; this._port = 5678;
} }
}, },
asyncListen: function(listener) { asyncListen(listener) {
this._listener = listener; this._listener = listener;
}, },
close: function() { close() {
this._listener.onStopListening(this, Cr.NS_BINDING_ABORTED); this._listener.onStopListening(this, Cr.NS_BINDING_ABORTED);
}, },
simulateOnSocketAccepted: function(serverSocket, socketTransport) { simulateOnSocketAccepted(serverSocket, socketTransport) {
this._listener.onSocketAccepted(serverSocket, socketTransport); this._listener.onSocketAccepted(serverSocket, socketTransport);
} }
}; };
@ -110,17 +110,17 @@ const mockedControlChannel = {
get listener() { get listener() {
return this._listener; return this._listener;
}, },
sendOffer: function(offer) { sendOffer(offer) {
sendAsyncMessage('offer-sent', this._isValidSDP(offer)); sendAsyncMessage("offer-sent", this._isValidSDP(offer));
}, },
sendAnswer: function(answer) { sendAnswer(answer) {
sendAsyncMessage('answer-sent', this._isValidSDP(answer)); sendAsyncMessage("answer-sent", this._isValidSDP(answer));
if (answer.type == Ci.nsIPresentationChannelDescription.TYPE_TCP) { if (answer.type == Ci.nsIPresentationChannelDescription.TYPE_TCP) {
this._listener.QueryInterface(Ci.nsIPresentationSessionTransportCallback).notifyTransportReady(); this._listener.QueryInterface(Ci.nsIPresentationSessionTransportCallback).notifyTransportReady();
} }
}, },
_isValidSDP: function(aSDP) { _isValidSDP(aSDP) {
var isValid = false; var isValid = false;
if (aSDP.type == Ci.nsIPresentationChannelDescription.TYPE_TCP) { if (aSDP.type == Ci.nsIPresentationChannelDescription.TYPE_TCP) {
try { try {
@ -141,52 +141,52 @@ const mockedControlChannel = {
} }
return isValid; return isValid;
}, },
launch: function(presentationId, url) { launch(presentationId, url) {
sessionId = presentationId; sessionId = presentationId;
}, },
terminate: function(presentationId) { terminate(presentationId) {
sendAsyncMessage('sender-terminate', presentationId); sendAsyncMessage("sender-terminate", presentationId);
}, },
reconnect: function(presentationId, url) { reconnect(presentationId, url) {
sendAsyncMessage('start-reconnect', url); sendAsyncMessage("start-reconnect", url);
}, },
notifyReconnected: function() { notifyReconnected() {
this._listener this._listener
.QueryInterface(Ci.nsIPresentationControlChannelListener) .QueryInterface(Ci.nsIPresentationControlChannelListener)
.notifyReconnected(); .notifyReconnected();
}, },
disconnect: function(reason) { disconnect(reason) {
sendAsyncMessage('control-channel-closed', reason); sendAsyncMessage("control-channel-closed", reason);
this._listener.QueryInterface(Ci.nsIPresentationControlChannelListener).notifyDisconnected(reason); this._listener.QueryInterface(Ci.nsIPresentationControlChannelListener).notifyDisconnected(reason);
}, },
simulateReceiverReady: function() { simulateReceiverReady() {
this._listener.QueryInterface(Ci.nsIPresentationControlChannelListener).notifyReceiverReady(); this._listener.QueryInterface(Ci.nsIPresentationControlChannelListener).notifyReceiverReady();
}, },
simulateOnOffer: function() { simulateOnOffer() {
sendAsyncMessage('offer-received'); sendAsyncMessage("offer-received");
this._listener.QueryInterface(Ci.nsIPresentationControlChannelListener).onOffer(mockedChannelDescription); this._listener.QueryInterface(Ci.nsIPresentationControlChannelListener).onOffer(mockedChannelDescription);
}, },
simulateOnAnswer: function() { simulateOnAnswer() {
sendAsyncMessage('answer-received'); sendAsyncMessage("answer-received");
this._listener.QueryInterface(Ci.nsIPresentationControlChannelListener).onAnswer(mockedChannelDescription); this._listener.QueryInterface(Ci.nsIPresentationControlChannelListener).onAnswer(mockedChannelDescription);
}, },
simulateNotifyConnected: function() { simulateNotifyConnected() {
sendAsyncMessage('control-channel-opened'); sendAsyncMessage("control-channel-opened");
this._listener.QueryInterface(Ci.nsIPresentationControlChannelListener).notifyConnected(); this._listener.QueryInterface(Ci.nsIPresentationControlChannelListener).notifyConnected();
}, },
}; };
const mockedDevice = { const mockedDevice = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDevice]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDevice]),
id: 'id', id: "id",
name: 'name', name: "name",
type: 'type', type: "type",
establishControlChannel: function(url, presentationId) { establishControlChannel(url, presentationId) {
sendAsyncMessage('control-channel-established'); sendAsyncMessage("control-channel-established");
return mockedControlChannel; return mockedControlChannel;
}, },
disconnect: function() {}, disconnect() {},
isRequestedUrlSupported: function(requestedUrl) { isRequestedUrlSupported(requestedUrl) {
return true; return true;
}, },
}; };
@ -194,7 +194,7 @@ const mockedDevice = {
const mockedDevicePrompt = { const mockedDevicePrompt = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDevicePrompt, QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDevicePrompt,
Ci.nsIFactory]), Ci.nsIFactory]),
createInstance: function(aOuter, aIID) { createInstance(aOuter, aIID) {
if (aOuter) { if (aOuter) {
throw Cr.NS_ERROR_NO_AGGREGATION; throw Cr.NS_ERROR_NO_AGGREGATION;
} }
@ -206,14 +206,14 @@ const mockedDevicePrompt = {
get request() { get request() {
return this._request; return this._request;
}, },
promptDeviceSelection: function(request) { promptDeviceSelection(request) {
this._request = request; this._request = request;
sendAsyncMessage('device-prompt'); sendAsyncMessage("device-prompt");
}, },
simulateSelect: function() { simulateSelect() {
this._request.select(mockedDevice); this._request.select(mockedDevice);
}, },
simulateCancel: function(result) { simulateCancel(result) {
this._request.cancel(result); this._request.cancel(result);
} }
}; };
@ -225,7 +225,7 @@ const mockedSessionTransport = {
Ci.nsIPresentationDataChannelSessionTransportBuilder, Ci.nsIPresentationDataChannelSessionTransportBuilder,
Ci.nsIPresentationControlChannelListener, Ci.nsIPresentationControlChannelListener,
Ci.nsIFactory]), Ci.nsIFactory]),
createInstance: function(aOuter, aIID) { createInstance(aOuter, aIID) {
if (aOuter) { if (aOuter) {
throw Cr.NS_ERROR_NO_AGGREGATION; throw Cr.NS_ERROR_NO_AGGREGATION;
} }
@ -240,18 +240,18 @@ const mockedSessionTransport = {
get selfAddress() { get selfAddress() {
return this._selfAddress; return this._selfAddress;
}, },
buildTCPSenderTransport: function(transport, listener) { buildTCPSenderTransport(transport, listener) {
this._listener = listener; this._listener = listener;
this._role = Ci.nsIPresentationService.ROLE_CONTROLLER; this._role = Ci.nsIPresentationService.ROLE_CONTROLLER;
this._listener.onSessionTransport(this); this._listener.onSessionTransport(this);
this._listener = null; this._listener = null;
sendAsyncMessage('data-transport-initialized'); sendAsyncMessage("data-transport-initialized");
setTimeout(()=>{ setTimeout(() => {
this.simulateTransportReady(); this.simulateTransportReady();
}, 0); }, 0);
}, },
buildTCPReceiverTransport: function(description, listener) { buildTCPReceiverTransport(description, listener) {
this._listener = listener; this._listener = listener;
this._role = Ci.nsIPresentationService.ROLE_RECEIVER; this._role = Ci.nsIPresentationService.ROLE_RECEIVER;
@ -263,53 +263,53 @@ const mockedSessionTransport = {
port: description.QueryInterface(Ci.nsIPresentationChannelDescription).tcpPort, port: description.QueryInterface(Ci.nsIPresentationChannelDescription).tcpPort,
}; };
setTimeout(()=>{ setTimeout(() => {
this._listener.onSessionTransport(this); this._listener.onSessionTransport(this);
this._listener = null; this._listener = null;
}, 0); }, 0);
}, },
// in-process case // in-process case
buildDataChannelTransport: function(role, window, listener) { buildDataChannelTransport(role, window, listener) {
this._listener = listener; this._listener = listener;
this._role = role; this._role = role;
var hasNavigator = window ? (typeof window.navigator != "undefined") : false; var hasNavigator = window ? (typeof window.navigator != "undefined") : false;
sendAsyncMessage('check-navigator', hasNavigator); sendAsyncMessage("check-navigator", hasNavigator);
setTimeout(()=>{ setTimeout(() => {
this._listener.onSessionTransport(this); this._listener.onSessionTransport(this);
this._listener = null; this._listener = null;
this.simulateTransportReady(); this.simulateTransportReady();
}, 0); }, 0);
}, },
enableDataNotification: function() { enableDataNotification() {
sendAsyncMessage('data-transport-notification-enabled'); sendAsyncMessage("data-transport-notification-enabled");
}, },
send: function(data) { send(data) {
sendAsyncMessage('message-sent', data); sendAsyncMessage("message-sent", data);
}, },
close: function(reason) { close(reason) {
// Don't send a message after tearDown, to avoid a leak. // Don't send a message after tearDown, to avoid a leak.
if (this._callback) { if (this._callback) {
sendAsyncMessage('data-transport-closed', reason); sendAsyncMessage("data-transport-closed", reason);
this._callback.QueryInterface(Ci.nsIPresentationSessionTransportCallback).notifyTransportClosed(reason); this._callback.QueryInterface(Ci.nsIPresentationSessionTransportCallback).notifyTransportClosed(reason);
} }
}, },
simulateTransportReady: function() { simulateTransportReady() {
this._callback.QueryInterface(Ci.nsIPresentationSessionTransportCallback).notifyTransportReady(); this._callback.QueryInterface(Ci.nsIPresentationSessionTransportCallback).notifyTransportReady();
}, },
simulateIncomingMessage: function(message) { simulateIncomingMessage(message) {
this._callback.QueryInterface(Ci.nsIPresentationSessionTransportCallback).notifyData(message, false); this._callback.QueryInterface(Ci.nsIPresentationSessionTransportCallback).notifyData(message, false);
}, },
onOffer: function(aOffer) { onOffer(aOffer) {
}, },
onAnswer: function(aAnswer) { onAnswer(aAnswer) {
} }
}; };
const mockedNetworkInfo = { const mockedNetworkInfo = {
QueryInterface: ChromeUtils.generateQI([Ci.nsINetworkInfo]), QueryInterface: ChromeUtils.generateQI([Ci.nsINetworkInfo]),
getAddresses: function(ips, prefixLengths) { getAddresses(ips, prefixLengths) {
ips.value = ["127.0.0.1"]; ips.value = ["127.0.0.1"];
prefixLengths.value = [0]; prefixLengths.value = [0];
return 1; return 1;
@ -319,7 +319,7 @@ const mockedNetworkInfo = {
const mockedNetworkManager = { const mockedNetworkManager = {
QueryInterface: ChromeUtils.generateQI([Ci.nsINetworkManager, QueryInterface: ChromeUtils.generateQI([Ci.nsINetworkManager,
Ci.nsIFactory]), Ci.nsIFactory]),
createInstance: function(aOuter, aIID) { createInstance(aOuter, aIID) {
if (aOuter) { if (aOuter) {
throw Cr.NS_ERROR_NO_AGGREGATION; throw Cr.NS_ERROR_NO_AGGREGATION;
} }
@ -335,14 +335,14 @@ var requestPromise = null;
const mockedRequestUIGlue = { const mockedRequestUIGlue = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationRequestUIGlue, QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationRequestUIGlue,
Ci.nsIFactory]), Ci.nsIFactory]),
createInstance: function(aOuter, aIID) { createInstance(aOuter, aIID) {
if (aOuter) { if (aOuter) {
throw Cr.NS_ERROR_NO_AGGREGATION; throw Cr.NS_ERROR_NO_AGGREGATION;
} }
return this.QueryInterface(aIID); return this.QueryInterface(aIID);
}, },
sendRequest: function(aUrl, aSessionId) { sendRequest(aUrl, aSessionId) {
sendAsyncMessage('receiver-launching', aSessionId); sendAsyncMessage("receiver-launching", aSessionId);
return requestPromise; return requestPromise;
}, },
}; };
@ -376,7 +376,7 @@ function tearDown() {
mockedDevicePrompt.request = null; mockedDevicePrompt.request = null;
mockedSessionTransport.callback = null; mockedSessionTransport.callback = null;
var deviceManager = Cc['@mozilla.org/presentation-device/manager;1'] var deviceManager = Cc["@mozilla.org/presentation-device/manager;1"]
.getService(Ci.nsIPresentationDeviceManager); .getService(Ci.nsIPresentationDeviceManager);
deviceManager.QueryInterface(Ci.nsIPresentationDeviceListener).removeDevice(mockedDevice); deviceManager.QueryInterface(Ci.nsIPresentationDeviceListener).removeDevice(mockedDevice);
@ -387,79 +387,79 @@ function tearDown() {
data.originalFactory); data.originalFactory);
} }
sendAsyncMessage('teardown-complete'); sendAsyncMessage("teardown-complete");
} }
addMessageListener('trigger-device-add', function() { addMessageListener("trigger-device-add", function() {
var deviceManager = Cc['@mozilla.org/presentation-device/manager;1'] var deviceManager = Cc["@mozilla.org/presentation-device/manager;1"]
.getService(Ci.nsIPresentationDeviceManager); .getService(Ci.nsIPresentationDeviceManager);
deviceManager.QueryInterface(Ci.nsIPresentationDeviceListener).addDevice(mockedDevice); deviceManager.QueryInterface(Ci.nsIPresentationDeviceListener).addDevice(mockedDevice);
}); });
addMessageListener('trigger-device-prompt-select', function() { addMessageListener("trigger-device-prompt-select", function() {
mockedDevicePrompt.simulateSelect(); mockedDevicePrompt.simulateSelect();
}); });
addMessageListener('trigger-device-prompt-cancel', function(result) { addMessageListener("trigger-device-prompt-cancel", function(result) {
mockedDevicePrompt.simulateCancel(result); mockedDevicePrompt.simulateCancel(result);
}); });
addMessageListener('trigger-incoming-session-request', function(url) { addMessageListener("trigger-incoming-session-request", function(url) {
var deviceManager = Cc['@mozilla.org/presentation-device/manager;1'] var deviceManager = Cc["@mozilla.org/presentation-device/manager;1"]
.getService(Ci.nsIPresentationDeviceManager); .getService(Ci.nsIPresentationDeviceManager);
deviceManager.QueryInterface(Ci.nsIPresentationDeviceListener) deviceManager.QueryInterface(Ci.nsIPresentationDeviceListener)
.onSessionRequest(mockedDevice, url, sessionId, mockedControlChannel); .onSessionRequest(mockedDevice, url, sessionId, mockedControlChannel);
}); });
addMessageListener('trigger-incoming-terminate-request', function() { addMessageListener("trigger-incoming-terminate-request", function() {
var deviceManager = Cc['@mozilla.org/presentation-device/manager;1'] var deviceManager = Cc["@mozilla.org/presentation-device/manager;1"]
.getService(Ci.nsIPresentationDeviceManager); .getService(Ci.nsIPresentationDeviceManager);
deviceManager.QueryInterface(Ci.nsIPresentationDeviceListener) deviceManager.QueryInterface(Ci.nsIPresentationDeviceListener)
.onTerminateRequest(mockedDevice, sessionId, mockedControlChannel, true); .onTerminateRequest(mockedDevice, sessionId, mockedControlChannel, true);
}); });
addMessageListener('trigger-reconnected-acked', function(url) { addMessageListener("trigger-reconnected-acked", function(url) {
mockedControlChannel.notifyReconnected(); mockedControlChannel.notifyReconnected();
}); });
addMessageListener('trigger-incoming-offer', function() { addMessageListener("trigger-incoming-offer", function() {
mockedControlChannel.simulateOnOffer(); mockedControlChannel.simulateOnOffer();
}); });
addMessageListener('trigger-incoming-answer', function() { addMessageListener("trigger-incoming-answer", function() {
mockedControlChannel.simulateOnAnswer(); mockedControlChannel.simulateOnAnswer();
}); });
addMessageListener('trigger-incoming-transport', function() { addMessageListener("trigger-incoming-transport", function() {
mockedServerSocket.simulateOnSocketAccepted(mockedServerSocket, mockedSocketTransport); mockedServerSocket.simulateOnSocketAccepted(mockedServerSocket, mockedSocketTransport);
}); });
addMessageListener('trigger-control-channel-open', function(reason) { addMessageListener("trigger-control-channel-open", function(reason) {
mockedControlChannel.simulateNotifyConnected(); mockedControlChannel.simulateNotifyConnected();
}); });
addMessageListener('trigger-control-channel-close', function(reason) { addMessageListener("trigger-control-channel-close", function(reason) {
mockedControlChannel.disconnect(reason); mockedControlChannel.disconnect(reason);
}); });
addMessageListener('trigger-data-transport-close', function(reason) { addMessageListener("trigger-data-transport-close", function(reason) {
mockedSessionTransport.close(reason); mockedSessionTransport.close(reason);
}); });
addMessageListener('trigger-incoming-message', function(message) { addMessageListener("trigger-incoming-message", function(message) {
mockedSessionTransport.simulateIncomingMessage(message); mockedSessionTransport.simulateIncomingMessage(message);
}); });
addMessageListener('teardown', function() { addMessageListener("teardown", function() {
tearDown(); tearDown();
}); });
var controlChannelListener; var controlChannelListener;
addMessageListener('save-control-channel-listener', function() { addMessageListener("save-control-channel-listener", function() {
controlChannelListener = mockedControlChannel.listener; controlChannelListener = mockedControlChannel.listener;
}); });
addMessageListener('restore-control-channel-listener', function(message) { addMessageListener("restore-control-channel-listener", function(message) {
mockedControlChannel.listener = controlChannelListener; mockedControlChannel.listener = controlChannelListener;
controlChannelListener = null; controlChannelListener = null;
}); });
@ -470,4 +470,4 @@ obs.addObserver(function observer(aSubject, aTopic, aData) {
obs.removeObserver(observer, aTopic); obs.removeObserver(observer, aTopic);
requestPromise = aSubject; requestPromise = aSubject;
}, 'setup-request-promise'); }, "setup-request-promise");

View file

@ -3,12 +3,12 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this file, * 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/. */ * You can obtain one at http://mozilla.org/MPL/2.0/. */
'use strict'; "use strict";
const Cm = Components.manager; const Cm = Components.manager;
ChromeUtils.import('resource://gre/modules/XPCOMUtils.jsm'); ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
ChromeUtils.import('resource://gre/modules/Services.jsm'); ChromeUtils.import("resource://gre/modules/Services.jsm");
const uuidGenerator = Cc["@mozilla.org/uuid-generator;1"] const uuidGenerator = Cc["@mozilla.org/uuid-generator;1"]
.getService(Ci.nsIUUIDGenerator); .getService(Ci.nsIUUIDGenerator);
@ -27,42 +27,42 @@ const mockControlChannelOfSender = {
set listener(listener) { set listener(listener) {
// PresentationControllingInfo::SetControlChannel // PresentationControllingInfo::SetControlChannel
if (listener) { if (listener) {
debug('set listener for mockControlChannelOfSender without null'); debug("set listener for mockControlChannelOfSender without null");
} else { } else {
debug('set listener for mockControlChannelOfSender with null'); debug("set listener for mockControlChannelOfSender with null");
} }
this._listener = listener; this._listener = listener;
}, },
get listener() { get listener() {
return this._listener; return this._listener;
}, },
notifyConnected: function() { notifyConnected() {
// send offer after notifyConnected immediately // send offer after notifyConnected immediately
this._listener this._listener
.QueryInterface(Ci.nsIPresentationControlChannelListener) .QueryInterface(Ci.nsIPresentationControlChannelListener)
.notifyConnected(); .notifyConnected();
}, },
notifyReconnected: function() { notifyReconnected() {
// send offer after notifyOpened immediately // send offer after notifyOpened immediately
this._listener this._listener
.QueryInterface(Ci.nsIPresentationControlChannelListener) .QueryInterface(Ci.nsIPresentationControlChannelListener)
.notifyReconnected(); .notifyReconnected();
}, },
sendOffer: function(offer) { sendOffer(offer) {
Services.tm.dispatchToMainThread(() => { Services.tm.dispatchToMainThread(() => {
mockControlChannelOfReceiver.onOffer(offer); mockControlChannelOfReceiver.onOffer(offer);
}); });
}, },
onAnswer: function(answer) { onAnswer(answer) {
this._listener this._listener
.QueryInterface(Ci.nsIPresentationControlChannelListener) .QueryInterface(Ci.nsIPresentationControlChannelListener)
.onAnswer(answer); .onAnswer(answer);
}, },
launch: function(presentationId, url) { launch(presentationId, url) {
sessionId = presentationId; sessionId = presentationId;
sendAsyncMessage('sender-launch', url); sendAsyncMessage("sender-launch", url);
}, },
disconnect: function(reason) { disconnect(reason) {
if (!this._listener) { if (!this._listener) {
return; return;
} }
@ -71,16 +71,16 @@ const mockControlChannelOfSender = {
.notifyDisconnected(reason); .notifyDisconnected(reason);
mockControlChannelOfReceiver.disconnect(); mockControlChannelOfReceiver.disconnect();
}, },
terminate: function(presentationId) { terminate(presentationId) {
sendAsyncMessage('sender-terminate'); sendAsyncMessage("sender-terminate");
}, },
reconnect: function(presentationId, url) { reconnect(presentationId, url) {
sendAsyncMessage('start-reconnect', url); sendAsyncMessage("start-reconnect", url);
}, },
sendIceCandidate: function(candidate) { sendIceCandidate(candidate) {
mockControlChannelOfReceiver.notifyIceCandidate(candidate); mockControlChannelOfReceiver.notifyIceCandidate(candidate);
}, },
notifyIceCandidate: function(candidate) { notifyIceCandidate(candidate) {
if (!this._listener) { if (!this._listener) {
return; return;
} }
@ -97,9 +97,9 @@ const mockControlChannelOfReceiver = {
set listener(listener) { set listener(listener) {
// PresentationPresentingInfo::SetControlChannel // PresentationPresentingInfo::SetControlChannel
if (listener) { if (listener) {
debug('set listener for mockControlChannelOfReceiver without null'); debug("set listener for mockControlChannelOfReceiver without null");
} else { } else {
debug('set listener for mockControlChannelOfReceiver with null'); debug("set listener for mockControlChannelOfReceiver with null");
} }
this._listener = listener; this._listener = listener;
@ -111,7 +111,7 @@ const mockControlChannelOfReceiver = {
get listener() { get listener() {
return this._listener; return this._listener;
}, },
notifyConnected: function() { notifyConnected() {
// do nothing // do nothing
if (!this._listener) { if (!this._listener) {
this._pendingOpened = true; this._pendingOpened = true;
@ -121,17 +121,17 @@ const mockControlChannelOfReceiver = {
.QueryInterface(Ci.nsIPresentationControlChannelListener) .QueryInterface(Ci.nsIPresentationControlChannelListener)
.notifyConnected(); .notifyConnected();
}, },
onOffer: function(offer) { onOffer(offer) {
this._listener this._listener
.QueryInterface(Ci.nsIPresentationControlChannelListener) .QueryInterface(Ci.nsIPresentationControlChannelListener)
.onOffer(offer); .onOffer(offer);
}, },
sendAnswer: function(answer) { sendAnswer(answer) {
Services.tm.dispatchToMainThread(() => { Services.tm.dispatchToMainThread(() => {
mockControlChannelOfSender.onAnswer(answer); mockControlChannelOfSender.onAnswer(answer);
}); });
}, },
disconnect: function(reason) { disconnect(reason) {
if (!this._listener) { if (!this._listener) {
return; return;
} }
@ -139,14 +139,14 @@ const mockControlChannelOfReceiver = {
this._listener this._listener
.QueryInterface(Ci.nsIPresentationControlChannelListener) .QueryInterface(Ci.nsIPresentationControlChannelListener)
.notifyDisconnected(reason); .notifyDisconnected(reason);
sendAsyncMessage('control-channel-receiver-closed', reason); sendAsyncMessage("control-channel-receiver-closed", reason);
}, },
terminate: function(presentaionId) { terminate(presentaionId) {
}, },
sendIceCandidate: function(candidate) { sendIceCandidate(candidate) {
mockControlChannelOfReceiver.notifyIceCandidate(candidate); mockControlChannelOfReceiver.notifyIceCandidate(candidate);
}, },
notifyIceCandidate: function(candidate) { notifyIceCandidate(candidate) {
if (!this._listener) { if (!this._listener) {
return; return;
} }
@ -159,20 +159,20 @@ const mockControlChannelOfReceiver = {
const mockDevice = { const mockDevice = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDevice]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDevice]),
id: 'id', id: "id",
name: 'name', name: "name",
type: 'type', type: "type",
establishControlChannel: function(url, presentationId) { establishControlChannel(url, presentationId) {
if (triggerControlChannelError) { if (triggerControlChannelError) {
throw Cr.NS_ERROR_FAILURE; throw Cr.NS_ERROR_FAILURE;
} }
sendAsyncMessage('control-channel-established'); sendAsyncMessage("control-channel-established");
return mockControlChannelOfSender; return mockControlChannelOfSender;
}, },
disconnect: function() { disconnect() {
sendAsyncMessage('device-disconnected'); sendAsyncMessage("device-disconnected");
}, },
isRequestedUrlSupported: function(requestedUrl) { isRequestedUrlSupported(requestedUrl) {
return true; return true;
}, },
}; };
@ -180,7 +180,7 @@ const mockDevice = {
const mockDevicePrompt = { const mockDevicePrompt = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDevicePrompt, QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDevicePrompt,
Ci.nsIFactory]), Ci.nsIFactory]),
createInstance: function(aOuter, aIID) { createInstance(aOuter, aIID) {
if (aOuter) { if (aOuter) {
throw Cr.NS_ERROR_NO_AGGREGATION; throw Cr.NS_ERROR_NO_AGGREGATION;
} }
@ -192,14 +192,14 @@ const mockDevicePrompt = {
get request() { get request() {
return this._request; return this._request;
}, },
promptDeviceSelection: function(request) { promptDeviceSelection(request) {
this._request = request; this._request = request;
sendAsyncMessage('device-prompt'); sendAsyncMessage("device-prompt");
}, },
simulateSelect: function() { simulateSelect() {
this._request.select(mockDevice); this._request.select(mockDevice);
}, },
simulateCancel: function() { simulateCancel() {
this._request.cancel(); this._request.cancel();
} }
}; };
@ -208,18 +208,18 @@ const mockRequestUIGlue = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationRequestUIGlue, QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationRequestUIGlue,
Ci.nsIFactory]), Ci.nsIFactory]),
set promise(aPromise) { set promise(aPromise) {
this._promise = aPromise this._promise = aPromise;
}, },
get promise() { get promise() {
return this._promise; return this._promise;
}, },
createInstance: function(aOuter, aIID) { createInstance(aOuter, aIID) {
if (aOuter) { if (aOuter) {
throw Cr.NS_ERROR_NO_AGGREGATION; throw Cr.NS_ERROR_NO_AGGREGATION;
} }
return this.QueryInterface(aIID); return this.QueryInterface(aIID);
}, },
sendRequest: function(aUrl, aSessionId) { sendRequest(aUrl, aSessionId) {
return this.promise; return this.promise;
}, },
}; };
@ -244,11 +244,11 @@ function initMockAndListener() {
registrar.registerFactory(mockClassId, "", contractId, mockFactory); registrar.registerFactory(mockClassId, "", contractId, mockFactory);
} }
return { contractId: contractId, return { contractId,
mockClassId: mockClassId, mockClassId,
mockFactory: mockFactory, mockFactory,
originalClassId: originalClassId, originalClassId,
originalFactory: originalFactory }; originalFactory };
} }
// Register mock factories. // Register mock factories.
const uuidGenerator = Cc["@mozilla.org/uuid-generator;1"] const uuidGenerator = Cc["@mozilla.org/uuid-generator;1"]
@ -260,22 +260,22 @@ function initMockAndListener() {
uuidGenerator.generateUUID(), uuidGenerator.generateUUID(),
mockRequestUIGlue)); mockRequestUIGlue));
addMessageListener('trigger-device-add', function() { addMessageListener("trigger-device-add", function() {
debug('Got message: trigger-device-add'); debug("Got message: trigger-device-add");
var deviceManager = Cc['@mozilla.org/presentation-device/manager;1'] var deviceManager = Cc["@mozilla.org/presentation-device/manager;1"]
.getService(Ci.nsIPresentationDeviceManager); .getService(Ci.nsIPresentationDeviceManager);
deviceManager.QueryInterface(Ci.nsIPresentationDeviceListener) deviceManager.QueryInterface(Ci.nsIPresentationDeviceListener)
.addDevice(mockDevice); .addDevice(mockDevice);
}); });
addMessageListener('trigger-device-prompt-select', function() { addMessageListener("trigger-device-prompt-select", function() {
debug('Got message: trigger-device-prompt-select'); debug("Got message: trigger-device-prompt-select");
mockDevicePrompt.simulateSelect(); mockDevicePrompt.simulateSelect();
}); });
addMessageListener('trigger-on-session-request', function(url) { addMessageListener("trigger-on-session-request", function(url) {
debug('Got message: trigger-on-session-request'); debug("Got message: trigger-on-session-request");
var deviceManager = Cc['@mozilla.org/presentation-device/manager;1'] var deviceManager = Cc["@mozilla.org/presentation-device/manager;1"]
.getService(Ci.nsIPresentationDeviceManager); .getService(Ci.nsIPresentationDeviceManager);
deviceManager.QueryInterface(Ci.nsIPresentationDeviceListener) deviceManager.QueryInterface(Ci.nsIPresentationDeviceListener)
.onSessionRequest(mockDevice, .onSessionRequest(mockDevice,
@ -284,9 +284,9 @@ function initMockAndListener() {
mockControlChannelOfReceiver); mockControlChannelOfReceiver);
}); });
addMessageListener('trigger-on-terminate-request', function() { addMessageListener("trigger-on-terminate-request", function() {
debug('Got message: trigger-on-terminate-request'); debug("Got message: trigger-on-terminate-request");
var deviceManager = Cc['@mozilla.org/presentation-device/manager;1'] var deviceManager = Cc["@mozilla.org/presentation-device/manager;1"]
.getService(Ci.nsIPresentationDeviceManager); .getService(Ci.nsIPresentationDeviceManager);
deviceManager.QueryInterface(Ci.nsIPresentationDeviceListener) deviceManager.QueryInterface(Ci.nsIPresentationDeviceListener)
.onTerminateRequest(mockDevice, .onTerminateRequest(mockDevice,
@ -295,21 +295,21 @@ function initMockAndListener() {
false); false);
}); });
addMessageListener('trigger-control-channel-open', function(reason) { addMessageListener("trigger-control-channel-open", function(reason) {
debug('Got message: trigger-control-channel-open'); debug("Got message: trigger-control-channel-open");
mockControlChannelOfSender.notifyConnected(); mockControlChannelOfSender.notifyConnected();
mockControlChannelOfReceiver.notifyConnected(); mockControlChannelOfReceiver.notifyConnected();
}); });
addMessageListener('trigger-control-channel-error', function(reason) { addMessageListener("trigger-control-channel-error", function(reason) {
debug('Got message: trigger-control-channel-open'); debug("Got message: trigger-control-channel-open");
triggerControlChannelError = true; triggerControlChannelError = true;
}); });
addMessageListener('trigger-reconnected-acked', function(url) { addMessageListener("trigger-reconnected-acked", function(url) {
debug('Got message: trigger-reconnected-acked'); debug("Got message: trigger-reconnected-acked");
mockControlChannelOfSender.notifyReconnected(); mockControlChannelOfSender.notifyReconnected();
var deviceManager = Cc['@mozilla.org/presentation-device/manager;1'] var deviceManager = Cc["@mozilla.org/presentation-device/manager;1"]
.getService(Ci.nsIPresentationDeviceManager); .getService(Ci.nsIPresentationDeviceManager);
deviceManager.QueryInterface(Ci.nsIPresentationDeviceListener) deviceManager.QueryInterface(Ci.nsIPresentationDeviceListener)
.onReconnectRequest(mockDevice, .onReconnectRequest(mockDevice,
@ -319,20 +319,20 @@ function initMockAndListener() {
}); });
// Used to call sendAsyncMessage in chrome script from receiver. // Used to call sendAsyncMessage in chrome script from receiver.
addMessageListener('forward-command', function(command_data) { addMessageListener("forward-command", function(command_data) {
let command = JSON.parse(command_data); let command = JSON.parse(command_data);
sendAsyncMessage(command.name, command.data); sendAsyncMessage(command.name, command.data);
}); });
addMessageListener('teardown', teardown); addMessageListener("teardown", teardown);
var obs = Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService); var obs = Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService);
obs.addObserver(function setupRequestPromiseHandler(aSubject, aTopic, aData) { obs.addObserver(function setupRequestPromiseHandler(aSubject, aTopic, aData) {
debug('Got observer: setup-request-promise'); debug("Got observer: setup-request-promise");
obs.removeObserver(setupRequestPromiseHandler, aTopic); obs.removeObserver(setupRequestPromiseHandler, aTopic);
mockRequestUIGlue.promise = aSubject; mockRequestUIGlue.promise = aSubject;
sendAsyncMessage('promise-setup-ready'); sendAsyncMessage("promise-setup-ready");
}, 'setup-request-promise'); }, "setup-request-promise");
} }
function teardown() { function teardown() {
@ -350,7 +350,7 @@ function teardown() {
mockControlChannelOfReceiver.listener = null; mockControlChannelOfReceiver.listener = null;
mockDevicePrompt.request = null; mockDevicePrompt.request = null;
var deviceManager = Cc['@mozilla.org/presentation-device/manager;1'] var deviceManager = Cc["@mozilla.org/presentation-device/manager;1"]
.getService(Ci.nsIPresentationDeviceManager); .getService(Ci.nsIPresentationDeviceManager);
deviceManager.QueryInterface(Ci.nsIPresentationDeviceListener) deviceManager.QueryInterface(Ci.nsIPresentationDeviceListener)
.removeDevice(mockDevice); .removeDevice(mockDevice);
@ -360,7 +360,7 @@ function teardown() {
data.mockFactory, data.originalClassId, data.mockFactory, data.originalClassId,
data.originalFactory); data.originalFactory);
} }
sendAsyncMessage('teardown-complete'); sendAsyncMessage("teardown-complete");
} }
initMockAndListener(); initMockAndListener();

View file

@ -12,10 +12,10 @@ function loadPrivilegedScriptTest() {
*/ */
function sendMessage(type, data) { function sendMessage(type, data) {
if (typeof port == "undefined") { if (typeof port == "undefined") {
sendAsyncMessage(type, {'data': data}); sendAsyncMessage(type, {"data": data});
} else { } else {
port.postMessage({'type': type, port.postMessage({"type": type,
'data': data "data": data
}); });
} }
} }
@ -26,7 +26,7 @@ function loadPrivilegedScriptTest() {
* are exposed to this script. * are exposed to this script.
*/ */
port.onmessage = (e) => { port.onmessage = (e) => {
var type = e.data['type']; var type = e.data.type;
if (!handlers.hasOwnProperty(type)) { if (!handlers.hasOwnProperty(type)) {
return; return;
} }
@ -55,7 +55,7 @@ function loadPrivilegedScriptTest() {
const Cm = Components.manager; const Cm = Components.manager;
const mockedChannelDescription = { const mockedChannelDescription = {
QueryInterface : function (iid) { QueryInterface(iid) {
const interfaces = [Ci.nsIPresentationChannelDescription]; const interfaces = [Ci.nsIPresentationChannelDescription];
if (!interfaces.some(v => iid.equals(v))) { if (!interfaces.some(v => iid.equals(v))) {
@ -83,7 +83,7 @@ function loadPrivilegedScriptTest() {
} }
const mockedSessionTransport = { const mockedSessionTransport = {
QueryInterface : function (iid) { QueryInterface(iid) {
const interfaces = [Ci.nsIPresentationSessionTransport, const interfaces = [Ci.nsIPresentationSessionTransport,
Ci.nsIPresentationDataChannelSessionTransportBuilder, Ci.nsIPresentationDataChannelSessionTransportBuilder,
Ci.nsIFactory]; Ci.nsIFactory];
@ -93,7 +93,7 @@ function loadPrivilegedScriptTest() {
} }
return this; return this;
}, },
createInstance: function(aOuter, aIID) { createInstance(aOuter, aIID) {
if (aOuter) { if (aOuter) {
throw Cr.NS_ERROR_NO_AGGREGATION; throw Cr.NS_ERROR_NO_AGGREGATION;
} }
@ -106,45 +106,45 @@ function loadPrivilegedScriptTest() {
return this._callback; return this._callback;
}, },
/* OOP case */ /* OOP case */
buildDataChannelTransport: function(role, window, listener) { buildDataChannelTransport(role, window, listener) {
dump("PresentationSessionFrameScript: build data channel transport\n"); dump("PresentationSessionFrameScript: build data channel transport\n");
this._listener = listener; this._listener = listener;
this._role = role; this._role = role;
var hasNavigator = window ? (typeof window.navigator != "undefined") : false; var hasNavigator = window ? (typeof window.navigator != "undefined") : false;
sendMessage('check-navigator', hasNavigator); sendMessage("check-navigator", hasNavigator);
if (this._role == Ci.nsIPresentationService.ROLE_CONTROLLER) { if (this._role == Ci.nsIPresentationService.ROLE_CONTROLLER) {
this._listener.sendOffer(mockedChannelDescription); this._listener.sendOffer(mockedChannelDescription);
} }
}, },
enableDataNotification: function() { enableDataNotification() {
sendMessage('data-transport-notification-enabled'); sendMessage("data-transport-notification-enabled");
}, },
send: function(data) { send(data) {
sendMessage('message-sent', data); sendMessage("message-sent", data);
}, },
close: function(reason) { close(reason) {
sendMessage('data-transport-closed', reason); sendMessage("data-transport-closed", reason);
this._callback.QueryInterface(Ci.nsIPresentationSessionTransportCallback).notifyTransportClosed(reason); this._callback.QueryInterface(Ci.nsIPresentationSessionTransportCallback).notifyTransportClosed(reason);
this._callback = null; this._callback = null;
}, },
simulateTransportReady: function() { simulateTransportReady() {
this._callback.QueryInterface(Ci.nsIPresentationSessionTransportCallback).notifyTransportReady(); this._callback.QueryInterface(Ci.nsIPresentationSessionTransportCallback).notifyTransportReady();
}, },
simulateIncomingMessage: function(message) { simulateIncomingMessage(message) {
this._callback.QueryInterface(Ci.nsIPresentationSessionTransportCallback).notifyData(message, false); this._callback.QueryInterface(Ci.nsIPresentationSessionTransportCallback).notifyData(message, false);
}, },
onOffer: function(aOffer) { onOffer(aOffer) {
this._listener.sendAnswer(mockedChannelDescription); this._listener.sendAnswer(mockedChannelDescription);
this._onSessionTransport(); this._onSessionTransport();
}, },
onAnswer: function(aAnswer) { onAnswer(aAnswer) {
this._onSessionTransport(); this._onSessionTransport();
}, },
_onSessionTransport: function() { _onSessionTransport() {
setTimeout(()=>{ setTimeout(() => {
this._listener.onSessionTransport(this); this._listener.onSessionTransport(this);
this.simulateTransportReady(); this.simulateTransportReady();
this._listener = null; this._listener = null;
@ -184,11 +184,11 @@ function loadPrivilegedScriptTest() {
registrar.registerFactory(mockedClassId, "", contractId, mockedFactory); registrar.registerFactory(mockedClassId, "", contractId, mockedFactory);
} }
return { contractId: contractId, return { contractId,
mockedClassId: mockedClassId, mockedClassId,
mockedFactory: mockedFactory, mockedFactory,
originalClassId: originalClassId, originalClassId,
originalFactory: originalFactory }; originalFactory };
} }
function registerOriginalFactory(contractId, mockedClassId, mockedFactory, originalClassId, originalFactory) { function registerOriginalFactory(contractId, mockedClassId, mockedFactory, originalClassId, originalFactory) {
@ -207,23 +207,23 @@ function loadPrivilegedScriptTest() {
uuidGenerator.generateUUID(), uuidGenerator.generateUUID(),
mockedSessionTransport)); mockedSessionTransport));
addMessageListener('trigger-incoming-message', function(event) { addMessageListener("trigger-incoming-message", function(event) {
mockedSessionTransport.simulateIncomingMessage(event.data.data); mockedSessionTransport.simulateIncomingMessage(event.data.data);
}); });
addMessageListener('teardown', ()=>tearDown()); addMessageListener("teardown", () => tearDown());
} }
// Exposed to the caller of |loadPrivilegedScript| // Exposed to the caller of |loadPrivilegedScript|
var contentScript = { var contentScript = {
handlers: {}, handlers: {},
addMessageListener: function(message, handler) { addMessageListener(message, handler) {
if (this.handlers.hasOwnProperty(message)) { if (this.handlers.hasOwnProperty(message)) {
this.handlers[message].push(handler); this.handlers[message].push(handler);
} else { } else {
this.handlers[message] = [handler]; this.handlers[message] = [handler];
} }
}, },
removeMessageListener: function(message, handler) { removeMessageListener(message, handler) {
if (!handler || !this.handlers.hasOwnProperty(message)) { if (!handler || !this.handlers.hasOwnProperty(message)) {
return; return;
} }
@ -232,12 +232,12 @@ var contentScript = {
this.handlers[message].splice(index, 1); this.handlers[message].splice(index, 1);
} }
}, },
sendAsyncMessage: function(message, data) { sendAsyncMessage(message, data) {
port.postMessage({'type': message, port.postMessage({"type": message,
'data': data "data": data
}); });
} }
} };
if (!SpecialPowers.isMainProcess()) { if (!SpecialPowers.isMainProcess()) {
var port; var port;
@ -248,11 +248,11 @@ if (!SpecialPowers.isMainProcess()) {
} }
port.onmessage = (e) => { port.onmessage = (e) => {
var type = e.data['type']; var type = e.data.type;
if (!contentScript.handlers.hasOwnProperty(type)) { if (!contentScript.handlers.hasOwnProperty(type)) {
return; return;
} }
var args = [e.data['data']]; var args = [e.data.data];
contentScript.handlers[type].forEach(handler => handler.apply(null, args)); contentScript.handlers[type].forEach(handler => handler.apply(null, args));
}; };
} }

View file

@ -13,26 +13,26 @@
function is(a, b, msg) { function is(a, b, msg) {
if (a === b) { if (a === b) {
alert('OK ' + msg); alert("OK " + msg);
} else { } else {
alert('KO ' + msg + ' | reason: ' + a + ' != ' + b); alert("KO " + msg + " | reason: " + a + " != " + b);
} }
} }
function ok(a, msg) { function ok(a, msg) {
alert((a ? 'OK ' : 'KO ') + msg); alert((a ? "OK " : "KO ") + msg);
} }
function info(msg) { function info(msg) {
alert('INFO ' + msg); alert("INFO " + msg);
} }
function command(name, data) { function command(name, data) {
alert('COMMAND ' + JSON.stringify({name: name, data: data})); alert("COMMAND " + JSON.stringify({name, data}));
} }
function finish() { function finish() {
alert('DONE'); alert("DONE");
} }
var connection; var connection;
@ -51,7 +51,7 @@ function is_same_buffer(recv_data, expect_data) {
for (let i = 0; i < recv_dataview.length; i++) { for (let i = 0; i < recv_dataview.length; i++) {
if (recv_dataview[i] != expected_dataview[i]) { if (recv_dataview[i] != expected_dataview[i]) {
info('discover byte differenct at ' + i); info("discover byte differenct at " + i);
return false; return false;
} }
} }
@ -60,7 +60,7 @@ function is_same_buffer(recv_data, expect_data) {
function testConnectionAvailable() { function testConnectionAvailable() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('Receiver: --- testConnectionAvailable ---'); info("Receiver: --- testConnectionAvailable ---");
ok(navigator.presentation, "Receiver: navigator.presentation should be available."); ok(navigator.presentation, "Receiver: navigator.presentation should be available.");
ok(navigator.presentation.receiver, "Receiver: navigator.presentation.receiver should be available."); ok(navigator.presentation.receiver, "Receiver: navigator.presentation.receiver should be available.");
is(navigator.presentation.defaultRequest, null, "Receiver: navigator.presentation.defaultRequest should be null."); is(navigator.presentation.defaultRequest, null, "Receiver: navigator.presentation.defaultRequest should be null.");
@ -83,10 +83,10 @@ function testConnectionAvailable() {
function testConnectionReady() { function testConnectionReady() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('Receiver: --- testConnectionReady ---'); info("Receiver: --- testConnectionReady ---");
connection.onconnect = function() { connection.onconnect = function() {
connection.onconnect = null; connection.onconnect = null;
ok(false, "Should not get |onconnect| event.") ok(false, "Should not get |onconnect| event.");
aReject(); aReject();
}; };
if (connection.state === "connected") { if (connection.state === "connected") {
@ -99,27 +99,27 @@ function testConnectionReady() {
function testIncomingMessage() { function testIncomingMessage() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('Receiver: --- testIncomingMessage ---'); info("Receiver: --- testIncomingMessage ---");
connection.addEventListener('message', function(evt) { connection.addEventListener("message", function(evt) {
let msg = evt.data; let msg = evt.data;
is(msg, 'msg-sender-to-receiver', 'Receiver: Receiver should receive message from sender.'); is(msg, "msg-sender-to-receiver", "Receiver: Receiver should receive message from sender.");
command('forward-command', JSON.stringify({ name: 'message-from-sender-received' })); command("forward-command", JSON.stringify({ name: "message-from-sender-received" }));
aResolve(); aResolve();
}, {once: true}); }, {once: true});
command('forward-command', JSON.stringify({ name: 'trigger-message-from-sender' })); command("forward-command", JSON.stringify({ name: "trigger-message-from-sender" }));
}); });
} }
function testSendMessage() { function testSendMessage() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
window.addEventListener('hashchange', function hashchangeHandler(evt) { window.addEventListener("hashchange", function hashchangeHandler(evt) {
var message = JSON.parse(decodeURIComponent(window.location.hash.substring(1))); var message = JSON.parse(decodeURIComponent(window.location.hash.substring(1)));
if (message.type === 'trigger-message-from-receiver') { if (message.type === "trigger-message-from-receiver") {
info('Receiver: --- testSendMessage ---'); info("Receiver: --- testSendMessage ---");
connection.send('msg-receiver-to-sender'); connection.send("msg-receiver-to-sender");
} }
if (message.type === 'message-from-receiver-received') { if (message.type === "message-from-receiver-received") {
window.removeEventListener('hashchange', hashchangeHandler); window.removeEventListener("hashchange", hashchangeHandler);
aResolve(); aResolve();
} }
}); });
@ -128,11 +128,11 @@ function testSendMessage() {
function testIncomingBlobMessage() { function testIncomingBlobMessage() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('Receiver: --- testIncomingBlobMessage ---'); info("Receiver: --- testIncomingBlobMessage ---");
connection.send('testIncomingBlobMessage'); connection.send("testIncomingBlobMessage");
connection.addEventListener('message', function(evt) { connection.addEventListener("message", function(evt) {
let recvData= String.fromCharCode.apply(null, new Uint8Array(evt.data)); let recvData = String.fromCharCode.apply(null, new Uint8Array(evt.data));
is(recvData, "Hello World", 'expected same string data'); is(recvData, "Hello World", "expected same string data");
aResolve(); aResolve();
}, {once: true}); }, {once: true});
}); });
@ -140,29 +140,29 @@ function testIncomingBlobMessage() {
function testConnectionClosed() { function testConnectionClosed() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('Receiver: --- testConnectionClosed ---'); info("Receiver: --- testConnectionClosed ---");
connection.onclose = function() { connection.onclose = function() {
connection.onclose = null; connection.onclose = null;
is(connection.state, "closed", "Receiver: Connection should be closed."); is(connection.state, "closed", "Receiver: Connection should be closed.");
command('forward-command', JSON.stringify({ name: 'receiver-closed' })); command("forward-command", JSON.stringify({ name: "receiver-closed" }));
aResolve(); aResolve();
}; };
command('forward-command', JSON.stringify({ name: 'ready-to-close' })); command("forward-command", JSON.stringify({ name: "ready-to-close" }));
}); });
} }
function testReconnectConnection() { function testReconnectConnection() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('Receiver: --- testReconnectConnection ---'); info("Receiver: --- testReconnectConnection ---");
window.addEventListener('hashchange', function hashchangeHandler(evt) { window.addEventListener("hashchange", function hashchangeHandler(evt) {
var message = JSON.parse(decodeURIComponent(window.location.hash.substring(1))); var message = JSON.parse(decodeURIComponent(window.location.hash.substring(1)));
if (message.type === 'prepare-for-reconnect') { if (message.type === "prepare-for-reconnect") {
command('forward-command', JSON.stringify({ name: 'ready-to-reconnect' })); command("forward-command", JSON.stringify({ name: "ready-to-reconnect" }));
} }
}); });
connection.onconnect = function() { connection.onconnect = function() {
connection.onconnect = null; connection.onconnect = null;
ok(true, "The connection is reconnected.") ok(true, "The connection is reconnected.");
aResolve(); aResolve();
}; };
}); });
@ -170,10 +170,10 @@ function testReconnectConnection() {
function testIncomingArrayBuffer() { function testIncomingArrayBuffer() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('Receiver: --- testIncomingArrayBuffer ---'); info("Receiver: --- testIncomingArrayBuffer ---");
connection.binaryType = "blob"; connection.binaryType = "blob";
connection.send('testIncomingArrayBuffer'); connection.send("testIncomingArrayBuffer");
connection.addEventListener('message', function(evt) { connection.addEventListener("message", function(evt) {
var fileReader = new FileReader(); var fileReader = new FileReader();
fileReader.onload = function() { fileReader.onload = function() {
ok(is_same_buffer(DATA_ARRAY_BUFFER, this.result), "expected same buffer data"); ok(is_same_buffer(DATA_ARRAY_BUFFER, this.result), "expected same buffer data");
@ -186,10 +186,10 @@ function testIncomingArrayBuffer() {
function testIncomingArrayBufferView() { function testIncomingArrayBufferView() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('Receiver: --- testIncomingArrayBufferView ---'); info("Receiver: --- testIncomingArrayBufferView ---");
connection.binaryType = "arraybuffer"; connection.binaryType = "arraybuffer";
connection.send('testIncomingArrayBufferView'); connection.send("testIncomingArrayBufferView");
connection.addEventListener('message', function(evt) { connection.addEventListener("message", function(evt) {
ok(is_same_buffer(evt.data, TYPED_DATA_ARRAY), "expected same buffer data"); ok(is_same_buffer(evt.data, TYPED_DATA_ARRAY), "expected same buffer data");
aResolve(); aResolve();
}, {once: true}); }, {once: true});

View file

@ -13,33 +13,33 @@
function is(a, b, msg) { function is(a, b, msg) {
if (a === b) { if (a === b) {
alert('OK ' + msg); alert("OK " + msg);
} else { } else {
alert('KO ' + msg + ' | reason: ' + a + ' != ' + b); alert("KO " + msg + " | reason: " + a + " != " + b);
} }
} }
function ok(a, msg) { function ok(a, msg) {
alert((a ? 'OK ' : 'KO ') + msg); alert((a ? "OK " : "KO ") + msg);
} }
function info(msg) { function info(msg) {
alert('INFO ' + msg); alert("INFO " + msg);
} }
function command(name, data) { function command(name, data) {
alert('COMMAND ' + JSON.stringify({name: name, data: data})); alert("COMMAND " + JSON.stringify({name, data}));
} }
function finish() { function finish() {
alert('DONE'); alert("DONE");
} }
var connection; var connection;
function testConnectionAvailable() { function testConnectionAvailable() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('Receiver: --- testConnectionAvailable ---'); info("Receiver: --- testConnectionAvailable ---");
ok(navigator.presentation, "Receiver: navigator.presentation should be available."); ok(navigator.presentation, "Receiver: navigator.presentation should be available.");
ok(navigator.presentation.receiver, "Receiver: navigator.presentation.receiver should be available."); ok(navigator.presentation.receiver, "Receiver: navigator.presentation.receiver should be available.");
@ -61,10 +61,10 @@ function testConnectionAvailable() {
function testConnectionReady() { function testConnectionReady() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('Receiver: --- testConnectionReady ---'); info("Receiver: --- testConnectionReady ---");
connection.onconnect = function() { connection.onconnect = function() {
connection.onconnect = null; connection.onconnect = null;
ok(false, "Should not get |onconnect| event.") ok(false, "Should not get |onconnect| event.");
aReject(); aReject();
}; };
if (connection.state === "connected") { if (connection.state === "connected") {
@ -77,8 +77,8 @@ function testConnectionReady() {
function testConnectionWentaway() { function testConnectionWentaway() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('Receiver: --- testConnectionWentaway ---\n'); info("Receiver: --- testConnectionWentaway ---\n");
command('forward-command', JSON.stringify({ name: 'ready-to-remove-receiverFrame' })); command("forward-command", JSON.stringify({ name: "ready-to-remove-receiverFrame" }));
}); });
} }

View file

@ -6,5 +6,5 @@ function testReceiver() {
} }
testReceiver(); testReceiver();
window.addEventListener('hashchange', testReceiver); window.addEventListener("hashchange", testReceiver);
</script> </script>

View file

@ -11,19 +11,19 @@
"use strict"; "use strict";
function is(a, b, msg) { function is(a, b, msg) {
alert((a === b ? 'OK ' : 'KO ') + msg); alert((a === b ? "OK " : "KO ") + msg);
} }
function ok(a, msg) { function ok(a, msg) {
alert((a ? 'OK ' : 'KO ') + msg); alert((a ? "OK " : "KO ") + msg);
} }
function info(msg) { function info(msg) {
alert('INFO ' + msg); alert("INFO " + msg);
} }
function finish() { function finish() {
alert('DONE'); alert("DONE");
} }
function testConnectionAvailable() { function testConnectionAvailable() {

View file

@ -11,7 +11,7 @@
"use strict"; "use strict";
function ok(a, msg) { function ok(a, msg) {
alert((a ? 'OK ' : 'KO ') + msg); alert((a ? "OK " : "KO ") + msg);
} }
function testConnectionAvailable() { function testConnectionAvailable() {

View file

@ -11,23 +11,23 @@
"use strict"; "use strict";
function is(a, b, msg) { function is(a, b, msg) {
alert((a === b ? 'OK ' : 'KO ') + msg); alert((a === b ? "OK " : "KO ") + msg);
} }
function ok(a, msg) { function ok(a, msg) {
alert((a ? 'OK ' : 'KO ') + msg); alert((a ? "OK " : "KO ") + msg);
} }
function info(msg) { function info(msg) {
alert('INFO ' + msg); alert("INFO " + msg);
} }
function command(msg) { function command(msg) {
alert('COMMAND ' + JSON.stringify(msg)); alert("COMMAND " + JSON.stringify(msg));
} }
function finish() { function finish() {
alert('DONE'); alert("DONE");
} }
var connection; var connection;
@ -51,7 +51,7 @@ function testConnectionAvailable() {
aReject(); aReject();
} }
); );
command({ name: 'trigger-incoming-offer' }); command({ name: "trigger-incoming-offer" });
}); });
} }
@ -64,8 +64,8 @@ function testDefaultRequestIsUndefined() {
function testConnectionAvailableSameOriginInnerIframe() { function testConnectionAvailableSameOriginInnerIframe() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
var iframe = document.createElement('iframe'); var iframe = document.createElement("iframe");
iframe.setAttribute('src', './file_presentation_receiver_inner_iframe.html'); iframe.setAttribute("src", "./file_presentation_receiver_inner_iframe.html");
document.body.appendChild(iframe); document.body.appendChild(iframe);
aResolve(); aResolve();
@ -74,8 +74,8 @@ function testConnectionAvailableSameOriginInnerIframe() {
function testConnectionUnavailableDiffOriginInnerIframe() { function testConnectionUnavailableDiffOriginInnerIframe() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
var iframe = document.createElement('iframe'); var iframe = document.createElement("iframe");
iframe.setAttribute('src', 'http://example.com/tests/dom/presentation/tests/mochitest/file_presentation_non_receiver_inner_iframe.html'); iframe.setAttribute("src", "http://example.com/tests/dom/presentation/tests/mochitest/file_presentation_non_receiver_inner_iframe.html");
document.body.appendChild(iframe); document.body.appendChild(iframe);
aResolve(); aResolve();
@ -103,12 +103,12 @@ function testIncomingMessage() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
const incomingMessage = "test incoming message"; const incomingMessage = "test incoming message";
connection.addEventListener('message', function(aEvent) { connection.addEventListener("message", function(aEvent) {
is(aEvent.data, incomingMessage, "An incoming message should be received."); is(aEvent.data, incomingMessage, "An incoming message should be received.");
aResolve(); aResolve();
}, {once: true}); }, {once: true});
command({ name: 'trigger-incoming-message', command({ name: "trigger-incoming-message",
data: incomingMessage }); data: incomingMessage });
}); });
} }

View file

@ -11,23 +11,23 @@
"use strict"; "use strict";
function is(a, b, msg) { function is(a, b, msg) {
alert((a === b ? 'OK ' : 'KO ') + msg); alert((a === b ? "OK " : "KO ") + msg);
} }
function ok(a, msg) { function ok(a, msg) {
alert((a ? 'OK ' : 'KO ') + msg); alert((a ? "OK " : "KO ") + msg);
} }
function info(msg) { function info(msg) {
alert('INFO ' + msg); alert("INFO " + msg);
} }
function command(msg) { function command(msg) {
alert('COMMAND ' + JSON.stringify(msg)); alert("COMMAND " + JSON.stringify(msg));
} }
function finish() { function finish() {
alert('DONE'); alert("DONE");
} }
function testConnectionAvailable() { function testConnectionAvailable() {
@ -44,7 +44,7 @@ function testOpenWindow() {
try { try {
window.open("http://example.com"); window.open("http://example.com");
ok(false, "receiver page should not be able to open a new window."); ok(false, "receiver page should not be able to open a new window.");
} catch(e) { } catch (e) {
ok(true, "receiver page should not be able to open a new window."); ok(true, "receiver page should not be able to open a new window.");
aResolve(); aResolve();
} }

View file

@ -12,26 +12,26 @@
function is(a, b, msg) { function is(a, b, msg) {
if (a === b) { if (a === b) {
alert('OK ' + msg); alert("OK " + msg);
} else { } else {
alert('KO ' + msg + ' | reason: ' + a + ' != ' + b); alert("KO " + msg + " | reason: " + a + " != " + b);
} }
} }
function ok(a, msg) { function ok(a, msg) {
alert((a ? 'OK ' : 'KO ') + msg); alert((a ? "OK " : "KO ") + msg);
} }
function info(msg) { function info(msg) {
alert('INFO ' + msg); alert("INFO " + msg);
} }
function command(name, data) { function command(name, data) {
alert('COMMAND ' + JSON.stringify({name: name, data: data})); alert("COMMAND " + JSON.stringify({name, data}));
} }
function finish() { function finish() {
alert('DONE'); alert("DONE");
} }
function testConnectionAvailable() { function testConnectionAvailable() {
@ -44,13 +44,13 @@ function testConnectionAvailable() {
function testUnexpectedControlChannelClose() { function testUnexpectedControlChannelClose() {
// Trigger the control channel to be closed with error code. // Trigger the control channel to be closed with error code.
command({ name: 'trigger-control-channel-close', data: 0x80004004 /* NS_ERROR_ABORT */ }); command({ name: "trigger-control-channel-close", data: 0x80004004 /* NS_ERROR_ABORT */ });
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
return Promise.race([ return Promise.race([
navigator.presentation.receiver.connectionList.then( navigator.presentation.receiver.connectionList.then(
(aList) => { (aList) => {
ok(false, "Should not get a connection list.") ok(false, "Should not get a connection list.");
aReject(); aReject();
}, },
(aError) => { (aError) => {

View file

@ -11,7 +11,7 @@
"use strict"; "use strict";
function ok(a, msg) { function ok(a, msg) {
alert((a ? 'OK ' : 'KO ') + msg); alert((a ? "OK " : "KO ") + msg);
} }
function testConnectionAvailable() { function testConnectionAvailable() {

View file

@ -81,14 +81,13 @@ function testCloseConnection() {
window.addEventListener("message", function onMessage(evt) { window.addEventListener("message", function onMessage(evt) {
if (evt.data === "startConnection") { if (evt.data === "startConnection") {
testStartRequest().then( testStartRequest().then(
function () { function() {
command({ name: "connection-connected", id: connection.id }); command({ name: "connection-connected", id: connection.id });
} }
); );
} } else if (evt.data === "closeConnection") {
else if (evt.data === "closeConnection") {
testCloseConnection().then( testCloseConnection().then(
function () { function() {
command({ name: "connection-closed", id: connection.id }); command({ name: "connection-closed", id: connection.id });
} }
); );

View file

@ -9,50 +9,50 @@
<div id='content'></div> <div id='content'></div>
<script type='application/javascript'> <script type='application/javascript'>
'use strict'; "use strict";
function is(a, b, msg) { function is(a, b, msg) {
if (a === b) { if (a === b) {
alert('OK ' + msg); alert("OK " + msg);
} else { } else {
alert('KO ' + msg + ' | reason: ' + a + ' != ' + b); alert("KO " + msg + " | reason: " + a + " != " + b);
} }
} }
function ok(a, msg) { function ok(a, msg) {
alert((a ? 'OK ' : 'KO ') + msg); alert((a ? "OK " : "KO ") + msg);
} }
function info(msg) { function info(msg) {
alert('INFO ' + msg); alert("INFO " + msg);
} }
function command(name, data) { function command(name, data) {
alert('COMMAND ' + JSON.stringify({name: name, data: data})); alert("COMMAND " + JSON.stringify({name, data}));
} }
function finish() { function finish() {
alert('DONE'); alert("DONE");
} }
var connection; var connection;
function testConnectionAvailable() { function testConnectionAvailable() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('Receiver: --- testConnectionAvailable ---'); info("Receiver: --- testConnectionAvailable ---");
ok(navigator.presentation, 'Receiver: navigator.presentation should be available.'); ok(navigator.presentation, "Receiver: navigator.presentation should be available.");
ok(navigator.presentation.receiver, 'Receiver: navigator.presentation.receiver should be available.'); ok(navigator.presentation.receiver, "Receiver: navigator.presentation.receiver should be available.");
navigator.presentation.receiver.connectionList navigator.presentation.receiver.connectionList
.then((aList) => { .then((aList) => {
is(aList.connections.length, 1, 'Should get one conncetion.'); is(aList.connections.length, 1, "Should get one conncetion.");
connection = aList.connections[0]; connection = aList.connections[0];
ok(connection.id, 'Connection ID should be set: ' + connection.id); ok(connection.id, "Connection ID should be set: " + connection.id);
is(connection.state, 'connected', 'Connection state at receiver side should be connected.'); is(connection.state, "connected", "Connection state at receiver side should be connected.");
aResolve(); aResolve();
}) })
.catch((aError) => { .catch((aError) => {
ok(false, 'Receiver: Error occurred when getting the connection: ' + aError); ok(false, "Receiver: Error occurred when getting the connection: " + aError);
finish(); finish();
aReject(); aReject();
}); });
@ -61,15 +61,15 @@ function testConnectionAvailable() {
function testConnectionReady() { function testConnectionReady() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('Receiver: --- testConnectionReady ---'); info("Receiver: --- testConnectionReady ---");
connection.onconnect = function() { connection.onconnect = function() {
connection.onconnect = null; connection.onconnect = null;
ok(false, 'Should not get |onconnect| event.') ok(false, "Should not get |onconnect| event.");
aReject(); aReject();
}; };
if (connection.state === 'connected') { if (connection.state === "connected") {
connection.onconnect = null; connection.onconnect = null;
is(connection.state, 'connected', 'Receiver: Connection state should become connected.'); is(connection.state, "connected", "Receiver: Connection state should become connected.");
aResolve(); aResolve();
} }
}); });
@ -77,24 +77,24 @@ function testConnectionReady() {
function testConnectionTerminate() { function testConnectionTerminate() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('Receiver: --- testConnectionTerminate ---'); info("Receiver: --- testConnectionTerminate ---");
connection.onterminate = function() { connection.onterminate = function() {
connection.onterminate = null; connection.onterminate = null;
// Using window.alert at this stage will cause window.close() fail. // Using window.alert at this stage will cause window.close() fail.
// Only trigger it if verdict fail. // Only trigger it if verdict fail.
if (connection.state !== 'terminated') { if (connection.state !== "terminated") {
is(connection.state, 'terminated', 'Receiver: Connection should be terminated.'); is(connection.state, "terminated", "Receiver: Connection should be terminated.");
} }
aResolve(); aResolve();
}; };
command('forward-command', JSON.stringify({ name: 'ready-to-terminate' })); command("forward-command", JSON.stringify({ name: "ready-to-terminate" }));
}); });
} }
function runTests() { function runTests() {
testConnectionAvailable() testConnectionAvailable()
.then(testConnectionReady) .then(testConnectionReady)
.then(testConnectionTerminate) .then(testConnectionTerminate);
} }
runTests(); runTests();

View file

@ -9,50 +9,50 @@
<div id='content'></div> <div id='content'></div>
<script type='application/javascript'> <script type='application/javascript'>
'use strict'; "use strict";
function is(a, b, msg) { function is(a, b, msg) {
if (a === b) { if (a === b) {
alert('OK ' + msg); alert("OK " + msg);
} else { } else {
alert('KO ' + msg + ' | reason: ' + a + ' != ' + b); alert("KO " + msg + " | reason: " + a + " != " + b);
} }
} }
function ok(a, msg) { function ok(a, msg) {
alert((a ? 'OK ' : 'KO ') + msg); alert((a ? "OK " : "KO ") + msg);
} }
function info(msg) { function info(msg) {
alert('INFO ' + msg); alert("INFO " + msg);
} }
function command(name, data) { function command(name, data) {
alert('COMMAND ' + JSON.stringify({name: name, data: data})); alert("COMMAND " + JSON.stringify({name, data}));
} }
function finish() { function finish() {
alert('DONE'); alert("DONE");
} }
var connection; var connection;
function testConnectionAvailable() { function testConnectionAvailable() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('Receiver: --- testConnectionAvailable ---'); info("Receiver: --- testConnectionAvailable ---");
ok(navigator.presentation, 'Receiver: navigator.presentation should be available.'); ok(navigator.presentation, "Receiver: navigator.presentation should be available.");
ok(navigator.presentation.receiver, 'Receiver: navigator.presentation.receiver should be available.'); ok(navigator.presentation.receiver, "Receiver: navigator.presentation.receiver should be available.");
navigator.presentation.receiver.connectionList navigator.presentation.receiver.connectionList
.then((aList) => { .then((aList) => {
is(aList.connections.length, 1, 'Should get one connection.'); is(aList.connections.length, 1, "Should get one connection.");
connection = aList.connections[0]; connection = aList.connections[0];
ok(connection.id, 'Connection ID should be set: ' + connection.id); ok(connection.id, "Connection ID should be set: " + connection.id);
is(connection.state, 'connected', 'Connection state at receiver side should be connected.'); is(connection.state, "connected", "Connection state at receiver side should be connected.");
aResolve(); aResolve();
}) })
.catch((aError) => { .catch((aError) => {
ok(false, 'Receiver: Error occurred when getting the connection: ' + aError); ok(false, "Receiver: Error occurred when getting the connection: " + aError);
finish(); finish();
aReject(); aReject();
}); });
@ -61,15 +61,15 @@ function testConnectionAvailable() {
function testConnectionReady() { function testConnectionReady() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('Receiver: --- testConnectionReady ---'); info("Receiver: --- testConnectionReady ---");
connection.onconnect = function() { connection.onconnect = function() {
connection.onconnect = null; connection.onconnect = null;
ok(false, 'Should not get |onconnect| event.') ok(false, "Should not get |onconnect| event.");
aReject(); aReject();
}; };
if (connection.state === 'connected') { if (connection.state === "connected") {
connection.onconnect = null; connection.onconnect = null;
is(connection.state, 'connected', 'Receiver: Connection state should become connected.'); is(connection.state, "connected", "Receiver: Connection state should become connected.");
aResolve(); aResolve();
} }
}); });
@ -77,34 +77,34 @@ function testConnectionReady() {
function testConnectionTerminate() { function testConnectionTerminate() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('Receiver: --- testConnectionTerminate ---'); info("Receiver: --- testConnectionTerminate ---");
connection.onterminate = function() { connection.onterminate = function() {
connection.onterminate = null; connection.onterminate = null;
// Using window.alert at this stage will cause window.close() fail. // Using window.alert at this stage will cause window.close() fail.
// Only trigger it if verdict fail. // Only trigger it if verdict fail.
if (connection.state !== 'terminated') { if (connection.state !== "terminated") {
is(connection.state, 'terminated', 'Receiver: Connection should be terminated.'); is(connection.state, "terminated", "Receiver: Connection should be terminated.");
} }
aResolve(); aResolve();
}; };
window.addEventListener('hashchange', function hashchangeHandler(evt) { window.addEventListener("hashchange", function hashchangeHandler(evt) {
var message = JSON.parse(decodeURIComponent(window.location.hash.substring(1))); var message = JSON.parse(decodeURIComponent(window.location.hash.substring(1)));
if (message.type === 'ready-to-terminate') { if (message.type === "ready-to-terminate") {
info('Receiver: --- ready-to-terminate ---'); info("Receiver: --- ready-to-terminate ---");
connection.terminate(); connection.terminate();
} }
}); });
command('forward-command', JSON.stringify({ name: 'prepare-for-terminate' })); command("forward-command", JSON.stringify({ name: "prepare-for-terminate" }));
}); });
} }
function runTests() { function runTests() {
testConnectionAvailable() testConnectionAvailable()
.then(testConnectionReady) .then(testConnectionReady)
.then(testConnectionTerminate) .then(testConnectionTerminate);
} }
runTests(); runTests();

View file

@ -1,42 +1,42 @@
'use strict'; "use strict";
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
SimpleTest.requestFlakyTimeout('Test for guarantee not firing async event'); SimpleTest.requestFlakyTimeout("Test for guarantee not firing async event");
function debug(str) { function debug(str) {
// info(str); // info(str);
} }
var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL('PresentationSessionChromeScript1UA.js')); var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL("PresentationSessionChromeScript1UA.js"));
var receiverUrl = SimpleTest.getTestFileURL('file_presentation_1ua_wentaway.html'); var receiverUrl = SimpleTest.getTestFileURL("file_presentation_1ua_wentaway.html");
var request; var request;
var connection; var connection;
var receiverIframe; var receiverIframe;
function setup() { function setup() {
gScript.addMessageListener('device-prompt', function devicePromptHandler() { gScript.addMessageListener("device-prompt", function devicePromptHandler() {
debug('Got message: device-prompt'); debug("Got message: device-prompt");
gScript.removeMessageListener('device-prompt', devicePromptHandler); gScript.removeMessageListener("device-prompt", devicePromptHandler);
gScript.sendAsyncMessage('trigger-device-prompt-select'); gScript.sendAsyncMessage("trigger-device-prompt-select");
}); });
gScript.addMessageListener('control-channel-established', function controlChannelEstablishedHandler() { gScript.addMessageListener("control-channel-established", function controlChannelEstablishedHandler() {
gScript.removeMessageListener('control-channel-established', gScript.removeMessageListener("control-channel-established",
controlChannelEstablishedHandler); controlChannelEstablishedHandler);
gScript.sendAsyncMessage("trigger-control-channel-open"); gScript.sendAsyncMessage("trigger-control-channel-open");
}); });
gScript.addMessageListener('sender-launch', function senderLaunchHandler(url) { gScript.addMessageListener("sender-launch", function senderLaunchHandler(url) {
debug('Got message: sender-launch'); debug("Got message: sender-launch");
gScript.removeMessageListener('sender-launch', senderLaunchHandler); gScript.removeMessageListener("sender-launch", senderLaunchHandler);
is(url, receiverUrl, 'Receiver: should receive the same url'); is(url, receiverUrl, "Receiver: should receive the same url");
receiverIframe = document.createElement('iframe'); receiverIframe = document.createElement("iframe");
receiverIframe.setAttribute("mozbrowser", "true"); receiverIframe.setAttribute("mozbrowser", "true");
receiverIframe.setAttribute("mozpresentation", receiverUrl); receiverIframe.setAttribute("mozpresentation", receiverUrl);
var oop = !location.pathname.includes('_inproc'); var oop = !location.pathname.includes("_inproc");
receiverIframe.setAttribute("remote", oop); receiverIframe.setAttribute("remote", oop);
receiverIframe.setAttribute('src', receiverUrl); receiverIframe.setAttribute("src", receiverUrl);
receiverIframe.addEventListener("mozbrowserloadend", function() { receiverIframe.addEventListener("mozbrowserloadend", function() {
info("Receiver loaded."); info("Receiver loaded.");
}, {once: true}); }, {once: true});
@ -67,14 +67,14 @@ function setup() {
var obs = SpecialPowers.Cc["@mozilla.org/observer-service;1"] var obs = SpecialPowers.Cc["@mozilla.org/observer-service;1"]
.getService(SpecialPowers.Ci.nsIObserverService); .getService(SpecialPowers.Ci.nsIObserverService);
obs.notifyObservers(promise, 'setup-request-promise'); obs.notifyObservers(promise, "setup-request-promise");
}); });
gScript.addMessageListener('promise-setup-ready', function promiseSetupReadyHandler() { gScript.addMessageListener("promise-setup-ready", function promiseSetupReadyHandler() {
debug('Got message: promise-setup-ready'); debug("Got message: promise-setup-ready");
gScript.removeMessageListener('promise-setup-ready', gScript.removeMessageListener("promise-setup-ready",
promiseSetupReadyHandler); promiseSetupReadyHandler);
gScript.sendAsyncMessage('trigger-on-session-request', receiverUrl); gScript.sendAsyncMessage("trigger-on-session-request", receiverUrl);
}); });
return Promise.resolve(); return Promise.resolve();
@ -82,7 +82,7 @@ function setup() {
function testCreateRequest() { function testCreateRequest() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('Sender: --- testCreateRequest ---'); info("Sender: --- testCreateRequest ---");
request = new PresentationRequest(receiverUrl); request = new PresentationRequest(receiverUrl);
request.getAvailability().then((aAvailability) => { request.getAvailability().then((aAvailability) => {
is(aAvailability.value, false, "Sender: should have no available device after setup"); is(aAvailability.value, false, "Sender: should have no available device after setup");
@ -90,9 +90,9 @@ function testCreateRequest() {
aAvailability.onchange = null; aAvailability.onchange = null;
ok(aAvailability.value, "Sender: Device should be available."); ok(aAvailability.value, "Sender: Device should be available.");
aResolve(); aResolve();
} };
gScript.sendAsyncMessage('trigger-device-add'); gScript.sendAsyncMessage("trigger-device-add");
}).catch((aError) => { }).catch((aError) => {
ok(false, "Sender: Error occurred when getting availability: " + aError); ok(false, "Sender: Error occurred when getting availability: " + aError);
teardown(); teardown();
@ -123,32 +123,32 @@ function testStartConnection() {
function testConnectionWentaway() { function testConnectionWentaway() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('Sender: --- testConnectionWentaway ---'); info("Sender: --- testConnectionWentaway ---");
connection.onclose = function() { connection.onclose = function() {
connection.onclose = null; connection.onclose = null;
is(connection.state, "closed", "Sender: Connection should be closed."); is(connection.state, "closed", "Sender: Connection should be closed.");
receiverIframe.addEventListener('mozbrowserclose', function closeHandler() { receiverIframe.addEventListener("mozbrowserclose", function closeHandler() {
ok(false, 'wentaway should not trigger receiver close'); ok(false, "wentaway should not trigger receiver close");
aResolve(); aResolve();
}); });
setTimeout(aResolve, 3000); setTimeout(aResolve, 3000);
}; };
gScript.addMessageListener('ready-to-remove-receiverFrame', function onReadyToRemove() { gScript.addMessageListener("ready-to-remove-receiverFrame", function onReadyToRemove() {
gScript.removeMessageListener('ready-to-remove-receiverFrame', onReadyToRemove); gScript.removeMessageListener("ready-to-remove-receiverFrame", onReadyToRemove);
receiverIframe.src = "http://example.com"; receiverIframe.src = "http://example.com";
}); });
}); });
} }
function teardown() { function teardown() {
gScript.addMessageListener('teardown-complete', function teardownCompleteHandler() { gScript.addMessageListener("teardown-complete", function teardownCompleteHandler() {
debug('Got message: teardown-complete'); debug("Got message: teardown-complete");
gScript.removeMessageListener('teardown-complete', teardownCompleteHandler); gScript.removeMessageListener("teardown-complete", teardownCompleteHandler);
gScript.destroy(); gScript.destroy();
SimpleTest.finish(); SimpleTest.finish();
}); });
gScript.sendAsyncMessage('teardown'); gScript.sendAsyncMessage("teardown");
} }
function runTests() { function runTests() {
@ -159,10 +159,10 @@ function runTests() {
} }
SpecialPowers.pushPermissions([ SpecialPowers.pushPermissions([
{type: 'presentation-device-manage', allow: false, context: document}, {type: "presentation-device-manage", allow: false, context: document},
{type: "browser", allow: true, context: document}, {type: "browser", allow: true, context: document},
], () => { ], () => {
SpecialPowers.pushPrefEnv({ 'set': [["dom.presentation.enabled", true], SpecialPowers.pushPrefEnv({ "set": [["dom.presentation.enabled", true],
["dom.presentation.controller.enabled", true], ["dom.presentation.controller.enabled", true],
["dom.presentation.receiver.enabled", true], ["dom.presentation.receiver.enabled", true],
["dom.presentation.test.enabled", true], ["dom.presentation.test.enabled", true],

View file

@ -3,14 +3,14 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this file, * 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/. */ * You can obtain one at http://mozilla.org/MPL/2.0/. */
'use strict'; "use strict";
function debug(str) { function debug(str) {
// info(str); // info(str);
} }
var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL('PresentationSessionChromeScript1UA.js')); var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL("PresentationSessionChromeScript1UA.js"));
var receiverUrl = SimpleTest.getTestFileURL('file_presentation_1ua_receiver.html'); var receiverUrl = SimpleTest.getTestFileURL("file_presentation_1ua_receiver.html");
var request; var request;
var connection; var connection;
var receiverIframe; var receiverIframe;
@ -27,33 +27,33 @@ function postMessageToIframe(aType) {
function setup() { function setup() {
gScript.addMessageListener('device-prompt', function devicePromptHandler() { gScript.addMessageListener("device-prompt", function devicePromptHandler() {
debug('Got message: device-prompt'); debug("Got message: device-prompt");
gScript.removeMessageListener('device-prompt', devicePromptHandler); gScript.removeMessageListener("device-prompt", devicePromptHandler);
gScript.sendAsyncMessage('trigger-device-prompt-select'); gScript.sendAsyncMessage("trigger-device-prompt-select");
}); });
gScript.addMessageListener('control-channel-established', function controlChannelEstablishedHandler() { gScript.addMessageListener("control-channel-established", function controlChannelEstablishedHandler() {
gScript.removeMessageListener('control-channel-established', gScript.removeMessageListener("control-channel-established",
controlChannelEstablishedHandler); controlChannelEstablishedHandler);
gScript.sendAsyncMessage("trigger-control-channel-open"); gScript.sendAsyncMessage("trigger-control-channel-open");
}); });
gScript.addMessageListener('sender-launch', function senderLaunchHandler(url) { gScript.addMessageListener("sender-launch", function senderLaunchHandler(url) {
debug('Got message: sender-launch'); debug("Got message: sender-launch");
gScript.removeMessageListener('sender-launch', senderLaunchHandler); gScript.removeMessageListener("sender-launch", senderLaunchHandler);
is(url, receiverUrl, 'Receiver: should receive the same url'); is(url, receiverUrl, "Receiver: should receive the same url");
receiverIframe = document.createElement('iframe'); receiverIframe = document.createElement("iframe");
receiverIframe.setAttribute('src', receiverUrl); receiverIframe.setAttribute("src", receiverUrl);
receiverIframe.setAttribute("mozbrowser", "true"); receiverIframe.setAttribute("mozbrowser", "true");
receiverIframe.setAttribute("mozpresentation", receiverUrl); receiverIframe.setAttribute("mozpresentation", receiverUrl);
var oop = !location.pathname.includes('_inproc'); var oop = !location.pathname.includes("_inproc");
receiverIframe.setAttribute("remote", oop); receiverIframe.setAttribute("remote", oop);
// This event is triggered when the iframe calls "alert". // This event is triggered when the iframe calls "alert".
receiverIframe.addEventListener("mozbrowsershowmodalprompt", function receiverListener(evt) { receiverIframe.addEventListener("mozbrowsershowmodalprompt", function receiverListener(evt) {
var message = evt.detail.message; var message = evt.detail.message;
debug('Got iframe message: ' + message); debug("Got iframe message: " + message);
if (/^OK /.exec(message)) { if (/^OK /.exec(message)) {
ok(true, message.replace(/^OK /, "")); ok(true, message.replace(/^OK /, ""));
} else if (/^KO /.exec(message)) { } else if (/^KO /.exec(message)) {
@ -76,13 +76,13 @@ function setup() {
var obs = SpecialPowers.Cc["@mozilla.org/observer-service;1"] var obs = SpecialPowers.Cc["@mozilla.org/observer-service;1"]
.getService(SpecialPowers.Ci.nsIObserverService); .getService(SpecialPowers.Ci.nsIObserverService);
obs.notifyObservers(promise, 'setup-request-promise'); obs.notifyObservers(promise, "setup-request-promise");
}); });
gScript.addMessageListener('promise-setup-ready', function promiseSetupReadyHandler() { gScript.addMessageListener("promise-setup-ready", function promiseSetupReadyHandler() {
debug('Got message: promise-setup-ready'); debug("Got message: promise-setup-ready");
gScript.removeMessageListener('promise-setup-ready', promiseSetupReadyHandler); gScript.removeMessageListener("promise-setup-ready", promiseSetupReadyHandler);
gScript.sendAsyncMessage('trigger-on-session-request', receiverUrl); gScript.sendAsyncMessage("trigger-on-session-request", receiverUrl);
}); });
return Promise.resolve(); return Promise.resolve();
@ -90,7 +90,7 @@ function setup() {
function testCreateRequest() { function testCreateRequest() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('Sender: --- testCreateRequest ---'); info("Sender: --- testCreateRequest ---");
request = new PresentationRequest("file_presentation_1ua_receiver.html"); request = new PresentationRequest("file_presentation_1ua_receiver.html");
request.getAvailability().then((aAvailability) => { request.getAvailability().then((aAvailability) => {
is(aAvailability.value, false, "Sender: should have no available device after setup"); is(aAvailability.value, false, "Sender: should have no available device after setup");
@ -98,9 +98,9 @@ function testCreateRequest() {
aAvailability.onchange = null; aAvailability.onchange = null;
ok(aAvailability.value, "Sender: Device should be available."); ok(aAvailability.value, "Sender: Device should be available.");
aResolve(); aResolve();
} };
gScript.sendAsyncMessage('trigger-device-add'); gScript.sendAsyncMessage("trigger-device-add");
}).catch((aError) => { }).catch((aError) => {
ok(false, "Sender: Error occurred when getting availability: " + aError); ok(false, "Sender: Error occurred when getting availability: " + aError);
teardown(); teardown();
@ -140,17 +140,17 @@ function testStartConnection() {
function testSendMessage() { function testSendMessage() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('Sender: --- testSendMessage ---'); info("Sender: --- testSendMessage ---");
gScript.addMessageListener('trigger-message-from-sender', function triggerMessageFromSenderHandler() { gScript.addMessageListener("trigger-message-from-sender", function triggerMessageFromSenderHandler() {
debug('Got message: trigger-message-from-sender'); debug("Got message: trigger-message-from-sender");
gScript.removeMessageListener('trigger-message-from-sender', triggerMessageFromSenderHandler); gScript.removeMessageListener("trigger-message-from-sender", triggerMessageFromSenderHandler);
info('Send message to receiver'); info("Send message to receiver");
connection.send('msg-sender-to-receiver'); connection.send("msg-sender-to-receiver");
}); });
gScript.addMessageListener('message-from-sender-received', function messageFromSenderReceivedHandler() { gScript.addMessageListener("message-from-sender-received", function messageFromSenderReceivedHandler() {
debug('Got message: message-from-sender-received'); debug("Got message: message-from-sender-received");
gScript.removeMessageListener('message-from-sender-received', messageFromSenderReceivedHandler); gScript.removeMessageListener("message-from-sender-received", messageFromSenderReceivedHandler);
aResolve(); aResolve();
}); });
}); });
@ -158,24 +158,24 @@ function testSendMessage() {
function testIncomingMessage() { function testIncomingMessage() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('Sender: --- testIncomingMessage ---'); info("Sender: --- testIncomingMessage ---");
connection.addEventListener('message', function(evt) { connection.addEventListener("message", function(evt) {
let msg = evt.data; let msg = evt.data;
is(msg, "msg-receiver-to-sender", "Sender: Sender should receive message from Receiver"); is(msg, "msg-receiver-to-sender", "Sender: Sender should receive message from Receiver");
postMessageToIframe('message-from-receiver-received'); postMessageToIframe("message-from-receiver-received");
aResolve(); aResolve();
}, {once: true}); }, {once: true});
postMessageToIframe('trigger-message-from-receiver'); postMessageToIframe("trigger-message-from-receiver");
}); });
} }
function testSendBlobMessage() { function testSendBlobMessage() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('Sender: --- testSendBlobMessage ---'); info("Sender: --- testSendBlobMessage ---");
connection.addEventListener('message', function(evt) { connection.addEventListener("message", function(evt) {
let msg = evt.data; let msg = evt.data;
is(msg, "testIncomingBlobMessage", "Sender: Sender should receive message from Receiver"); is(msg, "testIncomingBlobMessage", "Sender: Sender should receive message from Receiver");
let blob = new Blob(["Hello World"], {type : 'text/plain'}); let blob = new Blob(["Hello World"], {type: "text/plain"});
connection.send(blob); connection.send(blob);
aResolve(); aResolve();
}, {once: true}); }, {once: true});
@ -184,8 +184,8 @@ function testSendBlobMessage() {
function testSendArrayBuffer() { function testSendArrayBuffer() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('Sender: --- testSendArrayBuffer ---'); info("Sender: --- testSendArrayBuffer ---");
connection.addEventListener('message', function(evt) { connection.addEventListener("message", function(evt) {
let msg = evt.data; let msg = evt.data;
is(msg, "testIncomingArrayBuffer", "Sender: Sender should receive message from Receiver"); is(msg, "testIncomingArrayBuffer", "Sender: Sender should receive message from Receiver");
connection.send(DATA_ARRAY_BUFFER); connection.send(DATA_ARRAY_BUFFER);
@ -196,8 +196,8 @@ function testSendArrayBuffer() {
function testSendArrayBufferView() { function testSendArrayBufferView() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('Sender: --- testSendArrayBufferView ---'); info("Sender: --- testSendArrayBufferView ---");
connection.addEventListener('message', function(evt) { connection.addEventListener("message", function(evt) {
let msg = evt.data; let msg = evt.data;
is(msg, "testIncomingArrayBufferView", "Sender: Sender should receive message from Receiver"); is(msg, "testIncomingArrayBufferView", "Sender: Sender should receive message from Receiver");
connection.send(TYPED_DATA_ARRAY); connection.send(TYPED_DATA_ARRAY);
@ -207,19 +207,18 @@ function testSendArrayBufferView() {
} }
function testCloseConnection() { function testCloseConnection() {
info('Sender: --- testCloseConnection ---'); info("Sender: --- testCloseConnection ---");
// Test terminate immediate after close. // Test terminate immediate after close.
function controlChannelEstablishedHandler() function controlChannelEstablishedHandler() {
{ gScript.removeMessageListener("control-channel-established",
gScript.removeMessageListener('control-channel-established',
controlChannelEstablishedHandler); controlChannelEstablishedHandler);
ok(false, "terminate after close should do nothing"); ok(false, "terminate after close should do nothing");
} }
gScript.addMessageListener('ready-to-close', function onReadyToClose() { gScript.addMessageListener("ready-to-close", function onReadyToClose() {
gScript.removeMessageListener('ready-to-close', onReadyToClose); gScript.removeMessageListener("ready-to-close", onReadyToClose);
connection.close(); connection.close();
gScript.addMessageListener('control-channel-established', controlChannelEstablishedHandler); gScript.addMessageListener("control-channel-established", controlChannelEstablishedHandler);
connection.terminate(); connection.terminate();
}); });
@ -227,34 +226,34 @@ function testCloseConnection() {
new Promise(function(aResolve, aReject) { new Promise(function(aResolve, aReject) {
connection.onclose = function() { connection.onclose = function() {
connection.onclose = null; connection.onclose = null;
is(connection.state, 'closed', 'Sender: Connection should be closed.'); is(connection.state, "closed", "Sender: Connection should be closed.");
gScript.removeMessageListener('control-channel-established', gScript.removeMessageListener("control-channel-established",
controlChannelEstablishedHandler); controlChannelEstablishedHandler);
aResolve(); aResolve();
}; };
}), }),
new Promise(function(aResolve, aReject) { new Promise(function(aResolve, aReject) {
let timeout = setTimeout(function() { let timeout = setTimeout(function() {
gScript.removeMessageListener('device-disconnected', gScript.removeMessageListener("device-disconnected",
deviceDisconnectedHandler); deviceDisconnectedHandler);
ok(true, "terminate after close should not trigger device.disconnect"); ok(true, "terminate after close should not trigger device.disconnect");
aResolve(); aResolve();
}, 3000); }, 3000);
function deviceDisconnectedHandler() { function deviceDisconnectedHandler() {
gScript.removeMessageListener('device-disconnected', gScript.removeMessageListener("device-disconnected",
deviceDisconnectedHandler); deviceDisconnectedHandler);
ok(false, "terminate after close should not trigger device.disconnect"); ok(false, "terminate after close should not trigger device.disconnect");
clearTimeout(timeout); clearTimeout(timeout);
aResolve(); aResolve();
} }
gScript.addMessageListener('device-disconnected', deviceDisconnectedHandler); gScript.addMessageListener("device-disconnected", deviceDisconnectedHandler);
}), }),
new Promise(function(aResolve, aReject) { new Promise(function(aResolve, aReject) {
gScript.addMessageListener('receiver-closed', function onReceiverClosed() { gScript.addMessageListener("receiver-closed", function onReceiverClosed() {
gScript.removeMessageListener('receiver-closed', onReceiverClosed); gScript.removeMessageListener("receiver-closed", onReceiverClosed);
gScript.removeMessageListener('control-channel-established', gScript.removeMessageListener("control-channel-established",
controlChannelEstablishedHandler); controlChannelEstablishedHandler);
aResolve(); aResolve();
}); });
@ -263,19 +262,19 @@ function testCloseConnection() {
} }
function testTerminateAfterClose() { function testTerminateAfterClose() {
info('Sender: --- testTerminateAfterClose ---'); info("Sender: --- testTerminateAfterClose ---");
return Promise.race([ return Promise.race([
new Promise(function(aResolve, aReject) { new Promise(function(aResolve, aReject) {
connection.onterminate = function() { connection.onterminate = function() {
connection.onterminate = null; connection.onterminate = null;
ok(false, 'terminate after close should do nothing'); ok(false, "terminate after close should do nothing");
aResolve(); aResolve();
}; };
connection.terminate(); connection.terminate();
}), }),
new Promise(function(aResolve, aReject) { new Promise(function(aResolve, aReject) {
setTimeout(function() { setTimeout(function() {
is(connection.state, 'closed', 'Sender: Connection should be closed.'); is(connection.state, "closed", "Sender: Connection should be closed.");
aResolve(); aResolve();
}, 3000); }, 3000);
}), }),
@ -284,21 +283,21 @@ function testTerminateAfterClose() {
function testReconnect() { function testReconnect() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('Sender: --- testReconnect ---'); info("Sender: --- testReconnect ---");
gScript.addMessageListener('control-channel-established', function controlChannelEstablished() { gScript.addMessageListener("control-channel-established", function controlChannelEstablished() {
gScript.removeMessageListener('control-channel-established', controlChannelEstablished); gScript.removeMessageListener("control-channel-established", controlChannelEstablished);
gScript.sendAsyncMessage("trigger-control-channel-open"); gScript.sendAsyncMessage("trigger-control-channel-open");
}); });
gScript.addMessageListener('start-reconnect', function startReconnectHandler(url) { gScript.addMessageListener("start-reconnect", function startReconnectHandler(url) {
debug('Got message: start-reconnect'); debug("Got message: start-reconnect");
gScript.removeMessageListener('start-reconnect', startReconnectHandler); gScript.removeMessageListener("start-reconnect", startReconnectHandler);
is(url, receiverUrl, "URLs should be the same.") is(url, receiverUrl, "URLs should be the same.");
gScript.sendAsyncMessage('trigger-reconnected-acked', url); gScript.sendAsyncMessage("trigger-reconnected-acked", url);
}); });
gScript.addMessageListener('ready-to-reconnect', function onReadyToReconnect() { gScript.addMessageListener("ready-to-reconnect", function onReadyToReconnect() {
gScript.removeMessageListener('ready-to-reconnect', onReadyToReconnect); gScript.removeMessageListener("ready-to-reconnect", onReadyToReconnect);
request.reconnect(presentationId).then((aConnection) => { request.reconnect(presentationId).then((aConnection) => {
connection = aConnection; connection = aConnection;
ok(connection, "Sender: Connection should be available."); ok(connection, "Sender: Connection should be available.");
@ -316,19 +315,19 @@ function testReconnect() {
}); });
}); });
postMessageToIframe('prepare-for-reconnect'); postMessageToIframe("prepare-for-reconnect");
}); });
} }
function teardown() { function teardown() {
gScript.addMessageListener('teardown-complete', function teardownCompleteHandler() { gScript.addMessageListener("teardown-complete", function teardownCompleteHandler() {
debug('Got message: teardown-complete'); debug("Got message: teardown-complete");
gScript.removeMessageListener('teardown-complete', teardownCompleteHandler); gScript.removeMessageListener("teardown-complete", teardownCompleteHandler);
gScript.destroy(); gScript.destroy();
SimpleTest.finish(); SimpleTest.finish();
}); });
gScript.sendAsyncMessage('teardown'); gScript.sendAsyncMessage("teardown");
} }
function runTests() { function runTests() {
@ -347,12 +346,12 @@ function runTests() {
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
SimpleTest.requestFlakyTimeout('Test for guarantee not firing async event'); SimpleTest.requestFlakyTimeout("Test for guarantee not firing async event");
SpecialPowers.pushPermissions([ SpecialPowers.pushPermissions([
{type: 'presentation-device-manage', allow: false, context: document}, {type: "presentation-device-manage", allow: false, context: document},
{type: "browser", allow: true, context: document}, {type: "browser", allow: true, context: document},
], () => { ], () => {
SpecialPowers.pushPrefEnv({ 'set': [["dom.presentation.enabled", true], SpecialPowers.pushPrefEnv({ "set": [["dom.presentation.enabled", true],
/* Mocked TCP session transport builder in the test */ /* Mocked TCP session transport builder in the test */
["dom.presentation.session_transport.data_channel.enable", true], ["dom.presentation.session_transport.data_channel.enable", true],
["dom.presentation.controller.enabled", true], ["dom.presentation.controller.enabled", true],

View file

@ -14,7 +14,7 @@
// This test loads in an iframe, to ensure that the navigator instance is // This test loads in an iframe, to ensure that the navigator instance is
// loaded with the correct value of the preference. // loaded with the correct value of the preference.
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
SimpleTest.requestFlakyTimeout('Test for guarantee not firing async event'); SimpleTest.requestFlakyTimeout("Test for guarantee not firing async event");
SpecialPowers.pushPermissions([ SpecialPowers.pushPermissions([
{type: "presentation-device-manage", allow: false, context: document}, {type: "presentation-device-manage", allow: false, context: document},
], function() { ], function() {

View file

@ -19,21 +19,21 @@ let SpecialPowers = window.parent.SpecialPowers;
"use strict"; "use strict";
var testDevice = { var testDevice = {
id: 'id', id: "id",
name: 'name', name: "name",
type: 'type', type: "type",
}; };
var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL('PresentationDeviceInfoChromeScript.js')); var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL("PresentationDeviceInfoChromeScript.js"));
var request; var request;
var availability; var availability;
function testSetup() { function testSetup() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
gScript.addMessageListener('setup-complete', function() { gScript.addMessageListener("setup-complete", function() {
aResolve(); aResolve();
}); });
gScript.sendAsyncMessage('setup'); gScript.sendAsyncMessage("setup");
}); });
} }
@ -45,9 +45,9 @@ function testInitialUnavailable() {
aAvailability.onchange = function() { aAvailability.onchange = function() {
aAvailability.onchange = null; aAvailability.onchange = null;
ok(aAvailability.value, "Device should be available."); ok(aAvailability.value, "Device should be available.");
} };
availability = aAvailability; availability = aAvailability;
gScript.sendAsyncMessage('trigger-device-add', testDevice); gScript.sendAsyncMessage("trigger-device-add", testDevice);
}).catch(function(aError) { }).catch(function(aError) {
ok(false, "Error occurred when getting availability: " + aError); ok(false, "Error occurred when getting availability: " + aError);
teardown(); teardown();
@ -81,8 +81,8 @@ function testOnChangeEvent() {
availability.onchange = null; availability.onchange = null;
is(availability.value, false, "Should have no available device after device removed"); is(availability.value, false, "Should have no available device after device removed");
aResolve(); aResolve();
} };
gScript.sendAsyncMessage('trigger-device-remove'); gScript.sendAsyncMessage("trigger-device-remove");
}); });
} }
@ -112,15 +112,15 @@ function testUnsupportedDeviceAvailability() {
availability.onchange = null; availability.onchange = null;
ok(false, "Should not get onchange event."); ok(false, "Should not get onchange event.");
teardown(); teardown();
} };
}); });
gScript.sendAsyncMessage('trigger-add-unsupport-url-device'); gScript.sendAsyncMessage("trigger-add-unsupport-url-device");
}), }),
new Promise(function(aResolve, aReject) { new Promise(function(aResolve, aReject) {
setTimeout(function() { setTimeout(function() {
ok(true, "Should not get onchange event."); ok(true, "Should not get onchange event.");
availability.onchange = null; availability.onchange = null;
gScript.sendAsyncMessage('trigger-remove-unsupported-device'); gScript.sendAsyncMessage("trigger-remove-unsupported-device");
aResolve(); aResolve();
}, 3000); }, 3000);
}), }),
@ -152,11 +152,11 @@ function testMultipleAvailabilityURLs() {
}); });
}), }),
new Promise(function(aResolve) { new Promise(function(aResolve) {
gScript.sendAsyncMessage('trigger-add-multiple-devices'); gScript.sendAsyncMessage("trigger-add-multiple-devices");
aResolve(); aResolve();
}), }),
]).then(new Promise(function(aResolve) { ]).then(new Promise(function(aResolve) {
gScript.sendAsyncMessage('trigger-remove-multiple-devices'); gScript.sendAsyncMessage("trigger-remove-multiple-devices");
aResolve(); aResolve();
})); }));
} }
@ -194,11 +194,11 @@ function testPartialSupportedDeviceAvailability() {
}), }),
]), ]),
new Promise(function(aResolve) { new Promise(function(aResolve) {
gScript.sendAsyncMessage('trigger-add-https-devices'); gScript.sendAsyncMessage("trigger-add-https-devices");
aResolve(); aResolve();
}), }),
]).then(new Promise(function(aResolve) { ]).then(new Promise(function(aResolve) {
gScript.sendAsyncMessage('trigger-remove-https-devices'); gScript.sendAsyncMessage("trigger-remove-https-devices");
aResolve(); aResolve();
})); }));
} }
@ -206,7 +206,7 @@ function testPartialSupportedDeviceAvailability() {
function teardown() { function teardown() {
request = null; request = null;
availability = null; availability = null;
gScript.sendAsyncMessage('teardown'); gScript.sendAsyncMessage("teardown");
gScript.destroy(); gScript.destroy();
SimpleTest.finish(); SimpleTest.finish();
} }

View file

@ -43,7 +43,7 @@ var gReject;
const clientCallback = { const clientCallback = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationSessionTransportCallback]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationSessionTransportCallback]),
notifyTransportReady: function () { notifyTransportReady() {
info("Client transport ready."); info("Client transport ready.");
isClientReady = true; isClientReady = true;
@ -51,7 +51,7 @@ const clientCallback = {
gResolve(); gResolve();
} }
}, },
notifyTransportClosed: function (aReason) { notifyTransportClosed(aReason) {
info("Client transport is closed."); info("Client transport is closed.");
isClientClosed = true; isClientClosed = true;
@ -59,7 +59,7 @@ const clientCallback = {
gResolve(); gResolve();
} }
}, },
notifyData: function(aData) { notifyData(aData) {
is(aData, serverMessage, "Client transport receives data."); is(aData, serverMessage, "Client transport receives data.");
gResolve(); gResolve();
}, },
@ -67,7 +67,7 @@ const clientCallback = {
const serverCallback = { const serverCallback = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationSessionTransportCallback]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationSessionTransportCallback]),
notifyTransportReady: function () { notifyTransportReady() {
info("Server transport ready."); info("Server transport ready.");
isServerReady = true; isServerReady = true;
@ -75,7 +75,7 @@ const serverCallback = {
gResolve(); gResolve();
} }
}, },
notifyTransportClosed: function (aReason) { notifyTransportClosed(aReason) {
info("Server transport is closed."); info("Server transport is closed.");
isServerClosed = true; isServerClosed = true;
@ -83,34 +83,34 @@ const serverCallback = {
gResolve(); gResolve();
} }
}, },
notifyData: function(aData) { notifyData(aData) {
is(aData, clientMessage, "Server transport receives data."); is(aData, clientMessage, "Server transport receives data.");
gResolve() gResolve();
}, },
}; };
const clientListener = { const clientListener = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationSessionTransportBuilderListener]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationSessionTransportBuilderListener]),
onSessionTransport: function(aTransport) { onSessionTransport(aTransport) {
info("Client Transport is built."); info("Client Transport is built.");
clientTransport = aTransport; clientTransport = aTransport;
clientTransport.callback = clientCallback; clientTransport.callback = clientCallback;
}, },
onError: function(aError) { onError(aError) {
ok(false, "client's builder reports error " + aError); ok(false, "client's builder reports error " + aError);
}, },
sendOffer: function(aOffer) { sendOffer(aOffer) {
setTimeout(()=>this._remoteBuilder.onOffer(aOffer), 0); setTimeout(() => this._remoteBuilder.onOffer(aOffer), 0);
}, },
sendAnswer: function(aAnswer) { sendAnswer(aAnswer) {
setTimeout(()=>this._remoteBuilder.onAnswer(aAnswer), 0); setTimeout(() => this._remoteBuilder.onAnswer(aAnswer), 0);
}, },
sendIceCandidate: function(aCandidate) { sendIceCandidate(aCandidate) {
setTimeout(()=>this._remoteBuilder.onIceCandidate(aCandidate), 0); setTimeout(() => this._remoteBuilder.onIceCandidate(aCandidate), 0);
}, },
disconnect: function(aReason) { disconnect(aReason) {
setTimeout(()=>this._localBuilder.notifyDisconnected(aReason), 0); setTimeout(() => this._localBuilder.notifyDisconnected(aReason), 0);
setTimeout(()=>this._remoteBuilder.notifyDisconnected(aReason), 0); setTimeout(() => this._remoteBuilder.notifyDisconnected(aReason), 0);
}, },
set remoteBuilder(aRemoteBuilder) { set remoteBuilder(aRemoteBuilder) {
this._remoteBuilder = aRemoteBuilder; this._remoteBuilder = aRemoteBuilder;
@ -118,31 +118,31 @@ const clientListener = {
set localBuilder(aLocalBuilder) { set localBuilder(aLocalBuilder) {
this._localBuilder = aLocalBuilder; this._localBuilder = aLocalBuilder;
}, },
} };
const serverListener = { const serverListener = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationSessionTransportBuilderListener]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationSessionTransportBuilderListener]),
onSessionTransport: function(aTransport) { onSessionTransport(aTransport) {
info("Server Transport is built."); info("Server Transport is built.");
serverTransport = aTransport; serverTransport = aTransport;
serverTransport.callback = serverCallback; serverTransport.callback = serverCallback;
serverTransport.enableDataNotification(); serverTransport.enableDataNotification();
}, },
onError: function(aError) { onError(aError) {
ok(false, "server's builder reports error " + aError); ok(false, "server's builder reports error " + aError);
}, },
sendOffer: function(aOffer) { sendOffer(aOffer) {
setTimeout(()=>this._remoteBuilder.onOffer(aOffer), 0); setTimeout(() => this._remoteBuilder.onOffer(aOffer), 0);
}, },
sendAnswer: function(aAnswer) { sendAnswer(aAnswer) {
setTimeout(()=>this._remoteBuilder.onAnswer(aAnswer), 0); setTimeout(() => this._remoteBuilder.onAnswer(aAnswer), 0);
}, },
sendIceCandidate: function(aCandidate) { sendIceCandidate(aCandidate) {
setTimeout(()=>this._remoteBuilder.onIceCandidate(aCandidate), 0); setTimeout(() => this._remoteBuilder.onIceCandidate(aCandidate), 0);
}, },
disconnect: function(aReason) { disconnect(aReason) {
setTimeout(()=>this._localBuilder.notifyDisconnected(aReason), 0); setTimeout(() => this._localBuilder.notifyDisconnected(aReason), 0);
setTimeout(()=>this._remoteBuilder.notifyDisconnected(aReason), 0); setTimeout(() => this._remoteBuilder.notifyDisconnected(aReason), 0);
}, },
set remoteBuilder(aRemoteBuilder) { set remoteBuilder(aRemoteBuilder) {
this._remoteBuilder = aRemoteBuilder; this._remoteBuilder = aRemoteBuilder;
@ -150,7 +150,7 @@ const serverListener = {
set localBuilder(aLocalBuilder) { set localBuilder(aLocalBuilder) {
this._localBuilder = aLocalBuilder; this._localBuilder = aLocalBuilder;
}, },
} };
function testBuilder() { function testBuilder() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
@ -196,7 +196,7 @@ function testServerSendMessage() {
gReject = aReject; gReject = aReject;
serverTransport.send(serverMessage); serverTransport.send(serverMessage);
setTimeout(()=>clientTransport.enableDataNotification(), 0); setTimeout(() => clientTransport.enableDataNotification(), 0);
}); });
} }

View file

@ -15,20 +15,20 @@
<pre id="test"></pre> <pre id="test"></pre>
<script type="application/javascript"> <script type="application/javascript">
'use strict'; "use strict";
var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL('PresentationSessionChromeScript.js')); var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL("PresentationSessionChromeScript.js"));
var receiverUrl = SimpleTest.getTestFileURL('file_presentation_receiver.html'); var receiverUrl = SimpleTest.getTestFileURL("file_presentation_receiver.html");
var obs = SpecialPowers.Cc["@mozilla.org/observer-service;1"] var obs = SpecialPowers.Cc["@mozilla.org/observer-service;1"]
.getService(SpecialPowers.Ci.nsIObserverService); .getService(SpecialPowers.Ci.nsIObserverService);
function setup() { function setup() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
gScript.sendAsyncMessage('trigger-device-add'); gScript.sendAsyncMessage("trigger-device-add");
var iframe = document.createElement('iframe'); var iframe = document.createElement("iframe");
iframe.setAttribute('src', receiverUrl); iframe.setAttribute("src", receiverUrl);
iframe.setAttribute("mozbrowser", "true"); iframe.setAttribute("mozbrowser", "true");
iframe.setAttribute("mozpresentation", receiverUrl); iframe.setAttribute("mozpresentation", receiverUrl);
@ -56,35 +56,35 @@ function setup() {
aResolve(iframe); aResolve(iframe);
}); });
obs.notifyObservers(promise, 'setup-request-promise'); obs.notifyObservers(promise, "setup-request-promise");
gScript.addMessageListener('offer-received', function offerReceivedHandler() { gScript.addMessageListener("offer-received", function offerReceivedHandler() {
gScript.removeMessageListener('offer-received', offerReceivedHandler); gScript.removeMessageListener("offer-received", offerReceivedHandler);
info("An offer is received."); info("An offer is received.");
}); });
gScript.addMessageListener('answer-sent', function answerSentHandler(aIsValid) { gScript.addMessageListener("answer-sent", function answerSentHandler(aIsValid) {
gScript.removeMessageListener('answer-sent', answerSentHandler); gScript.removeMessageListener("answer-sent", answerSentHandler);
ok(aIsValid, "A valid answer is sent."); ok(aIsValid, "A valid answer is sent.");
}); });
gScript.addMessageListener('control-channel-closed', function controlChannelClosedHandler(aReason) { gScript.addMessageListener("control-channel-closed", function controlChannelClosedHandler(aReason) {
gScript.removeMessageListener('control-channel-closed', controlChannelClosedHandler); gScript.removeMessageListener("control-channel-closed", controlChannelClosedHandler);
is(aReason, SpecialPowers.Cr.NS_OK, "The control channel is closed normally."); is(aReason, SpecialPowers.Cr.NS_OK, "The control channel is closed normally.");
}); });
gScript.addMessageListener('check-navigator', function checknavigatorHandler(aSuccess) { gScript.addMessageListener("check-navigator", function checknavigatorHandler(aSuccess) {
gScript.removeMessageListener('check-navigator', checknavigatorHandler); gScript.removeMessageListener("check-navigator", checknavigatorHandler);
ok(aSuccess, "buildDataChannel get correct window object"); ok(aSuccess, "buildDataChannel get correct window object");
}); });
gScript.addMessageListener('data-transport-notification-enabled', function dataTransportNotificationEnabledHandler() { gScript.addMessageListener("data-transport-notification-enabled", function dataTransportNotificationEnabledHandler() {
gScript.removeMessageListener('data-transport-notification-enabled', dataTransportNotificationEnabledHandler); gScript.removeMessageListener("data-transport-notification-enabled", dataTransportNotificationEnabledHandler);
info("Data notification is enabled for data transport channel."); info("Data notification is enabled for data transport channel.");
}); });
gScript.addMessageListener('data-transport-closed', function dataTransportClosedHandler(aReason) { gScript.addMessageListener("data-transport-closed", function dataTransportClosedHandler(aReason) {
gScript.removeMessageListener('data-transport-closed', dataTransportClosedHandler); gScript.removeMessageListener("data-transport-closed", dataTransportClosedHandler);
is(aReason, SpecialPowers.Cr.NS_OK, "The data transport should be closed normally."); is(aReason, SpecialPowers.Cr.NS_OK, "The data transport should be closed normally.");
}); });
@ -94,8 +94,8 @@ function setup() {
function testIncomingSessionRequest() { function testIncomingSessionRequest() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
gScript.addMessageListener('receiver-launching', function launchReceiverHandler(aSessionId) { gScript.addMessageListener("receiver-launching", function launchReceiverHandler(aSessionId) {
gScript.removeMessageListener('receiver-launching', launchReceiverHandler); gScript.removeMessageListener("receiver-launching", launchReceiverHandler);
info("Trying to launch receiver page."); info("Trying to launch receiver page.");
ok(navigator.presentation, "navigator.presentation should be available in in-process pages."); ok(navigator.presentation, "navigator.presentation should be available in in-process pages.");
@ -103,18 +103,18 @@ function testIncomingSessionRequest() {
aResolve(); aResolve();
}); });
gScript.sendAsyncMessage('trigger-incoming-session-request', receiverUrl); gScript.sendAsyncMessage("trigger-incoming-session-request", receiverUrl);
}); });
} }
function teardown() { function teardown() {
gScript.addMessageListener('teardown-complete', function teardownCompleteHandler() { gScript.addMessageListener("teardown-complete", function teardownCompleteHandler() {
gScript.removeMessageListener('teardown-complete', teardownCompleteHandler); gScript.removeMessageListener("teardown-complete", teardownCompleteHandler);
gScript.destroy(); gScript.destroy();
SimpleTest.finish(); SimpleTest.finish();
}); });
gScript.sendAsyncMessage('teardown'); gScript.sendAsyncMessage("teardown");
} }
function runTests() { function runTests() {
@ -124,10 +124,10 @@ function runTests() {
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
SpecialPowers.pushPermissions([ SpecialPowers.pushPermissions([
{type: 'presentation-device-manage', allow: false, context: document}, {type: "presentation-device-manage", allow: false, context: document},
{type: "browser", allow: true, context: document}, {type: "browser", allow: true, context: document},
], function() { ], function() {
SpecialPowers.pushPrefEnv({ 'set': [["dom.presentation.enabled", true], SpecialPowers.pushPrefEnv({ "set": [["dom.presentation.enabled", true],
["dom.presentation.controller.enabled", false], ["dom.presentation.controller.enabled", false],
["dom.presentation.receiver.enabled", true], ["dom.presentation.receiver.enabled", true],
["dom.presentation.session_transport.data_channel.enable", true], ["dom.presentation.session_transport.data_channel.enable", true],

View file

@ -16,11 +16,11 @@
<pre id="test"></pre> <pre id="test"></pre>
<script type="application/javascript"> <script type="application/javascript">
'use strict'; "use strict";
var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL('PresentationSessionChromeScript.js')); var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL("PresentationSessionChromeScript.js"));
var receiverUrl = SimpleTest.getTestFileURL('file_presentation_receiver.html'); var receiverUrl = SimpleTest.getTestFileURL("file_presentation_receiver.html");
var nonReceiverUrl = SimpleTest.getTestFileURL('file_presentation_non_receiver.html'); var nonReceiverUrl = SimpleTest.getTestFileURL("file_presentation_non_receiver.html");
var isReceiverFinished = false; var isReceiverFinished = false;
var isNonReceiverFinished = false; var isNonReceiverFinished = false;
@ -31,17 +31,17 @@ var receiverIframe;
function setup() { function setup() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
gScript.sendAsyncMessage('trigger-device-add'); gScript.sendAsyncMessage("trigger-device-add");
// Create a receiver OOP iframe. // Create a receiver OOP iframe.
receiverIframe = document.createElement('iframe'); receiverIframe = document.createElement("iframe");
receiverIframe.setAttribute('remote', 'true'); receiverIframe.setAttribute("remote", "true");
receiverIframe.setAttribute('mozbrowser', 'true'); receiverIframe.setAttribute("mozbrowser", "true");
receiverIframe.setAttribute('mozpresentation', receiverUrl); receiverIframe.setAttribute("mozpresentation", receiverUrl);
receiverIframe.setAttribute('src', receiverUrl); receiverIframe.setAttribute("src", receiverUrl);
// This event is triggered when the iframe calls "alert". // This event is triggered when the iframe calls "alert".
receiverIframe.addEventListener('mozbrowsershowmodalprompt', function receiverListener(aEvent) { receiverIframe.addEventListener("mozbrowsershowmodalprompt", function receiverListener(aEvent) {
var message = aEvent.detail.message; var message = aEvent.detail.message;
if (/^OK /.exec(message)) { if (/^OK /.exec(message)) {
ok(true, "Message from iframe: " + message); ok(true, "Message from iframe: " + message);
@ -50,16 +50,16 @@ function setup() {
} else if (/^INFO /.exec(message)) { } else if (/^INFO /.exec(message)) {
info("Message from iframe: " + message); info("Message from iframe: " + message);
} else if (/^COMMAND /.exec(message)) { } else if (/^COMMAND /.exec(message)) {
var command = JSON.parse(message.replace(/^COMMAND /, '')); var command = JSON.parse(message.replace(/^COMMAND /, ""));
if (command.name == "trigger-incoming-message") { if (command.name == "trigger-incoming-message") {
var mm = SpecialPowers.getBrowserFrameMessageManager(receiverIframe); var mm = SpecialPowers.getBrowserFrameMessageManager(receiverIframe);
mm.sendAsyncMessage('trigger-incoming-message', {"data": command.data}); mm.sendAsyncMessage("trigger-incoming-message", {"data": command.data});
} else { } else {
gScript.sendAsyncMessage(command.name, command.data); gScript.sendAsyncMessage(command.name, command.data);
} }
} else if (/^DONE$/.exec(message)) { } else if (/^DONE$/.exec(message)) {
ok(true, "Messaging from iframe complete."); ok(true, "Messaging from iframe complete.");
receiverIframe.removeEventListener('mozbrowsershowmodalprompt', receiverListener); receiverIframe.removeEventListener("mozbrowsershowmodalprompt", receiverListener);
isReceiverFinished = true; isReceiverFinished = true;
@ -78,16 +78,16 @@ function setup() {
aResolve(receiverIframe); aResolve(receiverIframe);
}); });
obs.notifyObservers(promise, 'setup-request-promise'); obs.notifyObservers(promise, "setup-request-promise");
// Create a non-receiver OOP iframe. // Create a non-receiver OOP iframe.
var nonReceiverIframe = document.createElement('iframe'); var nonReceiverIframe = document.createElement("iframe");
nonReceiverIframe.setAttribute('remote', 'true'); nonReceiverIframe.setAttribute("remote", "true");
nonReceiverIframe.setAttribute('mozbrowser', 'true'); nonReceiverIframe.setAttribute("mozbrowser", "true");
nonReceiverIframe.setAttribute('src', nonReceiverUrl); nonReceiverIframe.setAttribute("src", nonReceiverUrl);
// This event is triggered when the iframe calls "alert". // This event is triggered when the iframe calls "alert".
nonReceiverIframe.addEventListener('mozbrowsershowmodalprompt', function nonReceiverListener(aEvent) { nonReceiverIframe.addEventListener("mozbrowsershowmodalprompt", function nonReceiverListener(aEvent) {
var message = aEvent.detail.message; var message = aEvent.detail.message;
if (/^OK /.exec(message)) { if (/^OK /.exec(message)) {
ok(true, "Message from iframe: " + message); ok(true, "Message from iframe: " + message);
@ -96,11 +96,11 @@ function setup() {
} else if (/^INFO /.exec(message)) { } else if (/^INFO /.exec(message)) {
info("Message from iframe: " + message); info("Message from iframe: " + message);
} else if (/^COMMAND /.exec(message)) { } else if (/^COMMAND /.exec(message)) {
var command = JSON.parse(message.replace(/^COMMAND /, '')); var command = JSON.parse(message.replace(/^COMMAND /, ""));
gScript.sendAsyncMessage(command.name, command.data); gScript.sendAsyncMessage(command.name, command.data);
} else if (/^DONE$/.exec(message)) { } else if (/^DONE$/.exec(message)) {
ok(true, "Messaging from iframe complete."); ok(true, "Messaging from iframe complete.");
nonReceiverIframe.removeEventListener('mozbrowsershowmodalprompt', nonReceiverListener); nonReceiverIframe.removeEventListener("mozbrowsershowmodalprompt", nonReceiverListener);
isNonReceiverFinished = true; isNonReceiverFinished = true;
@ -112,34 +112,34 @@ function setup() {
document.body.appendChild(nonReceiverIframe); document.body.appendChild(nonReceiverIframe);
gScript.addMessageListener('offer-received', function offerReceivedHandler() { gScript.addMessageListener("offer-received", function offerReceivedHandler() {
gScript.removeMessageListener('offer-received', offerReceivedHandler); gScript.removeMessageListener("offer-received", offerReceivedHandler);
info("An offer is received."); info("An offer is received.");
}); });
gScript.addMessageListener('answer-sent', function answerSentHandler(aIsValid) { gScript.addMessageListener("answer-sent", function answerSentHandler(aIsValid) {
gScript.removeMessageListener('answer-sent', answerSentHandler); gScript.removeMessageListener("answer-sent", answerSentHandler);
ok(aIsValid, "A valid answer is sent."); ok(aIsValid, "A valid answer is sent.");
}); });
gScript.addMessageListener('control-channel-closed', function controlChannelClosedHandler(aReason) { gScript.addMessageListener("control-channel-closed", function controlChannelClosedHandler(aReason) {
gScript.removeMessageListener('control-channel-closed', controlChannelClosedHandler); gScript.removeMessageListener("control-channel-closed", controlChannelClosedHandler);
is(aReason, SpecialPowers.Cr.NS_OK, "The control channel is closed normally."); is(aReason, SpecialPowers.Cr.NS_OK, "The control channel is closed normally.");
}); });
var mm = SpecialPowers.getBrowserFrameMessageManager(receiverIframe); var mm = SpecialPowers.getBrowserFrameMessageManager(receiverIframe);
mm.addMessageListener('check-navigator', function checknavigatorHandler(aSuccess) { mm.addMessageListener("check-navigator", function checknavigatorHandler(aSuccess) {
mm.removeMessageListener('check-navigator', checknavigatorHandler); mm.removeMessageListener("check-navigator", checknavigatorHandler);
ok(SpecialPowers.wrap(aSuccess).data.data, "buildDataChannel get correct window object"); ok(SpecialPowers.wrap(aSuccess).data.data, "buildDataChannel get correct window object");
}); });
mm.addMessageListener('data-transport-notification-enabled', function dataTransportNotificationEnabledHandler() { mm.addMessageListener("data-transport-notification-enabled", function dataTransportNotificationEnabledHandler() {
mm.removeMessageListener('data-transport-notification-enabled', dataTransportNotificationEnabledHandler); mm.removeMessageListener("data-transport-notification-enabled", dataTransportNotificationEnabledHandler);
info("Data notification is enabled for data transport channel."); info("Data notification is enabled for data transport channel.");
}); });
mm.addMessageListener('data-transport-closed', function dataTransportClosedHandler(aReason) { mm.addMessageListener("data-transport-closed", function dataTransportClosedHandler(aReason) {
mm.removeMessageListener('data-transport-closed', dataTransportClosedHandler); mm.removeMessageListener("data-transport-closed", dataTransportClosedHandler);
is(SpecialPowers.wrap(aReason).data.data, SpecialPowers.Cr.NS_OK, "The data transport should be closed normally."); is(SpecialPowers.wrap(aReason).data.data, SpecialPowers.Cr.NS_OK, "The data transport should be closed normally.");
}); });
@ -149,14 +149,14 @@ function setup() {
function testIncomingSessionRequest() { function testIncomingSessionRequest() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
gScript.addMessageListener('receiver-launching', function launchReceiverHandler(aSessionId) { gScript.addMessageListener("receiver-launching", function launchReceiverHandler(aSessionId) {
gScript.removeMessageListener('receiver-launching', launchReceiverHandler); gScript.removeMessageListener("receiver-launching", launchReceiverHandler);
info("Trying to launch receiver page."); info("Trying to launch receiver page.");
aResolve(); aResolve();
}); });
gScript.sendAsyncMessage('trigger-incoming-session-request', receiverUrl); gScript.sendAsyncMessage("trigger-incoming-session-request", receiverUrl);
}); });
} }
@ -164,18 +164,18 @@ var mmTeardownComplete = false;
var gScriptTeardownComplete = false; var gScriptTeardownComplete = false;
function teardown() { function teardown() {
var mm = SpecialPowers.getBrowserFrameMessageManager(receiverIframe); var mm = SpecialPowers.getBrowserFrameMessageManager(receiverIframe);
mm.addMessageListener('teardown-complete', function teardownCompleteHandler() { mm.addMessageListener("teardown-complete", function teardownCompleteHandler() {
mm.removeMessageListener('teardown-complete', teardownCompleteHandler); mm.removeMessageListener("teardown-complete", teardownCompleteHandler);
mmTeardownComplete = true; mmTeardownComplete = true;
if (gScriptTeardownComplete) { if (gScriptTeardownComplete) {
SimpleTest.finish(); SimpleTest.finish();
} }
}); });
mm.sendAsyncMessage('teardown'); mm.sendAsyncMessage("teardown");
gScript.addMessageListener('teardown-complete', function teardownCompleteHandler() { gScript.addMessageListener("teardown-complete", function teardownCompleteHandler() {
gScript.removeMessageListener('teardown-complete', teardownCompleteHandler); gScript.removeMessageListener("teardown-complete", teardownCompleteHandler);
gScript.destroy(); gScript.destroy();
gScriptTeardownComplete = true; gScriptTeardownComplete = true;
if (mmTeardownComplete) { if (mmTeardownComplete) {
@ -183,7 +183,7 @@ function teardown() {
} }
}); });
gScript.sendAsyncMessage('teardown'); gScript.sendAsyncMessage("teardown");
} }
function runTests() { function runTests() {
@ -193,10 +193,10 @@ function runTests() {
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
SpecialPowers.pushPermissions([ SpecialPowers.pushPermissions([
{type: 'presentation-device-manage', allow: false, context: document}, {type: "presentation-device-manage", allow: false, context: document},
{type: 'browser', allow: true, context: document}, {type: "browser", allow: true, context: document},
], function() { ], function() {
SpecialPowers.pushPrefEnv({ 'set': [["dom.presentation.enabled", true], SpecialPowers.pushPrefEnv({ "set": [["dom.presentation.enabled", true],
["dom.presentation.controller.enabled", false], ["dom.presentation.controller.enabled", false],
["dom.presentation.receiver.enabled", true], ["dom.presentation.receiver.enabled", true],
["dom.presentation.session_transport.data_channel.enable", true], ["dom.presentation.session_transport.data_channel.enable", true],

View file

@ -13,9 +13,9 @@
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1148307">Test for B2G Presentation API at sender side</a> <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1148307">Test for B2G Presentation API at sender side</a>
<script type="application/javascript"> <script type="application/javascript">
'use strict'; "use strict";
var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL('PresentationSessionChromeScript.js')); var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL("PresentationSessionChromeScript.js"));
var frameScript = SpecialPowers.isMainProcess() ? gScript : contentScript; var frameScript = SpecialPowers.isMainProcess() ? gScript : contentScript;
var request; var request;
var connection; var connection;
@ -31,9 +31,9 @@ function testSetup() {
aAvailability.onchange = null; aAvailability.onchange = null;
ok(aAvailability.value, "Device should be available."); ok(aAvailability.value, "Device should be available.");
aResolve(); aResolve();
} };
gScript.sendAsyncMessage('trigger-device-add'); gScript.sendAsyncMessage("trigger-device-add");
}, },
function(aError) { function(aError) {
ok(false, "Error occurred when getting availability: " + aError); ok(false, "Error occurred when getting availability: " + aError);
@ -46,51 +46,51 @@ function testSetup() {
function testStartConnection() { function testStartConnection() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
gScript.addMessageListener('device-prompt', function devicePromptHandler() { gScript.addMessageListener("device-prompt", function devicePromptHandler() {
gScript.removeMessageListener('device-prompt', devicePromptHandler); gScript.removeMessageListener("device-prompt", devicePromptHandler);
info("Device prompt is triggered."); info("Device prompt is triggered.");
gScript.sendAsyncMessage('trigger-device-prompt-select'); gScript.sendAsyncMessage("trigger-device-prompt-select");
}); });
gScript.addMessageListener('control-channel-established', function controlChannelEstablishedHandler() { gScript.addMessageListener("control-channel-established", function controlChannelEstablishedHandler() {
gScript.removeMessageListener('control-channel-established', controlChannelEstablishedHandler); gScript.removeMessageListener("control-channel-established", controlChannelEstablishedHandler);
info("A control channel is established."); info("A control channel is established.");
gScript.sendAsyncMessage('trigger-control-channel-open'); gScript.sendAsyncMessage("trigger-control-channel-open");
}); });
gScript.addMessageListener('control-channel-opened', function controlChannelOpenedHandler(aReason) { gScript.addMessageListener("control-channel-opened", function controlChannelOpenedHandler(aReason) {
gScript.removeMessageListener('control-channel-opened', controlChannelOpenedHandler); gScript.removeMessageListener("control-channel-opened", controlChannelOpenedHandler);
info("The control channel is opened."); info("The control channel is opened.");
}); });
gScript.addMessageListener('control-channel-closed', function controlChannelClosedHandler(aReason) { gScript.addMessageListener("control-channel-closed", function controlChannelClosedHandler(aReason) {
gScript.removeMessageListener('control-channel-closed', controlChannelClosedHandler); gScript.removeMessageListener("control-channel-closed", controlChannelClosedHandler);
info("The control channel is closed. " + aReason); info("The control channel is closed. " + aReason);
}); });
frameScript.addMessageListener('check-navigator', function checknavigatorHandler(aSuccess) { frameScript.addMessageListener("check-navigator", function checknavigatorHandler(aSuccess) {
frameScript.removeMessageListener('check-navigator', checknavigatorHandler); frameScript.removeMessageListener("check-navigator", checknavigatorHandler);
ok(aSuccess, "buildDataChannel get correct window object"); ok(aSuccess, "buildDataChannel get correct window object");
}); });
gScript.addMessageListener('offer-sent', function offerSentHandler(aIsValid) { gScript.addMessageListener("offer-sent", function offerSentHandler(aIsValid) {
gScript.removeMessageListener('offer-sent', offerSentHandler); gScript.removeMessageListener("offer-sent", offerSentHandler);
ok(aIsValid, "A valid offer is sent out."); ok(aIsValid, "A valid offer is sent out.");
gScript.sendAsyncMessage('trigger-incoming-answer'); gScript.sendAsyncMessage("trigger-incoming-answer");
}); });
gScript.addMessageListener('answer-received', function answerReceivedHandler() { gScript.addMessageListener("answer-received", function answerReceivedHandler() {
gScript.removeMessageListener('answer-received', answerReceivedHandler); gScript.removeMessageListener("answer-received", answerReceivedHandler);
info("An answer is received."); info("An answer is received.");
}); });
frameScript.addMessageListener('data-transport-initialized', function dataTransportInitializedHandler() { frameScript.addMessageListener("data-transport-initialized", function dataTransportInitializedHandler() {
frameScript.removeMessageListener('data-transport-initialized', dataTransportInitializedHandler); frameScript.removeMessageListener("data-transport-initialized", dataTransportInitializedHandler);
info("Data transport channel is initialized."); info("Data transport channel is initialized.");
}); });
frameScript.addMessageListener('data-transport-notification-enabled', function dataTransportNotificationEnabledHandler() { frameScript.addMessageListener("data-transport-notification-enabled", function dataTransportNotificationEnabledHandler() {
frameScript.removeMessageListener('data-transport-notification-enabled', dataTransportNotificationEnabledHandler); frameScript.removeMessageListener("data-transport-notification-enabled", dataTransportNotificationEnabledHandler);
info("Data notification is enabled for data transport channel."); info("Data notification is enabled for data transport channel.");
}); });
@ -134,8 +134,8 @@ function testSend() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
const outgoingMessage = "test outgoing message"; const outgoingMessage = "test outgoing message";
frameScript.addMessageListener('message-sent', function messageSentHandler(aMessage) { frameScript.addMessageListener("message-sent", function messageSentHandler(aMessage) {
frameScript.removeMessageListener('message-sent', messageSentHandler); frameScript.removeMessageListener("message-sent", messageSentHandler);
is(aMessage, outgoingMessage, "The message is sent out."); is(aMessage, outgoingMessage, "The message is sent out.");
aResolve(); aResolve();
}); });
@ -148,19 +148,19 @@ function testIncomingMessage() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
const incomingMessage = "test incoming message"; const incomingMessage = "test incoming message";
connection.addEventListener('message', function(aEvent) { connection.addEventListener("message", function(aEvent) {
is(aEvent.data, incomingMessage, "An incoming message should be received."); is(aEvent.data, incomingMessage, "An incoming message should be received.");
aResolve(); aResolve();
}, {once: true}); }, {once: true});
frameScript.sendAsyncMessage('trigger-incoming-message', incomingMessage); frameScript.sendAsyncMessage("trigger-incoming-message", incomingMessage);
}); });
} }
function testCloseConnection() { function testCloseConnection() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
frameScript.addMessageListener('data-transport-closed', function dataTransportClosedHandler(aReason) { frameScript.addMessageListener("data-transport-closed", function dataTransportClosedHandler(aReason) {
frameScript.removeMessageListener('data-transport-closed', dataTransportClosedHandler); frameScript.removeMessageListener("data-transport-closed", dataTransportClosedHandler);
info("The data transport is closed. " + aReason); info("The data transport is closed. " + aReason);
}); });
@ -176,31 +176,31 @@ function testCloseConnection() {
function testReconnect() { function testReconnect() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('--- testReconnect ---'); info("--- testReconnect ---");
gScript.addMessageListener('control-channel-established', function controlChannelEstablished() { gScript.addMessageListener("control-channel-established", function controlChannelEstablished() {
gScript.removeMessageListener('control-channel-established', controlChannelEstablished); gScript.removeMessageListener("control-channel-established", controlChannelEstablished);
gScript.sendAsyncMessage("trigger-control-channel-open"); gScript.sendAsyncMessage("trigger-control-channel-open");
}); });
gScript.addMessageListener('start-reconnect', function startReconnectHandler(url) { gScript.addMessageListener("start-reconnect", function startReconnectHandler(url) {
gScript.removeMessageListener('start-reconnect', startReconnectHandler); gScript.removeMessageListener("start-reconnect", startReconnectHandler);
is(url, "http://example.com/", "URLs should be the same.") is(url, "http://example.com/", "URLs should be the same.");
gScript.sendAsyncMessage('trigger-reconnected-acked', url); gScript.sendAsyncMessage("trigger-reconnected-acked", url);
}); });
gScript.addMessageListener('offer-sent', function offerSentHandler(aIsValid) { gScript.addMessageListener("offer-sent", function offerSentHandler(aIsValid) {
gScript.removeMessageListener('offer-sent', offerSentHandler); gScript.removeMessageListener("offer-sent", offerSentHandler);
ok(aIsValid, "A valid offer is sent out."); ok(aIsValid, "A valid offer is sent out.");
gScript.sendAsyncMessage('trigger-incoming-answer'); gScript.sendAsyncMessage("trigger-incoming-answer");
}); });
gScript.addMessageListener('answer-received', function answerReceivedHandler() { gScript.addMessageListener("answer-received", function answerReceivedHandler() {
gScript.removeMessageListener('answer-received', answerReceivedHandler); gScript.removeMessageListener("answer-received", answerReceivedHandler);
info("An answer is received."); info("An answer is received.");
}); });
frameScript.addMessageListener('check-navigator', function checknavigatorHandler(aSuccess) { frameScript.addMessageListener("check-navigator", function checknavigatorHandler(aSuccess) {
frameScript.removeMessageListener('check-navigator', checknavigatorHandler); frameScript.removeMessageListener("check-navigator", checknavigatorHandler);
ok(aSuccess, "buildDataChannel get correct window object"); ok(aSuccess, "buildDataChannel get correct window object");
}); });
@ -227,14 +227,14 @@ function testReconnect() {
} }
function teardown() { function teardown() {
gScript.addMessageListener('teardown-complete', function teardownCompleteHandler() { gScript.addMessageListener("teardown-complete", function teardownCompleteHandler() {
gScript.removeMessageListener('teardown-complete', teardownCompleteHandler); gScript.removeMessageListener("teardown-complete", teardownCompleteHandler);
gScript.destroy(); gScript.destroy();
info('teardown-complete'); info("teardown-complete");
SimpleTest.finish(); SimpleTest.finish();
}); });
gScript.sendAsyncMessage('teardown'); gScript.sendAsyncMessage("teardown");
} }
function testConstructRequestError() { function testConstructRequestError() {
@ -252,8 +252,7 @@ function testConstructRequestError() {
new Promise(function(aResolve, aReject) { new Promise(function(aResolve, aReject) {
try { try {
request = new PresentationRequest([]); request = new PresentationRequest([]);
} } catch (e) {
catch(e) {
is(e.name, "NotSupportedError", "Expect to get NotSupportedError."); is(e.name, "NotSupportedError", "Expect to get NotSupportedError.");
aResolve(); aResolve();
} }
@ -277,9 +276,9 @@ function runTests() {
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
SpecialPowers.pushPermissions([ SpecialPowers.pushPermissions([
{type: 'presentation-device-manage', allow: false, context: document}, {type: "presentation-device-manage", allow: false, context: document},
], function() { ], function() {
SpecialPowers.pushPrefEnv({ 'set': [["dom.presentation.enabled", true], SpecialPowers.pushPrefEnv({ "set": [["dom.presentation.enabled", true],
["dom.presentation.controller.enabled", true], ["dom.presentation.controller.enabled", true],
["dom.presentation.session_transport.data_channel.enable", true]]}, ["dom.presentation.session_transport.data_channel.enable", true]]},
runTests); runTests);

View file

@ -4,8 +4,8 @@
<script> <script>
/* global SimpleTest SpecialPowers */ /* global SimpleTest SpecialPowers */
const gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL('PresentationSessionChromeScript1UA.js')); const gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL("PresentationSessionChromeScript1UA.js"));
const kReceiverFile = 'file_presentation_fingerprinting_resistance_receiver.html'; const kReceiverFile = "file_presentation_fingerprinting_resistance_receiver.html";
const kReceiverUrl = SimpleTest.getTestFileURL(kReceiverFile); const kReceiverUrl = SimpleTest.getTestFileURL(kReceiverFile);
let runTests = async () => { let runTests = async () => {
@ -21,60 +21,60 @@ let runTests = async () => {
let setup = async () => { let setup = async () => {
await SpecialPowers.pushPrefEnv({ await SpecialPowers.pushPrefEnv({
set: [ set: [
['dom.presentation.enabled', true], ["dom.presentation.enabled", true],
['dom.presentation.controller.enabled', true], ["dom.presentation.controller.enabled", true],
['dom.presentation.receiver.enabled', true], ["dom.presentation.receiver.enabled", true],
['dom.presentation.test.enabled', true], ["dom.presentation.test.enabled", true],
['dom.presentation.test.stage', 0], ["dom.presentation.test.stage", 0],
['dom.mozBrowserFramesEnabled', true], ["dom.mozBrowserFramesEnabled", true],
['network.disable.ipc.security', true] ["network.disable.ipc.security", true]
] ]
}); });
gScript.addMessageListener('device-prompt', function devicePromptHandler() { gScript.addMessageListener("device-prompt", function devicePromptHandler() {
gScript.removeMessageListener('device-prompt', devicePromptHandler); gScript.removeMessageListener("device-prompt", devicePromptHandler);
gScript.sendAsyncMessage('trigger-device-prompt-select'); gScript.sendAsyncMessage("trigger-device-prompt-select");
}); });
gScript.addMessageListener('control-channel-established', function controlChannelEstablishedHandler() { gScript.addMessageListener("control-channel-established", function controlChannelEstablishedHandler() {
gScript.removeMessageListener('control-channel-established', controlChannelEstablishedHandler); gScript.removeMessageListener("control-channel-established", controlChannelEstablishedHandler);
gScript.sendAsyncMessage('trigger-control-channel-open'); gScript.sendAsyncMessage("trigger-control-channel-open");
}); });
gScript.addMessageListener('promise-setup-ready', function promiseSetupReadyHandler() { gScript.addMessageListener("promise-setup-ready", function promiseSetupReadyHandler() {
gScript.removeMessageListener('promise-setup-ready', promiseSetupReadyHandler); gScript.removeMessageListener("promise-setup-ready", promiseSetupReadyHandler);
gScript.sendAsyncMessage('trigger-on-session-request', kReceiverUrl); gScript.sendAsyncMessage("trigger-on-session-request", kReceiverUrl);
}); });
}; };
let createRequest = () => new Promise((resolve, reject) => { let createRequest = () => new Promise((resolve, reject) => {
let request = new PresentationRequest(kReceiverFile); let request = new PresentationRequest(kReceiverFile);
request.getAvailability().then((availability) => { request.getAvailability().then((availability) => {
SimpleTest.ok(availability, 'PresentationRequest.getAvailability'); SimpleTest.ok(availability, "PresentationRequest.getAvailability");
availability.onchange = () => { availability.onchange = () => {
availability.onchange = null; availability.onchange = null;
resolve(request); resolve(request);
}; };
gScript.sendAsyncMessage('trigger-device-add'); gScript.sendAsyncMessage("trigger-device-add");
}).catch((error) => { }).catch((error) => {
SimpleTest.ok(false, 'PresentationRequest.getAvailability: ' + error); SimpleTest.ok(false, "PresentationRequest.getAvailability: " + error);
teardown(); teardown();
reject(error); reject(error);
}); });
}); });
let testRequestAndReceiver = (request) => new Promise((resolve, reject) => { let testRequestAndReceiver = (request) => new Promise((resolve, reject) => {
gScript.addMessageListener('sender-launch', function senderLaunchHandler(url) { gScript.addMessageListener("sender-launch", function senderLaunchHandler(url) {
// SimpleTest.is(url, kReceiverUrl, 'sender-launch'); // SimpleTest.is(url, kReceiverUrl, 'sender-launch');
gScript.removeMessageListener('sender-launch', senderLaunchHandler); gScript.removeMessageListener("sender-launch", senderLaunchHandler);
let iframe = document.createElement('iframe'); let iframe = document.createElement("iframe");
iframe.setAttribute('src', kReceiverUrl); iframe.setAttribute("src", kReceiverUrl);
iframe.setAttribute('mozbrowser', 'true'); iframe.setAttribute("mozbrowser", "true");
iframe.setAttribute('mozpresentation', kReceiverUrl); iframe.setAttribute("mozpresentation", kReceiverUrl);
iframe.setAttribute('remote', 'false'); iframe.setAttribute("remote", "false");
iframe.addEventListener('mozbrowsershowmodalprompt', (event) => { iframe.addEventListener("mozbrowsershowmodalprompt", (event) => {
SimpleTest.is(event.detail.message, 'true', 'navigator.presentation.receiver'); SimpleTest.is(event.detail.message, "true", "navigator.presentation.receiver");
resolve(iframe); resolve(iframe);
}, {once: true}); }, {once: true});
@ -84,21 +84,21 @@ let testRequestAndReceiver = (request) => new Promise((resolve, reject) => {
}); });
let obs = SpecialPowers.Cc["@mozilla.org/observer-service;1"].getService(SpecialPowers.Ci.nsIObserverService); let obs = SpecialPowers.Cc["@mozilla.org/observer-service;1"].getService(SpecialPowers.Ci.nsIObserverService);
obs.notifyObservers(promise, 'setup-request-promise'); obs.notifyObservers(promise, "setup-request-promise");
}); });
request.start().then((connection) => { request.start().then((connection) => {
SimpleTest.ok(connection, 'PresentationRequest.start'); SimpleTest.ok(connection, "PresentationRequest.start");
}).catch((error) => { }).catch((error) => {
SimpleTest.ok(false, 'PresentationRequest.start: ' + error); SimpleTest.ok(false, "PresentationRequest.start: " + error);
teardown(); teardown();
reject(error); reject(error);
}); });
}); });
let enableResistFingerprinting = () => { let enableResistFingerprinting = () => {
const kPref = 'privacy.resistFingerprinting'; const kPref = "privacy.resistFingerprinting";
SimpleTest.info(kPref + ' = true'); SimpleTest.info(kPref + " = true");
return SpecialPowers.pushPrefEnv({ return SpecialPowers.pushPrefEnv({
set: [ set: [
[kPref, true] [kPref, true]
@ -108,38 +108,38 @@ let enableResistFingerprinting = () => {
let testRequestResistFingerprinting = (request) => { let testRequestResistFingerprinting = (request) => {
return request.getAvailability() return request.getAvailability()
.then(() => SimpleTest.ok(false, 'PresentationRequest.getAvailability')) .then(() => SimpleTest.ok(false, "PresentationRequest.getAvailability"))
.catch((error) => SimpleTest.is(error.name, 'SecurityError', 'PresentationRequest.getAvailability')) .catch((error) => SimpleTest.is(error.name, "SecurityError", "PresentationRequest.getAvailability"))
.then(() => request.start()) .then(() => request.start())
.then(() => SimpleTest.ok(false, 'PresentationRequest.start')) .then(() => SimpleTest.ok(false, "PresentationRequest.start"))
.catch((error) => SimpleTest.is(error.name, 'SecurityError', 'PresentationRequest.start')) .catch((error) => SimpleTest.is(error.name, "SecurityError", "PresentationRequest.start"))
.then(() => request.reconnect(kReceiverUrl)) .then(() => request.reconnect(kReceiverUrl))
.then(() => SimpleTest.ok(false, 'PresentationRequest.reconnect')) .then(() => SimpleTest.ok(false, "PresentationRequest.reconnect"))
.catch((error) => SimpleTest.is(error.name, 'SecurityError', 'PresentationRequest.reconnect')); .catch((error) => SimpleTest.is(error.name, "SecurityError", "PresentationRequest.reconnect"));
}; };
let testReceiverResistFingerprinting = (iframe) => new Promise((resolve) => { let testReceiverResistFingerprinting = (iframe) => new Promise((resolve) => {
iframe.addEventListener('mozbrowsershowmodalprompt', (event) => { iframe.addEventListener("mozbrowsershowmodalprompt", (event) => {
SimpleTest.is(event.detail.message, 'false', 'navigator.presentation.receiver'); SimpleTest.is(event.detail.message, "false", "navigator.presentation.receiver");
resolve(); resolve();
}, {once: true}); }, {once: true});
iframe.setAttribute('src', kReceiverUrl + '#privacy.resistFingerprinting'); iframe.setAttribute("src", kReceiverUrl + "#privacy.resistFingerprinting");
}); });
let teardown = () => { let teardown = () => {
gScript.addMessageListener('teardown-complete', function teardownCompleteHandler() { gScript.addMessageListener("teardown-complete", function teardownCompleteHandler() {
gScript.destroy(); gScript.destroy();
SimpleTest.finish(); SimpleTest.finish();
}); });
gScript.sendAsyncMessage('teardown'); gScript.sendAsyncMessage("teardown");
}; };
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
document.addEventListener('DOMContentLoaded', () => { document.addEventListener("DOMContentLoaded", () => {
SpecialPowers.pushPermissions([ SpecialPowers.pushPermissions([
{type: 'presentation-device-manage', allow: false, context: document}, {type: "presentation-device-manage", allow: false, context: document},
{type: 'browser', allow: true, context: document}, {type: "browser", allow: true, context: document},
], runTests); ], runTests);
}); });
</script> </script>

View file

@ -42,7 +42,7 @@ function setup() {
startTest(); startTest();
} }
} else if (/^DONE$/.exec(message)) { } else if (/^DONE$/.exec(message)) {
window.removeEventListener('message', listener); window.removeEventListener("message", listener);
SimpleTest.finish(); SimpleTest.finish();
} }
}, false); }, false);

View file

@ -13,7 +13,7 @@ function setup() {
var iframe = document.createElement("iframe"); var iframe = document.createElement("iframe");
iframe.setAttribute("mozbrowser", "true"); iframe.setAttribute("mozbrowser", "true");
iframe.setAttribute("mozpresentation", receiverUrl); iframe.setAttribute("mozpresentation", receiverUrl);
var oop = !location.pathname.includes('_inproc'); var oop = !location.pathname.includes("_inproc");
iframe.setAttribute("remote", oop); iframe.setAttribute("remote", oop);
iframe.setAttribute("src", receiverUrl); iframe.setAttribute("src", receiverUrl);

View file

@ -14,10 +14,10 @@
<iframe id="iframe" src="file_presentation_reconnect.html"></iframe> <iframe id="iframe" src="file_presentation_reconnect.html"></iframe>
<script type="application/javascript"> <script type="application/javascript">
'use strict'; "use strict";
var iframe = document.getElementById("iframe"); var iframe = document.getElementById("iframe");
var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL('PresentationSessionChromeScript.js')); var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL("PresentationSessionChromeScript.js"));
var frameScript = SpecialPowers.isMainProcess() ? gScript : contentScript; var frameScript = SpecialPowers.isMainProcess() ? gScript : contentScript;
var request; var request;
var connection; var connection;
@ -39,7 +39,7 @@ function testSetup() {
commandHandler[command.name](command); commandHandler[command.name](command);
} }
} else if (/^DONE$/.exec(message)) { } else if (/^DONE$/.exec(message)) {
window.removeEventListener('message', listener); window.removeEventListener("message", listener);
SimpleTest.finish(); SimpleTest.finish();
} }
}, false); }, false);
@ -53,9 +53,9 @@ function testSetup() {
aAvailability.onchange = null; aAvailability.onchange = null;
ok(aAvailability.value, "Device should be available."); ok(aAvailability.value, "Device should be available.");
aResolve(); aResolve();
} };
gScript.sendAsyncMessage('trigger-device-add'); gScript.sendAsyncMessage("trigger-device-add");
}, },
function(aError) { function(aError) {
ok(false, "Error occurred when getting availability: " + aError); ok(false, "Error occurred when getting availability: " + aError);
@ -68,42 +68,42 @@ function testSetup() {
function testStartConnection() { function testStartConnection() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
gScript.addMessageListener('device-prompt', function devicePromptHandler() { gScript.addMessageListener("device-prompt", function devicePromptHandler() {
info("Device prompt is triggered."); info("Device prompt is triggered.");
gScript.sendAsyncMessage('trigger-device-prompt-select'); gScript.sendAsyncMessage("trigger-device-prompt-select");
}); });
gScript.addMessageListener('control-channel-established', function controlChannelEstablishedHandler() { gScript.addMessageListener("control-channel-established", function controlChannelEstablishedHandler() {
info("A control channel is established."); info("A control channel is established.");
gScript.sendAsyncMessage('trigger-control-channel-open'); gScript.sendAsyncMessage("trigger-control-channel-open");
}); });
gScript.addMessageListener('control-channel-opened', function controlChannelOpenedHandler(aReason) { gScript.addMessageListener("control-channel-opened", function controlChannelOpenedHandler(aReason) {
info("The control channel is opened."); info("The control channel is opened.");
}); });
gScript.addMessageListener('control-channel-closed', function controlChannelClosedHandler(aReason) { gScript.addMessageListener("control-channel-closed", function controlChannelClosedHandler(aReason) {
info("The control channel is closed. " + aReason); info("The control channel is closed. " + aReason);
}); });
frameScript.addMessageListener('check-navigator', function checknavigatorHandler(aSuccess) { frameScript.addMessageListener("check-navigator", function checknavigatorHandler(aSuccess) {
ok(aSuccess, "buildDataChannel get correct window object"); ok(aSuccess, "buildDataChannel get correct window object");
}); });
gScript.addMessageListener('offer-sent', function offerSentHandler(aIsValid) { gScript.addMessageListener("offer-sent", function offerSentHandler(aIsValid) {
ok(aIsValid, "A valid offer is sent out."); ok(aIsValid, "A valid offer is sent out.");
gScript.sendAsyncMessage('trigger-incoming-answer'); gScript.sendAsyncMessage("trigger-incoming-answer");
}); });
gScript.addMessageListener('answer-received', function answerReceivedHandler() { gScript.addMessageListener("answer-received", function answerReceivedHandler() {
info("An answer is received."); info("An answer is received.");
}); });
frameScript.addMessageListener('data-transport-initialized', function dataTransportInitializedHandler() { frameScript.addMessageListener("data-transport-initialized", function dataTransportInitializedHandler() {
info("Data transport channel is initialized."); info("Data transport channel is initialized.");
}); });
frameScript.addMessageListener('data-transport-notification-enabled', function dataTransportNotificationEnabledHandler() { frameScript.addMessageListener("data-transport-notification-enabled", function dataTransportNotificationEnabledHandler() {
info("Data notification is enabled for data transport channel."); info("Data notification is enabled for data transport channel.");
}); });
@ -145,8 +145,8 @@ function testStartConnection() {
function testCloseConnection() { function testCloseConnection() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
frameScript.addMessageListener('data-transport-closed', function dataTransportClosedHandler(aReason) { frameScript.addMessageListener("data-transport-closed", function dataTransportClosedHandler(aReason) {
frameScript.removeMessageListener('data-transport-closed', dataTransportClosedHandler); frameScript.removeMessageListener("data-transport-closed", dataTransportClosedHandler);
info("The data transport is closed. " + aReason); info("The data transport is closed. " + aReason);
}); });
@ -162,7 +162,7 @@ function testCloseConnection() {
function testReconnectAConnectedConnection() { function testReconnectAConnectedConnection() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('--- testReconnectAConnectedConnection ---'); info("--- testReconnectAConnectedConnection ---");
ok(connection.state, "connected", "Make sure the state is connected."); ok(connection.state, "connected", "Make sure the state is connected.");
request.reconnect(connection.id).then( request.reconnect(connection.id).then(
@ -185,7 +185,7 @@ function testReconnectAConnectedConnection() {
function testReconnectInvalidID() { function testReconnectInvalidID() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('--- testReconnectInvalidID ---'); info("--- testReconnectInvalidID ---");
request.reconnect("dummyID").then( request.reconnect("dummyID").then(
function(aConnection) { function(aConnection) {
@ -203,7 +203,7 @@ function testReconnectInvalidID() {
function testReconnectInvalidURL() { function testReconnectInvalidURL() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('--- testReconnectInvalidURL ---'); info("--- testReconnectInvalidURL ---");
var request1 = new PresentationRequest("http://invalidURL"); var request1 = new PresentationRequest("http://invalidURL");
request1.reconnect(connection.id).then( request1.reconnect(connection.id).then(
@ -221,14 +221,14 @@ function testReconnectInvalidURL() {
} }
function testReconnectIframeConnectedConnection() { function testReconnectIframeConnectedConnection() {
info('--- testReconnectIframeConnectedConnection ---'); info("--- testReconnectIframeConnectedConnection ---");
gScript.sendAsyncMessage('save-control-channel-listener'); gScript.sendAsyncMessage("save-control-channel-listener");
return Promise.all([ return Promise.all([
new Promise(function(aResolve, aReject) { new Promise(function(aResolve, aReject) {
commandHandler["connection-connected"] = function(command) { commandHandler["connection-connected"] = function(command) {
gScript.addMessageListener('start-reconnect', function startReconnectHandler(url) { gScript.addMessageListener("start-reconnect", function startReconnectHandler(url) {
gScript.removeMessageListener('start-reconnect', startReconnectHandler); gScript.removeMessageListener("start-reconnect", startReconnectHandler);
gScript.sendAsyncMessage('trigger-reconnected-acked', url); gScript.sendAsyncMessage("trigger-reconnected-acked", url);
}); });
var request1 = new PresentationRequest("http://example1.com"); var request1 = new PresentationRequest("http://example1.com");
@ -237,7 +237,7 @@ function testReconnectIframeConnectedConnection() {
is(aConnection.state, "connecting", "The state should be connecting."); is(aConnection.state, "connecting", "The state should be connecting.");
aConnection.onclose = function() { aConnection.onclose = function() {
delete commandHandler["connection-connected"]; delete commandHandler["connection-connected"];
gScript.sendAsyncMessage('restore-control-channel-listener'); gScript.sendAsyncMessage("restore-control-channel-listener");
aResolve(); aResolve();
}; };
aConnection.close(); aConnection.close();
@ -262,12 +262,12 @@ function testReconnectIframeConnectedConnection() {
function testReconnectIframeClosedConnection() { function testReconnectIframeClosedConnection() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('--- testReconnectIframeClosedConnection ---'); info("--- testReconnectIframeClosedConnection ---");
gScript.sendAsyncMessage('save-control-channel-listener'); gScript.sendAsyncMessage("save-control-channel-listener");
commandHandler["connection-closed"] = function(command) { commandHandler["connection-closed"] = function(command) {
gScript.addMessageListener('start-reconnect', function startReconnectHandler(url) { gScript.addMessageListener("start-reconnect", function startReconnectHandler(url) {
gScript.removeMessageListener('start-reconnect', startReconnectHandler); gScript.removeMessageListener("start-reconnect", startReconnectHandler);
gScript.sendAsyncMessage('trigger-reconnected-acked', url); gScript.sendAsyncMessage("trigger-reconnected-acked", url);
}); });
var request1 = new PresentationRequest("http://example1.com"); var request1 = new PresentationRequest("http://example1.com");
@ -283,7 +283,7 @@ function testReconnectIframeClosedConnection() {
aResolve(); aResolve();
}; };
aConnection.close(); aConnection.close();
gScript.sendAsyncMessage('restore-control-channel-listener'); gScript.sendAsyncMessage("restore-control-channel-listener");
}; };
}, },
function(aError) { function(aError) {
@ -299,11 +299,11 @@ function testReconnectIframeClosedConnection() {
function testReconnect() { function testReconnect() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('--- testReconnect ---'); info("--- testReconnect ---");
gScript.addMessageListener('start-reconnect', function startReconnectHandler(url) { gScript.addMessageListener("start-reconnect", function startReconnectHandler(url) {
gScript.removeMessageListener('start-reconnect', startReconnectHandler); gScript.removeMessageListener("start-reconnect", startReconnectHandler);
is(url, "http://example.com/", "URLs should be the same."); is(url, "http://example.com/", "URLs should be the same.");
gScript.sendAsyncMessage('trigger-reconnected-acked', url); gScript.sendAsyncMessage("trigger-reconnected-acked", url);
}); });
request.reconnect(connection.id).then( request.reconnect(connection.id).then(
@ -318,12 +318,12 @@ function testReconnect() {
is(aConnection.state, "connected", "Connection should be connected."); is(aConnection.state, "connected", "Connection should be connected.");
const incomingMessage = "test incoming message"; const incomingMessage = "test incoming message";
aConnection.addEventListener('message', function(aEvent) { aConnection.addEventListener("message", function(aEvent) {
is(aEvent.data, incomingMessage, "An incoming message should be received."); is(aEvent.data, incomingMessage, "An incoming message should be received.");
aResolve(); aResolve();
}, {once: true}); }, {once: true});
frameScript.sendAsyncMessage('trigger-incoming-message', incomingMessage); frameScript.sendAsyncMessage("trigger-incoming-message", incomingMessage);
}; };
}, },
function(aError) { function(aError) {
@ -336,14 +336,14 @@ function testReconnect() {
} }
function teardown() { function teardown() {
gScript.addMessageListener('teardown-complete', function teardownCompleteHandler() { gScript.addMessageListener("teardown-complete", function teardownCompleteHandler() {
gScript.removeMessageListener('teardown-complete', teardownCompleteHandler); gScript.removeMessageListener("teardown-complete", teardownCompleteHandler);
gScript.destroy(); gScript.destroy();
info('teardown-complete'); info("teardown-complete");
SimpleTest.finish(); SimpleTest.finish();
}); });
gScript.sendAsyncMessage('teardown'); gScript.sendAsyncMessage("teardown");
} }
function runTests() { function runTests() {
@ -364,9 +364,9 @@ function runTests() {
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
SpecialPowers.pushPermissions([ SpecialPowers.pushPermissions([
{type: 'presentation-device-manage', allow: false, context: document}, {type: "presentation-device-manage", allow: false, context: document},
], function() { ], function() {
SpecialPowers.pushPrefEnv({ 'set': [["dom.presentation.enabled", true], SpecialPowers.pushPrefEnv({ "set": [["dom.presentation.enabled", true],
["dom.presentation.controller.enabled", true], ["dom.presentation.controller.enabled", true],
["dom.presentation.receiver.enabled", true], ["dom.presentation.receiver.enabled", true],
["dom.presentation.session_transport.data_channel.enable", true]]}, ["dom.presentation.session_transport.data_channel.enable", true]]},

View file

@ -35,7 +35,7 @@ function setup() {
startTest(); startTest();
} }
} else if (/^DONE$/.exec(message)) { } else if (/^DONE$/.exec(message)) {
window.removeEventListener('message', listener); window.removeEventListener("message", listener);
SimpleTest.finish(); SimpleTest.finish();
} }
}, false); }, false);

View file

@ -12,9 +12,9 @@
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1276378">Test onTerminateRequest at sender side</a> <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1276378">Test onTerminateRequest at sender side</a>
<script type="application/javascript"> <script type="application/javascript">
'use strict'; "use strict";
var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL('PresentationSessionChromeScript.js')); var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL("PresentationSessionChromeScript.js"));
var request; var request;
var connection; var connection;
@ -29,9 +29,9 @@ function testSetup() {
aAvailability.onchange = null; aAvailability.onchange = null;
ok(aAvailability.value, "Device should be available."); ok(aAvailability.value, "Device should be available.");
aResolve(); aResolve();
} };
gScript.sendAsyncMessage('trigger-device-add'); gScript.sendAsyncMessage("trigger-device-add");
}, },
function(aError) { function(aError) {
ok(false, "Error occurred when getting availability: " + aError); ok(false, "Error occurred when getting availability: " + aError);
@ -44,47 +44,47 @@ function testSetup() {
function testStartConnection() { function testStartConnection() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
gScript.addMessageListener('device-prompt', function devicePromptHandler() { gScript.addMessageListener("device-prompt", function devicePromptHandler() {
gScript.removeMessageListener('device-prompt', devicePromptHandler); gScript.removeMessageListener("device-prompt", devicePromptHandler);
info("Device prompt is triggered."); info("Device prompt is triggered.");
gScript.sendAsyncMessage('trigger-device-prompt-select'); gScript.sendAsyncMessage("trigger-device-prompt-select");
}); });
gScript.addMessageListener('control-channel-established', function controlChannelEstablishedHandler() { gScript.addMessageListener("control-channel-established", function controlChannelEstablishedHandler() {
gScript.removeMessageListener('control-channel-established', controlChannelEstablishedHandler); gScript.removeMessageListener("control-channel-established", controlChannelEstablishedHandler);
info("A control channel is established."); info("A control channel is established.");
gScript.sendAsyncMessage('trigger-control-channel-open'); gScript.sendAsyncMessage("trigger-control-channel-open");
}); });
gScript.addMessageListener('control-channel-opened', function controlChannelOpenedHandler(aReason) { gScript.addMessageListener("control-channel-opened", function controlChannelOpenedHandler(aReason) {
gScript.removeMessageListener('control-channel-opened', controlChannelOpenedHandler); gScript.removeMessageListener("control-channel-opened", controlChannelOpenedHandler);
info("The control channel is opened."); info("The control channel is opened.");
}); });
gScript.addMessageListener('control-channel-closed', function controlChannelClosedHandler(aReason) { gScript.addMessageListener("control-channel-closed", function controlChannelClosedHandler(aReason) {
gScript.removeMessageListener('control-channel-closed', controlChannelClosedHandler); gScript.removeMessageListener("control-channel-closed", controlChannelClosedHandler);
info("The control channel is closed. " + aReason); info("The control channel is closed. " + aReason);
}); });
gScript.addMessageListener('offer-sent', function offerSentHandler(aIsValid) { gScript.addMessageListener("offer-sent", function offerSentHandler(aIsValid) {
gScript.removeMessageListener('offer-sent', offerSentHandler); gScript.removeMessageListener("offer-sent", offerSentHandler);
ok(aIsValid, "A valid offer is sent out."); ok(aIsValid, "A valid offer is sent out.");
gScript.sendAsyncMessage('trigger-incoming-transport'); gScript.sendAsyncMessage("trigger-incoming-transport");
}); });
gScript.addMessageListener('answer-received', function answerReceivedHandler() { gScript.addMessageListener("answer-received", function answerReceivedHandler() {
gScript.removeMessageListener('answer-received', answerReceivedHandler); gScript.removeMessageListener("answer-received", answerReceivedHandler);
info("An answer is received."); info("An answer is received.");
}); });
gScript.addMessageListener('data-transport-initialized', function dataTransportInitializedHandler() { gScript.addMessageListener("data-transport-initialized", function dataTransportInitializedHandler() {
gScript.removeMessageListener('data-transport-initialized', dataTransportInitializedHandler); gScript.removeMessageListener("data-transport-initialized", dataTransportInitializedHandler);
info("Data transport channel is initialized."); info("Data transport channel is initialized.");
gScript.sendAsyncMessage('trigger-incoming-answer'); gScript.sendAsyncMessage("trigger-incoming-answer");
}); });
gScript.addMessageListener('data-transport-notification-enabled', function dataTransportNotificationEnabledHandler() { gScript.addMessageListener("data-transport-notification-enabled", function dataTransportNotificationEnabledHandler() {
gScript.removeMessageListener('data-transport-notification-enabled', dataTransportNotificationEnabledHandler); gScript.removeMessageListener("data-transport-notification-enabled", dataTransportNotificationEnabledHandler);
info("Data notification is enabled for data transport channel."); info("Data notification is enabled for data transport channel.");
}); });
@ -126,18 +126,18 @@ function testStartConnection() {
function testOnTerminateRequest() { function testOnTerminateRequest() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
gScript.addMessageListener('control-channel-opened', function controlChannelOpenedHandler(aReason) { gScript.addMessageListener("control-channel-opened", function controlChannelOpenedHandler(aReason) {
gScript.removeMessageListener('control-channel-opened', controlChannelOpenedHandler); gScript.removeMessageListener("control-channel-opened", controlChannelOpenedHandler);
info("The control channel is opened."); info("The control channel is opened.");
}); });
gScript.addMessageListener('control-channel-closed', function controlChannelClosedHandler(aReason) { gScript.addMessageListener("control-channel-closed", function controlChannelClosedHandler(aReason) {
gScript.removeMessageListener('control-channel-closed', controlChannelClosedHandler); gScript.removeMessageListener("control-channel-closed", controlChannelClosedHandler);
info("The control channel is closed. " + aReason); info("The control channel is closed. " + aReason);
}); });
gScript.addMessageListener('data-transport-closed', function dataTransportClosedHandler(aReason) { gScript.addMessageListener("data-transport-closed", function dataTransportClosedHandler(aReason) {
gScript.removeMessageListener('data-transport-closed', dataTransportClosedHandler); gScript.removeMessageListener("data-transport-closed", dataTransportClosedHandler);
info("The data transport is closed. " + aReason); info("The data transport is closed. " + aReason);
}); });
@ -147,19 +147,19 @@ function testOnTerminateRequest() {
aResolve(); aResolve();
}; };
gScript.sendAsyncMessage('trigger-incoming-terminate-request'); gScript.sendAsyncMessage("trigger-incoming-terminate-request");
gScript.sendAsyncMessage('trigger-control-channel-open'); gScript.sendAsyncMessage("trigger-control-channel-open");
}); });
} }
function teardown() { function teardown() {
gScript.addMessageListener('teardown-complete', function teardownCompleteHandler() { gScript.addMessageListener("teardown-complete", function teardownCompleteHandler() {
gScript.removeMessageListener('teardown-complete', teardownCompleteHandler); gScript.removeMessageListener("teardown-complete", teardownCompleteHandler);
gScript.destroy(); gScript.destroy();
SimpleTest.finish(); SimpleTest.finish();
}); });
gScript.sendAsyncMessage('teardown'); gScript.sendAsyncMessage("teardown");
} }
function runTests() { function runTests() {
@ -173,9 +173,9 @@ function runTests() {
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
SpecialPowers.pushPermissions([ SpecialPowers.pushPermissions([
{type: 'presentation-device-manage', allow: false, context: document}, {type: "presentation-device-manage", allow: false, context: document},
], function() { ], function() {
SpecialPowers.pushPrefEnv({ 'set': [["dom.presentation.enabled", true], SpecialPowers.pushPrefEnv({ "set": [["dom.presentation.enabled", true],
["dom.presentation.controller.enabled", true], ["dom.presentation.controller.enabled", true],
["dom.presentation.receiver.enabled", false], ["dom.presentation.receiver.enabled", false],
["dom.presentation.session_transport.data_channel.enable", false]]}, ["dom.presentation.session_transport.data_channel.enable", false]]},

View file

@ -12,9 +12,9 @@
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1239242">Test startWithDevice for B2G Presentation API at sender side</a> <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1239242">Test startWithDevice for B2G Presentation API at sender side</a>
<script type="application/javascript"> <script type="application/javascript">
'use strict'; "use strict";
var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL('PresentationSessionChromeScript.js')); var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL("PresentationSessionChromeScript.js"));
var request; var request;
var connection; var connection;
@ -29,9 +29,9 @@ function testSetup() {
aAvailability.onchange = null; aAvailability.onchange = null;
ok(aAvailability.value, "Device should be available."); ok(aAvailability.value, "Device should be available.");
aResolve(); aResolve();
} };
gScript.sendAsyncMessage('trigger-device-add'); gScript.sendAsyncMessage("trigger-device-add");
}, },
function(aError) { function(aError) {
ok(false, "Error occurred when getting availability: " + aError); ok(false, "Error occurred when getting availability: " + aError);
@ -44,48 +44,48 @@ function testSetup() {
function testStartConnectionWithDevice() { function testStartConnectionWithDevice() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
gScript.addMessageListener('device-prompt', function devicePromptHandler() { gScript.addMessageListener("device-prompt", function devicePromptHandler() {
gScript.removeMessageListener('device-prompt', devicePromptHandler); gScript.removeMessageListener("device-prompt", devicePromptHandler);
ok(false, "Device prompt should not be triggered."); ok(false, "Device prompt should not be triggered.");
teardown(); teardown();
aReject(); aReject();
}); });
gScript.addMessageListener('control-channel-established', function controlChannelEstablishedHandler() { gScript.addMessageListener("control-channel-established", function controlChannelEstablishedHandler() {
gScript.removeMessageListener('control-channel-established', controlChannelEstablishedHandler); gScript.removeMessageListener("control-channel-established", controlChannelEstablishedHandler);
info("A control channel is established."); info("A control channel is established.");
gScript.sendAsyncMessage('trigger-control-channel-open'); gScript.sendAsyncMessage("trigger-control-channel-open");
}); });
gScript.addMessageListener('control-channel-opened', function controlChannelOpenedHandler(aReason) { gScript.addMessageListener("control-channel-opened", function controlChannelOpenedHandler(aReason) {
gScript.removeMessageListener('control-channel-opened', controlChannelOpenedHandler); gScript.removeMessageListener("control-channel-opened", controlChannelOpenedHandler);
info("The control channel is opened."); info("The control channel is opened.");
}); });
gScript.addMessageListener('control-channel-closed', function controlChannelClosedHandler(aReason) { gScript.addMessageListener("control-channel-closed", function controlChannelClosedHandler(aReason) {
gScript.removeMessageListener('control-channel-closed', controlChannelClosedHandler); gScript.removeMessageListener("control-channel-closed", controlChannelClosedHandler);
info("The control channel is closed. " + aReason); info("The control channel is closed. " + aReason);
}); });
gScript.addMessageListener('offer-sent', function offerSentHandler(aIsValid) { gScript.addMessageListener("offer-sent", function offerSentHandler(aIsValid) {
gScript.removeMessageListener('offer-sent', offerSentHandler); gScript.removeMessageListener("offer-sent", offerSentHandler);
ok(aIsValid, "A valid offer is sent out."); ok(aIsValid, "A valid offer is sent out.");
gScript.sendAsyncMessage('trigger-incoming-transport'); gScript.sendAsyncMessage("trigger-incoming-transport");
}); });
gScript.addMessageListener('answer-received', function answerReceivedHandler() { gScript.addMessageListener("answer-received", function answerReceivedHandler() {
gScript.removeMessageListener('answer-received', answerReceivedHandler); gScript.removeMessageListener("answer-received", answerReceivedHandler);
info("An answer is received."); info("An answer is received.");
}); });
gScript.addMessageListener('data-transport-initialized', function dataTransportInitializedHandler() { gScript.addMessageListener("data-transport-initialized", function dataTransportInitializedHandler() {
gScript.removeMessageListener('data-transport-initialized', dataTransportInitializedHandler); gScript.removeMessageListener("data-transport-initialized", dataTransportInitializedHandler);
info("Data transport channel is initialized."); info("Data transport channel is initialized.");
gScript.sendAsyncMessage('trigger-incoming-answer'); gScript.sendAsyncMessage("trigger-incoming-answer");
}); });
gScript.addMessageListener('data-transport-notification-enabled', function dataTransportNotificationEnabledHandler() { gScript.addMessageListener("data-transport-notification-enabled", function dataTransportNotificationEnabledHandler() {
gScript.removeMessageListener('data-transport-notification-enabled', dataTransportNotificationEnabledHandler); gScript.removeMessageListener("data-transport-notification-enabled", dataTransportNotificationEnabledHandler);
info("Data notification is enabled for data transport channel."); info("Data notification is enabled for data transport channel.");
}); });
@ -100,7 +100,7 @@ function testStartConnectionWithDevice() {
} }
}; };
request.startWithDevice('id').then( request.startWithDevice("id").then(
function(aConnection) { function(aConnection) {
connection = aConnection; connection = aConnection;
ok(connection, "Connection should be available."); ok(connection, "Connection should be available.");
@ -127,14 +127,14 @@ function testStartConnectionWithDevice() {
function testStartConnectionWithDeviceNotFoundError() { function testStartConnectionWithDeviceNotFoundError() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
request.startWithDevice('').then( request.startWithDevice("").then(
function(aConnection) { function(aConnection) {
ok(false, "Should not establish connection to an unknown device"); ok(false, "Should not establish connection to an unknown device");
teardown(); teardown();
aReject(); aReject();
}, },
function(aError) { function(aError) {
is(aError.name, 'NotFoundError', "Expect NotFoundError occurred when establishing a connection"); is(aError.name, "NotFoundError", "Expect NotFoundError occurred when establishing a connection");
aResolve(); aResolve();
} }
); );
@ -142,13 +142,13 @@ function testStartConnectionWithDeviceNotFoundError() {
} }
function teardown() { function teardown() {
gScript.addMessageListener('teardown-complete', function teardownCompleteHandler() { gScript.addMessageListener("teardown-complete", function teardownCompleteHandler() {
gScript.removeMessageListener('teardown-complete', teardownCompleteHandler); gScript.removeMessageListener("teardown-complete", teardownCompleteHandler);
gScript.destroy(); gScript.destroy();
SimpleTest.finish(); SimpleTest.finish();
}); });
gScript.sendAsyncMessage('teardown'); gScript.sendAsyncMessage("teardown");
} }
function runTests() { function runTests() {
@ -161,7 +161,7 @@ function runTests() {
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
SpecialPowers.pushPrefEnv({ 'set': [["dom.presentation.enabled", true], SpecialPowers.pushPrefEnv({ "set": [["dom.presentation.enabled", true],
["dom.presentation.session_transport.data_channel.enable", false], ["dom.presentation.session_transport.data_channel.enable", false],
["dom.presentation.controller.enabled", true], ["dom.presentation.controller.enabled", true],
["dom.presentation.test.enabled", true], ["dom.presentation.test.enabled", true],

View file

@ -15,25 +15,25 @@
<pre id="test"></pre> <pre id="test"></pre>
<script type="application/javascript"> <script type="application/javascript">
'use strict'; "use strict";
var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL('PresentationSessionChromeScript.js')); var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL("PresentationSessionChromeScript.js"));
var receiverUrl = SimpleTest.getTestFileURL('file_presentation_receiver.html'); var receiverUrl = SimpleTest.getTestFileURL("file_presentation_receiver.html");
var obs = SpecialPowers.Cc["@mozilla.org/observer-service;1"] var obs = SpecialPowers.Cc["@mozilla.org/observer-service;1"]
.getService(SpecialPowers.Ci.nsIObserverService); .getService(SpecialPowers.Ci.nsIObserverService);
function setup() { function setup() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
gScript.sendAsyncMessage('trigger-device-add'); gScript.sendAsyncMessage("trigger-device-add");
var iframe = document.createElement('iframe'); var iframe = document.createElement("iframe");
iframe.setAttribute('mozbrowser', 'true'); iframe.setAttribute("mozbrowser", "true");
iframe.setAttribute('mozpresentation', receiverUrl); iframe.setAttribute("mozpresentation", receiverUrl);
iframe.setAttribute('src', receiverUrl); iframe.setAttribute("src", receiverUrl);
// This event is triggered when the iframe calls "postMessage". // This event is triggered when the iframe calls "postMessage".
iframe.addEventListener('mozbrowsershowmodalprompt', function listener(aEvent) { iframe.addEventListener("mozbrowsershowmodalprompt", function listener(aEvent) {
var message = aEvent.detail.message; var message = aEvent.detail.message;
if (/^OK /.exec(message)) { if (/^OK /.exec(message)) {
ok(true, "Message from iframe: " + message); ok(true, "Message from iframe: " + message);
@ -42,11 +42,11 @@ function setup() {
} else if (/^INFO /.exec(message)) { } else if (/^INFO /.exec(message)) {
info("Message from iframe: " + message); info("Message from iframe: " + message);
} else if (/^COMMAND /.exec(message)) { } else if (/^COMMAND /.exec(message)) {
var command = JSON.parse(message.replace(/^COMMAND /, '')); var command = JSON.parse(message.replace(/^COMMAND /, ""));
gScript.sendAsyncMessage(command.name, command.data); gScript.sendAsyncMessage(command.name, command.data);
} else if (/^DONE$/.exec(message)) { } else if (/^DONE$/.exec(message)) {
ok(true, "Messaging from iframe complete."); ok(true, "Messaging from iframe complete.");
iframe.removeEventListener('mozbrowsershowmodalprompt', listener); iframe.removeEventListener("mozbrowsershowmodalprompt", listener);
teardown(); teardown();
} }
@ -57,30 +57,30 @@ function setup() {
aResolve(iframe); aResolve(iframe);
}); });
obs.notifyObservers(promise, 'setup-request-promise'); obs.notifyObservers(promise, "setup-request-promise");
gScript.addMessageListener('offer-received', function offerReceivedHandler() { gScript.addMessageListener("offer-received", function offerReceivedHandler() {
gScript.removeMessageListener('offer-received', offerReceivedHandler); gScript.removeMessageListener("offer-received", offerReceivedHandler);
info("An offer is received."); info("An offer is received.");
}); });
gScript.addMessageListener('answer-sent', function answerSentHandler(aIsValid) { gScript.addMessageListener("answer-sent", function answerSentHandler(aIsValid) {
gScript.removeMessageListener('answer-sent', answerSentHandler); gScript.removeMessageListener("answer-sent", answerSentHandler);
ok(aIsValid, "A valid answer is sent."); ok(aIsValid, "A valid answer is sent.");
}); });
gScript.addMessageListener('control-channel-closed', function controlChannelClosedHandler(aReason) { gScript.addMessageListener("control-channel-closed", function controlChannelClosedHandler(aReason) {
gScript.removeMessageListener('control-channel-closed', controlChannelClosedHandler); gScript.removeMessageListener("control-channel-closed", controlChannelClosedHandler);
is(aReason, SpecialPowers.Cr.NS_OK, "The control channel is closed normally."); is(aReason, SpecialPowers.Cr.NS_OK, "The control channel is closed normally.");
}); });
gScript.addMessageListener('data-transport-notification-enabled', function dataTransportNotificationEnabledHandler() { gScript.addMessageListener("data-transport-notification-enabled", function dataTransportNotificationEnabledHandler() {
gScript.removeMessageListener('data-transport-notification-enabled', dataTransportNotificationEnabledHandler); gScript.removeMessageListener("data-transport-notification-enabled", dataTransportNotificationEnabledHandler);
info("Data notification is enabled for data transport channel."); info("Data notification is enabled for data transport channel.");
}); });
gScript.addMessageListener('data-transport-closed', function dataTransportClosedHandler(aReason) { gScript.addMessageListener("data-transport-closed", function dataTransportClosedHandler(aReason) {
gScript.removeMessageListener('data-transport-closed', dataTransportClosedHandler); gScript.removeMessageListener("data-transport-closed", dataTransportClosedHandler);
is(aReason, SpecialPowers.Cr.NS_OK, "The data transport should be closed normally."); is(aReason, SpecialPowers.Cr.NS_OK, "The data transport should be closed normally.");
}); });
@ -90,8 +90,8 @@ function setup() {
function testIncomingSessionRequest() { function testIncomingSessionRequest() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
gScript.addMessageListener('receiver-launching', function launchReceiverHandler(aSessionId) { gScript.addMessageListener("receiver-launching", function launchReceiverHandler(aSessionId) {
gScript.removeMessageListener('receiver-launching', launchReceiverHandler); gScript.removeMessageListener("receiver-launching", launchReceiverHandler);
info("Trying to launch receiver page."); info("Trying to launch receiver page.");
ok(navigator.presentation, "navigator.presentation should be available in in-process pages."); ok(navigator.presentation, "navigator.presentation should be available in in-process pages.");
@ -99,18 +99,18 @@ function testIncomingSessionRequest() {
aResolve(); aResolve();
}); });
gScript.sendAsyncMessage('trigger-incoming-session-request', receiverUrl); gScript.sendAsyncMessage("trigger-incoming-session-request", receiverUrl);
}); });
} }
function teardown() { function teardown() {
gScript.addMessageListener('teardown-complete', function teardownCompleteHandler() { gScript.addMessageListener("teardown-complete", function teardownCompleteHandler() {
gScript.removeMessageListener('teardown-complete', teardownCompleteHandler); gScript.removeMessageListener("teardown-complete", teardownCompleteHandler);
gScript.destroy(); gScript.destroy();
SimpleTest.finish(); SimpleTest.finish();
}); });
gScript.sendAsyncMessage('teardown'); gScript.sendAsyncMessage("teardown");
} }
function runTests() { function runTests() {
@ -120,10 +120,10 @@ function runTests() {
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
SpecialPowers.pushPermissions([ SpecialPowers.pushPermissions([
{type: 'presentation-device-manage', allow: false, context: document}, {type: "presentation-device-manage", allow: false, context: document},
{type: 'browser', allow: true, context: document}, {type: "browser", allow: true, context: document},
], function() { ], function() {
SpecialPowers.pushPrefEnv({ 'set': [["dom.presentation.enabled", true], SpecialPowers.pushPrefEnv({ "set": [["dom.presentation.enabled", true],
["dom.presentation.controller.enabled", false], ["dom.presentation.controller.enabled", false],
["dom.presentation.receiver.enabled", true], ["dom.presentation.receiver.enabled", true],
["dom.mozBrowserFramesEnabled", true], ["dom.mozBrowserFramesEnabled", true],

View file

@ -12,20 +12,20 @@
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1069230">Test for connection establishing errors of B2G Presentation API at receiver side</a> <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1069230">Test for connection establishing errors of B2G Presentation API at receiver side</a>
<script type="application/javascript"> <script type="application/javascript">
'use strict'; "use strict";
var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL('PresentationSessionChromeScript.js')); var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL("PresentationSessionChromeScript.js"));
var receiverUrl = SimpleTest.getTestFileURL('file_presentation_receiver_establish_connection_error.html'); var receiverUrl = SimpleTest.getTestFileURL("file_presentation_receiver_establish_connection_error.html");
var obs = SpecialPowers.Cc["@mozilla.org/observer-service;1"] var obs = SpecialPowers.Cc["@mozilla.org/observer-service;1"]
.getService(SpecialPowers.Ci.nsIObserverService); .getService(SpecialPowers.Ci.nsIObserverService);
function setup() { function setup() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
gScript.sendAsyncMessage('trigger-device-add'); gScript.sendAsyncMessage("trigger-device-add");
var iframe = document.createElement('iframe'); var iframe = document.createElement("iframe");
iframe.setAttribute('src', receiverUrl); iframe.setAttribute("src", receiverUrl);
iframe.setAttribute("mozbrowser", "true"); iframe.setAttribute("mozbrowser", "true");
iframe.setAttribute("mozpresentation", receiverUrl); iframe.setAttribute("mozpresentation", receiverUrl);
@ -53,10 +53,10 @@ function setup() {
aResolve(iframe); aResolve(iframe);
}); });
obs.notifyObservers(promise, 'setup-request-promise'); obs.notifyObservers(promise, "setup-request-promise");
gScript.addMessageListener('control-channel-closed', function controlChannelClosedHandler(aReason) { gScript.addMessageListener("control-channel-closed", function controlChannelClosedHandler(aReason) {
gScript.removeMessageListener('control-channel-closed', controlChannelClosedHandler); gScript.removeMessageListener("control-channel-closed", controlChannelClosedHandler);
is(aReason, 0x80004004 /* NS_ERROR_ABORT */, "The control channel is closed abnormally."); is(aReason, 0x80004004 /* NS_ERROR_ABORT */, "The control channel is closed abnormally.");
}); });
@ -66,25 +66,25 @@ function setup() {
function testIncomingSessionRequest() { function testIncomingSessionRequest() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
gScript.addMessageListener('receiver-launching', function launchReceiverHandler(aSessionId) { gScript.addMessageListener("receiver-launching", function launchReceiverHandler(aSessionId) {
gScript.removeMessageListener('receiver-launching', launchReceiverHandler); gScript.removeMessageListener("receiver-launching", launchReceiverHandler);
info("Trying to launch receiver page."); info("Trying to launch receiver page.");
aResolve(); aResolve();
}); });
gScript.sendAsyncMessage('trigger-incoming-session-request', receiverUrl); gScript.sendAsyncMessage("trigger-incoming-session-request", receiverUrl);
}); });
} }
function teardown() { function teardown() {
gScript.addMessageListener('teardown-complete', function teardownCompleteHandler() { gScript.addMessageListener("teardown-complete", function teardownCompleteHandler() {
gScript.removeMessageListener('teardown-complete', teardownCompleteHandler); gScript.removeMessageListener("teardown-complete", teardownCompleteHandler);
gScript.destroy(); gScript.destroy();
SimpleTest.finish(); SimpleTest.finish();
}); });
gScript.sendAsyncMessage('teardown'); gScript.sendAsyncMessage("teardown");
} }
function runTests() { function runTests() {
@ -94,10 +94,10 @@ function runTests() {
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
SpecialPowers.pushPermissions([ SpecialPowers.pushPermissions([
{type: 'presentation-device-manage', allow: false, context: document}, {type: "presentation-device-manage", allow: false, context: document},
{type: "browser", allow: true, context: document}, {type: "browser", allow: true, context: document},
], function() { ], function() {
SpecialPowers.pushPrefEnv({ 'set': [["dom.presentation.enabled", true], SpecialPowers.pushPrefEnv({ "set": [["dom.presentation.enabled", true],
["dom.presentation.receiver.enabled", true], ["dom.presentation.receiver.enabled", true],
["dom.presentation.session_transport.data_channel.enable", false], ["dom.presentation.session_transport.data_channel.enable", false],
["dom.mozBrowserFramesEnabled", true], ["dom.mozBrowserFramesEnabled", true],

View file

@ -12,21 +12,21 @@
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1069230">Test for connection establishing timeout of B2G Presentation API at receiver side</a> <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1069230">Test for connection establishing timeout of B2G Presentation API at receiver side</a>
<script type="application/javascript"> <script type="application/javascript">
'use strict'; "use strict";
var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL('PresentationSessionChromeScript.js')); var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL("PresentationSessionChromeScript.js"));
var obs = SpecialPowers.Cc["@mozilla.org/observer-service;1"] var obs = SpecialPowers.Cc["@mozilla.org/observer-service;1"]
.getService(SpecialPowers.Ci.nsIObserverService); .getService(SpecialPowers.Ci.nsIObserverService);
function setup() { function setup() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
gScript.sendAsyncMessage('trigger-device-add'); gScript.sendAsyncMessage("trigger-device-add");
var promise = new Promise(function(aResolve, aReject) { var promise = new Promise(function(aResolve, aReject) {
// In order to trigger timeout, do not resolve the promise. // In order to trigger timeout, do not resolve the promise.
}); });
obs.notifyObservers(promise, 'setup-request-promise'); obs.notifyObservers(promise, "setup-request-promise");
aResolve(); aResolve();
}); });
@ -34,29 +34,29 @@ function setup() {
function testIncomingSessionRequestReceiverLaunchTimeout() { function testIncomingSessionRequestReceiverLaunchTimeout() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
gScript.addMessageListener('receiver-launching', function launchReceiverHandler(aSessionId) { gScript.addMessageListener("receiver-launching", function launchReceiverHandler(aSessionId) {
gScript.removeMessageListener('receiver-launching', launchReceiverHandler); gScript.removeMessageListener("receiver-launching", launchReceiverHandler);
info("Trying to launch receiver page."); info("Trying to launch receiver page.");
}); });
gScript.addMessageListener('control-channel-closed', function controlChannelClosedHandler(aReason) { gScript.addMessageListener("control-channel-closed", function controlChannelClosedHandler(aReason) {
gScript.removeMessageListener('control-channel-closed', controlChannelClosedHandler); gScript.removeMessageListener("control-channel-closed", controlChannelClosedHandler);
is(aReason, 0x80530017 /* NS_ERROR_DOM_TIMEOUT_ERR */, "The control channel is closed due to timeout."); is(aReason, 0x80530017 /* NS_ERROR_DOM_TIMEOUT_ERR */, "The control channel is closed due to timeout.");
aResolve(); aResolve();
}); });
gScript.sendAsyncMessage('trigger-incoming-session-request', 'http://example.com'); gScript.sendAsyncMessage("trigger-incoming-session-request", "http://example.com");
}); });
} }
function teardown() { function teardown() {
gScript.addMessageListener('teardown-complete', function teardownCompleteHandler() { gScript.addMessageListener("teardown-complete", function teardownCompleteHandler() {
gScript.removeMessageListener('teardown-complete', teardownCompleteHandler); gScript.removeMessageListener("teardown-complete", teardownCompleteHandler);
gScript.destroy(); gScript.destroy();
SimpleTest.finish(); SimpleTest.finish();
}); });
gScript.sendAsyncMessage('teardown'); gScript.sendAsyncMessage("teardown");
} }
function runTests() { function runTests() {
@ -67,9 +67,9 @@ function runTests() {
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
SpecialPowers.pushPermissions([ SpecialPowers.pushPermissions([
{type: 'presentation-device-manage', allow: false, context: document}, {type: "presentation-device-manage", allow: false, context: document},
], function() { ], function() {
SpecialPowers.pushPrefEnv({ 'set': [["dom.presentation.enabled", true], SpecialPowers.pushPrefEnv({ "set": [["dom.presentation.enabled", true],
["dom.presentation.receiver.enabled", true], ["dom.presentation.receiver.enabled", true],
["dom.presentation.session_transport.data_channel.enable", false], ["dom.presentation.session_transport.data_channel.enable", false],
["presentation.receiver.loading.timeout", 10]]}, ["presentation.receiver.loading.timeout", 10]]},

View file

@ -1,22 +1,22 @@
'use strict'; "use strict";
var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL('PresentationSessionChromeScript.js')); var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL("PresentationSessionChromeScript.js"));
var receiverUrl = SimpleTest.getTestFileURL('file_presentation_unknown_content_type.test'); var receiverUrl = SimpleTest.getTestFileURL("file_presentation_unknown_content_type.test");
var obs = SpecialPowers.Cc['@mozilla.org/observer-service;1'] var obs = SpecialPowers.Cc["@mozilla.org/observer-service;1"]
.getService(SpecialPowers.Ci.nsIObserverService); .getService(SpecialPowers.Ci.nsIObserverService);
var receiverIframe; var receiverIframe;
function setup() { function setup() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
gScript.sendAsyncMessage('trigger-device-add'); gScript.sendAsyncMessage("trigger-device-add");
receiverIframe = document.createElement('iframe'); receiverIframe = document.createElement("iframe");
receiverIframe.setAttribute('mozbrowser', 'true'); receiverIframe.setAttribute("mozbrowser", "true");
receiverIframe.setAttribute('mozpresentation', receiverUrl); receiverIframe.setAttribute("mozpresentation", receiverUrl);
receiverIframe.setAttribute('src', receiverUrl); receiverIframe.setAttribute("src", receiverUrl);
var oop = !location.pathname.includes('_inproc'); var oop = !location.pathname.includes("_inproc");
receiverIframe.setAttribute("remote", oop); receiverIframe.setAttribute("remote", oop);
var promise = new Promise(function(aResolve, aReject) { var promise = new Promise(function(aResolve, aReject) {
@ -24,7 +24,7 @@ function setup() {
aResolve(receiverIframe); aResolve(receiverIframe);
}); });
obs.notifyObservers(promise, 'setup-request-promise'); obs.notifyObservers(promise, "setup-request-promise");
aResolve(); aResolve();
}); });
@ -33,37 +33,37 @@ function setup() {
function testIncomingSessionRequestReceiverLaunchUnknownContentType() { function testIncomingSessionRequestReceiverLaunchUnknownContentType() {
let promise = Promise.all([ let promise = Promise.all([
new Promise(function(aResolve, aReject) { new Promise(function(aResolve, aReject) {
gScript.addMessageListener('receiver-launching', function launchReceiverHandler(aSessionId) { gScript.addMessageListener("receiver-launching", function launchReceiverHandler(aSessionId) {
gScript.removeMessageListener('receiver-launching', launchReceiverHandler); gScript.removeMessageListener("receiver-launching", launchReceiverHandler);
info('Trying to launch receiver page.'); info("Trying to launch receiver page.");
receiverIframe.addEventListener('mozbrowserclose', function() { receiverIframe.addEventListener("mozbrowserclose", function() {
ok(true, 'observe receiver window closed'); ok(true, "observe receiver window closed");
aResolve(); aResolve();
}); });
}); });
}), }),
new Promise(function(aResolve, aReject) { new Promise(function(aResolve, aReject) {
gScript.addMessageListener('control-channel-closed', function controlChannelClosedHandler(aReason) { gScript.addMessageListener("control-channel-closed", function controlChannelClosedHandler(aReason) {
gScript.removeMessageListener('control-channel-closed', controlChannelClosedHandler); gScript.removeMessageListener("control-channel-closed", controlChannelClosedHandler);
is(aReason, 0x80530020 /* NS_ERROR_DOM_OPERATION_ERR */, 'The control channel is closed due to load failure.'); is(aReason, 0x80530020 /* NS_ERROR_DOM_OPERATION_ERR */, "The control channel is closed due to load failure.");
aResolve(); aResolve();
}); });
}) })
]); ]);
gScript.sendAsyncMessage('trigger-incoming-session-request', receiverUrl); gScript.sendAsyncMessage("trigger-incoming-session-request", receiverUrl);
return promise; return promise;
} }
function teardown() { function teardown() {
gScript.addMessageListener('teardown-complete', function teardownCompleteHandler() { gScript.addMessageListener("teardown-complete", function teardownCompleteHandler() {
gScript.removeMessageListener('teardown-complete', teardownCompleteHandler); gScript.removeMessageListener("teardown-complete", teardownCompleteHandler);
gScript.destroy(); gScript.destroy();
SimpleTest.finish(); SimpleTest.finish();
}); });
gScript.sendAsyncMessage('teardown'); gScript.sendAsyncMessage("teardown");
} }
function runTests() { function runTests() {
@ -74,15 +74,15 @@ function runTests() {
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
SpecialPowers.pushPermissions([ SpecialPowers.pushPermissions([
{type: 'presentation-device-manage', allow: false, context: document}, {type: "presentation-device-manage", allow: false, context: document},
{type: 'browser', allow: true, context: document}, {type: "browser", allow: true, context: document},
], function() { ], function() {
SpecialPowers.pushPrefEnv({ 'set': [['dom.presentation.enabled', true], SpecialPowers.pushPrefEnv({ "set": [["dom.presentation.enabled", true],
["dom.presentation.controller.enabled", true], ["dom.presentation.controller.enabled", true],
["dom.presentation.receiver.enabled", true], ["dom.presentation.receiver.enabled", true],
['dom.presentation.session_transport.data_channel.enable', false], ["dom.presentation.session_transport.data_channel.enable", false],
['dom.mozBrowserFramesEnabled', true], ["dom.mozBrowserFramesEnabled", true],
["network.disable.ipc.security", true], ["network.disable.ipc.security", true],
['dom.ipc.tabs.disabled', false]]}, ["dom.ipc.tabs.disabled", false]]},
runTests); runTests);
}); });

View file

@ -15,11 +15,11 @@
<pre id="test"></pre> <pre id="test"></pre>
<script type="application/javascript"> <script type="application/javascript">
'use strict'; "use strict";
var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL('PresentationSessionChromeScript.js')); var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL("PresentationSessionChromeScript.js"));
var receiverUrl = SimpleTest.getTestFileURL('file_presentation_receiver.html'); var receiverUrl = SimpleTest.getTestFileURL("file_presentation_receiver.html");
var nonReceiverUrl = SimpleTest.getTestFileURL('file_presentation_non_receiver.html'); var nonReceiverUrl = SimpleTest.getTestFileURL("file_presentation_non_receiver.html");
var isReceiverFinished = false; var isReceiverFinished = false;
var isNonReceiverFinished = false; var isNonReceiverFinished = false;
@ -29,17 +29,17 @@ var obs = SpecialPowers.Cc["@mozilla.org/observer-service;1"]
function setup() { function setup() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
gScript.sendAsyncMessage('trigger-device-add'); gScript.sendAsyncMessage("trigger-device-add");
// Create a receiver OOP iframe. // Create a receiver OOP iframe.
var receiverIframe = document.createElement('iframe'); var receiverIframe = document.createElement("iframe");
receiverIframe.setAttribute('remote', 'true'); receiverIframe.setAttribute("remote", "true");
receiverIframe.setAttribute('mozbrowser', 'true'); receiverIframe.setAttribute("mozbrowser", "true");
receiverIframe.setAttribute('mozpresentation', receiverUrl); receiverIframe.setAttribute("mozpresentation", receiverUrl);
receiverIframe.setAttribute('src', receiverUrl); receiverIframe.setAttribute("src", receiverUrl);
// This event is triggered when the iframe calls "alert". // This event is triggered when the iframe calls "alert".
receiverIframe.addEventListener('mozbrowsershowmodalprompt', function receiverListener(aEvent) { receiverIframe.addEventListener("mozbrowsershowmodalprompt", function receiverListener(aEvent) {
var message = aEvent.detail.message; var message = aEvent.detail.message;
if (/^OK /.exec(message)) { if (/^OK /.exec(message)) {
ok(true, "Message from iframe: " + message); ok(true, "Message from iframe: " + message);
@ -48,11 +48,11 @@ function setup() {
} else if (/^INFO /.exec(message)) { } else if (/^INFO /.exec(message)) {
info("Message from iframe: " + message); info("Message from iframe: " + message);
} else if (/^COMMAND /.exec(message)) { } else if (/^COMMAND /.exec(message)) {
var command = JSON.parse(message.replace(/^COMMAND /, '')); var command = JSON.parse(message.replace(/^COMMAND /, ""));
gScript.sendAsyncMessage(command.name, command.data); gScript.sendAsyncMessage(command.name, command.data);
} else if (/^DONE$/.exec(message)) { } else if (/^DONE$/.exec(message)) {
ok(true, "Messaging from iframe complete."); ok(true, "Messaging from iframe complete.");
receiverIframe.removeEventListener('mozbrowsershowmodalprompt', receiverListener); receiverIframe.removeEventListener("mozbrowsershowmodalprompt", receiverListener);
isReceiverFinished = true; isReceiverFinished = true;
@ -67,16 +67,16 @@ function setup() {
aResolve(receiverIframe); aResolve(receiverIframe);
}); });
obs.notifyObservers(promise, 'setup-request-promise'); obs.notifyObservers(promise, "setup-request-promise");
// Create a non-receiver OOP iframe. // Create a non-receiver OOP iframe.
var nonReceiverIframe = document.createElement('iframe'); var nonReceiverIframe = document.createElement("iframe");
nonReceiverIframe.setAttribute('remote', 'true'); nonReceiverIframe.setAttribute("remote", "true");
nonReceiverIframe.setAttribute('mozbrowser', 'true'); nonReceiverIframe.setAttribute("mozbrowser", "true");
nonReceiverIframe.setAttribute('src', nonReceiverUrl); nonReceiverIframe.setAttribute("src", nonReceiverUrl);
// This event is triggered when the iframe calls "alert". // This event is triggered when the iframe calls "alert".
nonReceiverIframe.addEventListener('mozbrowsershowmodalprompt', function nonReceiverListener(aEvent) { nonReceiverIframe.addEventListener("mozbrowsershowmodalprompt", function nonReceiverListener(aEvent) {
var message = aEvent.detail.message; var message = aEvent.detail.message;
if (/^OK /.exec(message)) { if (/^OK /.exec(message)) {
ok(true, "Message from iframe: " + message); ok(true, "Message from iframe: " + message);
@ -85,11 +85,11 @@ function setup() {
} else if (/^INFO /.exec(message)) { } else if (/^INFO /.exec(message)) {
info("Message from iframe: " + message); info("Message from iframe: " + message);
} else if (/^COMMAND /.exec(message)) { } else if (/^COMMAND /.exec(message)) {
var command = JSON.parse(message.replace(/^COMMAND /, '')); var command = JSON.parse(message.replace(/^COMMAND /, ""));
gScript.sendAsyncMessage(command.name, command.data); gScript.sendAsyncMessage(command.name, command.data);
} else if (/^DONE$/.exec(message)) { } else if (/^DONE$/.exec(message)) {
ok(true, "Messaging from iframe complete."); ok(true, "Messaging from iframe complete.");
nonReceiverIframe.removeEventListener('mozbrowsershowmodalprompt', nonReceiverListener); nonReceiverIframe.removeEventListener("mozbrowsershowmodalprompt", nonReceiverListener);
isNonReceiverFinished = true; isNonReceiverFinished = true;
@ -101,28 +101,28 @@ function setup() {
document.body.appendChild(nonReceiverIframe); document.body.appendChild(nonReceiverIframe);
gScript.addMessageListener('offer-received', function offerReceivedHandler() { gScript.addMessageListener("offer-received", function offerReceivedHandler() {
gScript.removeMessageListener('offer-received', offerReceivedHandler); gScript.removeMessageListener("offer-received", offerReceivedHandler);
info("An offer is received."); info("An offer is received.");
}); });
gScript.addMessageListener('answer-sent', function answerSentHandler(aIsValid) { gScript.addMessageListener("answer-sent", function answerSentHandler(aIsValid) {
gScript.removeMessageListener('answer-sent', answerSentHandler); gScript.removeMessageListener("answer-sent", answerSentHandler);
ok(aIsValid, "A valid answer is sent."); ok(aIsValid, "A valid answer is sent.");
}); });
gScript.addMessageListener('control-channel-closed', function controlChannelClosedHandler(aReason) { gScript.addMessageListener("control-channel-closed", function controlChannelClosedHandler(aReason) {
gScript.removeMessageListener('control-channel-closed', controlChannelClosedHandler); gScript.removeMessageListener("control-channel-closed", controlChannelClosedHandler);
is(aReason, SpecialPowers.Cr.NS_OK, "The control channel is closed normally."); is(aReason, SpecialPowers.Cr.NS_OK, "The control channel is closed normally.");
}); });
gScript.addMessageListener('data-transport-notification-enabled', function dataTransportNotificationEnabledHandler() { gScript.addMessageListener("data-transport-notification-enabled", function dataTransportNotificationEnabledHandler() {
gScript.removeMessageListener('data-transport-notification-enabled', dataTransportNotificationEnabledHandler); gScript.removeMessageListener("data-transport-notification-enabled", dataTransportNotificationEnabledHandler);
info("Data notification is enabled for data transport channel."); info("Data notification is enabled for data transport channel.");
}); });
gScript.addMessageListener('data-transport-closed', function dataTransportClosedHandler(aReason) { gScript.addMessageListener("data-transport-closed", function dataTransportClosedHandler(aReason) {
gScript.removeMessageListener('data-transport-closed', dataTransportClosedHandler); gScript.removeMessageListener("data-transport-closed", dataTransportClosedHandler);
is(aReason, SpecialPowers.Cr.NS_OK, "The data transport should be closed normally."); is(aReason, SpecialPowers.Cr.NS_OK, "The data transport should be closed normally.");
}); });
@ -132,25 +132,25 @@ function setup() {
function testIncomingSessionRequest() { function testIncomingSessionRequest() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
gScript.addMessageListener('receiver-launching', function launchReceiverHandler(aSessionId) { gScript.addMessageListener("receiver-launching", function launchReceiverHandler(aSessionId) {
gScript.removeMessageListener('receiver-launching', launchReceiverHandler); gScript.removeMessageListener("receiver-launching", launchReceiverHandler);
info("Trying to launch receiver page."); info("Trying to launch receiver page.");
aResolve(); aResolve();
}); });
gScript.sendAsyncMessage('trigger-incoming-session-request', receiverUrl); gScript.sendAsyncMessage("trigger-incoming-session-request", receiverUrl);
}); });
} }
function teardown() { function teardown() {
gScript.addMessageListener('teardown-complete', function teardownCompleteHandler() { gScript.addMessageListener("teardown-complete", function teardownCompleteHandler() {
gScript.removeMessageListener('teardown-complete', teardownCompleteHandler); gScript.removeMessageListener("teardown-complete", teardownCompleteHandler);
gScript.destroy(); gScript.destroy();
SimpleTest.finish(); SimpleTest.finish();
}); });
gScript.sendAsyncMessage('teardown'); gScript.sendAsyncMessage("teardown");
} }
function runTests() { function runTests() {
@ -160,10 +160,10 @@ function runTests() {
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
SpecialPowers.pushPermissions([ SpecialPowers.pushPermissions([
{type: 'presentation-device-manage', allow: false, context: document}, {type: "presentation-device-manage", allow: false, context: document},
{type: 'browser', allow: true, context: document}, {type: "browser", allow: true, context: document},
], function() { ], function() {
SpecialPowers.pushPrefEnv({ 'set': [["dom.presentation.enabled", true], SpecialPowers.pushPrefEnv({ "set": [["dom.presentation.enabled", true],
["dom.presentation.controller.enabled", false], ["dom.presentation.controller.enabled", false],
["dom.presentation.receiver.enabled", true], ["dom.presentation.receiver.enabled", true],
["dom.presentation.session_transport.data_channel.enable", false], ["dom.presentation.session_transport.data_channel.enable", false],

View file

@ -12,9 +12,9 @@
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1069230">Test for B2G Presentation API at sender side</a> <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1069230">Test for B2G Presentation API at sender side</a>
<script type="application/javascript"> <script type="application/javascript">
'use strict'; "use strict";
var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL('PresentationSessionChromeScript.js')); var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL("PresentationSessionChromeScript.js"));
var request; var request;
var connection; var connection;
@ -29,8 +29,8 @@ function testSetup() {
aAvailability.onchange = null; aAvailability.onchange = null;
ok(aAvailability.value, "Device should be available."); ok(aAvailability.value, "Device should be available.");
aResolve(); aResolve();
} };
gScript.sendAsyncMessage('trigger-device-add'); gScript.sendAsyncMessage("trigger-device-add");
}, },
function(aError) { function(aError) {
ok(false, "Error occurred when getting availability: " + aError); ok(false, "Error occurred when getting availability: " + aError);
@ -44,47 +44,47 @@ function testSetup() {
function testStartConnection() { function testStartConnection() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
gScript.addMessageListener('device-prompt', function devicePromptHandler() { gScript.addMessageListener("device-prompt", function devicePromptHandler() {
gScript.removeMessageListener('device-prompt', devicePromptHandler); gScript.removeMessageListener("device-prompt", devicePromptHandler);
info("Device prompt is triggered."); info("Device prompt is triggered.");
gScript.sendAsyncMessage('trigger-device-prompt-select'); gScript.sendAsyncMessage("trigger-device-prompt-select");
}); });
gScript.addMessageListener('control-channel-established', function controlChannelEstablishedHandler() { gScript.addMessageListener("control-channel-established", function controlChannelEstablishedHandler() {
gScript.removeMessageListener('control-channel-established', controlChannelEstablishedHandler); gScript.removeMessageListener("control-channel-established", controlChannelEstablishedHandler);
info("A control channel is established."); info("A control channel is established.");
gScript.sendAsyncMessage('trigger-control-channel-open'); gScript.sendAsyncMessage("trigger-control-channel-open");
}); });
gScript.addMessageListener('control-channel-opened', function controlChannelOpenedHandler(aReason) { gScript.addMessageListener("control-channel-opened", function controlChannelOpenedHandler(aReason) {
gScript.removeMessageListener('control-channel-opened', controlChannelOpenedHandler); gScript.removeMessageListener("control-channel-opened", controlChannelOpenedHandler);
info("The control channel is opened."); info("The control channel is opened.");
}); });
gScript.addMessageListener('control-channel-closed', function controlChannelClosedHandler(aReason) { gScript.addMessageListener("control-channel-closed", function controlChannelClosedHandler(aReason) {
gScript.removeMessageListener('control-channel-closed', controlChannelClosedHandler); gScript.removeMessageListener("control-channel-closed", controlChannelClosedHandler);
info("The control channel is closed. " + aReason); info("The control channel is closed. " + aReason);
}); });
gScript.addMessageListener('offer-sent', function offerSentHandler(aIsValid) { gScript.addMessageListener("offer-sent", function offerSentHandler(aIsValid) {
gScript.removeMessageListener('offer-sent', offerSentHandler); gScript.removeMessageListener("offer-sent", offerSentHandler);
ok(aIsValid, "A valid offer is sent out."); ok(aIsValid, "A valid offer is sent out.");
gScript.sendAsyncMessage('trigger-incoming-transport'); gScript.sendAsyncMessage("trigger-incoming-transport");
}); });
gScript.addMessageListener('answer-received', function answerReceivedHandler() { gScript.addMessageListener("answer-received", function answerReceivedHandler() {
gScript.removeMessageListener('answer-received', answerReceivedHandler); gScript.removeMessageListener("answer-received", answerReceivedHandler);
info("An answer is received."); info("An answer is received.");
}); });
gScript.addMessageListener('data-transport-initialized', function dataTransportInitializedHandler() { gScript.addMessageListener("data-transport-initialized", function dataTransportInitializedHandler() {
gScript.removeMessageListener('data-transport-initialized', dataTransportInitializedHandler); gScript.removeMessageListener("data-transport-initialized", dataTransportInitializedHandler);
info("Data transport channel is initialized."); info("Data transport channel is initialized.");
gScript.sendAsyncMessage('trigger-incoming-answer'); gScript.sendAsyncMessage("trigger-incoming-answer");
}); });
gScript.addMessageListener('data-transport-notification-enabled', function dataTransportNotificationEnabledHandler() { gScript.addMessageListener("data-transport-notification-enabled", function dataTransportNotificationEnabledHandler() {
gScript.removeMessageListener('data-transport-notification-enabled', dataTransportNotificationEnabledHandler); gScript.removeMessageListener("data-transport-notification-enabled", dataTransportNotificationEnabledHandler);
info("Data notification is enabled for data transport channel."); info("Data notification is enabled for data transport channel.");
}); });
@ -128,8 +128,8 @@ function testSend() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
const outgoingMessage = "test outgoing message"; const outgoingMessage = "test outgoing message";
gScript.addMessageListener('message-sent', function messageSentHandler(aMessage) { gScript.addMessageListener("message-sent", function messageSentHandler(aMessage) {
gScript.removeMessageListener('message-sent', messageSentHandler); gScript.removeMessageListener("message-sent", messageSentHandler);
is(aMessage, outgoingMessage, "The message is sent out."); is(aMessage, outgoingMessage, "The message is sent out.");
aResolve(); aResolve();
}); });
@ -142,19 +142,19 @@ function testIncomingMessage() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
const incomingMessage = "test incoming message"; const incomingMessage = "test incoming message";
connection.addEventListener('message', function(aEvent) { connection.addEventListener("message", function(aEvent) {
is(aEvent.data, incomingMessage, "An incoming message should be received."); is(aEvent.data, incomingMessage, "An incoming message should be received.");
aResolve(); aResolve();
}, {once: true}); }, {once: true});
gScript.sendAsyncMessage('trigger-incoming-message', incomingMessage); gScript.sendAsyncMessage("trigger-incoming-message", incomingMessage);
}); });
} }
function testCloseConnection() { function testCloseConnection() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
gScript.addMessageListener('data-transport-closed', function dataTransportClosedHandler(aReason) { gScript.addMessageListener("data-transport-closed", function dataTransportClosedHandler(aReason) {
gScript.removeMessageListener('data-transport-closed', dataTransportClosedHandler); gScript.removeMessageListener("data-transport-closed", dataTransportClosedHandler);
info("The data transport is closed. " + aReason); info("The data transport is closed. " + aReason);
}); });
@ -170,36 +170,36 @@ function testCloseConnection() {
function testReconnect() { function testReconnect() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('--- testReconnect ---'); info("--- testReconnect ---");
gScript.addMessageListener('control-channel-established', function controlChannelEstablished() { gScript.addMessageListener("control-channel-established", function controlChannelEstablished() {
gScript.removeMessageListener('control-channel-established', controlChannelEstablished); gScript.removeMessageListener("control-channel-established", controlChannelEstablished);
gScript.sendAsyncMessage("trigger-control-channel-open"); gScript.sendAsyncMessage("trigger-control-channel-open");
}); });
gScript.addMessageListener('start-reconnect', function startReconnectHandler(url) { gScript.addMessageListener("start-reconnect", function startReconnectHandler(url) {
gScript.removeMessageListener('start-reconnect', startReconnectHandler); gScript.removeMessageListener("start-reconnect", startReconnectHandler);
is(url, "https://example.com/", "URLs should be the same.") is(url, "https://example.com/", "URLs should be the same.");
gScript.sendAsyncMessage('trigger-reconnected-acked', url); gScript.sendAsyncMessage("trigger-reconnected-acked", url);
}); });
gScript.addMessageListener('offer-sent', function offerSentHandler() { gScript.addMessageListener("offer-sent", function offerSentHandler() {
gScript.removeMessageListener('offer-sent', offerSentHandler); gScript.removeMessageListener("offer-sent", offerSentHandler);
gScript.sendAsyncMessage('trigger-incoming-transport'); gScript.sendAsyncMessage("trigger-incoming-transport");
}); });
gScript.addMessageListener('answer-received', function answerReceivedHandler() { gScript.addMessageListener("answer-received", function answerReceivedHandler() {
gScript.removeMessageListener('answer-received', answerReceivedHandler); gScript.removeMessageListener("answer-received", answerReceivedHandler);
info("An answer is received."); info("An answer is received.");
}); });
gScript.addMessageListener('data-transport-initialized', function dataTransportInitializedHandler() { gScript.addMessageListener("data-transport-initialized", function dataTransportInitializedHandler() {
gScript.removeMessageListener('data-transport-initialized', dataTransportInitializedHandler); gScript.removeMessageListener("data-transport-initialized", dataTransportInitializedHandler);
info("Data transport channel is initialized."); info("Data transport channel is initialized.");
gScript.sendAsyncMessage('trigger-incoming-answer'); gScript.sendAsyncMessage("trigger-incoming-answer");
}); });
gScript.addMessageListener('data-transport-notification-enabled', function dataTransportNotificationEnabledHandler() { gScript.addMessageListener("data-transport-notification-enabled", function dataTransportNotificationEnabledHandler() {
gScript.removeMessageListener('data-transport-notification-enabled', dataTransportNotificationEnabledHandler); gScript.removeMessageListener("data-transport-notification-enabled", dataTransportNotificationEnabledHandler);
info("Data notification is enabled for data transport channel."); info("Data notification is enabled for data transport channel.");
}); });
@ -226,13 +226,13 @@ function testReconnect() {
} }
function teardown() { function teardown() {
gScript.addMessageListener('teardown-complete', function teardownCompleteHandler() { gScript.addMessageListener("teardown-complete", function teardownCompleteHandler() {
gScript.removeMessageListener('teardown-complete', teardownCompleteHandler); gScript.removeMessageListener("teardown-complete", teardownCompleteHandler);
gScript.destroy(); gScript.destroy();
SimpleTest.finish(); SimpleTest.finish();
}); });
gScript.sendAsyncMessage('teardown'); gScript.sendAsyncMessage("teardown");
} }
function runTests() { function runTests() {
@ -249,7 +249,7 @@ function runTests() {
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
SpecialPowers.pushPrefEnv({ 'set': [["dom.presentation.enabled", true], SpecialPowers.pushPrefEnv({ "set": [["dom.presentation.enabled", true],
["dom.presentation.controller.enabled", true], ["dom.presentation.controller.enabled", true],
["dom.presentation.session_transport.data_channel.enable", false]]}, ["dom.presentation.session_transport.data_channel.enable", false]]},
runTests); runTests);

View file

@ -12,9 +12,9 @@
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1069230">Test default request for B2G Presentation API at sender side</a> <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1069230">Test default request for B2G Presentation API at sender side</a>
<script type="application/javascript"> <script type="application/javascript">
'use strict'; "use strict";
var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL('PresentationSessionChromeScript.js')); var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL("PresentationSessionChromeScript.js"));
var connection; var connection;
function testSetup() { function testSetup() {
@ -28,9 +28,9 @@ function testSetup() {
aAvailability.onchange = null; aAvailability.onchange = null;
ok(aAvailability.value, "Device should be available."); ok(aAvailability.value, "Device should be available.");
aResolve(); aResolve();
} };
gScript.sendAsyncMessage('trigger-device-add'); gScript.sendAsyncMessage("trigger-device-add");
}, },
function(aError) { function(aError) {
ok(false, "Error occurred when getting availability: " + aError); ok(false, "Error occurred when getting availability: " + aError);
@ -43,43 +43,43 @@ function testSetup() {
function testStartConnection() { function testStartConnection() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
gScript.addMessageListener('device-prompt', function devicePromptHandler() { gScript.addMessageListener("device-prompt", function devicePromptHandler() {
gScript.removeMessageListener('device-prompt', devicePromptHandler); gScript.removeMessageListener("device-prompt", devicePromptHandler);
info("Device prompt is triggered."); info("Device prompt is triggered.");
gScript.sendAsyncMessage('trigger-device-prompt-select'); gScript.sendAsyncMessage("trigger-device-prompt-select");
}); });
gScript.addMessageListener('control-channel-established', function controlChannelEstablishedHandler() { gScript.addMessageListener("control-channel-established", function controlChannelEstablishedHandler() {
gScript.removeMessageListener('control-channel-established', controlChannelEstablishedHandler); gScript.removeMessageListener("control-channel-established", controlChannelEstablishedHandler);
info("A control channel is established."); info("A control channel is established.");
gScript.sendAsyncMessage('trigger-control-channel-open'); gScript.sendAsyncMessage("trigger-control-channel-open");
}); });
gScript.addMessageListener('control-channel-opened', function controlChannelOpenedHandler(aReason) { gScript.addMessageListener("control-channel-opened", function controlChannelOpenedHandler(aReason) {
gScript.removeMessageListener('control-channel-opened', controlChannelOpenedHandler); gScript.removeMessageListener("control-channel-opened", controlChannelOpenedHandler);
info("The control channel is opened."); info("The control channel is opened.");
}); });
gScript.addMessageListener('control-channel-closed', function controlChannelClosedHandler(aReason) { gScript.addMessageListener("control-channel-closed", function controlChannelClosedHandler(aReason) {
gScript.removeMessageListener('control-channel-closed', controlChannelClosedHandler); gScript.removeMessageListener("control-channel-closed", controlChannelClosedHandler);
info("The control channel is closed. " + aReason); info("The control channel is closed. " + aReason);
}); });
gScript.addMessageListener('offer-sent', function offerSentHandler() { gScript.addMessageListener("offer-sent", function offerSentHandler() {
gScript.removeMessageListener('offer-sent', offerSentHandler); gScript.removeMessageListener("offer-sent", offerSentHandler);
info("An offer is sent out."); info("An offer is sent out.");
gScript.sendAsyncMessage('trigger-incoming-transport'); gScript.sendAsyncMessage("trigger-incoming-transport");
}); });
gScript.addMessageListener('answer-received', function answerReceivedHandler() { gScript.addMessageListener("answer-received", function answerReceivedHandler() {
gScript.removeMessageListener('answer-received', answerReceivedHandler); gScript.removeMessageListener("answer-received", answerReceivedHandler);
info("An answer is received."); info("An answer is received.");
}); });
gScript.addMessageListener('data-transport-initialized', function dataTransportInitializedHandler() { gScript.addMessageListener("data-transport-initialized", function dataTransportInitializedHandler() {
gScript.removeMessageListener('data-transport-initialized', dataTransportInitializedHandler); gScript.removeMessageListener("data-transport-initialized", dataTransportInitializedHandler);
info("Data transport channel is initialized."); info("Data transport channel is initialized.");
gScript.sendAsyncMessage('trigger-incoming-answer'); gScript.sendAsyncMessage("trigger-incoming-answer");
}); });
is(navigator.presentation.receiver, undefined, "Sender shouldn't get a presentation receiver instance."); is(navigator.presentation.receiver, undefined, "Sender shouldn't get a presentation receiver instance.");
@ -104,8 +104,8 @@ function testStartConnection() {
function testCloseConnection() { function testCloseConnection() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
gScript.addMessageListener('data-transport-closed', function dataTransportClosedHandler(aReason) { gScript.addMessageListener("data-transport-closed", function dataTransportClosedHandler(aReason) {
gScript.removeMessageListener('data-transport-closed', dataTransportClosedHandler); gScript.removeMessageListener("data-transport-closed", dataTransportClosedHandler);
info("The data transport is closed. " + aReason); info("The data transport is closed. " + aReason);
}); });
@ -120,13 +120,13 @@ function testCloseConnection() {
} }
function teardown() { function teardown() {
gScript.addMessageListener('teardown-complete', function teardownCompleteHandler() { gScript.addMessageListener("teardown-complete", function teardownCompleteHandler() {
gScript.removeMessageListener('teardown-complete', teardownCompleteHandler); gScript.removeMessageListener("teardown-complete", teardownCompleteHandler);
gScript.destroy(); gScript.destroy();
SimpleTest.finish(); SimpleTest.finish();
}); });
gScript.sendAsyncMessage('teardown'); gScript.sendAsyncMessage("teardown");
} }
function runTests() { function runTests() {
@ -140,7 +140,7 @@ function runTests() {
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
SpecialPowers.pushPrefEnv({ 'set': [["dom.presentation.enabled", true], SpecialPowers.pushPrefEnv({ "set": [["dom.presentation.enabled", true],
["dom.presentation.controller.enabled", true], ["dom.presentation.controller.enabled", true],
["dom.presentation.receiver.enabled", false], ["dom.presentation.receiver.enabled", false],
["dom.presentation.session_transport.data_channel.enable", false]]}, ["dom.presentation.session_transport.data_channel.enable", false]]},

View file

@ -12,9 +12,9 @@
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1069230">Test for disconnection of B2G Presentation API at sender side</a> <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1069230">Test for disconnection of B2G Presentation API at sender side</a>
<script type="application/javascript"> <script type="application/javascript">
'use strict'; "use strict";
var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL('PresentationSessionChromeScript.js')); var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL("PresentationSessionChromeScript.js"));
var request; var request;
var connection; var connection;
@ -29,9 +29,9 @@ function testSetup() {
aAvailability.onchange = null; aAvailability.onchange = null;
ok(aAvailability.value, "Device should be available."); ok(aAvailability.value, "Device should be available.");
aResolve(); aResolve();
} };
gScript.sendAsyncMessage('trigger-device-add'); gScript.sendAsyncMessage("trigger-device-add");
}, },
function(aError) { function(aError) {
ok(false, "Error occurred when getting availability: " + aError); ok(false, "Error occurred when getting availability: " + aError);
@ -44,47 +44,47 @@ function testSetup() {
function testStartConnection() { function testStartConnection() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
gScript.addMessageListener('device-prompt', function devicePromptHandler() { gScript.addMessageListener("device-prompt", function devicePromptHandler() {
gScript.removeMessageListener('device-prompt', devicePromptHandler); gScript.removeMessageListener("device-prompt", devicePromptHandler);
info("Device prompt is triggered."); info("Device prompt is triggered.");
gScript.sendAsyncMessage('trigger-device-prompt-select'); gScript.sendAsyncMessage("trigger-device-prompt-select");
}); });
gScript.addMessageListener('control-channel-established', function controlChannelEstablishedHandler() { gScript.addMessageListener("control-channel-established", function controlChannelEstablishedHandler() {
gScript.removeMessageListener('control-channel-established', controlChannelEstablishedHandler); gScript.removeMessageListener("control-channel-established", controlChannelEstablishedHandler);
info("A control channel is established."); info("A control channel is established.");
gScript.sendAsyncMessage('trigger-control-channel-open'); gScript.sendAsyncMessage("trigger-control-channel-open");
}); });
gScript.addMessageListener('control-channel-opened', function controlChannelOpenedHandler(aReason) { gScript.addMessageListener("control-channel-opened", function controlChannelOpenedHandler(aReason) {
gScript.removeMessageListener('control-channel-opened', controlChannelOpenedHandler); gScript.removeMessageListener("control-channel-opened", controlChannelOpenedHandler);
info("The control channel is opened."); info("The control channel is opened.");
}); });
gScript.addMessageListener('control-channel-closed', function controlChannelClosedHandler(aReason) { gScript.addMessageListener("control-channel-closed", function controlChannelClosedHandler(aReason) {
gScript.removeMessageListener('control-channel-closed', controlChannelClosedHandler); gScript.removeMessageListener("control-channel-closed", controlChannelClosedHandler);
info("The control channel is closed. " + aReason); info("The control channel is closed. " + aReason);
}); });
gScript.addMessageListener('offer-sent', function offerSentHandler(aIsValid) { gScript.addMessageListener("offer-sent", function offerSentHandler(aIsValid) {
gScript.removeMessageListener('offer-sent', offerSentHandler); gScript.removeMessageListener("offer-sent", offerSentHandler);
ok(aIsValid, "A valid offer is sent out."); ok(aIsValid, "A valid offer is sent out.");
gScript.sendAsyncMessage('trigger-incoming-answer'); gScript.sendAsyncMessage("trigger-incoming-answer");
}); });
gScript.addMessageListener('answer-received', function answerReceivedHandler() { gScript.addMessageListener("answer-received", function answerReceivedHandler() {
gScript.removeMessageListener('answer-received', answerReceivedHandler); gScript.removeMessageListener("answer-received", answerReceivedHandler);
info("An answer is received."); info("An answer is received.");
gScript.sendAsyncMessage('trigger-incoming-transport'); gScript.sendAsyncMessage("trigger-incoming-transport");
}); });
gScript.addMessageListener('data-transport-initialized', function dataTransportInitializedHandler() { gScript.addMessageListener("data-transport-initialized", function dataTransportInitializedHandler() {
gScript.removeMessageListener('data-transport-initialized', dataTransportInitializedHandler); gScript.removeMessageListener("data-transport-initialized", dataTransportInitializedHandler);
info("Data transport channel is initialized."); info("Data transport channel is initialized.");
}); });
gScript.addMessageListener('data-transport-notification-enabled', function dataTransportNotificationEnabledHandler() { gScript.addMessageListener("data-transport-notification-enabled", function dataTransportNotificationEnabledHandler() {
gScript.removeMessageListener('data-transport-notification-enabled', dataTransportNotificationEnabledHandler); gScript.removeMessageListener("data-transport-notification-enabled", dataTransportNotificationEnabledHandler);
info("Data notification is enabled for data transport channel."); info("Data notification is enabled for data transport channel.");
}); });
@ -111,8 +111,8 @@ function testStartConnection() {
function testDisconnection() { function testDisconnection() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
gScript.addMessageListener('data-transport-closed', function dataTransportClosedHandler(aReason) { gScript.addMessageListener("data-transport-closed", function dataTransportClosedHandler(aReason) {
gScript.removeMessageListener('data-transport-closed', dataTransportClosedHandler); gScript.removeMessageListener("data-transport-closed", dataTransportClosedHandler);
info("The data transport is closed. " + aReason); info("The data transport is closed. " + aReason);
}); });
@ -122,18 +122,18 @@ function testDisconnection() {
aResolve(); aResolve();
}; };
gScript.sendAsyncMessage('trigger-data-transport-close', SpecialPowers.Cr.NS_ERROR_FAILURE); gScript.sendAsyncMessage("trigger-data-transport-close", SpecialPowers.Cr.NS_ERROR_FAILURE);
}); });
} }
function teardown() { function teardown() {
gScript.addMessageListener('teardown-complete', function teardownCompleteHandler() { gScript.addMessageListener("teardown-complete", function teardownCompleteHandler() {
gScript.removeMessageListener('teardown-complete', teardownCompleteHandler); gScript.removeMessageListener("teardown-complete", teardownCompleteHandler);
gScript.destroy(); gScript.destroy();
SimpleTest.finish(); SimpleTest.finish();
}); });
gScript.sendAsyncMessage('teardown'); gScript.sendAsyncMessage("teardown");
} }
function runTests() { function runTests() {
@ -147,9 +147,9 @@ function runTests() {
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
SpecialPowers.pushPermissions([ SpecialPowers.pushPermissions([
{type: 'presentation-device-manage', allow: false, context: document}, {type: "presentation-device-manage", allow: false, context: document},
], function() { ], function() {
SpecialPowers.pushPrefEnv({ 'set': [["dom.presentation.enabled", true], SpecialPowers.pushPrefEnv({ "set": [["dom.presentation.enabled", true],
["dom.presentation.controller.enabled", true], ["dom.presentation.controller.enabled", true],
["dom.presentation.session_transport.data_channel.enable", false]]}, ["dom.presentation.session_transport.data_channel.enable", false]]},
runTests); runTests);

View file

@ -12,9 +12,9 @@
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1069230">Test for connection establishing errors of B2G Presentation API at sender side</a> <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1069230">Test for connection establishing errors of B2G Presentation API at sender side</a>
<script type="application/javascript"> <script type="application/javascript">
'use strict'; "use strict";
var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL('PresentationSessionChromeScript.js')); var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL("PresentationSessionChromeScript.js"));
var request; var request;
function setup() { function setup() {
@ -28,9 +28,9 @@ function setup() {
aAvailability.onchange = null; aAvailability.onchange = null;
ok(aAvailability.value, "Device should be available."); ok(aAvailability.value, "Device should be available.");
aResolve(); aResolve();
} };
gScript.sendAsyncMessage('trigger-device-add'); gScript.sendAsyncMessage("trigger-device-add");
}, },
function(aError) { function(aError) {
ok(false, "Error occurred when getting availability: " + aError); ok(false, "Error occurred when getting availability: " + aError);
@ -42,13 +42,13 @@ function setup() {
} }
function testStartConnectionCancelPrompt() { function testStartConnectionCancelPrompt() {
info('--- testStartConnectionCancelPrompt ---'); info("--- testStartConnectionCancelPrompt ---");
return Promise.all([ return Promise.all([
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('device-prompt', function devicePromptHandler() { gScript.addMessageListener("device-prompt", function devicePromptHandler() {
gScript.removeMessageListener('device-prompt', devicePromptHandler); gScript.removeMessageListener("device-prompt", devicePromptHandler);
info("Device prompt is triggered."); info("Device prompt is triggered.");
gScript.sendAsyncMessage('trigger-device-prompt-cancel', SpecialPowers.Cr.NS_ERROR_DOM_NOT_ALLOWED_ERR); gScript.sendAsyncMessage("trigger-device-prompt-cancel", SpecialPowers.Cr.NS_ERROR_DOM_NOT_ALLOWED_ERR);
resolve(); resolve();
}); });
}), }),
@ -64,13 +64,13 @@ function testStartConnectionCancelPrompt() {
} }
function testStartConnectionNoDevice() { function testStartConnectionNoDevice() {
info('--- testStartConnectionNoDevice ---'); info("--- testStartConnectionNoDevice ---");
return Promise.all([ return Promise.all([
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('device-prompt', function devicePromptHandler() { gScript.addMessageListener("device-prompt", function devicePromptHandler() {
gScript.removeMessageListener('device-prompt', devicePromptHandler); gScript.removeMessageListener("device-prompt", devicePromptHandler);
info("Device prompt is triggered."); info("Device prompt is triggered.");
gScript.sendAsyncMessage('trigger-device-prompt-cancel', SpecialPowers.Cr.NS_ERROR_DOM_NOT_FOUND_ERR); gScript.sendAsyncMessage("trigger-device-prompt-cancel", SpecialPowers.Cr.NS_ERROR_DOM_NOT_FOUND_ERR);
resolve(); resolve();
}); });
}), }),
@ -86,38 +86,38 @@ function testStartConnectionNoDevice() {
} }
function testStartConnectionUnexpectedControlChannelCloseBeforeDataTransportInit() { function testStartConnectionUnexpectedControlChannelCloseBeforeDataTransportInit() {
info('--- testStartConnectionUnexpectedControlChannelCloseBeforeDataTransportInit ---'); info("--- testStartConnectionUnexpectedControlChannelCloseBeforeDataTransportInit ---");
return Promise.all([ return Promise.all([
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('device-prompt', function devicePromptHandler() { gScript.addMessageListener("device-prompt", function devicePromptHandler() {
gScript.removeMessageListener('device-prompt', devicePromptHandler); gScript.removeMessageListener("device-prompt", devicePromptHandler);
info("Device prompt is triggered."); info("Device prompt is triggered.");
gScript.sendAsyncMessage('trigger-device-prompt-select'); gScript.sendAsyncMessage("trigger-device-prompt-select");
resolve(); resolve();
}); });
}), }),
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('control-channel-established', function controlChannelEstablishedHandler() { gScript.addMessageListener("control-channel-established", function controlChannelEstablishedHandler() {
gScript.removeMessageListener('control-channel-established', controlChannelEstablishedHandler); gScript.removeMessageListener("control-channel-established", controlChannelEstablishedHandler);
info("A control channel is established."); info("A control channel is established.");
gScript.sendAsyncMessage('trigger-control-channel-open'); gScript.sendAsyncMessage("trigger-control-channel-open");
resolve(); resolve();
}); });
}), }),
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('control-channel-opened', function controlChannelOpenedHandler() { gScript.addMessageListener("control-channel-opened", function controlChannelOpenedHandler() {
gScript.removeMessageListener('control-channel-opened', controlChannelOpenedHandler); gScript.removeMessageListener("control-channel-opened", controlChannelOpenedHandler);
info("The control channel is opened."); info("The control channel is opened.");
resolve(); resolve();
}); });
}), }),
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('control-channel-closed', function controlChannelClosedHandler(aReason) { gScript.addMessageListener("control-channel-closed", function controlChannelClosedHandler(aReason) {
gScript.removeMessageListener('control-channel-closed', controlChannelClosedHandler); gScript.removeMessageListener("control-channel-closed", controlChannelClosedHandler);
info("The control channel is closed. " + aReason); info("The control channel is closed. " + aReason);
is(aReason, SpecialPowers.Cr.NS_ERROR_FAILURE, "The control channel is closed with NS_ERROR_FAILURE"); is(aReason, SpecialPowers.Cr.NS_ERROR_FAILURE, "The control channel is closed with NS_ERROR_FAILURE");
resolve(); resolve();
@ -125,10 +125,10 @@ function testStartConnectionUnexpectedControlChannelCloseBeforeDataTransportInit
}), }),
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('offer-sent', function offerSentHandler(aIsValid) { gScript.addMessageListener("offer-sent", function offerSentHandler(aIsValid) {
gScript.removeMessageListener('offer-sent', offerSentHandler); gScript.removeMessageListener("offer-sent", offerSentHandler);
ok(aIsValid, "A valid offer is sent out."); ok(aIsValid, "A valid offer is sent out.");
gScript.sendAsyncMessage('trigger-control-channel-close', SpecialPowers.Cr.NS_ERROR_FAILURE); gScript.sendAsyncMessage("trigger-control-channel-close", SpecialPowers.Cr.NS_ERROR_FAILURE);
resolve(); resolve();
}); });
}), }),
@ -154,38 +154,38 @@ function testStartConnectionUnexpectedControlChannelCloseBeforeDataTransportInit
} }
function testStartConnectionUnexpectedControlChannelCloseNoReasonBeforeDataTransportInit() { function testStartConnectionUnexpectedControlChannelCloseNoReasonBeforeDataTransportInit() {
info('--- testStartConnectionUnexpectedControlChannelCloseNoReasonBeforeDataTransportInit ---'); info("--- testStartConnectionUnexpectedControlChannelCloseNoReasonBeforeDataTransportInit ---");
return Promise.all([ return Promise.all([
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('device-prompt', function devicePromptHandler() { gScript.addMessageListener("device-prompt", function devicePromptHandler() {
gScript.removeMessageListener('device-prompt', devicePromptHandler); gScript.removeMessageListener("device-prompt", devicePromptHandler);
info("Device prompt is triggered."); info("Device prompt is triggered.");
gScript.sendAsyncMessage('trigger-device-prompt-select'); gScript.sendAsyncMessage("trigger-device-prompt-select");
resolve(); resolve();
}); });
}), }),
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('control-channel-established', function controlChannelEstablishedHandler() { gScript.addMessageListener("control-channel-established", function controlChannelEstablishedHandler() {
gScript.removeMessageListener('control-channel-established', controlChannelEstablishedHandler); gScript.removeMessageListener("control-channel-established", controlChannelEstablishedHandler);
info("A control channel is established."); info("A control channel is established.");
gScript.sendAsyncMessage('trigger-control-channel-open'); gScript.sendAsyncMessage("trigger-control-channel-open");
resolve(); resolve();
}); });
}), }),
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('control-channel-opened', function controlChannelOpenedHandler() { gScript.addMessageListener("control-channel-opened", function controlChannelOpenedHandler() {
gScript.removeMessageListener('control-channel-opened', controlChannelOpenedHandler); gScript.removeMessageListener("control-channel-opened", controlChannelOpenedHandler);
info("The control channel is opened."); info("The control channel is opened.");
resolve(); resolve();
}); });
}), }),
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('control-channel-closed', function controlChannelClosedHandler(aReason) { gScript.addMessageListener("control-channel-closed", function controlChannelClosedHandler(aReason) {
gScript.removeMessageListener('control-channel-closed', controlChannelClosedHandler); gScript.removeMessageListener("control-channel-closed", controlChannelClosedHandler);
info("The control channel is closed. " + aReason); info("The control channel is closed. " + aReason);
is(aReason, SpecialPowers.Cr.NS_OK, "The control channel is closed with NS_OK"); is(aReason, SpecialPowers.Cr.NS_OK, "The control channel is closed with NS_OK");
resolve(); resolve();
@ -193,10 +193,10 @@ function testStartConnectionUnexpectedControlChannelCloseNoReasonBeforeDataTrans
}), }),
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('offer-sent', function offerSentHandler(aIsValid) { gScript.addMessageListener("offer-sent", function offerSentHandler(aIsValid) {
gScript.removeMessageListener('offer-sent', offerSentHandler); gScript.removeMessageListener("offer-sent", offerSentHandler);
ok(aIsValid, "A valid offer is sent out."); ok(aIsValid, "A valid offer is sent out.");
gScript.sendAsyncMessage('trigger-control-channel-close', SpecialPowers.Cr.NS_OK); gScript.sendAsyncMessage("trigger-control-channel-close", SpecialPowers.Cr.NS_OK);
resolve(); resolve();
}); });
}), }),
@ -222,64 +222,64 @@ function testStartConnectionUnexpectedControlChannelCloseNoReasonBeforeDataTrans
} }
function testStartConnectionUnexpectedControlChannelCloseBeforeDataTransportReady() { function testStartConnectionUnexpectedControlChannelCloseBeforeDataTransportReady() {
info('--- testStartConnectionUnexpectedControlChannelCloseBeforeDataTransportReady ---'); info("--- testStartConnectionUnexpectedControlChannelCloseBeforeDataTransportReady ---");
return Promise.all([ return Promise.all([
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('device-prompt', function devicePromptHandler() { gScript.addMessageListener("device-prompt", function devicePromptHandler() {
gScript.removeMessageListener('device-prompt', devicePromptHandler); gScript.removeMessageListener("device-prompt", devicePromptHandler);
info("Device prompt is triggered."); info("Device prompt is triggered.");
gScript.sendAsyncMessage('trigger-device-prompt-select'); gScript.sendAsyncMessage("trigger-device-prompt-select");
resolve(); resolve();
}); });
}), }),
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('control-channel-established', function controlChannelEstablishedHandler() { gScript.addMessageListener("control-channel-established", function controlChannelEstablishedHandler() {
gScript.removeMessageListener('control-channel-established', controlChannelEstablishedHandler); gScript.removeMessageListener("control-channel-established", controlChannelEstablishedHandler);
info("A control channel is established."); info("A control channel is established.");
gScript.sendAsyncMessage('trigger-control-channel-open'); gScript.sendAsyncMessage("trigger-control-channel-open");
resolve(); resolve();
}); });
}), }),
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('control-channel-opened', function controlChannelOpenedHandler() { gScript.addMessageListener("control-channel-opened", function controlChannelOpenedHandler() {
gScript.removeMessageListener('control-channel-opened', controlChannelOpenedHandler); gScript.removeMessageListener("control-channel-opened", controlChannelOpenedHandler);
info("The control channel is opened."); info("The control channel is opened.");
resolve(); resolve();
}); });
}), }),
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('control-channel-closed', function controlChannelClosedHandler(aReason) { gScript.addMessageListener("control-channel-closed", function controlChannelClosedHandler(aReason) {
gScript.removeMessageListener('control-channel-closed', controlChannelClosedHandler); gScript.removeMessageListener("control-channel-closed", controlChannelClosedHandler);
is(aReason, SpecialPowers.Cr.NS_ERROR_ABORT, "The control channel is closed with NS_ERROR_ABORT"); is(aReason, SpecialPowers.Cr.NS_ERROR_ABORT, "The control channel is closed with NS_ERROR_ABORT");
resolve(); resolve();
}); });
}), }),
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('offer-sent', function offerSentHandler(aIsValid) { gScript.addMessageListener("offer-sent", function offerSentHandler(aIsValid) {
gScript.removeMessageListener('offer-sent', offerSentHandler); gScript.removeMessageListener("offer-sent", offerSentHandler);
ok(aIsValid, "A valid offer is sent out."); ok(aIsValid, "A valid offer is sent out.");
gScript.sendAsyncMessage('trigger-incoming-transport'); gScript.sendAsyncMessage("trigger-incoming-transport");
resolve(); resolve();
}); });
}), }),
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('data-transport-initialized', function dataTransportInitializedHandler() { gScript.addMessageListener("data-transport-initialized", function dataTransportInitializedHandler() {
gScript.removeMessageListener('data-transport-initialized', dataTransportInitializedHandler); gScript.removeMessageListener("data-transport-initialized", dataTransportInitializedHandler);
info("Data transport channel is initialized."); info("Data transport channel is initialized.");
gScript.sendAsyncMessage('trigger-control-channel-close', SpecialPowers.Cr.NS_ERROR_ABORT); gScript.sendAsyncMessage("trigger-control-channel-close", SpecialPowers.Cr.NS_ERROR_ABORT);
resolve(); resolve();
}); });
}), }),
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('data-transport-closed', function dataTransportClosedHandler(aReason) { gScript.addMessageListener("data-transport-closed", function dataTransportClosedHandler(aReason) {
gScript.removeMessageListener('data-transport-closed', dataTransportClosedHandler); gScript.removeMessageListener("data-transport-closed", dataTransportClosedHandler);
info("The data transport is closed. " + aReason); info("The data transport is closed. " + aReason);
resolve(); resolve();
}); });
@ -306,38 +306,38 @@ function testStartConnectionUnexpectedControlChannelCloseBeforeDataTransportRead
} }
function testStartConnectionUnexpectedControlChannelCloseNoReasonBeforeDataTransportReady() { function testStartConnectionUnexpectedControlChannelCloseNoReasonBeforeDataTransportReady() {
info('--- testStartConnectionUnexpectedControlChannelCloseNoReasonBeforeDataTransportReady -- '); info("--- testStartConnectionUnexpectedControlChannelCloseNoReasonBeforeDataTransportReady -- ");
return Promise.all([ return Promise.all([
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('device-prompt', function devicePromptHandler() { gScript.addMessageListener("device-prompt", function devicePromptHandler() {
gScript.removeMessageListener('device-prompt', devicePromptHandler); gScript.removeMessageListener("device-prompt", devicePromptHandler);
info("Device prompt is triggered."); info("Device prompt is triggered.");
gScript.sendAsyncMessage('trigger-device-prompt-select'); gScript.sendAsyncMessage("trigger-device-prompt-select");
resolve(); resolve();
}); });
}), }),
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('control-channel-established', function controlChannelEstablishedHandler() { gScript.addMessageListener("control-channel-established", function controlChannelEstablishedHandler() {
gScript.removeMessageListener('control-channel-established', controlChannelEstablishedHandler); gScript.removeMessageListener("control-channel-established", controlChannelEstablishedHandler);
info("A control channel is established."); info("A control channel is established.");
gScript.sendAsyncMessage('trigger-control-channel-open'); gScript.sendAsyncMessage("trigger-control-channel-open");
resolve(); resolve();
}); });
}), }),
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('control-channel-opened', function controlChannelOpenedHandler() { gScript.addMessageListener("control-channel-opened", function controlChannelOpenedHandler() {
gScript.removeMessageListener('control-channel-opened', controlChannelOpenedHandler); gScript.removeMessageListener("control-channel-opened", controlChannelOpenedHandler);
info("The control channel is opened."); info("The control channel is opened.");
resolve(); resolve();
}); });
}), }),
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('control-channel-closed', function controlChannelClosedHandler(aReason) { gScript.addMessageListener("control-channel-closed", function controlChannelClosedHandler(aReason) {
gScript.removeMessageListener('control-channel-closed', controlChannelClosedHandler); gScript.removeMessageListener("control-channel-closed", controlChannelClosedHandler);
info("The control channel is closed. " + aReason); info("The control channel is closed. " + aReason);
is(aReason, SpecialPowers.Cr.NS_OK, "The control channel is closed with NS_OK"); is(aReason, SpecialPowers.Cr.NS_OK, "The control channel is closed with NS_OK");
resolve(); resolve();
@ -345,26 +345,26 @@ function testStartConnectionUnexpectedControlChannelCloseNoReasonBeforeDataTrans
}), }),
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('offer-sent', function offerSentHandler(aIsValid) { gScript.addMessageListener("offer-sent", function offerSentHandler(aIsValid) {
gScript.removeMessageListener('offer-sent', offerSentHandler); gScript.removeMessageListener("offer-sent", offerSentHandler);
ok(aIsValid, "A valid offer is sent out."); ok(aIsValid, "A valid offer is sent out.");
gScript.sendAsyncMessage('trigger-incoming-transport'); gScript.sendAsyncMessage("trigger-incoming-transport");
resolve(); resolve();
}); });
}), }),
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('data-transport-initialized', function dataTransportInitializedHandler() { gScript.addMessageListener("data-transport-initialized", function dataTransportInitializedHandler() {
gScript.removeMessageListener('data-transport-initialized', dataTransportInitializedHandler); gScript.removeMessageListener("data-transport-initialized", dataTransportInitializedHandler);
info("Data transport channel is initialized."); info("Data transport channel is initialized.");
gScript.sendAsyncMessage('trigger-control-channel-close', SpecialPowers.Cr.NS_OK); gScript.sendAsyncMessage("trigger-control-channel-close", SpecialPowers.Cr.NS_OK);
resolve(); resolve();
}); });
}), }),
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('data-transport-closed', function dataTransportClosedHandler(aReason) { gScript.addMessageListener("data-transport-closed", function dataTransportClosedHandler(aReason) {
gScript.removeMessageListener('data-transport-closed', dataTransportClosedHandler); gScript.removeMessageListener("data-transport-closed", dataTransportClosedHandler);
info("The data transport is closed. " + aReason); info("The data transport is closed. " + aReason);
resolve(); resolve();
}); });
@ -391,65 +391,65 @@ function testStartConnectionUnexpectedControlChannelCloseNoReasonBeforeDataTrans
} }
function testStartConnectionUnexpectedDataTransportClose() { function testStartConnectionUnexpectedDataTransportClose() {
info('--- testStartConnectionUnexpectedDataTransportClose ---'); info("--- testStartConnectionUnexpectedDataTransportClose ---");
return Promise.all([ return Promise.all([
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('device-prompt', function devicePromptHandler() { gScript.addMessageListener("device-prompt", function devicePromptHandler() {
gScript.removeMessageListener('device-prompt', devicePromptHandler); gScript.removeMessageListener("device-prompt", devicePromptHandler);
info("Device prompt is triggered."); info("Device prompt is triggered.");
gScript.sendAsyncMessage('trigger-device-prompt-select'); gScript.sendAsyncMessage("trigger-device-prompt-select");
resolve(); resolve();
}); });
}), }),
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('control-channel-established', function controlChannelEstablishedHandler() { gScript.addMessageListener("control-channel-established", function controlChannelEstablishedHandler() {
gScript.removeMessageListener('control-channel-established', controlChannelEstablishedHandler); gScript.removeMessageListener("control-channel-established", controlChannelEstablishedHandler);
info("A control channel is established."); info("A control channel is established.");
gScript.sendAsyncMessage('trigger-control-channel-open'); gScript.sendAsyncMessage("trigger-control-channel-open");
resolve(); resolve();
}); });
}), }),
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('control-channel-opened', function controlChannelOpenedHandler() { gScript.addMessageListener("control-channel-opened", function controlChannelOpenedHandler() {
gScript.removeMessageListener('control-channel-opened', controlChannelOpenedHandler); gScript.removeMessageListener("control-channel-opened", controlChannelOpenedHandler);
info("The control channel is opened."); info("The control channel is opened.");
resolve(); resolve();
}); });
}), }),
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('control-channel-closed', function controlChannelClosedHandler(aReason) { gScript.addMessageListener("control-channel-closed", function controlChannelClosedHandler(aReason) {
gScript.removeMessageListener('control-channel-closed', controlChannelClosedHandler); gScript.removeMessageListener("control-channel-closed", controlChannelClosedHandler);
info("The control channel is closed. " + aReason); info("The control channel is closed. " + aReason);
resolve(); resolve();
}); });
}), }),
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('offer-sent', function offerSentHandler(aIsValid) { gScript.addMessageListener("offer-sent", function offerSentHandler(aIsValid) {
gScript.removeMessageListener('offer-sent', offerSentHandler); gScript.removeMessageListener("offer-sent", offerSentHandler);
ok(aIsValid, "A valid offer is sent out."); ok(aIsValid, "A valid offer is sent out.");
info("recv offer-sent."); info("recv offer-sent.");
gScript.sendAsyncMessage('trigger-incoming-transport'); gScript.sendAsyncMessage("trigger-incoming-transport");
resolve(); resolve();
}); });
}), }),
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('data-transport-initialized', function dataTransportInitializedHandler() { gScript.addMessageListener("data-transport-initialized", function dataTransportInitializedHandler() {
gScript.removeMessageListener('data-transport-initialized', dataTransportInitializedHandler); gScript.removeMessageListener("data-transport-initialized", dataTransportInitializedHandler);
info("Data transport channel is initialized."); info("Data transport channel is initialized.");
gScript.sendAsyncMessage('trigger-data-transport-close', SpecialPowers.Cr.NS_ERROR_UNEXPECTED); gScript.sendAsyncMessage("trigger-data-transport-close", SpecialPowers.Cr.NS_ERROR_UNEXPECTED);
resolve(); resolve();
}); });
}), }),
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('data-transport-closed', function dataTransportClosedHandler(aReason) { gScript.addMessageListener("data-transport-closed", function dataTransportClosedHandler(aReason) {
gScript.removeMessageListener('data-transport-closed', dataTransportClosedHandler); gScript.removeMessageListener("data-transport-closed", dataTransportClosedHandler);
info("The data transport is closed. " + aReason); info("The data transport is closed. " + aReason);
resolve(); resolve();
}); });
@ -476,13 +476,13 @@ function testStartConnectionUnexpectedDataTransportClose() {
} }
function teardown() { function teardown() {
gScript.addMessageListener('teardown-complete', function teardownCompleteHandler() { gScript.addMessageListener("teardown-complete", function teardownCompleteHandler() {
gScript.removeMessageListener('teardown-complete', teardownCompleteHandler); gScript.removeMessageListener("teardown-complete", teardownCompleteHandler);
gScript.destroy(); gScript.destroy();
SimpleTest.finish(); SimpleTest.finish();
}); });
gScript.sendAsyncMessage('teardown'); gScript.sendAsyncMessage("teardown");
} }
function runTests() { function runTests() {
@ -501,9 +501,9 @@ function runTests() {
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
SpecialPowers.pushPermissions([ SpecialPowers.pushPermissions([
{type: 'presentation-device-manage', allow: false, context: document}, {type: "presentation-device-manage", allow: false, context: document},
], function() { ], function() {
SpecialPowers.pushPrefEnv({ 'set': [["dom.presentation.enabled", true], SpecialPowers.pushPrefEnv({ "set": [["dom.presentation.enabled", true],
["dom.presentation.controller.enabled", true], ["dom.presentation.controller.enabled", true],
["dom.presentation.session_transport.data_channel.enable", false]]}, ["dom.presentation.session_transport.data_channel.enable", false]]},
runTests); runTests);

View file

@ -1,61 +1,61 @@
'use strict'; "use strict";
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
SimpleTest.requestFlakyTimeout('Test for guarantee not firing async event'); SimpleTest.requestFlakyTimeout("Test for guarantee not firing async event");
function debug(str) { function debug(str) {
// info(str); // info(str);
} }
var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL('PresentationSessionChromeScript1UA.js')); var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL("PresentationSessionChromeScript1UA.js"));
var receiverUrl = SimpleTest.getTestFileURL('file_presentation_terminate.html'); var receiverUrl = SimpleTest.getTestFileURL("file_presentation_terminate.html");
var request; var request;
var connection; var connection;
var receiverIframe; var receiverIframe;
function setup() { function setup() {
gScript.addMessageListener('device-prompt', function devicePromptHandler() { gScript.addMessageListener("device-prompt", function devicePromptHandler() {
debug('Got message: device-prompt'); debug("Got message: device-prompt");
gScript.removeMessageListener('device-prompt', devicePromptHandler); gScript.removeMessageListener("device-prompt", devicePromptHandler);
gScript.sendAsyncMessage('trigger-device-prompt-select'); gScript.sendAsyncMessage("trigger-device-prompt-select");
}); });
gScript.addMessageListener('control-channel-established', function controlChannelEstablishedHandler() { gScript.addMessageListener("control-channel-established", function controlChannelEstablishedHandler() {
gScript.removeMessageListener('control-channel-established', gScript.removeMessageListener("control-channel-established",
controlChannelEstablishedHandler); controlChannelEstablishedHandler);
gScript.sendAsyncMessage('trigger-control-channel-open'); gScript.sendAsyncMessage("trigger-control-channel-open");
}); });
gScript.addMessageListener('sender-launch', function senderLaunchHandler(url) { gScript.addMessageListener("sender-launch", function senderLaunchHandler(url) {
debug('Got message: sender-launch'); debug("Got message: sender-launch");
gScript.removeMessageListener('sender-launch', senderLaunchHandler); gScript.removeMessageListener("sender-launch", senderLaunchHandler);
is(url, receiverUrl, 'Receiver: should receive the same url'); is(url, receiverUrl, "Receiver: should receive the same url");
receiverIframe = document.createElement('iframe'); receiverIframe = document.createElement("iframe");
receiverIframe.setAttribute('mozbrowser', 'true'); receiverIframe.setAttribute("mozbrowser", "true");
receiverIframe.setAttribute('mozpresentation', receiverUrl); receiverIframe.setAttribute("mozpresentation", receiverUrl);
var oop = !location.pathname.includes('_inproc'); var oop = !location.pathname.includes("_inproc");
receiverIframe.setAttribute('remote', oop); receiverIframe.setAttribute("remote", oop);
receiverIframe.setAttribute('src', receiverUrl); receiverIframe.setAttribute("src", receiverUrl);
receiverIframe.addEventListener('mozbrowserloadend', function() { receiverIframe.addEventListener("mozbrowserloadend", function() {
info('Receiver loaded.'); info("Receiver loaded.");
}, {once: true}); }, {once: true});
// This event is triggered when the iframe calls 'alert'. // This event is triggered when the iframe calls 'alert'.
receiverIframe.addEventListener('mozbrowsershowmodalprompt', function receiverListener(evt) { receiverIframe.addEventListener("mozbrowsershowmodalprompt", function receiverListener(evt) {
var message = evt.detail.message; var message = evt.detail.message;
if (/^OK /.exec(message)) { if (/^OK /.exec(message)) {
ok(true, message.replace(/^OK /, '')); ok(true, message.replace(/^OK /, ""));
} else if (/^KO /.exec(message)) { } else if (/^KO /.exec(message)) {
ok(false, message.replace(/^KO /, '')); ok(false, message.replace(/^KO /, ""));
} else if (/^INFO /.exec(message)) { } else if (/^INFO /.exec(message)) {
info(message.replace(/^INFO /, '')); info(message.replace(/^INFO /, ""));
} else if (/^COMMAND /.exec(message)) { } else if (/^COMMAND /.exec(message)) {
var command = JSON.parse(message.replace(/^COMMAND /, '')); var command = JSON.parse(message.replace(/^COMMAND /, ""));
gScript.sendAsyncMessage(command.name, command.data); gScript.sendAsyncMessage(command.name, command.data);
} else if (/^DONE$/.exec(message)) { } else if (/^DONE$/.exec(message)) {
ok(true, 'Messaging from iframe complete.'); ok(true, "Messaging from iframe complete.");
receiverIframe.removeEventListener('mozbrowsershowmodalprompt', receiverIframe.removeEventListener("mozbrowsershowmodalprompt",
receiverListener); receiverListener);
} }
}); });
@ -65,16 +65,16 @@ function setup() {
aResolve(receiverIframe); aResolve(receiverIframe);
}); });
var obs = SpecialPowers.Cc['@mozilla.org/observer-service;1'] var obs = SpecialPowers.Cc["@mozilla.org/observer-service;1"]
.getService(SpecialPowers.Ci.nsIObserverService); .getService(SpecialPowers.Ci.nsIObserverService);
obs.notifyObservers(promise, 'setup-request-promise'); obs.notifyObservers(promise, "setup-request-promise");
}); });
gScript.addMessageListener('promise-setup-ready', function promiseSetupReadyHandler() { gScript.addMessageListener("promise-setup-ready", function promiseSetupReadyHandler() {
debug('Got message: promise-setup-ready'); debug("Got message: promise-setup-ready");
gScript.removeMessageListener('promise-setup-ready', gScript.removeMessageListener("promise-setup-ready",
promiseSetupReadyHandler); promiseSetupReadyHandler);
gScript.sendAsyncMessage('trigger-on-session-request', receiverUrl); gScript.sendAsyncMessage("trigger-on-session-request", receiverUrl);
}); });
return Promise.resolve(); return Promise.resolve();
@ -82,19 +82,19 @@ function setup() {
function testCreateRequest() { function testCreateRequest() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('Sender: --- testCreateRequest ---'); info("Sender: --- testCreateRequest ---");
request = new PresentationRequest(receiverUrl); request = new PresentationRequest(receiverUrl);
request.getAvailability().then((aAvailability) => { request.getAvailability().then((aAvailability) => {
is(aAvailability.value, false, "Sender: should have no available device after setup"); is(aAvailability.value, false, "Sender: should have no available device after setup");
aAvailability.onchange = function() { aAvailability.onchange = function() {
aAvailability.onchange = null; aAvailability.onchange = null;
ok(aAvailability.value, 'Sender: Device should be available.'); ok(aAvailability.value, "Sender: Device should be available.");
aResolve(); aResolve();
} };
gScript.sendAsyncMessage('trigger-device-add'); gScript.sendAsyncMessage("trigger-device-add");
}).catch((aError) => { }).catch((aError) => {
ok(false, 'Sender: Error occurred when getting availability: ' + aError); ok(false, "Sender: Error occurred when getting availability: " + aError);
teardown(); teardown();
aReject(); aReject();
}); });
@ -105,24 +105,24 @@ function testStartConnection() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
request.start().then((aConnection) => { request.start().then((aConnection) => {
connection = aConnection; connection = aConnection;
ok(connection, 'Sender: Connection should be available.'); ok(connection, "Sender: Connection should be available.");
ok(connection.id, 'Sender: Connection ID should be set.'); ok(connection.id, "Sender: Connection ID should be set.");
is(connection.state, 'connecting', 'Sender: The initial state should be connecting.'); is(connection.state, "connecting", "Sender: The initial state should be connecting.");
connection.onconnect = function() { connection.onconnect = function() {
connection.onconnect = null; connection.onconnect = null;
is(connection.state, 'connected', 'Connection should be connected.'); is(connection.state, "connected", "Connection should be connected.");
aResolve(); aResolve();
}; };
info('Sender: test terminate at connecting state'); info("Sender: test terminate at connecting state");
connection.onterminate = function() { connection.onterminate = function() {
connection.onterminate = null; connection.onterminate = null;
ok(false, 'Should not be able to terminate at connecting state'); ok(false, "Should not be able to terminate at connecting state");
aReject(); aReject();
} };
connection.terminate(); connection.terminate();
}).catch((aError) => { }).catch((aError) => {
ok(false, 'Sender: Error occurred when establishing a connection: ' + aError); ok(false, "Sender: Error occurred when establishing a connection: " + aError);
teardown(); teardown();
aReject(); aReject();
}); });
@ -131,45 +131,45 @@ function testStartConnection() {
function testConnectionTerminate() { function testConnectionTerminate() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('Sender: --- testConnectionTerminate---'); info("Sender: --- testConnectionTerminate---");
connection.onterminate = function() { connection.onterminate = function() {
connection.onterminate = null; connection.onterminate = null;
is(connection.state, 'terminated', 'Sender: Connection should be terminated.'); is(connection.state, "terminated", "Sender: Connection should be terminated.");
}; };
gScript.addMessageListener('control-channel-established', function controlChannelEstablishedHandler() { gScript.addMessageListener("control-channel-established", function controlChannelEstablishedHandler() {
gScript.removeMessageListener('control-channel-established', gScript.removeMessageListener("control-channel-established",
controlChannelEstablishedHandler); controlChannelEstablishedHandler);
gScript.sendAsyncMessage('trigger-control-channel-open'); gScript.sendAsyncMessage("trigger-control-channel-open");
}); });
gScript.addMessageListener('sender-terminate', function senderTerminateHandler() { gScript.addMessageListener("sender-terminate", function senderTerminateHandler() {
gScript.removeMessageListener('sender-terminate', gScript.removeMessageListener("sender-terminate",
senderTerminateHandler); senderTerminateHandler);
Promise.all([ Promise.all([
new Promise((resolve) => { new Promise((resolve) => {
gScript.addMessageListener('device-disconnected', function deviceDisconnectedHandler() { gScript.addMessageListener("device-disconnected", function deviceDisconnectedHandler() {
gScript.removeMessageListener('device-disconnected', deviceDisconnectedHandler); gScript.removeMessageListener("device-disconnected", deviceDisconnectedHandler);
ok(true, 'observe device disconnect'); ok(true, "observe device disconnect");
resolve(); resolve();
}); });
}), }),
new Promise((resolve) => { new Promise((resolve) => {
receiverIframe.addEventListener('mozbrowserclose', function() { receiverIframe.addEventListener("mozbrowserclose", function() {
ok(true, 'observe receiver page closing'); ok(true, "observe receiver page closing");
resolve(); resolve();
}); });
}), }),
]).then(aResolve); ]).then(aResolve);
gScript.sendAsyncMessage('trigger-on-terminate-request'); gScript.sendAsyncMessage("trigger-on-terminate-request");
}); });
gScript.addMessageListener('ready-to-terminate', function onReadyToTerminate() { gScript.addMessageListener("ready-to-terminate", function onReadyToTerminate() {
gScript.removeMessageListener('ready-to-terminate', onReadyToTerminate); gScript.removeMessageListener("ready-to-terminate", onReadyToTerminate);
connection.terminate(); connection.terminate();
// test unexpected close right after terminate // test unexpected close right after terminate
connection.onclose = function() { connection.onclose = function() {
ok(false, 'close after terminate should do nothing'); ok(false, "close after terminate should do nothing");
}; };
connection.close(); connection.close();
}); });
@ -179,10 +179,10 @@ function testConnectionTerminate() {
function testSendAfterTerminate() { function testSendAfterTerminate() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
try { try {
connection.send('something'); connection.send("something");
ok(false, 'PresentationConnection.send should be failed'); ok(false, "PresentationConnection.send should be failed");
} catch (e) { } catch (e) {
is(e.name, 'InvalidStateError', 'Must throw InvalidStateError'); is(e.name, "InvalidStateError", "Must throw InvalidStateError");
} }
aResolve(); aResolve();
}); });
@ -193,14 +193,14 @@ function testCloseAfterTerminate() {
new Promise(function(aResolve, aReject) { new Promise(function(aResolve, aReject) {
connection.onclose = function() { connection.onclose = function() {
connection.onclose = null; connection.onclose = null;
ok(false, 'close at terminated state should do nothing'); ok(false, "close at terminated state should do nothing");
aResolve(); aResolve();
}; };
connection.close(); connection.close();
}), }),
new Promise(function(aResolve, aReject) { new Promise(function(aResolve, aReject) {
setTimeout(function() { setTimeout(function() {
is(connection.state, 'terminated', 'Sender: Connection should be terminated.'); is(connection.state, "terminated", "Sender: Connection should be terminated.");
aResolve(); aResolve();
}, 3000); }, 3000);
}), }),
@ -208,13 +208,13 @@ function testCloseAfterTerminate() {
} }
function teardown() { function teardown() {
gScript.addMessageListener('teardown-complete', function teardownCompleteHandler() { gScript.addMessageListener("teardown-complete", function teardownCompleteHandler() {
debug('Got message: teardown-complete'); debug("Got message: teardown-complete");
gScript.removeMessageListener('teardown-complete', teardownCompleteHandler); gScript.removeMessageListener("teardown-complete", teardownCompleteHandler);
gScript.destroy(); gScript.destroy();
SimpleTest.finish(); SimpleTest.finish();
}); });
gScript.sendAsyncMessage('teardown'); gScript.sendAsyncMessage("teardown");
} }
function runTests() { function runTests() {
@ -227,16 +227,16 @@ function runTests() {
} }
SpecialPowers.pushPermissions([ SpecialPowers.pushPermissions([
{type: 'presentation-device-manage', allow: false, context: document}, {type: "presentation-device-manage", allow: false, context: document},
{type: 'browser', allow: true, context: document}, {type: "browser", allow: true, context: document},
], () => { ], () => {
SpecialPowers.pushPrefEnv({ 'set': [['dom.presentation.enabled', true], SpecialPowers.pushPrefEnv({ "set": [["dom.presentation.enabled", true],
["dom.presentation.controller.enabled", true], ["dom.presentation.controller.enabled", true],
["dom.presentation.receiver.enabled", true], ["dom.presentation.receiver.enabled", true],
['dom.presentation.test.enabled', true], ["dom.presentation.test.enabled", true],
['dom.mozBrowserFramesEnabled', true], ["dom.mozBrowserFramesEnabled", true],
["network.disable.ipc.security", true], ["network.disable.ipc.security", true],
['dom.ipc.tabs.disabled', false], ["dom.ipc.tabs.disabled", false],
['dom.presentation.test.stage', 0]]}, ["dom.presentation.test.stage", 0]]},
runTests); runTests);
}); });

View file

@ -1,14 +1,14 @@
'use strict'; "use strict";
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
SimpleTest.requestFlakyTimeout('Test for guarantee not firing async event'); SimpleTest.requestFlakyTimeout("Test for guarantee not firing async event");
function debug(str) { function debug(str) {
// info(str); // info(str);
} }
var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL('PresentationSessionChromeScript1UA.js')); var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL("PresentationSessionChromeScript1UA.js"));
var receiverUrl = SimpleTest.getTestFileURL('file_presentation_terminate_establish_connection_error.html'); var receiverUrl = SimpleTest.getTestFileURL("file_presentation_terminate_establish_connection_error.html");
var request; var request;
var connection; var connection;
var receiverIframe; var receiverIframe;
@ -19,48 +19,48 @@ function postMessageToIframe(aType) {
} }
function setup() { function setup() {
gScript.addMessageListener('device-prompt', function devicePromptHandler() { gScript.addMessageListener("device-prompt", function devicePromptHandler() {
debug('Got message: device-prompt'); debug("Got message: device-prompt");
gScript.removeMessageListener('device-prompt', devicePromptHandler); gScript.removeMessageListener("device-prompt", devicePromptHandler);
gScript.sendAsyncMessage('trigger-device-prompt-select'); gScript.sendAsyncMessage("trigger-device-prompt-select");
}); });
gScript.addMessageListener('control-channel-established', function controlChannelEstablishedHandler() { gScript.addMessageListener("control-channel-established", function controlChannelEstablishedHandler() {
gScript.removeMessageListener('control-channel-established', gScript.removeMessageListener("control-channel-established",
controlChannelEstablishedHandler); controlChannelEstablishedHandler);
gScript.sendAsyncMessage('trigger-control-channel-open'); gScript.sendAsyncMessage("trigger-control-channel-open");
}); });
gScript.addMessageListener('sender-launch', function senderLaunchHandler(url) { gScript.addMessageListener("sender-launch", function senderLaunchHandler(url) {
debug('Got message: sender-launch'); debug("Got message: sender-launch");
gScript.removeMessageListener('sender-launch', senderLaunchHandler); gScript.removeMessageListener("sender-launch", senderLaunchHandler);
is(url, receiverUrl, 'Receiver: should receive the same url'); is(url, receiverUrl, "Receiver: should receive the same url");
receiverIframe = document.createElement('iframe'); receiverIframe = document.createElement("iframe");
receiverIframe.setAttribute('mozbrowser', 'true'); receiverIframe.setAttribute("mozbrowser", "true");
receiverIframe.setAttribute('mozpresentation', receiverUrl); receiverIframe.setAttribute("mozpresentation", receiverUrl);
var oop = !location.pathname.includes('_inproc'); var oop = !location.pathname.includes("_inproc");
receiverIframe.setAttribute('remote', oop); receiverIframe.setAttribute("remote", oop);
receiverIframe.setAttribute('src', receiverUrl); receiverIframe.setAttribute("src", receiverUrl);
receiverIframe.addEventListener('mozbrowserloadend', function() { receiverIframe.addEventListener("mozbrowserloadend", function() {
info('Receiver loaded.'); info("Receiver loaded.");
}, {once: true}); }, {once: true});
// This event is triggered when the iframe calls 'alert'. // This event is triggered when the iframe calls 'alert'.
receiverIframe.addEventListener('mozbrowsershowmodalprompt', function receiverListener(evt) { receiverIframe.addEventListener("mozbrowsershowmodalprompt", function receiverListener(evt) {
var message = evt.detail.message; var message = evt.detail.message;
if (/^OK /.exec(message)) { if (/^OK /.exec(message)) {
ok(true, message.replace(/^OK /, '')); ok(true, message.replace(/^OK /, ""));
} else if (/^KO /.exec(message)) { } else if (/^KO /.exec(message)) {
ok(false, message.replace(/^KO /, '')); ok(false, message.replace(/^KO /, ""));
} else if (/^INFO /.exec(message)) { } else if (/^INFO /.exec(message)) {
info(message.replace(/^INFO /, '')); info(message.replace(/^INFO /, ""));
} else if (/^COMMAND /.exec(message)) { } else if (/^COMMAND /.exec(message)) {
var command = JSON.parse(message.replace(/^COMMAND /, '')); var command = JSON.parse(message.replace(/^COMMAND /, ""));
gScript.sendAsyncMessage(command.name, command.data); gScript.sendAsyncMessage(command.name, command.data);
} else if (/^DONE$/.exec(message)) { } else if (/^DONE$/.exec(message)) {
ok(true, 'Messaging from iframe complete.'); ok(true, "Messaging from iframe complete.");
receiverIframe.removeEventListener('mozbrowsershowmodalprompt', receiverIframe.removeEventListener("mozbrowsershowmodalprompt",
receiverListener); receiverListener);
} }
}); });
@ -70,16 +70,16 @@ function setup() {
aResolve(receiverIframe); aResolve(receiverIframe);
}); });
var obs = SpecialPowers.Cc['@mozilla.org/observer-service;1'] var obs = SpecialPowers.Cc["@mozilla.org/observer-service;1"]
.getService(SpecialPowers.Ci.nsIObserverService); .getService(SpecialPowers.Ci.nsIObserverService);
obs.notifyObservers(promise, 'setup-request-promise'); obs.notifyObservers(promise, "setup-request-promise");
}); });
gScript.addMessageListener('promise-setup-ready', function promiseSetupReadyHandler() { gScript.addMessageListener("promise-setup-ready", function promiseSetupReadyHandler() {
debug('Got message: promise-setup-ready'); debug("Got message: promise-setup-ready");
gScript.removeMessageListener('promise-setup-ready', gScript.removeMessageListener("promise-setup-ready",
promiseSetupReadyHandler); promiseSetupReadyHandler);
gScript.sendAsyncMessage('trigger-on-session-request', receiverUrl); gScript.sendAsyncMessage("trigger-on-session-request", receiverUrl);
}); });
return Promise.resolve(); return Promise.resolve();
@ -87,19 +87,19 @@ function setup() {
function testCreateRequest() { function testCreateRequest() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
info('Sender: --- testCreateRequest ---'); info("Sender: --- testCreateRequest ---");
request = new PresentationRequest(receiverUrl); request = new PresentationRequest(receiverUrl);
request.getAvailability().then((aAvailability) => { request.getAvailability().then((aAvailability) => {
is(aAvailability.value, false, "Sender: should have no available device after setup"); is(aAvailability.value, false, "Sender: should have no available device after setup");
aAvailability.onchange = function() { aAvailability.onchange = function() {
aAvailability.onchange = null; aAvailability.onchange = null;
ok(aAvailability.value, 'Sender: Device should be available.'); ok(aAvailability.value, "Sender: Device should be available.");
aResolve(); aResolve();
} };
gScript.sendAsyncMessage('trigger-device-add'); gScript.sendAsyncMessage("trigger-device-add");
}).catch((aError) => { }).catch((aError) => {
ok(false, 'Sender: Error occurred when getting availability: ' + aError); ok(false, "Sender: Error occurred when getting availability: " + aError);
teardown(); teardown();
aReject(); aReject();
}); });
@ -110,16 +110,16 @@ function testStartConnection() {
return new Promise(function(aResolve, aReject) { return new Promise(function(aResolve, aReject) {
request.start().then((aConnection) => { request.start().then((aConnection) => {
connection = aConnection; connection = aConnection;
ok(connection, 'Sender: Connection should be available.'); ok(connection, "Sender: Connection should be available.");
ok(connection.id, 'Sender: Connection ID should be set.'); ok(connection.id, "Sender: Connection ID should be set.");
is(connection.state, 'connecting', 'Sender: The initial state should be connecting.'); is(connection.state, "connecting", "Sender: The initial state should be connecting.");
connection.onconnect = function() { connection.onconnect = function() {
connection.onconnect = null; connection.onconnect = null;
is(connection.state, 'connected', 'Connection should be connected.'); is(connection.state, "connected", "Connection should be connected.");
aResolve(); aResolve();
}; };
}).catch((aError) => { }).catch((aError) => {
ok(false, 'Sender: Error occurred when establishing a connection: ' + aError); ok(false, "Sender: Error occurred when establishing a connection: " + aError);
teardown(); teardown();
aReject(); aReject();
}); });
@ -127,50 +127,50 @@ function testStartConnection() {
} }
function testConnectionTerminate() { function testConnectionTerminate() {
info('Sender: --- testConnectionTerminate---'); info("Sender: --- testConnectionTerminate---");
let promise = Promise.all([ let promise = Promise.all([
new Promise(function(aResolve, aReject) { new Promise(function(aResolve, aReject) {
connection.onclose = function() { connection.onclose = function() {
connection.onclose = null; connection.onclose = null;
is(connection.state, 'closed', 'Sender: Connection should be closed.'); is(connection.state, "closed", "Sender: Connection should be closed.");
aResolve(); aResolve();
}; };
}), }),
new Promise(function(aResolve, aReject) { new Promise(function(aResolve, aReject) {
function deviceDisconnectedHandler() { function deviceDisconnectedHandler() {
gScript.removeMessageListener('device-disconnected', deviceDisconnectedHandler); gScript.removeMessageListener("device-disconnected", deviceDisconnectedHandler);
ok(true, 'should not receive device disconnect'); ok(true, "should not receive device disconnect");
aResolve(); aResolve();
} }
gScript.addMessageListener('device-disconnected', deviceDisconnectedHandler); gScript.addMessageListener("device-disconnected", deviceDisconnectedHandler);
}), }),
new Promise(function(aResolve, aReject) { new Promise(function(aResolve, aReject) {
receiverIframe.addEventListener('mozbrowserclose', function() { receiverIframe.addEventListener("mozbrowserclose", function() {
ok(true, 'observe receiver page closing'); ok(true, "observe receiver page closing");
aResolve(); aResolve();
}); });
}) })
]); ]);
gScript.addMessageListener('prepare-for-terminate', function prepareForTerminateHandler() { gScript.addMessageListener("prepare-for-terminate", function prepareForTerminateHandler() {
debug('Got message: prepare-for-terminate'); debug("Got message: prepare-for-terminate");
gScript.removeMessageListener('prepare-for-terminate', prepareForTerminateHandler); gScript.removeMessageListener("prepare-for-terminate", prepareForTerminateHandler);
gScript.sendAsyncMessage('trigger-control-channel-error'); gScript.sendAsyncMessage("trigger-control-channel-error");
postMessageToIframe('ready-to-terminate'); postMessageToIframe("ready-to-terminate");
}); });
return promise; return promise;
} }
function teardown() { function teardown() {
gScript.addMessageListener('teardown-complete', function teardownCompleteHandler() { gScript.addMessageListener("teardown-complete", function teardownCompleteHandler() {
debug('Got message: teardown-complete'); debug("Got message: teardown-complete");
gScript.removeMessageListener('teardown-complete', teardownCompleteHandler); gScript.removeMessageListener("teardown-complete", teardownCompleteHandler);
gScript.destroy(); gScript.destroy();
SimpleTest.finish(); SimpleTest.finish();
}); });
gScript.sendAsyncMessage('teardown'); gScript.sendAsyncMessage("teardown");
} }
function runTests() { function runTests() {
@ -181,16 +181,16 @@ function runTests() {
} }
SpecialPowers.pushPermissions([ SpecialPowers.pushPermissions([
{type: 'presentation-device-manage', allow: false, context: document}, {type: "presentation-device-manage", allow: false, context: document},
{type: 'browser', allow: true, context: document}, {type: "browser", allow: true, context: document},
], () => { ], () => {
SpecialPowers.pushPrefEnv({ 'set': [['dom.presentation.enabled', true], SpecialPowers.pushPrefEnv({ "set": [["dom.presentation.enabled", true],
["dom.presentation.controller.enabled", true], ["dom.presentation.controller.enabled", true],
["dom.presentation.receiver.enabled", true], ["dom.presentation.receiver.enabled", true],
['dom.presentation.test.enabled', true], ["dom.presentation.test.enabled", true],
['dom.mozBrowserFramesEnabled', true], ["dom.mozBrowserFramesEnabled", true],
["network.disable.ipc.security", true], ["network.disable.ipc.security", true],
['dom.ipc.tabs.disabled', false], ["dom.ipc.tabs.disabled", false],
['dom.presentation.test.stage', 0]]}, ["dom.presentation.test.stage", 0]]},
runTests); runTests);
}); });

View file

@ -19,7 +19,7 @@ const SERVER_CONTRACT_ID = "@mozilla.org/presentation/control-service;1";
const PREF_DISCOVERY = "dom.presentation.discovery.enabled"; const PREF_DISCOVERY = "dom.presentation.discovery.enabled";
const PREF_DISCOVERABLE = "dom.presentation.discoverable"; const PREF_DISCOVERABLE = "dom.presentation.discoverable";
const PREF_DEVICENAME= "dom.presentation.device.name"; const PREF_DEVICENAME = "dom.presentation.device.name";
const LATEST_VERSION = 1; const LATEST_VERSION = 1;
const SERVICE_TYPE = "_presentation-ctrl._tcp"; const SERVICE_TYPE = "_presentation-ctrl._tcp";
@ -36,7 +36,7 @@ function sleep(aMs) {
.createInstance(Ci.nsITimer); .createInstance(Ci.nsITimer);
timer.initWithCallback({ timer.initWithCallback({
notify: function () { notify() {
resolve(); resolve();
}, },
}, aMs, timer.TYPE_ONE_SHOT); }, aMs, timer.TYPE_ONE_SHOT);
@ -48,11 +48,11 @@ function MockFactory(aClass) {
this._cls = aClass; this._cls = aClass;
} }
MockFactory.prototype = { MockFactory.prototype = {
createInstance: function(aOuter, aIID) { createInstance(aOuter, aIID) {
if (aOuter) { if (aOuter) {
throw Cr.NS_ERROR_NO_AGGREGATION; throw Cr.NS_ERROR_NO_AGGREGATION;
} }
switch(typeof(this._cls)) { switch (typeof(this._cls)) {
case "function": case "function":
return new this._cls().QueryInterface(aIID); return new this._cls().QueryInterface(aIID);
case "object": case "object":
@ -61,7 +61,7 @@ MockFactory.prototype = {
return null; return null;
} }
}, },
lockFactory: function(aLock) { lockFactory(aLock) {
throw Cr.NS_ERROR_NOT_IMPLEMENTED; throw Cr.NS_ERROR_NOT_IMPLEMENTED;
}, },
QueryInterface: ChromeUtils.generateQI([Ci.nsIFactory]) QueryInterface: ChromeUtils.generateQI([Ci.nsIFactory])
@ -82,7 +82,7 @@ function ContractHook(aContractID, aClass) {
ContractHook.prototype = { ContractHook.prototype = {
hookedMap: new Map(), // remember only the most original factory. hookedMap: new Map(), // remember only the most original factory.
init: function() { init() {
this.reset(); this.reset();
let oldContract = this.unregister(); let oldContract = this.unregister();
@ -95,9 +95,9 @@ ContractHook.prototype = {
registerCleanupFunction(() => { this.cleanup.apply(this); }); registerCleanupFunction(() => { this.cleanup.apply(this); });
}, },
reset: function() {}, reset() {},
cleanup: function() { cleanup() {
this.reset(); this.reset();
this.unregister(); this.unregister();
@ -111,7 +111,7 @@ ContractHook.prototype = {
} }
}, },
unregister: function() { unregister() {
var classID, factory; var classID, factory;
try { try {
@ -126,7 +126,7 @@ ContractHook.prototype = {
registrar.unregisterFactory(classID, factory); registrar.unregisterFactory(classID, factory);
} }
return { classID: classID, factory: factory }; return { classID, factory };
} }
}; };
@ -198,12 +198,12 @@ TestPresentationDeviceListener.prototype = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDeviceListener, QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDeviceListener,
Ci.nsISupportsWeakReference]), Ci.nsISupportsWeakReference]),
addDevice: function(device) { this.devices[device.id] = device; }, addDevice(device) { this.devices[device.id] = device; },
removeDevice: function(device) { delete this.devices[device.id]; }, removeDevice(device) { delete this.devices[device.id]; },
updateDevice: function(device) { this.devices[device.id] = device; }, updateDevice(device) { this.devices[device.id] = device; },
onSessionRequest: function(device, url, presentationId, controlChannel) {}, onSessionRequest(device, url, presentationId, controlChannel) {},
count: function() { count() {
var size = 0, key; var size = 0, key;
for (key in this.devices) { for (key in this.devices) {
if (this.devices.hasOwnProperty(key)) { if (this.devices.hasOwnProperty(key)) {
@ -233,8 +233,8 @@ function registerService() {
let mockObj = { let mockObj = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]), QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]),
startDiscovery: function(serviceType, listener) {}, startDiscovery(serviceType, listener) {},
registerService: function(serviceInfo, listener) { registerService(serviceInfo, listener) {
deferred.resolve(); deferred.resolve();
this.serviceRegistered++; this.serviceRegistered++;
return { return {
@ -244,7 +244,7 @@ function registerService() {
} }
}; };
}, },
resolveService: function(serviceInfo, listener) {}, resolveService(serviceInfo, listener) {},
serviceRegistered: 0, serviceRegistered: 0,
serviceUnregistered: 0 serviceUnregistered: 0
}; };
@ -258,9 +258,9 @@ function registerService() {
provider.listener = { provider.listener = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDeviceListener, QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDeviceListener,
Ci.nsISupportsWeakReference]), Ci.nsISupportsWeakReference]),
addDevice: function(device) {}, addDevice(device) {},
removeDevice: function(device) {}, removeDevice(device) {},
updateDevice: function(device) {}, updateDevice(device) {},
}; };
deferred.promise.then(function() { deferred.promise.then(function() {
@ -283,12 +283,12 @@ function noRegisterService() {
let mockObj = { let mockObj = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]), QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]),
startDiscovery: function(serviceType, listener) {}, startDiscovery(serviceType, listener) {},
registerService: function(serviceInfo, listener) { registerService(serviceInfo, listener) {
deferred.resolve(); deferred.resolve();
Assert.ok(false, "should not register service if not discoverable"); Assert.ok(false, "should not register service if not discoverable");
}, },
resolveService: function(serviceInfo, listener) {}, resolveService(serviceInfo, listener) {},
}; };
let contractHook = new ContractHook(SD_CONTRACT_ID, mockObj); let contractHook = new ContractHook(SD_CONTRACT_ID, mockObj);
@ -298,9 +298,9 @@ function noRegisterService() {
provider.listener = { provider.listener = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDeviceListener, QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDeviceListener,
Ci.nsISupportsWeakReference]), Ci.nsISupportsWeakReference]),
addDevice: function(device) {}, addDevice(device) {},
removeDevice: function(device) {}, removeDevice(device) {},
updateDevice: function(device) {}, updateDevice(device) {},
}; };
let race = Promise.race([ let race = Promise.race([
@ -322,8 +322,8 @@ function registerServiceDynamically() {
let mockObj = { let mockObj = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]), QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]),
startDiscovery: function(serviceType, listener) {}, startDiscovery(serviceType, listener) {},
registerService: function(serviceInfo, listener) { registerService(serviceInfo, listener) {
deferred.resolve(); deferred.resolve();
this.serviceRegistered++; this.serviceRegistered++;
return { return {
@ -333,7 +333,7 @@ function registerServiceDynamically() {
} }
}; };
}, },
resolveService: function(serviceInfo, listener) {}, resolveService(serviceInfo, listener) {},
serviceRegistered: 0, serviceRegistered: 0,
serviceUnregistered: 0 serviceUnregistered: 0
}; };
@ -347,9 +347,9 @@ function registerServiceDynamically() {
provider.listener = { provider.listener = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDeviceListener, QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDeviceListener,
Ci.nsISupportsWeakReference]), Ci.nsISupportsWeakReference]),
addDevice: function(device) {}, addDevice(device) {},
removeDevice: function(device) {}, removeDevice(device) {},
updateDevice: function(device) {}, updateDevice(device) {},
}; };
Assert.equal(mockObj.serviceRegistered, 0); Assert.equal(mockObj.serviceRegistered, 0);
@ -385,7 +385,7 @@ function addDevice() {
SERVICE_TYPE); SERVICE_TYPE);
let mockObj = { let mockObj = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]), QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]),
startDiscovery: function(serviceType, listener) { startDiscovery(serviceType, listener) {
listener.onDiscoveryStarted(serviceType); listener.onDiscoveryStarted(serviceType);
listener.onServiceFound(createDevice("", listener.onServiceFound(createDevice("",
0, 0,
@ -393,11 +393,11 @@ function addDevice() {
mockDevice.serviceType)); mockDevice.serviceType));
return { return {
QueryInterface: ChromeUtils.generateQI([Ci.nsICancelable]), QueryInterface: ChromeUtils.generateQI([Ci.nsICancelable]),
cancel: function() {} cancel() {}
}; };
}, },
registerService: function(serviceInfo, listener) {}, registerService(serviceInfo, listener) {},
resolveService: function(serviceInfo, listener) { resolveService(serviceInfo, listener) {
Assert.equal(serviceInfo.serviceName, mockDevice.serviceName); Assert.equal(serviceInfo.serviceName, mockDevice.serviceName);
Assert.equal(serviceInfo.serviceType, mockDevice.serviceType); Assert.equal(serviceInfo.serviceType, mockDevice.serviceType);
listener.onServiceResolved(createDevice(mockDevice.host, listener.onServiceResolved(createDevice(mockDevice.host,
@ -435,7 +435,7 @@ function filterDevice() {
SERVICE_TYPE); SERVICE_TYPE);
let mockObj = { let mockObj = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]), QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]),
startDiscovery: function(serviceType, listener) { startDiscovery(serviceType, listener) {
listener.onDiscoveryStarted(serviceType); listener.onDiscoveryStarted(serviceType);
listener.onServiceFound(createDevice("", listener.onServiceFound(createDevice("",
0, 0,
@ -443,11 +443,11 @@ function filterDevice() {
mockDevice.serviceType)); mockDevice.serviceType));
return { return {
QueryInterface: ChromeUtils.generateQI([Ci.nsICancelable]), QueryInterface: ChromeUtils.generateQI([Ci.nsICancelable]),
cancel: function() {} cancel() {}
}; };
}, },
registerService: function(serviceInfo, listener) {}, registerService(serviceInfo, listener) {},
resolveService: function(serviceInfo, listener) { resolveService(serviceInfo, listener) {
Assert.equal(serviceInfo.serviceName, mockDevice.serviceName); Assert.equal(serviceInfo.serviceName, mockDevice.serviceName);
Assert.equal(serviceInfo.serviceType, mockDevice.serviceType); Assert.equal(serviceInfo.serviceType, mockDevice.serviceType);
listener.onServiceResolved(createDevice(mockDevice.host, listener.onServiceResolved(createDevice(mockDevice.host,
@ -462,7 +462,7 @@ function filterDevice() {
let listener = { let listener = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDeviceListener, QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDeviceListener,
Ci.nsISupportsWeakReference]), Ci.nsISupportsWeakReference]),
addDevice: function(device) { addDevice(device) {
let tests = [ let tests = [
{ requestedUrl: "app://fling-player.gaiamobile.org/index.html", supported: true }, { requestedUrl: "app://fling-player.gaiamobile.org/index.html", supported: true },
{ requestedUrl: "app://notification-receiver.gaiamobile.org/index.html", supported: true }, { requestedUrl: "app://notification-receiver.gaiamobile.org/index.html", supported: true },
@ -481,9 +481,9 @@ function filterDevice() {
provider = null; provider = null;
run_next_test(); run_next_test();
}, },
updateDevice: function() {}, updateDevice() {},
removeDevice: function() {}, removeDevice() {},
onSessionRequest: function() {}, onSessionRequest() {},
}; };
provider.listener = listener; provider.listener = listener;
@ -505,7 +505,7 @@ function handleSessionRequest() {
SERVICE_TYPE); SERVICE_TYPE);
let mockSDObj = { let mockSDObj = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]), QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]),
startDiscovery: function(serviceType, listener) { startDiscovery(serviceType, listener) {
listener.onDiscoveryStarted(serviceType); listener.onDiscoveryStarted(serviceType);
listener.onServiceFound(createDevice("", listener.onServiceFound(createDevice("",
0, 0,
@ -513,11 +513,11 @@ function handleSessionRequest() {
mockDevice.serviceType)); mockDevice.serviceType));
return { return {
QueryInterface: ChromeUtils.generateQI([Ci.nsICancelable]), QueryInterface: ChromeUtils.generateQI([Ci.nsICancelable]),
cancel: function() {} cancel() {}
}; };
}, },
registerService: function(serviceInfo, listener) {}, registerService(serviceInfo, listener) {},
resolveService: function(serviceInfo, listener) { resolveService(serviceInfo, listener) {
listener.onServiceResolved(createDevice(mockDevice.host, listener.onServiceResolved(createDevice(mockDevice.host,
mockDevice.port, mockDevice.port,
mockDevice.serviceName, mockDevice.serviceName,
@ -527,9 +527,9 @@ function handleSessionRequest() {
let mockServerObj = { let mockServerObj = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationControlService]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationControlService]),
connect: function(deviceInfo) { connect(deviceInfo) {
this.request = { this.request = {
deviceInfo: deviceInfo, deviceInfo,
}; };
return { return {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationControlChannel]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationControlChannel]),
@ -537,7 +537,7 @@ function handleSessionRequest() {
}, },
id: "", id: "",
version: LATEST_VERSION, version: LATEST_VERSION,
isCompatibleServer: function(version) { isCompatibleServer(version) {
return this.version === version; return this.version === version;
} }
}; };
@ -548,7 +548,7 @@ function handleSessionRequest() {
let listener = { let listener = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDeviceListener, QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDeviceListener,
Ci.nsISupportsWeakReference]), Ci.nsISupportsWeakReference]),
addDevice: function(device) { addDevice(device) {
this.device = device; this.device = device;
}, },
}; };
@ -577,7 +577,7 @@ function handleOnSessionRequest() {
SERVICE_TYPE); SERVICE_TYPE);
let mockSDObj = { let mockSDObj = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]), QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]),
startDiscovery: function(serviceType, listener) { startDiscovery(serviceType, listener) {
listener.onDiscoveryStarted(serviceType); listener.onDiscoveryStarted(serviceType);
listener.onServiceFound(createDevice("", listener.onServiceFound(createDevice("",
0, 0,
@ -585,11 +585,11 @@ function handleOnSessionRequest() {
mockDevice.serviceType)); mockDevice.serviceType));
return { return {
QueryInterface: ChromeUtils.generateQI([Ci.nsICancelable]), QueryInterface: ChromeUtils.generateQI([Ci.nsICancelable]),
cancel: function() {} cancel() {}
}; };
}, },
registerService: function(serviceInfo, listener) {}, registerService(serviceInfo, listener) {},
resolveService: function(serviceInfo, listener) { resolveService(serviceInfo, listener) {
listener.onServiceResolved(createDevice(mockDevice.host, listener.onServiceResolved(createDevice(mockDevice.host,
mockDevice.port, mockDevice.port,
mockDevice.serviceName, mockDevice.serviceName,
@ -599,10 +599,10 @@ function handleOnSessionRequest() {
let mockServerObj = { let mockServerObj = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationControlService]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationControlService]),
startServer: function() {}, startServer() {},
sessionRequest: function() {}, sessionRequest() {},
close: function() {}, close() {},
id: '', id: "",
version: LATEST_VERSION, version: LATEST_VERSION,
port: 0, port: 0,
listener: null, listener: null,
@ -614,15 +614,15 @@ function handleOnSessionRequest() {
let listener = { let listener = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDeviceListener, QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDeviceListener,
Ci.nsISupportsWeakReference]), Ci.nsISupportsWeakReference]),
addDevice: function(device) {}, addDevice(device) {},
removeDevice: function(device) {}, removeDevice(device) {},
updateDevice: function(device) {}, updateDevice(device) {},
onSessionRequest: function(device, url, presentationId, controlChannel) { onSessionRequest(device, url, presentationId, controlChannel) {
Assert.ok(true, "receive onSessionRequest event"); Assert.ok(true, "receive onSessionRequest event");
this.request = { this.request = {
deviceId: device.id, deviceId: device.id,
url: url, url,
presentationId: presentationId, presentationId,
}; };
} }
}; };
@ -659,17 +659,17 @@ function handleOnSessionRequestFromUnknownDevice() {
let mockSDObj = { let mockSDObj = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]), QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]),
startDiscovery: function(serviceType, listener) {}, startDiscovery(serviceType, listener) {},
registerService: function(serviceInfo, listener) {}, registerService(serviceInfo, listener) {},
resolveService: function(serviceInfo, listener) {} resolveService(serviceInfo, listener) {}
}; };
let mockServerObj = { let mockServerObj = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationControlService]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationControlService]),
startServer: function() {}, startServer() {},
sessionRequest: function() {}, sessionRequest() {},
close: function() {}, close() {},
id: '', id: "",
version: LATEST_VERSION, version: LATEST_VERSION,
port: 0, port: 0,
listener: null, listener: null,
@ -681,21 +681,21 @@ function handleOnSessionRequestFromUnknownDevice() {
let listener = { let listener = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDeviceListener, QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDeviceListener,
Ci.nsISupportsWeakReference]), Ci.nsISupportsWeakReference]),
addDevice: function(device) { addDevice(device) {
Assert.ok(false, "shouldn't create any new device"); Assert.ok(false, "shouldn't create any new device");
}, },
removeDevice: function(device) { removeDevice(device) {
Assert.ok(false, "shouldn't remote any device"); Assert.ok(false, "shouldn't remote any device");
}, },
updateDevice: function(device) { updateDevice(device) {
Assert.ok(false, "shouldn't update any device"); Assert.ok(false, "shouldn't update any device");
}, },
onSessionRequest: function(device, url, presentationId, controlChannel) { onSessionRequest(device, url, presentationId, controlChannel) {
Assert.ok(true, "receive onSessionRequest event"); Assert.ok(true, "receive onSessionRequest event");
this.request = { this.request = {
deviceId: device.id, deviceId: device.id,
url: url, url,
presentationId: presentationId, presentationId,
}; };
} }
}; };
@ -732,11 +732,11 @@ function noAddDevice() {
let mockDevice = createDevice("device.local", 12345, "service.name", SERVICE_TYPE); let mockDevice = createDevice("device.local", 12345, "service.name", SERVICE_TYPE);
let mockObj = { let mockObj = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]), QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]),
startDiscovery: function(serviceType, listener) { startDiscovery(serviceType, listener) {
Assert.ok(false, "shouldn't perform any device discovery"); Assert.ok(false, "shouldn't perform any device discovery");
}, },
registerService: function(serviceInfo, listener) {}, registerService(serviceInfo, listener) {},
resolveService: function(serviceInfo, listener) { resolveService(serviceInfo, listener) {
} }
}; };
let contractHook = new ContractHook(SD_CONTRACT_ID, mockObj); let contractHook = new ContractHook(SD_CONTRACT_ID, mockObj);
@ -745,9 +745,9 @@ function noAddDevice() {
let listener = { let listener = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDeviceListener, QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDeviceListener,
Ci.nsISupportsWeakReference]), Ci.nsISupportsWeakReference]),
addDevice: function(device) {}, addDevice(device) {},
removeDevice: function(device) {}, removeDevice(device) {},
updateDevice: function(device) {}, updateDevice(device) {},
}; };
provider.listener = listener; provider.listener = listener;
provider.forceDiscovery(); provider.forceDiscovery();
@ -769,7 +769,7 @@ function ignoreIncompatibleDevice() {
let mockSDObj = { let mockSDObj = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]), QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]),
startDiscovery: function(serviceType, listener) { startDiscovery(serviceType, listener) {
listener.onDiscoveryStarted(serviceType); listener.onDiscoveryStarted(serviceType);
listener.onServiceFound(createDevice("", listener.onServiceFound(createDevice("",
0, 0,
@ -777,10 +777,10 @@ function ignoreIncompatibleDevice() {
mockDevice.serviceType)); mockDevice.serviceType));
return { return {
QueryInterface: ChromeUtils.generateQI([Ci.nsICancelable]), QueryInterface: ChromeUtils.generateQI([Ci.nsICancelable]),
cancel: function() {} cancel() {}
}; };
}, },
registerService: function(serviceInfo, listener) { registerService(serviceInfo, listener) {
deferred.resolve(); deferred.resolve();
listener.onServiceRegistered(createDevice("", listener.onServiceRegistered(createDevice("",
54321, 54321,
@ -788,10 +788,10 @@ function ignoreIncompatibleDevice() {
mockDevice.serviceType)); mockDevice.serviceType));
return { return {
QueryInterface: ChromeUtils.generateQI([Ci.nsICancelable]), QueryInterface: ChromeUtils.generateQI([Ci.nsICancelable]),
cancel: function() {} cancel() {}
}; };
}, },
resolveService: function(serviceInfo, listener) { resolveService(serviceInfo, listener) {
Assert.equal(serviceInfo.serviceName, mockDevice.serviceName); Assert.equal(serviceInfo.serviceName, mockDevice.serviceName);
Assert.equal(serviceInfo.serviceType, mockDevice.serviceType); Assert.equal(serviceInfo.serviceType, mockDevice.serviceType);
listener.onServiceResolved(createDevice(mockDevice.host, listener.onServiceResolved(createDevice(mockDevice.host,
@ -803,20 +803,20 @@ function ignoreIncompatibleDevice() {
let mockServerObj = { let mockServerObj = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationControlService]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationControlService]),
startServer: function() { startServer() {
Services.tm.dispatchToMainThread(() => { Services.tm.dispatchToMainThread(() => {
this.listener.onServerReady(this.port, this.certFingerprint); this.listener.onServerReady(this.port, this.certFingerprint);
}); });
}, },
sessionRequest: function() {}, sessionRequest() {},
close: function() {}, close() {},
id: '', id: "",
version: LATEST_VERSION, version: LATEST_VERSION,
isCompatibleServer: function(version) { isCompatibleServer(version) {
return false; return false;
}, },
port: 54321, port: 54321,
certFingerprint: 'mock-cert-fingerprint', certFingerprint: "mock-cert-fingerprint",
listener: null, listener: null,
}; };
@ -854,7 +854,7 @@ function ignoreSelfDevice() {
let deferred = Promise.defer(); let deferred = Promise.defer();
let mockSDObj = { let mockSDObj = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]), QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]),
startDiscovery: function(serviceType, listener) { startDiscovery(serviceType, listener) {
listener.onDiscoveryStarted(serviceType); listener.onDiscoveryStarted(serviceType);
listener.onServiceFound(createDevice("", listener.onServiceFound(createDevice("",
0, 0,
@ -862,10 +862,10 @@ function ignoreSelfDevice() {
mockDevice.serviceType)); mockDevice.serviceType));
return { return {
QueryInterface: ChromeUtils.generateQI([Ci.nsICancelable]), QueryInterface: ChromeUtils.generateQI([Ci.nsICancelable]),
cancel: function() {} cancel() {}
}; };
}, },
registerService: function(serviceInfo, listener) { registerService(serviceInfo, listener) {
deferred.resolve(); deferred.resolve();
listener.onServiceRegistered(createDevice("", listener.onServiceRegistered(createDevice("",
0, 0,
@ -873,10 +873,10 @@ function ignoreSelfDevice() {
mockDevice.serviceType)); mockDevice.serviceType));
return { return {
QueryInterface: ChromeUtils.generateQI([Ci.nsICancelable]), QueryInterface: ChromeUtils.generateQI([Ci.nsICancelable]),
cancel: function() {} cancel() {}
}; };
}, },
resolveService: function(serviceInfo, listener) { resolveService(serviceInfo, listener) {
Assert.equal(serviceInfo.serviceName, mockDevice.serviceName); Assert.equal(serviceInfo.serviceName, mockDevice.serviceName);
Assert.equal(serviceInfo.serviceType, mockDevice.serviceType); Assert.equal(serviceInfo.serviceType, mockDevice.serviceType);
listener.onServiceResolved(createDevice(mockDevice.host, listener.onServiceResolved(createDevice(mockDevice.host,
@ -888,20 +888,20 @@ function ignoreSelfDevice() {
let mockServerObj = { let mockServerObj = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationControlService]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationControlService]),
startServer: function() { startServer() {
Services.tm.dispatchToMainThread(() => { Services.tm.dispatchToMainThread(() => {
this.listener.onServerReady(this.port, this.certFingerprint); this.listener.onServerReady(this.port, this.certFingerprint);
}); });
}, },
sessionRequest: function() {}, sessionRequest() {},
close: function() {}, close() {},
id: '', id: "",
version: LATEST_VERSION, version: LATEST_VERSION,
isCompatibleServer: function(version) { isCompatibleServer(version) {
return this.version === version; return this.version === version;
}, },
port: 54321, port: 54321,
certFingerprint: 'mock-cert-fingerprint', certFingerprint: "mock-cert-fingerprint",
listener: null, listener: null,
}; };
@ -935,7 +935,7 @@ function addDeviceDynamically() {
SERVICE_TYPE); SERVICE_TYPE);
let mockObj = { let mockObj = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]), QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]),
startDiscovery: function(serviceType, listener) { startDiscovery(serviceType, listener) {
listener.onDiscoveryStarted(serviceType); listener.onDiscoveryStarted(serviceType);
listener.onServiceFound(createDevice("", listener.onServiceFound(createDevice("",
0, 0,
@ -943,11 +943,11 @@ function addDeviceDynamically() {
mockDevice.serviceType)); mockDevice.serviceType));
return { return {
QueryInterface: ChromeUtils.generateQI([Ci.nsICancelable]), QueryInterface: ChromeUtils.generateQI([Ci.nsICancelable]),
cancel: function() {} cancel() {}
}; };
}, },
registerService: function(serviceInfo, listener) {}, registerService(serviceInfo, listener) {},
resolveService: function(serviceInfo, listener) { resolveService(serviceInfo, listener) {
Assert.equal(serviceInfo.serviceName, mockDevice.serviceName); Assert.equal(serviceInfo.serviceName, mockDevice.serviceName);
Assert.equal(serviceInfo.serviceType, mockDevice.serviceType); Assert.equal(serviceInfo.serviceType, mockDevice.serviceType);
listener.onServiceResolved(createDevice(mockDevice.host, listener.onServiceResolved(createDevice(mockDevice.host,
@ -992,7 +992,7 @@ function updateDevice() {
discovered: false, discovered: false,
QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]), QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]),
startDiscovery: function(serviceType, listener) { startDiscovery(serviceType, listener) {
listener.onDiscoveryStarted(serviceType); listener.onDiscoveryStarted(serviceType);
if (!this.discovered) { if (!this.discovered) {
@ -1004,13 +1004,13 @@ function updateDevice() {
return { return {
QueryInterface: ChromeUtils.generateQI([Ci.nsICancelable]), QueryInterface: ChromeUtils.generateQI([Ci.nsICancelable]),
cancel: function() { cancel() {
listener.onDiscoveryStopped(serviceType); listener.onDiscoveryStopped(serviceType);
} }
}; };
}, },
registerService: function(serviceInfo, listener) {}, registerService(serviceInfo, listener) {},
resolveService: function(serviceInfo, listener) { resolveService(serviceInfo, listener) {
Assert.equal(serviceInfo.serviceType, SERVICE_TYPE); Assert.equal(serviceInfo.serviceType, SERVICE_TYPE);
if (serviceInfo.serviceName == "N1") { if (serviceInfo.serviceName == "N1") {
listener.onServiceResolved(mockDevice1); listener.onServiceResolved(mockDevice1);
@ -1028,14 +1028,14 @@ function updateDevice() {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDeviceListener, QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDeviceListener,
Ci.nsISupportsWeakReference]), Ci.nsISupportsWeakReference]),
addDevice: function(device) { addDevice(device) {
Assert.ok(!this.isDeviceAdded); Assert.ok(!this.isDeviceAdded);
Assert.equal(device.id, mockDevice1.host); Assert.equal(device.id, mockDevice1.host);
Assert.equal(device.name, mockDevice1.serviceName); Assert.equal(device.name, mockDevice1.serviceName);
this.isDeviceAdded = true; this.isDeviceAdded = true;
}, },
removeDevice: function(device) { Assert.ok(false); }, removeDevice(device) { Assert.ok(false); },
updateDevice: function(device) { updateDevice(device) {
Assert.ok(!this.isDeviceUpdated); Assert.ok(!this.isDeviceUpdated);
Assert.equal(device.id, mockDevice2.host); Assert.equal(device.id, mockDevice2.host);
Assert.equal(device.name, mockDevice2.serviceName); Assert.equal(device.name, mockDevice2.serviceName);
@ -1079,7 +1079,7 @@ function diffDiscovery() {
discovered: false, discovered: false,
QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]), QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]),
startDiscovery: function(serviceType, listener) { startDiscovery(serviceType, listener) {
listener.onDiscoveryStarted(serviceType); listener.onDiscoveryStarted(serviceType);
if (!this.discovered) { if (!this.discovered) {
@ -1093,13 +1093,13 @@ function diffDiscovery() {
return { return {
QueryInterface: ChromeUtils.generateQI([Ci.nsICancelable]), QueryInterface: ChromeUtils.generateQI([Ci.nsICancelable]),
cancel: function() { cancel() {
listener.onDiscoveryStopped(serviceType); listener.onDiscoveryStopped(serviceType);
} }
}; };
}, },
registerService: function(serviceInfo, listener) {}, registerService(serviceInfo, listener) {},
resolveService: function(serviceInfo, listener) { resolveService(serviceInfo, listener) {
Assert.equal(serviceInfo.serviceType, SERVICE_TYPE); Assert.equal(serviceInfo.serviceType, SERVICE_TYPE);
if (serviceInfo.serviceName == "N1") { if (serviceInfo.serviceName == "N1") {
listener.onServiceResolved(mockDevice1); listener.onServiceResolved(mockDevice1);
@ -1121,9 +1121,9 @@ function diffDiscovery() {
// Start discovery // Start discovery
provider.listener = listener; // discover: N1, N2 provider.listener = listener; // discover: N1, N2
Assert.equal(listener.count(), 2); Assert.equal(listener.count(), 2);
Assert.equal(listener.devices['A.local'].name, mockDevice1.serviceName); Assert.equal(listener.devices["A.local"].name, mockDevice1.serviceName);
Assert.equal(listener.devices['B.local'].name, mockDevice2.serviceName); Assert.equal(listener.devices["B.local"].name, mockDevice2.serviceName);
Assert.ok(!listener.devices['C.local']); Assert.ok(!listener.devices["C.local"]);
// temporarily disable to stop discovery and re-enable // temporarily disable to stop discovery and re-enable
Services.prefs.setBoolPref(PREF_DISCOVERY, false); Services.prefs.setBoolPref(PREF_DISCOVERY, false);
@ -1131,9 +1131,9 @@ function diffDiscovery() {
provider.forceDiscovery(); // discover: N1, N3, going to remove: N2 provider.forceDiscovery(); // discover: N1, N3, going to remove: N2
Assert.equal(listener.count(), 3); Assert.equal(listener.count(), 3);
Assert.equal(listener.devices['A.local'].name, mockDevice1.serviceName); Assert.equal(listener.devices["A.local"].name, mockDevice1.serviceName);
Assert.equal(listener.devices['B.local'].name, mockDevice2.serviceName); Assert.equal(listener.devices["B.local"].name, mockDevice2.serviceName);
Assert.equal(listener.devices['C.local'].name, mockDevice3.serviceName); Assert.equal(listener.devices["C.local"].name, mockDevice3.serviceName);
// temporarily disable to stop discovery and re-enable // temporarily disable to stop discovery and re-enable
Services.prefs.setBoolPref(PREF_DISCOVERY, false); Services.prefs.setBoolPref(PREF_DISCOVERY, false);
@ -1141,9 +1141,9 @@ function diffDiscovery() {
provider.forceDiscovery(); // discover: N1, N3, remove: N2 provider.forceDiscovery(); // discover: N1, N3, remove: N2
Assert.equal(listener.count(), 2); Assert.equal(listener.count(), 2);
Assert.equal(listener.devices['A.local'].name, mockDevice1.serviceName); Assert.equal(listener.devices["A.local"].name, mockDevice1.serviceName);
Assert.ok(!listener.devices['B.local']); Assert.ok(!listener.devices["B.local"]);
Assert.equal(listener.devices['C.local'].name, mockDevice3.serviceName); Assert.equal(listener.devices["C.local"].name, mockDevice3.serviceName);
provider.listener = null; provider.listener = null;
@ -1161,7 +1161,7 @@ function serverClosed() {
let mockObj = { let mockObj = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]), QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]),
startDiscovery: function(serviceType, listener) { startDiscovery(serviceType, listener) {
listener.onDiscoveryStarted(serviceType); listener.onDiscoveryStarted(serviceType);
listener.onServiceFound(createDevice("", listener.onServiceFound(createDevice("",
0, 0,
@ -1169,10 +1169,10 @@ function serverClosed() {
mockDevice.serviceType)); mockDevice.serviceType));
return { return {
QueryInterface: ChromeUtils.generateQI([Ci.nsICancelable]), QueryInterface: ChromeUtils.generateQI([Ci.nsICancelable]),
cancel: function() {} cancel() {}
}; };
}, },
registerService: function(serviceInfo, listener) { registerService(serviceInfo, listener) {
this.serviceRegistered++; this.serviceRegistered++;
return { return {
QueryInterface: ChromeUtils.generateQI([Ci.nsICancelable]), QueryInterface: ChromeUtils.generateQI([Ci.nsICancelable]),
@ -1181,7 +1181,7 @@ function serverClosed() {
} }
}; };
}, },
resolveService: function(serviceInfo, listener) { resolveService(serviceInfo, listener) {
Assert.equal(serviceInfo.serviceName, mockDevice.serviceName); Assert.equal(serviceInfo.serviceName, mockDevice.serviceName);
Assert.equal(serviceInfo.serviceType, mockDevice.serviceType); Assert.equal(serviceInfo.serviceType, mockDevice.serviceType);
listener.onServiceResolved(createDevice(mockDevice.host, listener.onServiceResolved(createDevice(mockDevice.host,
@ -1202,9 +1202,9 @@ function serverClosed() {
let listener = { let listener = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDeviceListener, QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDeviceListener,
Ci.nsISupportsWeakReference]), Ci.nsISupportsWeakReference]),
addDevice: function(device) { this.devices.push(device); }, addDevice(device) { this.devices.push(device); },
removeDevice: function(device) {}, removeDevice(device) {},
updateDevice: function(device) {}, updateDevice(device) {},
devices: [] devices: []
}; };
Assert.equal(listener.devices.length, 0); Assert.equal(listener.devices.length, 0);
@ -1216,7 +1216,7 @@ function serverClosed() {
let serverListener = provider.QueryInterface(Ci.nsIPresentationControlServerListener); let serverListener = provider.QueryInterface(Ci.nsIPresentationControlServerListener);
let randomPort = 9527; let randomPort = 9527;
serverListener.onServerReady(randomPort, ''); serverListener.onServerReady(randomPort, "");
Assert.equal(mockObj.serviceRegistered, 2); Assert.equal(mockObj.serviceRegistered, 2);
Assert.equal(mockObj.serviceUnregistered, 1); Assert.equal(mockObj.serviceUnregistered, 1);
@ -1239,18 +1239,18 @@ function serverRetry() {
let mockSDObj = { let mockSDObj = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]), QueryInterface: ChromeUtils.generateQI([Ci.nsIDNSServiceDiscovery]),
startDiscovery: function(serviceType, listener) {}, startDiscovery(serviceType, listener) {},
registerService: function(serviceInfo, listener) { registerService(serviceInfo, listener) {
Assert.ok(isRetrying, "register service after retrying startServer"); Assert.ok(isRetrying, "register service after retrying startServer");
provider.listener = null; provider.listener = null;
run_next_test(); run_next_test();
}, },
resolveService: function(serviceInfo, listener) {} resolveService(serviceInfo, listener) {}
}; };
let mockServerObj = { let mockServerObj = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationControlService]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationControlService]),
startServer: function(encrypted, port) { startServer(encrypted, port) {
if (!isRetrying) { if (!isRetrying) {
isRetrying = true; isRetrying = true;
Services.tm.dispatchToMainThread(() => { Services.tm.dispatchToMainThread(() => {
@ -1263,12 +1263,12 @@ function serverRetry() {
}); });
} }
}, },
sessionRequest: function() {}, sessionRequest() {},
close: function() {}, close() {},
id: '', id: "",
version: LATEST_VERSION, version: LATEST_VERSION,
port: 0, port: 0,
certFingerprint: 'mock-cert-fingerprint', certFingerprint: "mock-cert-fingerprint",
listener: null, listener: null,
}; };
@ -1278,10 +1278,10 @@ function serverRetry() {
let listener = { let listener = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDeviceListener, QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDeviceListener,
Ci.nsISupportsWeakReference]), Ci.nsISupportsWeakReference]),
addDevice: function(device) {}, addDevice(device) {},
removeDevice: function(device) {}, removeDevice(device) {},
updateDevice: function(device) {}, updateDevice(device) {},
onSessionRequest: function(device, url, presentationId, controlChannel) {} onSessionRequest(device, url, presentationId, controlChannel) {}
}; };
provider.listener = listener; provider.listener = listener;

View file

@ -2,12 +2,12 @@
/* Any copyright is dedicated to the Public Domain. /* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */ * http://creativecommons.org/publicdomain/zero/1.0/ */
'use strict'; "use strict";
ChromeUtils.import('resource://gre/modules/XPCOMUtils.jsm'); ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
ChromeUtils.import('resource://gre/modules/Services.jsm'); ChromeUtils.import("resource://gre/modules/Services.jsm");
const manager = Cc['@mozilla.org/presentation-device/manager;1'] const manager = Cc["@mozilla.org/presentation-device/manager;1"]
.getService(Ci.nsIPresentationDeviceManager); .getService(Ci.nsIPresentationDeviceManager);
function TestPresentationDevice() {} function TestPresentationDevice() {}
@ -17,12 +17,12 @@ function TestPresentationControlChannel() {}
TestPresentationControlChannel.prototype = { TestPresentationControlChannel.prototype = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationControlChannel]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationControlChannel]),
sendOffer: function(offer) {}, sendOffer(offer) {},
sendAnswer: function(answer) {}, sendAnswer(answer) {},
disconnect: function() {}, disconnect() {},
launch: function() {}, launch() {},
terminate: function() {}, terminate() {},
reconnect: function() {}, reconnect() {},
set listener(listener) {}, set listener(listener) {},
get listener() {}, get listener() {},
}; };
@ -30,7 +30,7 @@ TestPresentationControlChannel.prototype = {
var testProvider = { var testProvider = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDeviceProvider]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDeviceProvider]),
forceDiscovery: function() { forceDiscovery() {
}, },
set listener(listener) { set listener(listener) {
}, },
@ -38,26 +38,26 @@ var testProvider = {
}, },
}; };
const forbiddenRequestedUrl = 'http://example.com'; const forbiddenRequestedUrl = "http://example.com";
var testDevice = { var testDevice = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDevice]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationDevice]),
id: 'id', id: "id",
name: 'name', name: "name",
type: 'type', type: "type",
establishControlChannel: function(url, presentationId) { establishControlChannel(url, presentationId) {
return null; return null;
}, },
disconnect: function() {}, disconnect() {},
isRequestedUrlSupported: function(requestedUrl) { isRequestedUrlSupported(requestedUrl) {
return forbiddenRequestedUrl !== requestedUrl; return forbiddenRequestedUrl !== requestedUrl;
}, },
}; };
function addProvider() { function addProvider() {
Object.defineProperty(testProvider, 'listener', { Object.defineProperty(testProvider, "listener", {
configurable: true, configurable: true,
set: function(listener) { set(listener) {
Assert.strictEqual(listener, manager, 'listener setter is invoked by PresentationDeviceManager'); Assert.strictEqual(listener, manager, "listener setter is invoked by PresentationDeviceManager");
delete testProvider.listener; delete testProvider.listener;
run_next_test(); run_next_test();
}, },
@ -68,7 +68,7 @@ function addProvider() {
function forceDiscovery() { function forceDiscovery() {
testProvider.forceDiscovery = function() { testProvider.forceDiscovery = function() {
testProvider.forceDiscovery = function() {}; testProvider.forceDiscovery = function() {};
Assert.ok(true, 'forceDiscovery is invoked by PresentationDeviceManager'); Assert.ok(true, "forceDiscovery is invoked by PresentationDeviceManager");
run_next_test(); run_next_test();
}; };
manager.forceDiscovery(); manager.forceDiscovery();
@ -79,23 +79,23 @@ function addDevice() {
Services.obs.removeObserver(observer, topic); Services.obs.removeObserver(observer, topic);
let updatedDevice = subject.QueryInterface(Ci.nsIPresentationDevice); let updatedDevice = subject.QueryInterface(Ci.nsIPresentationDevice);
Assert.equal(updatedDevice.id, testDevice.id, 'expected device id'); Assert.equal(updatedDevice.id, testDevice.id, "expected device id");
Assert.equal(updatedDevice.name, testDevice.name, 'expected device name'); Assert.equal(updatedDevice.name, testDevice.name, "expected device name");
Assert.equal(updatedDevice.type, testDevice.type, 'expected device type'); Assert.equal(updatedDevice.type, testDevice.type, "expected device type");
Assert.equal(data, 'add', 'expected update type'); Assert.equal(data, "add", "expected update type");
Assert.ok(manager.deviceAvailable, 'device is available'); Assert.ok(manager.deviceAvailable, "device is available");
let devices = manager.getAvailableDevices(); let devices = manager.getAvailableDevices();
Assert.equal(devices.length, 1, 'expect 1 available device'); Assert.equal(devices.length, 1, "expect 1 available device");
let device = devices.queryElementAt(0, Ci.nsIPresentationDevice); let device = devices.queryElementAt(0, Ci.nsIPresentationDevice);
Assert.equal(device.id, testDevice.id, 'expected device id'); Assert.equal(device.id, testDevice.id, "expected device id");
Assert.equal(device.name, testDevice.name, 'expected device name'); Assert.equal(device.name, testDevice.name, "expected device name");
Assert.equal(device.type, testDevice.type, 'expected device type'); Assert.equal(device.type, testDevice.type, "expected device type");
run_next_test(); run_next_test();
}, 'presentation-device-change'); }, "presentation-device-change");
manager.QueryInterface(Ci.nsIPresentationDeviceListener).addDevice(testDevice); manager.QueryInterface(Ci.nsIPresentationDeviceListener).addDevice(testDevice);
} }
@ -104,59 +104,59 @@ function updateDevice() {
Services.obs.removeObserver(observer, topic); Services.obs.removeObserver(observer, topic);
let updatedDevice = subject.QueryInterface(Ci.nsIPresentationDevice); let updatedDevice = subject.QueryInterface(Ci.nsIPresentationDevice);
Assert.equal(updatedDevice.id, testDevice.id, 'expected device id'); Assert.equal(updatedDevice.id, testDevice.id, "expected device id");
Assert.equal(updatedDevice.name, testDevice.name, 'expected device name'); Assert.equal(updatedDevice.name, testDevice.name, "expected device name");
Assert.equal(updatedDevice.type, testDevice.type, 'expected device type'); Assert.equal(updatedDevice.type, testDevice.type, "expected device type");
Assert.equal(data, 'update', 'expected update type'); Assert.equal(data, "update", "expected update type");
Assert.ok(manager.deviceAvailable, 'device is available'); Assert.ok(manager.deviceAvailable, "device is available");
let devices = manager.getAvailableDevices(); let devices = manager.getAvailableDevices();
Assert.equal(devices.length, 1, 'expect 1 available device'); Assert.equal(devices.length, 1, "expect 1 available device");
let device = devices.queryElementAt(0, Ci.nsIPresentationDevice); let device = devices.queryElementAt(0, Ci.nsIPresentationDevice);
Assert.equal(device.id, testDevice.id, 'expected device id'); Assert.equal(device.id, testDevice.id, "expected device id");
Assert.equal(device.name, testDevice.name, 'expected name after device update'); Assert.equal(device.name, testDevice.name, "expected name after device update");
Assert.equal(device.type, testDevice.type, 'expected device type'); Assert.equal(device.type, testDevice.type, "expected device type");
run_next_test(); run_next_test();
}, 'presentation-device-change'); }, "presentation-device-change");
testDevice.name = 'updated-name'; testDevice.name = "updated-name";
manager.QueryInterface(Ci.nsIPresentationDeviceListener).updateDevice(testDevice); manager.QueryInterface(Ci.nsIPresentationDeviceListener).updateDevice(testDevice);
} }
function filterDevice() { function filterDevice() {
let presentationUrls = Cc['@mozilla.org/array;1'].createInstance(Ci.nsIMutableArray); let presentationUrls = Cc["@mozilla.org/array;1"].createInstance(Ci.nsIMutableArray);
let url = Cc['@mozilla.org/supports-string;1'].createInstance(Ci.nsISupportsString); let url = Cc["@mozilla.org/supports-string;1"].createInstance(Ci.nsISupportsString);
url.data = forbiddenRequestedUrl; url.data = forbiddenRequestedUrl;
presentationUrls.appendElement(url); presentationUrls.appendElement(url);
let devices = manager.getAvailableDevices(presentationUrls); let devices = manager.getAvailableDevices(presentationUrls);
Assert.equal(devices.length, 0, 'expect 0 available device for example.com'); Assert.equal(devices.length, 0, "expect 0 available device for example.com");
run_next_test(); run_next_test();
} }
function sessionRequest() { function sessionRequest() {
let testUrl = 'http://www.example.org/'; let testUrl = "http://www.example.org/";
let testPresentationId = 'test-presentation-id'; let testPresentationId = "test-presentation-id";
let testControlChannel = new TestPresentationControlChannel(); let testControlChannel = new TestPresentationControlChannel();
Services.obs.addObserver(function observer(subject, topic, data) { Services.obs.addObserver(function observer(subject, topic, data) {
Services.obs.removeObserver(observer, topic); Services.obs.removeObserver(observer, topic);
let request = subject.QueryInterface(Ci.nsIPresentationSessionRequest); let request = subject.QueryInterface(Ci.nsIPresentationSessionRequest);
Assert.equal(request.device.id, testDevice.id, 'expected device'); Assert.equal(request.device.id, testDevice.id, "expected device");
Assert.equal(request.url, testUrl, 'expected requesting URL'); Assert.equal(request.url, testUrl, "expected requesting URL");
Assert.equal(request.presentationId, testPresentationId, 'expected presentation Id'); Assert.equal(request.presentationId, testPresentationId, "expected presentation Id");
run_next_test(); run_next_test();
}, 'presentation-session-request'); }, "presentation-session-request");
manager.QueryInterface(Ci.nsIPresentationDeviceListener) manager.QueryInterface(Ci.nsIPresentationDeviceListener)
.onSessionRequest(testDevice, testUrl, testPresentationId, testControlChannel); .onSessionRequest(testDevice, testUrl, testPresentationId, testControlChannel);
} }
function terminateRequest() { function terminateRequest() {
let testUrl = 'http://www.example.org/'; let testUrl = "http://www.example.org/";
let testPresentationId = 'test-presentation-id'; let testPresentationId = "test-presentation-id";
let testControlChannel = new TestPresentationControlChannel(); let testControlChannel = new TestPresentationControlChannel();
let testIsFromReceiver = true; let testIsFromReceiver = true;
Services.obs.addObserver(function observer(subject, topic, data) { Services.obs.addObserver(function observer(subject, topic, data) {
@ -164,32 +164,32 @@ function terminateRequest() {
let request = subject.QueryInterface(Ci.nsIPresentationTerminateRequest); let request = subject.QueryInterface(Ci.nsIPresentationTerminateRequest);
Assert.equal(request.device.id, testDevice.id, 'expected device'); Assert.equal(request.device.id, testDevice.id, "expected device");
Assert.equal(request.presentationId, testPresentationId, 'expected presentation Id'); Assert.equal(request.presentationId, testPresentationId, "expected presentation Id");
Assert.equal(request.isFromReceiver, testIsFromReceiver, 'expected isFromReceiver'); Assert.equal(request.isFromReceiver, testIsFromReceiver, "expected isFromReceiver");
run_next_test(); run_next_test();
}, 'presentation-terminate-request'); }, "presentation-terminate-request");
manager.QueryInterface(Ci.nsIPresentationDeviceListener) manager.QueryInterface(Ci.nsIPresentationDeviceListener)
.onTerminateRequest(testDevice, testPresentationId, .onTerminateRequest(testDevice, testPresentationId,
testControlChannel, testIsFromReceiver); testControlChannel, testIsFromReceiver);
} }
function reconnectRequest() { function reconnectRequest() {
let testUrl = 'http://www.example.org/'; let testUrl = "http://www.example.org/";
let testPresentationId = 'test-presentation-id'; let testPresentationId = "test-presentation-id";
let testControlChannel = new TestPresentationControlChannel(); let testControlChannel = new TestPresentationControlChannel();
Services.obs.addObserver(function observer(subject, topic, data) { Services.obs.addObserver(function observer(subject, topic, data) {
Services.obs.removeObserver(observer, topic); Services.obs.removeObserver(observer, topic);
let request = subject.QueryInterface(Ci.nsIPresentationSessionRequest); let request = subject.QueryInterface(Ci.nsIPresentationSessionRequest);
Assert.equal(request.device.id, testDevice.id, 'expected device'); Assert.equal(request.device.id, testDevice.id, "expected device");
Assert.equal(request.url, testUrl, 'expected requesting URL'); Assert.equal(request.url, testUrl, "expected requesting URL");
Assert.equal(request.presentationId, testPresentationId, 'expected presentation Id'); Assert.equal(request.presentationId, testPresentationId, "expected presentation Id");
run_next_test(); run_next_test();
}, 'presentation-reconnect-request'); }, "presentation-reconnect-request");
manager.QueryInterface(Ci.nsIPresentationDeviceListener) manager.QueryInterface(Ci.nsIPresentationDeviceListener)
.onReconnectRequest(testDevice, testUrl, testPresentationId, testControlChannel); .onReconnectRequest(testDevice, testUrl, testPresentationId, testControlChannel);
} }
@ -199,26 +199,26 @@ function removeDevice() {
Services.obs.removeObserver(observer, topic); Services.obs.removeObserver(observer, topic);
let updatedDevice = subject.QueryInterface(Ci.nsIPresentationDevice); let updatedDevice = subject.QueryInterface(Ci.nsIPresentationDevice);
Assert.equal(updatedDevice.id, testDevice.id, 'expected device id'); Assert.equal(updatedDevice.id, testDevice.id, "expected device id");
Assert.equal(updatedDevice.name, testDevice.name, 'expected device name'); Assert.equal(updatedDevice.name, testDevice.name, "expected device name");
Assert.equal(updatedDevice.type, testDevice.type, 'expected device type'); Assert.equal(updatedDevice.type, testDevice.type, "expected device type");
Assert.equal(data, 'remove', 'expected update type'); Assert.equal(data, "remove", "expected update type");
Assert.ok(!manager.deviceAvailable, 'device is not available'); Assert.ok(!manager.deviceAvailable, "device is not available");
let devices = manager.getAvailableDevices(); let devices = manager.getAvailableDevices();
Assert.equal(devices.length, 0, 'expect 0 available device'); Assert.equal(devices.length, 0, "expect 0 available device");
run_next_test(); run_next_test();
}, 'presentation-device-change'); }, "presentation-device-change");
manager.QueryInterface(Ci.nsIPresentationDeviceListener).removeDevice(testDevice); manager.QueryInterface(Ci.nsIPresentationDeviceListener).removeDevice(testDevice);
} }
function removeProvider() { function removeProvider() {
Object.defineProperty(testProvider, 'listener', { Object.defineProperty(testProvider, "listener", {
configurable: true, configurable: true,
set: function(listener) { set(listener) {
Assert.strictEqual(listener, null, 'unsetListener is invoked by PresentationDeviceManager'); Assert.strictEqual(listener, null, "unsetListener is invoked by PresentationDeviceManager");
delete testProvider.listener; delete testProvider.listener;
run_next_test(); run_next_test();
}, },
@ -236,7 +236,3 @@ add_test(terminateRequest);
add_test(reconnectRequest); add_test(reconnectRequest);
add_test(removeDevice); add_test(removeDevice);
add_test(removeProvider); add_test(removeProvider);
function run_test() {
run_next_test();
}

View file

@ -2,15 +2,15 @@
/* Any copyright is dedicated to the Public Domain. /* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */ * http://creativecommons.org/publicdomain/zero/1.0/ */
'use strict'; "use strict";
const CC = Components.Constructor; const CC = Components.Constructor;
const ServerSocket = CC("@mozilla.org/network/server-socket;1", const ServerSocket = CC("@mozilla.org/network/server-socket;1",
"nsIServerSocket", "nsIServerSocket",
"init"); "init");
ChromeUtils.import('resource://gre/modules/XPCOMUtils.jsm'); ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
ChromeUtils.import('resource://gre/modules/Services.jsm'); ChromeUtils.import("resource://gre/modules/Services.jsm");
var testServer = null; var testServer = null;
var clientTransport = null; var clientTransport = null;
@ -41,7 +41,7 @@ var isServerClosed = false;
const clientCallback = { const clientCallback = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationSessionTransportCallback]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationSessionTransportCallback]),
notifyTransportReady: function () { notifyTransportReady() {
Assert.ok(true, "Client transport ready."); Assert.ok(true, "Client transport ready.");
isClientReady = true; isClientReady = true;
@ -49,7 +49,7 @@ const clientCallback = {
run_next_test(); run_next_test();
} }
}, },
notifyTransportClosed: function (aReason) { notifyTransportClosed(aReason) {
Assert.ok(true, "Client transport is closed."); Assert.ok(true, "Client transport is closed.");
isClientClosed = true; isClientClosed = true;
@ -57,7 +57,7 @@ const clientCallback = {
run_next_test(); run_next_test();
} }
}, },
notifyData: function(aData) { notifyData(aData) {
Assert.equal(aData, serverMessage, "Client transport receives data."); Assert.equal(aData, serverMessage, "Client transport receives data.");
run_next_test(); run_next_test();
}, },
@ -65,7 +65,7 @@ const clientCallback = {
const serverCallback = { const serverCallback = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationSessionTransportCallback]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationSessionTransportCallback]),
notifyTransportReady: function () { notifyTransportReady() {
Assert.ok(true, "Server transport ready."); Assert.ok(true, "Server transport ready.");
isServerReady = true; isServerReady = true;
@ -73,7 +73,7 @@ const serverCallback = {
run_next_test(); run_next_test();
} }
}, },
notifyTransportClosed: function (aReason) { notifyTransportClosed(aReason) {
Assert.ok(true, "Server transport is closed."); Assert.ok(true, "Server transport is closed.");
isServerClosed = true; isServerClosed = true;
@ -81,7 +81,7 @@ const serverCallback = {
run_next_test(); run_next_test();
} }
}, },
notifyData: function(aData) { notifyData(aData) {
Assert.equal(aData, clientMessage, "Server transport receives data."); Assert.equal(aData, clientMessage, "Server transport receives data.");
run_next_test(); run_next_test();
}, },
@ -98,7 +98,7 @@ const clientListener = {
run_next_test(); run_next_test();
} }
} }
} };
const serverListener = { const serverListener = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationSessionTransportBuilderListener]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationSessionTransportBuilderListener]),
@ -112,24 +112,24 @@ const serverListener = {
run_next_test(); run_next_test();
} }
} }
} };
function TestServer() { function TestServer() {
this.serverSocket = ServerSocket(-1, true, -1); this.serverSocket = ServerSocket(-1, true, -1);
this.serverSocket.asyncListen(this) this.serverSocket.asyncListen(this);
} }
TestServer.prototype = { TestServer.prototype = {
onSocketAccepted: function(aSocket, aTransport) { onSocketAccepted(aSocket, aTransport) {
print("Test server gets a client connection."); print("Test server gets a client connection.");
serverBuilder = Cc["@mozilla.org/presentation/presentationtcpsessiontransport;1"] serverBuilder = Cc["@mozilla.org/presentation/presentationtcpsessiontransport;1"]
.createInstance(Ci.nsIPresentationTCPSessionTransportBuilder); .createInstance(Ci.nsIPresentationTCPSessionTransportBuilder);
serverBuilder.buildTCPSenderTransport(aTransport, serverListener); serverBuilder.buildTCPSenderTransport(aTransport, serverListener);
}, },
onStopListening: function(aSocket) { onStopListening(aSocket) {
print("Test server stops listening."); print("Test server stops listening.");
}, },
close: function() { close() {
if (this.serverSocket) { if (this.serverSocket) {
this.serverSocket.close(); this.serverSocket.close();
this.serverSocket = null; this.serverSocket = null;

View file

@ -4,18 +4,18 @@
/* jshint esnext:true, globalstrict:true, moz:true, undef:true, unused:true */ /* jshint esnext:true, globalstrict:true, moz:true, undef:true, unused:true */
/* globals Components,Assert,run_next_test,add_test,do_execute_soon */ /* globals Components,Assert,run_next_test,add_test,do_execute_soon */
'use strict'; "use strict";
/* globals ControllerStateMachine */ /* globals ControllerStateMachine */
ChromeUtils.import('resource://gre/modules/presentation/ControllerStateMachine.jsm'); ChromeUtils.import("resource://gre/modules/presentation/ControllerStateMachine.jsm");
/* globals ReceiverStateMachine */ /* globals ReceiverStateMachine */
ChromeUtils.import('resource://gre/modules/presentation/ReceiverStateMachine.jsm'); ChromeUtils.import("resource://gre/modules/presentation/ReceiverStateMachine.jsm");
/* globals State */ /* globals State */
ChromeUtils.import('resource://gre/modules/presentation/StateMachineHelper.jsm'); ChromeUtils.import("resource://gre/modules/presentation/StateMachineHelper.jsm");
const testControllerId = 'test-controller-id'; const testControllerId = "test-controller-id";
const testPresentationId = 'test-presentation-id'; const testPresentationId = "test-presentation-id";
const testUrl = 'http://example.org'; const testUrl = "http://example.org";
let mockControllerChannel = {}; let mockControllerChannel = {};
let mockReceiverChannel = {}; let mockReceiverChannel = {};
@ -36,40 +36,40 @@ mockReceiverChannel.sendCommand = function(command) {
}; };
function connect() { function connect() {
Assert.equal(controllerState.state, State.INIT, 'controller in init state'); Assert.equal(controllerState.state, State.INIT, "controller in init state");
Assert.equal(receiverState.state, State.INIT, 'receiver in init state'); Assert.equal(receiverState.state, State.INIT, "receiver in init state");
// step 1: underlying connection is ready // step 1: underlying connection is ready
controllerState.onChannelReady(); controllerState.onChannelReady();
Assert.equal(controllerState.state, State.CONNECTING, 'controller in connecting state'); Assert.equal(controllerState.state, State.CONNECTING, "controller in connecting state");
receiverState.onChannelReady(); receiverState.onChannelReady();
Assert.equal(receiverState.state, State.CONNECTING, 'receiver in connecting state'); Assert.equal(receiverState.state, State.CONNECTING, "receiver in connecting state");
// step 2: receiver reply to connect command // step 2: receiver reply to connect command
mockReceiverChannel.notifyDeviceConnected = function(deviceId) { mockReceiverChannel.notifyDeviceConnected = function(deviceId) {
Assert.equal(deviceId, testControllerId, 'receiver connect to mock controller'); Assert.equal(deviceId, testControllerId, "receiver connect to mock controller");
Assert.equal(receiverState.state, State.CONNECTED, 'receiver in connected state'); Assert.equal(receiverState.state, State.CONNECTED, "receiver in connected state");
// step 3: controller receive connect-ack command // step 3: controller receive connect-ack command
mockControllerChannel.notifyDeviceConnected = function() { mockControllerChannel.notifyDeviceConnected = function() {
Assert.equal(controllerState.state, State.CONNECTED, 'controller in connected state'); Assert.equal(controllerState.state, State.CONNECTED, "controller in connected state");
run_next_test(); run_next_test();
}; };
}; };
} }
function launch() { function launch() {
Assert.equal(controllerState.state, State.CONNECTED, 'controller in connected state'); Assert.equal(controllerState.state, State.CONNECTED, "controller in connected state");
Assert.equal(receiverState.state, State.CONNECTED, 'receiver in connected state'); Assert.equal(receiverState.state, State.CONNECTED, "receiver in connected state");
controllerState.launch(testPresentationId, testUrl); controllerState.launch(testPresentationId, testUrl);
mockReceiverChannel.notifyLaunch = function(presentationId, url) { mockReceiverChannel.notifyLaunch = function(presentationId, url) {
Assert.equal(receiverState.state, State.CONNECTED, 'receiver in connected state'); Assert.equal(receiverState.state, State.CONNECTED, "receiver in connected state");
Assert.equal(presentationId, testPresentationId, 'expected presentationId received'); Assert.equal(presentationId, testPresentationId, "expected presentationId received");
Assert.equal(url, testUrl, 'expected url received'); Assert.equal(url, testUrl, "expected url received");
mockControllerChannel.notifyLaunch = function(presentationId) { mockControllerChannel.notifyLaunch = function(presentationId) {
Assert.equal(controllerState.state, State.CONNECTED, 'controller in connected state'); Assert.equal(controllerState.state, State.CONNECTED, "controller in connected state");
Assert.equal(presentationId, testPresentationId, 'expected presentationId received from ack'); Assert.equal(presentationId, testPresentationId, "expected presentationId received from ack");
run_next_test(); run_next_test();
}; };
@ -77,17 +77,17 @@ function launch() {
} }
function terminateByController() { function terminateByController() {
Assert.equal(controllerState.state, State.CONNECTED, 'controller in connected state'); Assert.equal(controllerState.state, State.CONNECTED, "controller in connected state");
Assert.equal(receiverState.state, State.CONNECTED, 'receiver in connected state'); Assert.equal(receiverState.state, State.CONNECTED, "receiver in connected state");
controllerState.terminate(testPresentationId); controllerState.terminate(testPresentationId);
mockReceiverChannel.notifyTerminate = function(presentationId) { mockReceiverChannel.notifyTerminate = function(presentationId) {
Assert.equal(receiverState.state, State.CONNECTED, 'receiver in connected state'); Assert.equal(receiverState.state, State.CONNECTED, "receiver in connected state");
Assert.equal(presentationId, testPresentationId, 'expected presentationId received'); Assert.equal(presentationId, testPresentationId, "expected presentationId received");
mockControllerChannel.notifyTerminate = function(presentationId) { mockControllerChannel.notifyTerminate = function(presentationId) {
Assert.equal(controllerState.state, State.CONNECTED, 'controller in connected state'); Assert.equal(controllerState.state, State.CONNECTED, "controller in connected state");
Assert.equal(presentationId, testPresentationId, 'expected presentationId received from ack'); Assert.equal(presentationId, testPresentationId, "expected presentationId received from ack");
run_next_test(); run_next_test();
}; };
@ -97,17 +97,17 @@ function terminateByController() {
} }
function terminateByReceiver() { function terminateByReceiver() {
Assert.equal(controllerState.state, State.CONNECTED, 'controller in connected state'); Assert.equal(controllerState.state, State.CONNECTED, "controller in connected state");
Assert.equal(receiverState.state, State.CONNECTED, 'receiver in connected state'); Assert.equal(receiverState.state, State.CONNECTED, "receiver in connected state");
receiverState.terminate(testPresentationId); receiverState.terminate(testPresentationId);
mockControllerChannel.notifyTerminate = function(presentationId) { mockControllerChannel.notifyTerminate = function(presentationId) {
Assert.equal(controllerState.state, State.CONNECTED, 'controller in connected state'); Assert.equal(controllerState.state, State.CONNECTED, "controller in connected state");
Assert.equal(presentationId, testPresentationId, 'expected presentationId received'); Assert.equal(presentationId, testPresentationId, "expected presentationId received");
mockReceiverChannel.notifyTerminate = function(presentationId) { mockReceiverChannel.notifyTerminate = function(presentationId) {
Assert.equal(receiverState.state, State.CONNECTED, 'receiver in connected state'); Assert.equal(receiverState.state, State.CONNECTED, "receiver in connected state");
Assert.equal(presentationId, testPresentationId, 'expected presentationId received from ack'); Assert.equal(presentationId, testPresentationId, "expected presentationId received from ack");
run_next_test(); run_next_test();
}; };
@ -116,27 +116,27 @@ function terminateByReceiver() {
} }
function exchangeSDP() { function exchangeSDP() {
Assert.equal(controllerState.state, State.CONNECTED, 'controller in connected state'); Assert.equal(controllerState.state, State.CONNECTED, "controller in connected state");
Assert.equal(receiverState.state, State.CONNECTED, 'receiver in connected state'); Assert.equal(receiverState.state, State.CONNECTED, "receiver in connected state");
const testOffer = 'test-offer'; const testOffer = "test-offer";
const testAnswer = 'test-answer'; const testAnswer = "test-answer";
const testIceCandidate = 'test-ice-candidate'; const testIceCandidate = "test-ice-candidate";
controllerState.sendOffer(testOffer); controllerState.sendOffer(testOffer);
mockReceiverChannel.notifyOffer = function(offer) { mockReceiverChannel.notifyOffer = function(offer) {
Assert.equal(offer, testOffer, 'expected offer received'); Assert.equal(offer, testOffer, "expected offer received");
receiverState.sendAnswer(testAnswer); receiverState.sendAnswer(testAnswer);
mockControllerChannel.notifyAnswer = function(answer) { mockControllerChannel.notifyAnswer = function(answer) {
Assert.equal(answer, testAnswer, 'expected answer received'); Assert.equal(answer, testAnswer, "expected answer received");
controllerState.updateIceCandidate(testIceCandidate); controllerState.updateIceCandidate(testIceCandidate);
mockReceiverChannel.notifyIceCandidate = function(candidate) { mockReceiverChannel.notifyIceCandidate = function(candidate) {
Assert.equal(candidate, testIceCandidate, 'expected ice candidate received in receiver'); Assert.equal(candidate, testIceCandidate, "expected ice candidate received in receiver");
receiverState.updateIceCandidate(testIceCandidate); receiverState.updateIceCandidate(testIceCandidate);
mockControllerChannel.notifyIceCandidate = function(candidate) { mockControllerChannel.notifyIceCandidate = function(candidate) {
Assert.equal(candidate, testIceCandidate, 'expected ice candidate received in controller'); Assert.equal(candidate, testIceCandidate, "expected ice candidate received in controller");
run_next_test(); run_next_test();
}; };
@ -148,18 +148,18 @@ function exchangeSDP() {
function disconnect() { function disconnect() {
// step 1: controller send disconnect command // step 1: controller send disconnect command
controllerState.onChannelClosed(Cr.NS_OK, false); controllerState.onChannelClosed(Cr.NS_OK, false);
Assert.equal(controllerState.state, State.CLOSING, 'controller in closing state'); Assert.equal(controllerState.state, State.CLOSING, "controller in closing state");
mockReceiverChannel.notifyDisconnected = function(reason) { mockReceiverChannel.notifyDisconnected = function(reason) {
Assert.equal(reason, Cr.NS_OK, 'receive close reason'); Assert.equal(reason, Cr.NS_OK, "receive close reason");
Assert.equal(receiverState.state, State.CLOSED, 'receiver in closed state'); Assert.equal(receiverState.state, State.CLOSED, "receiver in closed state");
receiverState.onChannelClosed(Cr.NS_OK, true); receiverState.onChannelClosed(Cr.NS_OK, true);
Assert.equal(receiverState.state, State.CLOSED, 'receiver in closed state'); Assert.equal(receiverState.state, State.CLOSED, "receiver in closed state");
mockControllerChannel.notifyDisconnected = function(reason) { mockControllerChannel.notifyDisconnected = function(reason) {
Assert.equal(reason, Cr.NS_OK, 'receive close reason'); Assert.equal(reason, Cr.NS_OK, "receive close reason");
Assert.equal(controllerState.state, State.CLOSED, 'controller in closed state'); Assert.equal(controllerState.state, State.CLOSED, "controller in closed state");
run_next_test(); run_next_test();
}; };
@ -174,18 +174,18 @@ function receiverDisconnect() {
// step 1: controller send disconnect command // step 1: controller send disconnect command
receiverState.onChannelClosed(Cr.NS_OK, false); receiverState.onChannelClosed(Cr.NS_OK, false);
Assert.equal(receiverState.state, State.CLOSING, 'receiver in closing state'); Assert.equal(receiverState.state, State.CLOSING, "receiver in closing state");
mockControllerChannel.notifyDisconnected = function(reason) { mockControllerChannel.notifyDisconnected = function(reason) {
Assert.equal(reason, Cr.NS_OK, 'receive close reason'); Assert.equal(reason, Cr.NS_OK, "receive close reason");
Assert.equal(controllerState.state, State.CLOSED, 'controller in closed state'); Assert.equal(controllerState.state, State.CLOSED, "controller in closed state");
controllerState.onChannelClosed(Cr.NS_OK, true); controllerState.onChannelClosed(Cr.NS_OK, true);
Assert.equal(controllerState.state, State.CLOSED, 'controller in closed state'); Assert.equal(controllerState.state, State.CLOSED, "controller in closed state");
mockReceiverChannel.notifyDisconnected = function(reason) { mockReceiverChannel.notifyDisconnected = function(reason) {
Assert.equal(reason, Cr.NS_OK, 'receive close reason'); Assert.equal(reason, Cr.NS_OK, "receive close reason");
Assert.equal(receiverState.state, State.CLOSED, 'receiver in closed state'); Assert.equal(receiverState.state, State.CLOSED, "receiver in closed state");
run_next_test(); run_next_test();
}; };
@ -201,18 +201,18 @@ function abnormalDisconnect() {
const testErrorReason = Cr.NS_ERROR_FAILURE; const testErrorReason = Cr.NS_ERROR_FAILURE;
// step 1: controller send disconnect command // step 1: controller send disconnect command
controllerState.onChannelClosed(testErrorReason, false); controllerState.onChannelClosed(testErrorReason, false);
Assert.equal(controllerState.state, State.CLOSING, 'controller in closing state'); Assert.equal(controllerState.state, State.CLOSING, "controller in closing state");
mockReceiverChannel.notifyDisconnected = function(reason) { mockReceiverChannel.notifyDisconnected = function(reason) {
Assert.equal(reason, testErrorReason, 'receive abnormal close reason'); Assert.equal(reason, testErrorReason, "receive abnormal close reason");
Assert.equal(receiverState.state, State.CLOSED, 'receiver in closed state'); Assert.equal(receiverState.state, State.CLOSED, "receiver in closed state");
receiverState.onChannelClosed(Cr.NS_OK, true); receiverState.onChannelClosed(Cr.NS_OK, true);
Assert.equal(receiverState.state, State.CLOSED, 'receiver in closed state'); Assert.equal(receiverState.state, State.CLOSED, "receiver in closed state");
mockControllerChannel.notifyDisconnected = function(reason) { mockControllerChannel.notifyDisconnected = function(reason) {
Assert.equal(reason, testErrorReason, 'receive abnormal close reason'); Assert.equal(reason, testErrorReason, "receive abnormal close reason");
Assert.equal(controllerState.state, State.CLOSED, 'controller in closed state'); Assert.equal(controllerState.state, State.CLOSED, "controller in closed state");
run_next_test(); run_next_test();
}; };
@ -228,7 +228,3 @@ add_test(exchangeSDP);
add_test(disconnect); add_test(disconnect);
add_test(receiverDisconnect); add_test(receiverDisconnect);
add_test(abnormalDisconnect); add_test(abnormalDisconnect);
function run_test() { // jshint ignore:line
run_next_test();
}

View file

@ -2,10 +2,10 @@
/* Any copyright is dedicated to the Public Domain. /* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */ * http://creativecommons.org/publicdomain/zero/1.0/ */
'use strict'; "use strict";
ChromeUtils.import('resource://gre/modules/XPCOMUtils.jsm'); ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
ChromeUtils.import('resource://gre/modules/Services.jsm'); ChromeUtils.import("resource://gre/modules/Services.jsm");
var pcs; var pcs;
@ -14,7 +14,7 @@ function makeJointSuccess(names) {
let funcs = {}, successCount = 0; let funcs = {}, successCount = 0;
names.forEach(function(name) { names.forEach(function(name) {
funcs[name] = function() { funcs[name] = function() {
info('got expected: ' + name); info("got expected: " + name);
if (++successCount === names.length) if (++successCount === names.length)
run_next_test(); run_next_test();
}; };
@ -37,7 +37,7 @@ function TestDescription(aType, aTcpAddress, aTcpPort) {
TestDescription.prototype = { TestDescription.prototype = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationChannelDescription]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationChannelDescription]),
} };
const CONTROLLER_CONTROL_CHANNEL_PORT = 36777; const CONTROLLER_CONTROL_CHANNEL_PORT = 36777;
const PRESENTER_CONTROL_CHANNEL_PORT = 36888; const PRESENTER_CONTROL_CHANNEL_PORT = 36888;
@ -46,19 +46,19 @@ var CLOSE_CONTROL_CHANNEL_REASON = Cr.NS_OK;
var candidate; var candidate;
// presenter's presentation channel description // presenter's presentation channel description
const OFFER_ADDRESS = '192.168.123.123'; const OFFER_ADDRESS = "192.168.123.123";
const OFFER_PORT = 123; const OFFER_PORT = 123;
// controller's presentation channel description // controller's presentation channel description
const ANSWER_ADDRESS = '192.168.321.321'; const ANSWER_ADDRESS = "192.168.321.321";
const ANSWER_PORT = 321; const ANSWER_PORT = 321;
function loopOfferAnser() { function loopOfferAnser() {
pcs = Cc["@mozilla.org/presentation/control-service;1"] pcs = Cc["@mozilla.org/presentation/control-service;1"]
.createInstance(Ci.nsIPresentationControlService); .createInstance(Ci.nsIPresentationControlService);
pcs.id = 'controllerID'; pcs.id = "controllerID";
pcs.listener = { pcs.listener = {
onServerReady: function() { onServerReady() {
testPresentationServer(); testPresentationServer();
} }
}; };
@ -69,45 +69,45 @@ function loopOfferAnser() {
function testPresentationServer() { function testPresentationServer() {
let yayFuncs = makeJointSuccess(['controllerControlChannelClose', let yayFuncs = makeJointSuccess(["controllerControlChannelClose",
'presenterControlChannelClose', "presenterControlChannelClose",
'controllerControlChannelReconnect', "controllerControlChannelReconnect",
'presenterControlChannelReconnect']); "presenterControlChannelReconnect"]);
let presenterControlChannel; let presenterControlChannel;
pcs.listener = { pcs.listener = {
onSessionRequest: function(deviceInfo, url, presentationId, controlChannel) { onSessionRequest(deviceInfo, url, presentationId, controlChannel) {
presenterControlChannel = controlChannel; presenterControlChannel = controlChannel;
Assert.equal(deviceInfo.id, pcs.id, 'expected device id'); Assert.equal(deviceInfo.id, pcs.id, "expected device id");
Assert.equal(deviceInfo.address, '127.0.0.1', 'expected device address'); Assert.equal(deviceInfo.address, "127.0.0.1", "expected device address");
Assert.equal(url, 'http://example.com', 'expected url'); Assert.equal(url, "http://example.com", "expected url");
Assert.equal(presentationId, 'testPresentationId', 'expected presentation id'); Assert.equal(presentationId, "testPresentationId", "expected presentation id");
presenterControlChannel.listener = { presenterControlChannel.listener = {
status: 'created', status: "created",
onOffer: function(aOffer) { onOffer(aOffer) {
Assert.equal(this.status, 'opened', '1. presenterControlChannel: get offer, send answer'); Assert.equal(this.status, "opened", "1. presenterControlChannel: get offer, send answer");
this.status = 'onOffer'; this.status = "onOffer";
let offer = aOffer.QueryInterface(Ci.nsIPresentationChannelDescription); let offer = aOffer.QueryInterface(Ci.nsIPresentationChannelDescription);
Assert.strictEqual(offer.tcpAddress.queryElementAt(0,Ci.nsISupportsCString).data, Assert.strictEqual(offer.tcpAddress.queryElementAt(0, Ci.nsISupportsCString).data,
OFFER_ADDRESS, OFFER_ADDRESS,
'expected offer address array'); "expected offer address array");
Assert.equal(offer.tcpPort, OFFER_PORT, 'expected offer port'); Assert.equal(offer.tcpPort, OFFER_PORT, "expected offer port");
try { try {
let tcpType = Ci.nsIPresentationChannelDescription.TYPE_TCP; let tcpType = Ci.nsIPresentationChannelDescription.TYPE_TCP;
let answer = new TestDescription(tcpType, [ANSWER_ADDRESS], ANSWER_PORT); let answer = new TestDescription(tcpType, [ANSWER_ADDRESS], ANSWER_PORT);
presenterControlChannel.sendAnswer(answer); presenterControlChannel.sendAnswer(answer);
} catch (e) { } catch (e) {
Assert.ok(false, 'sending answer fails' + e); Assert.ok(false, "sending answer fails" + e);
} }
}, },
onAnswer: function(aAnswer) { onAnswer(aAnswer) {
Assert.ok(false, 'get answer'); Assert.ok(false, "get answer");
}, },
onIceCandidate: function(aCandidate) { onIceCandidate(aCandidate) {
Assert.ok(true, '3. presenterControlChannel: get ice candidate, close channel'); Assert.ok(true, "3. presenterControlChannel: get ice candidate, close channel");
let recvCandidate = JSON.parse(aCandidate); let recvCandidate = JSON.parse(aCandidate);
for (let key in recvCandidate) { for (let key in recvCandidate) {
if (typeof(recvCandidate[key]) !== "function") { if (typeof(recvCandidate[key]) !== "function") {
@ -116,22 +116,22 @@ function testPresentationServer() {
} }
presenterControlChannel.disconnect(CLOSE_CONTROL_CHANNEL_REASON); presenterControlChannel.disconnect(CLOSE_CONTROL_CHANNEL_REASON);
}, },
notifyConnected: function() { notifyConnected() {
Assert.equal(this.status, 'created', '0. presenterControlChannel: opened'); Assert.equal(this.status, "created", "0. presenterControlChannel: opened");
this.status = 'opened'; this.status = "opened";
}, },
notifyDisconnected: function(aReason) { notifyDisconnected(aReason) {
Assert.equal(this.status, 'onOffer', '4. presenterControlChannel: closed'); Assert.equal(this.status, "onOffer", "4. presenterControlChannel: closed");
Assert.equal(aReason, CLOSE_CONTROL_CHANNEL_REASON, 'presenterControlChannel notify closed'); Assert.equal(aReason, CLOSE_CONTROL_CHANNEL_REASON, "presenterControlChannel notify closed");
this.status = 'closed'; this.status = "closed";
yayFuncs.controllerControlChannelClose(); yayFuncs.controllerControlChannelClose();
}, },
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationControlChannelListener]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationControlChannelListener]),
}; };
}, },
onReconnectRequest: function(deviceInfo, url, presentationId, controlChannel) { onReconnectRequest(deviceInfo, url, presentationId, controlChannel) {
Assert.equal(url, 'http://example.com', 'expected url'); Assert.equal(url, "http://example.com", "expected url");
Assert.equal(presentationId, 'testPresentationId', 'expected presentation id'); Assert.equal(presentationId, "testPresentationId", "expected presentation id");
yayFuncs.presenterControlChannelReconnect(); yayFuncs.presenterControlChannelReconnect();
}, },
@ -139,8 +139,8 @@ function testPresentationServer() {
}; };
let presenterDeviceInfo = { let presenterDeviceInfo = {
id: 'presentatorID', id: "presentatorID",
address: '127.0.0.1', address: "127.0.0.1",
port: PRESENTER_CONTROL_CHANNEL_PORT, port: PRESENTER_CONTROL_CHANNEL_PORT,
certFingerprint: pcs.certFingerprint, certFingerprint: pcs.certFingerprint,
QueryInterface: ChromeUtils.generateQI([Ci.nsITCPDeviceInfo]), QueryInterface: ChromeUtils.generateQI([Ci.nsITCPDeviceInfo]),
@ -149,18 +149,18 @@ function testPresentationServer() {
let controllerControlChannel = pcs.connect(presenterDeviceInfo); let controllerControlChannel = pcs.connect(presenterDeviceInfo);
controllerControlChannel.listener = { controllerControlChannel.listener = {
status: 'created', status: "created",
onOffer: function(offer) { onOffer(offer) {
Assert.ok(false, 'get offer'); Assert.ok(false, "get offer");
}, },
onAnswer: function(aAnswer) { onAnswer(aAnswer) {
Assert.equal(this.status, 'opened', '2. controllerControlChannel: get answer, send ICE candidate'); Assert.equal(this.status, "opened", "2. controllerControlChannel: get answer, send ICE candidate");
let answer = aAnswer.QueryInterface(Ci.nsIPresentationChannelDescription); let answer = aAnswer.QueryInterface(Ci.nsIPresentationChannelDescription);
Assert.strictEqual(answer.tcpAddress.queryElementAt(0,Ci.nsISupportsCString).data, Assert.strictEqual(answer.tcpAddress.queryElementAt(0, Ci.nsISupportsCString).data,
ANSWER_ADDRESS, ANSWER_ADDRESS,
'expected answer address array'); "expected answer address array");
Assert.equal(answer.tcpPort, ANSWER_PORT, 'expected answer port'); Assert.equal(answer.tcpPort, ANSWER_PORT, "expected answer port");
candidate = { candidate = {
candidate: "1 1 UDP 1 127.0.0.1 34567 type host", candidate: "1 1 UDP 1 127.0.0.1 34567 type host",
sdpMid: "helloworld", sdpMid: "helloworld",
@ -168,32 +168,32 @@ function testPresentationServer() {
}; };
controllerControlChannel.sendIceCandidate(JSON.stringify(candidate)); controllerControlChannel.sendIceCandidate(JSON.stringify(candidate));
}, },
onIceCandidate: function(aCandidate) { onIceCandidate(aCandidate) {
Assert.ok(false, 'get ICE candidate'); Assert.ok(false, "get ICE candidate");
}, },
notifyConnected: function() { notifyConnected() {
Assert.equal(this.status, 'created', '0. controllerControlChannel: opened, send offer'); Assert.equal(this.status, "created", "0. controllerControlChannel: opened, send offer");
controllerControlChannel.launch('testPresentationId', 'http://example.com'); controllerControlChannel.launch("testPresentationId", "http://example.com");
this.status = 'opened'; this.status = "opened";
try { try {
let tcpType = Ci.nsIPresentationChannelDescription.TYPE_TCP; let tcpType = Ci.nsIPresentationChannelDescription.TYPE_TCP;
let offer = new TestDescription(tcpType, [OFFER_ADDRESS], OFFER_PORT) let offer = new TestDescription(tcpType, [OFFER_ADDRESS], OFFER_PORT);
controllerControlChannel.sendOffer(offer); controllerControlChannel.sendOffer(offer);
} catch (e) { } catch (e) {
Assert.ok(false, 'sending offer fails:' + e); Assert.ok(false, "sending offer fails:" + e);
} }
}, },
notifyDisconnected: function(aReason) { notifyDisconnected(aReason) {
this.status = 'closed'; this.status = "closed";
Assert.equal(aReason, CLOSE_CONTROL_CHANNEL_REASON, '4. controllerControlChannel notify closed'); Assert.equal(aReason, CLOSE_CONTROL_CHANNEL_REASON, "4. controllerControlChannel notify closed");
yayFuncs.presenterControlChannelClose(); yayFuncs.presenterControlChannelClose();
let reconnectControllerControlChannel = pcs.connect(presenterDeviceInfo); let reconnectControllerControlChannel = pcs.connect(presenterDeviceInfo);
reconnectControllerControlChannel.listener = { reconnectControllerControlChannel.listener = {
notifyConnected: function() { notifyConnected() {
reconnectControllerControlChannel.reconnect('testPresentationId', 'http://example.com'); reconnectControllerControlChannel.reconnect("testPresentationId", "http://example.com");
}, },
notifyReconnected: function() { notifyReconnected() {
yayFuncs.controllerControlChannelReconnect(); yayFuncs.controllerControlChannelReconnect();
}, },
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationControlChannelListener]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationControlChannelListener]),
@ -204,43 +204,43 @@ function testPresentationServer() {
} }
function terminateRequest() { function terminateRequest() {
let yayFuncs = makeJointSuccess(['controllerControlChannelConnected', let yayFuncs = makeJointSuccess(["controllerControlChannelConnected",
'controllerControlChannelDisconnected', "controllerControlChannelDisconnected",
'presenterControlChannelDisconnected', "presenterControlChannelDisconnected",
'terminatedByController', "terminatedByController",
'terminatedByReceiver']); "terminatedByReceiver"]);
let controllerControlChannel; let controllerControlChannel;
let terminatePhase = 'controller'; let terminatePhase = "controller";
pcs.listener = { pcs.listener = {
onTerminateRequest: function(deviceInfo, presentationId, controlChannel, isFromReceiver) { onTerminateRequest(deviceInfo, presentationId, controlChannel, isFromReceiver) {
Assert.equal(deviceInfo.address, '127.0.0.1', 'expected device address'); Assert.equal(deviceInfo.address, "127.0.0.1", "expected device address");
Assert.equal(presentationId, 'testPresentationId', 'expected presentation id'); Assert.equal(presentationId, "testPresentationId", "expected presentation id");
controlChannel.terminate(presentationId); // Reply terminate ack. controlChannel.terminate(presentationId); // Reply terminate ack.
if (terminatePhase === 'controller') { if (terminatePhase === "controller") {
controllerControlChannel = controlChannel; controllerControlChannel = controlChannel;
Assert.equal(deviceInfo.id, pcs.id, 'expected controller device id'); Assert.equal(deviceInfo.id, pcs.id, "expected controller device id");
Assert.equal(isFromReceiver, false, 'expected request from controller'); Assert.equal(isFromReceiver, false, "expected request from controller");
yayFuncs.terminatedByController(); yayFuncs.terminatedByController();
controllerControlChannel.listener = { controllerControlChannel.listener = {
notifyConnected: function() { notifyConnected() {
Assert.ok(true, 'control channel notify connected'); Assert.ok(true, "control channel notify connected");
yayFuncs.controllerControlChannelConnected(); yayFuncs.controllerControlChannelConnected();
terminatePhase = 'receiver'; terminatePhase = "receiver";
controllerControlChannel.terminate('testPresentationId'); controllerControlChannel.terminate("testPresentationId");
}, },
notifyDisconnected: function(aReason) { notifyDisconnected(aReason) {
Assert.equal(aReason, CLOSE_CONTROL_CHANNEL_REASON, 'controllerControlChannel notify disconncted'); Assert.equal(aReason, CLOSE_CONTROL_CHANNEL_REASON, "controllerControlChannel notify disconncted");
yayFuncs.controllerControlChannelDisconnected(); yayFuncs.controllerControlChannelDisconnected();
}, },
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationControlChannelListener]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationControlChannelListener]),
}; };
} else { } else {
Assert.equal(deviceInfo.id, presenterDeviceInfo.id, 'expected presenter device id'); Assert.equal(deviceInfo.id, presenterDeviceInfo.id, "expected presenter device id");
Assert.equal(isFromReceiver, true, 'expected request from receiver'); Assert.equal(isFromReceiver, true, "expected request from receiver");
yayFuncs.terminatedByReceiver(); yayFuncs.terminatedByReceiver();
presenterControlChannel.disconnect(CLOSE_CONTROL_CHANNEL_REASON); presenterControlChannel.disconnect(CLOSE_CONTROL_CHANNEL_REASON);
} }
@ -249,8 +249,8 @@ function terminateRequest() {
}; };
let presenterDeviceInfo = { let presenterDeviceInfo = {
id: 'presentatorID', id: "presentatorID",
address: '127.0.0.1', address: "127.0.0.1",
port: PRESENTER_CONTROL_CHANNEL_PORT, port: PRESENTER_CONTROL_CHANNEL_PORT,
certFingerprint: pcs.certFingerprint, certFingerprint: pcs.certFingerprint,
QueryInterface: ChromeUtils.generateQI([Ci.nsITCPDeviceInfo]), QueryInterface: ChromeUtils.generateQI([Ci.nsITCPDeviceInfo]),
@ -259,11 +259,11 @@ function terminateRequest() {
let presenterControlChannel = pcs.connect(presenterDeviceInfo); let presenterControlChannel = pcs.connect(presenterDeviceInfo);
presenterControlChannel.listener = { presenterControlChannel.listener = {
notifyConnected: function() { notifyConnected() {
presenterControlChannel.terminate('testPresentationId'); presenterControlChannel.terminate("testPresentationId");
}, },
notifyDisconnected: function(aReason) { notifyDisconnected(aReason) {
Assert.equal(aReason, CLOSE_CONTROL_CHANNEL_REASON, '4. presenterControlChannel notify disconnected'); Assert.equal(aReason, CLOSE_CONTROL_CHANNEL_REASON, "4. presenterControlChannel notify disconnected");
yayFuncs.presenterControlChannelDisconnected(); yayFuncs.presenterControlChannelDisconnected();
}, },
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationControlChannelListener]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationControlChannelListener]),
@ -271,28 +271,28 @@ function terminateRequest() {
} }
function terminateRequestAbnormal() { function terminateRequestAbnormal() {
let yayFuncs = makeJointSuccess(['controllerControlChannelConnected', let yayFuncs = makeJointSuccess(["controllerControlChannelConnected",
'controllerControlChannelDisconnected', "controllerControlChannelDisconnected",
'presenterControlChannelDisconnected']); "presenterControlChannelDisconnected"]);
let controllerControlChannel; let controllerControlChannel;
pcs.listener = { pcs.listener = {
onTerminateRequest: function(deviceInfo, presentationId, controlChannel, isFromReceiver) { onTerminateRequest(deviceInfo, presentationId, controlChannel, isFromReceiver) {
Assert.equal(deviceInfo.id, pcs.id, 'expected controller device id'); Assert.equal(deviceInfo.id, pcs.id, "expected controller device id");
Assert.equal(deviceInfo.address, '127.0.0.1', 'expected device address'); Assert.equal(deviceInfo.address, "127.0.0.1", "expected device address");
Assert.equal(presentationId, 'testPresentationId', 'expected presentation id'); Assert.equal(presentationId, "testPresentationId", "expected presentation id");
Assert.equal(isFromReceiver, false, 'expected request from controller'); Assert.equal(isFromReceiver, false, "expected request from controller");
controlChannel.terminate('unmatched-presentationId'); // Reply abnormal terminate ack. controlChannel.terminate("unmatched-presentationId"); // Reply abnormal terminate ack.
controllerControlChannel = controlChannel; controllerControlChannel = controlChannel;
controllerControlChannel.listener = { controllerControlChannel.listener = {
notifyConnected: function() { notifyConnected() {
Assert.ok(true, 'control channel notify connected'); Assert.ok(true, "control channel notify connected");
yayFuncs.controllerControlChannelConnected(); yayFuncs.controllerControlChannelConnected();
}, },
notifyDisconnected: function(aReason) { notifyDisconnected(aReason) {
Assert.equal(aReason, Cr.NS_ERROR_FAILURE, 'controllerControlChannel notify disconncted with error'); Assert.equal(aReason, Cr.NS_ERROR_FAILURE, "controllerControlChannel notify disconncted with error");
yayFuncs.controllerControlChannelDisconnected(); yayFuncs.controllerControlChannelDisconnected();
}, },
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationControlChannelListener]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationControlChannelListener]),
@ -302,8 +302,8 @@ function terminateRequestAbnormal() {
}; };
let presenterDeviceInfo = { let presenterDeviceInfo = {
id: 'presentatorID', id: "presentatorID",
address: '127.0.0.1', address: "127.0.0.1",
port: PRESENTER_CONTROL_CHANNEL_PORT, port: PRESENTER_CONTROL_CHANNEL_PORT,
certFingerprint: pcs.certFingerprint, certFingerprint: pcs.certFingerprint,
QueryInterface: ChromeUtils.generateQI([Ci.nsITCPDeviceInfo]), QueryInterface: ChromeUtils.generateQI([Ci.nsITCPDeviceInfo]),
@ -312,11 +312,11 @@ function terminateRequestAbnormal() {
let presenterControlChannel = pcs.connect(presenterDeviceInfo); let presenterControlChannel = pcs.connect(presenterDeviceInfo);
presenterControlChannel.listener = { presenterControlChannel.listener = {
notifyConnected: function() { notifyConnected() {
presenterControlChannel.terminate('testPresentationId'); presenterControlChannel.terminate("testPresentationId");
}, },
notifyDisconnected: function(aReason) { notifyDisconnected(aReason) {
Assert.equal(aReason, Cr.NS_ERROR_FAILURE, '4. presenterControlChannel notify disconnected with error'); Assert.equal(aReason, Cr.NS_ERROR_FAILURE, "4. presenterControlChannel notify disconnected with error");
yayFuncs.presenterControlChannelDisconnected(); yayFuncs.presenterControlChannelDisconnected();
}, },
QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationControlChannelListener]), QueryInterface: ChromeUtils.generateQI([Ci.nsIPresentationControlChannelListener]),
@ -325,8 +325,8 @@ function terminateRequestAbnormal() {
function setOffline() { function setOffline() {
pcs.listener = { pcs.listener = {
onServerReady: function(aPort, aCertFingerprint) { onServerReady(aPort, aCertFingerprint) {
Assert.notEqual(aPort, 0, 'TCPPresentationServer port changed and the port should be valid'); Assert.notEqual(aPort, 0, "TCPPresentationServer port changed and the port should be valid");
pcs.close(); pcs.close();
run_next_test(); run_next_test();
}, },
@ -340,7 +340,7 @@ function setOffline() {
function oneMoreLoop() { function oneMoreLoop() {
try { try {
pcs.listener = { pcs.listener = {
onServerReady: function() { onServerReady() {
testPresentationServer(); testPresentationServer();
} }
}; };
@ -348,17 +348,16 @@ function oneMoreLoop() {
// Second run with TLS disabled. // Second run with TLS disabled.
pcs.startServer(false, PRESENTER_CONTROL_CHANNEL_PORT); pcs.startServer(false, PRESENTER_CONTROL_CHANNEL_PORT);
} catch (e) { } catch (e) {
Assert.ok(false, 'TCP presentation init fail:' + e); Assert.ok(false, "TCP presentation init fail:" + e);
run_next_test(); run_next_test();
} }
} }
function shutdown() function shutdown() {
{
pcs.listener = { pcs.listener = {
onServerReady: function(aPort, aCertFingerprint) { onServerReady(aPort, aCertFingerprint) {
Assert.ok(false, 'TCPPresentationServer port changed'); Assert.ok(false, "TCPPresentationServer port changed");
}, },
}; };
pcs.close(); pcs.close();