summaryrefslogtreecommitdiffstats
path: root/netwerk/test/unit/head_websocket.js
diff options
context:
space:
mode:
Diffstat (limited to 'netwerk/test/unit/head_websocket.js')
-rw-r--r--netwerk/test/unit/head_websocket.js71
1 files changed, 71 insertions, 0 deletions
diff --git a/netwerk/test/unit/head_websocket.js b/netwerk/test/unit/head_websocket.js
new file mode 100644
index 0000000000..84c5987f38
--- /dev/null
+++ b/netwerk/test/unit/head_websocket.js
@@ -0,0 +1,71 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+function WebSocketListener(closure, ws, sentMsg) {
+ this._closure = closure;
+ this._ws = ws;
+ this._sentMsg = sentMsg;
+}
+
+WebSocketListener.prototype = {
+ _closure: null,
+ _ws: null,
+ _sentMsg: null,
+ _received: null,
+ QueryInterface: ChromeUtils.generateQI(["nsIWebSocketListener"]),
+
+ onAcknowledge(aContext, aSize) {},
+ onBinaryMessageAvailable(aContext, aMsg) {
+ info("WsListener::onBinaryMessageAvailable");
+ this._received = aMsg;
+ this._ws.close(0, null);
+ },
+ onMessageAvailable(aContext, aMsg) {},
+ onServerClose(aContext, aCode, aReason) {},
+ onWebSocketListenerStart(aContext) {},
+ onStart(aContext) {
+ this._ws.sendMsg(this._sentMsg);
+ },
+ onStop(aContext, aStatusCode) {
+ try {
+ this._closure(aStatusCode, this._received);
+ this._ws = null;
+ } catch (ex) {
+ do_throw("Error in closure function: " + ex);
+ }
+ },
+};
+
+function makeWebSocketChan() {
+ let chan = Cc["@mozilla.org/network/protocol;1?name=wss"].createInstance(
+ Ci.nsIWebSocketChannel
+ );
+ chan.initLoadInfo(
+ null, // aLoadingNode
+ Services.scriptSecurityManager.getSystemPrincipal(),
+ null, // aTriggeringPrincipal
+ Ci.nsILoadInfo.SEC_ALLOW_CROSS_ORIGIN_SEC_CONTEXT_IS_NULL,
+ Ci.nsIContentPolicy.TYPE_WEBSOCKET
+ );
+ return chan;
+}
+
+function openWebSocketChannelPromise(chan, url, msg) {
+ let uri = Services.io.newURI(url);
+ return new Promise(resolve => {
+ function finish(status, result) {
+ resolve([status, result]);
+ }
+ chan.asyncOpen(
+ uri,
+ url,
+ {},
+ 0,
+ new WebSocketListener(finish, chan, msg),
+ null
+ );
+ });
+}