Index: include.preload.js |
=================================================================== |
--- a/include.preload.js |
+++ b/include.preload.js |
@@ -379,6 +379,7 @@ |
// As far as possible we must track everything we use that could be |
// sabotaged by the website later in order to circumvent us. |
var RealWebSocket = WebSocket; |
+ var bindWebSocket = Function.prototype.bind.apply.bind(Function.prototype.bind, RealWebSocket); |
var closeWebSocket = Function.prototype.call.bind(RealWebSocket.prototype.close); |
var addEventListener = document.addEventListener.bind(document); |
var removeEventListener = document.removeEventListener.bind(document); |
@@ -400,13 +401,14 @@ |
})); |
} |
- WebSocket = function WrappedWebSocket(url, protocols) |
+ WebSocket = function WrappedWebSocket() |
{ |
- // Throw correct exceptions if the constructor is used improperly. |
- if (!(this instanceof WrappedWebSocket)) return RealWebSocket(); |
- if (arguments.length < 1) return new RealWebSocket(); |
+ var args = [this]; |
+ for (var i = 0; i < arguments.length; i++) |
+ args[i + 1] = arguments[i]; |
- var websocket = new RealWebSocket(url, protocols); |
+ var ctor = bindWebSocket(args); |
+ var websocket = this instanceof WrappedWebSocket ? new ctor : ctor(); |
checkRequest(websocket.url, function(blocked) |
{ |