From ccbd38e2c740464184e4c12c24d4b760ed4ac817 Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Wed, 3 Feb 2016 23:49:26 +0530 Subject: [PATCH 1/4] Make websockets not crash in a worker scope --- components/script/dom/websocket.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/script/dom/websocket.rs b/components/script/dom/websocket.rs index c9658a1b5c2..c8544698ecb 100644 --- a/components/script/dom/websocket.rs +++ b/components/script/dom/websocket.rs @@ -8,7 +8,6 @@ use dom::bindings::codegen::Bindings::EventHandlerBinding::EventHandlerNonNull; use dom::bindings::codegen::Bindings::LocationBinding::LocationMethods; use dom::bindings::codegen::Bindings::WebSocketBinding; use dom::bindings::codegen::Bindings::WebSocketBinding::{BinaryType, WebSocketMethods}; -use dom::bindings::codegen::Bindings::WindowBinding::WindowMethods; use dom::bindings::codegen::UnionTypes::StringOrStringSequence::{self, eString, eStringSequence}; use dom::bindings::conversions::{ToJSValConvertible}; use dom::bindings::error::{Error, Fallible}; @@ -24,6 +23,7 @@ use dom::closeevent::CloseEvent; use dom::event::{Event, EventBubbles, EventCancelable}; use dom::eventtarget::EventTarget; use dom::messageevent::MessageEvent; +use dom::urlhelper::UrlHelper; use ipc_channel::ipc::{self, IpcReceiver, IpcSender}; use js::jsapi::{JSAutoCompartment, JSAutoRequest, RootedValue}; use js::jsapi::{JS_GetArrayBufferData, JS_NewArrayBuffer}; @@ -233,7 +233,7 @@ impl WebSocket { } // Step 6: Origin. - let origin = global.as_window().Location().Origin().0; + let origin = UrlHelper::Origin(&global.get_url()).0; // Step 7. let ws = WebSocket::new(global, resource_url.clone()); From 4f878b22440fd0780d1b0ee39920a8e3b2dbc300 Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Wed, 3 Feb 2016 23:50:46 +0530 Subject: [PATCH 2/4] Fix crash when websocket.js is used from a worker --- tests/wpt/web-platform-tests/websockets/websocket.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/wpt/web-platform-tests/websockets/websocket.js b/tests/wpt/web-platform-tests/websockets/websocket.js index 79b7bd59c58..4b44a41608e 100644 --- a/tests/wpt/web-platform-tests/websockets/websocket.js +++ b/tests/wpt/web-platform-tests/websockets/websocket.js @@ -25,7 +25,7 @@ var closeCode; var urlToOpen; function IsWebSocket() { - if (!window.WebSocket) { + if (!self.WebSocket) { assert_true(false, "Browser does not support WebSocket"); } } From 853d4c0e39fff396f19f4cfad31720ec6ad1d09f Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Wed, 3 Feb 2016 23:51:45 +0530 Subject: [PATCH 3/4] Add test for websockets being used from a worker --- tests/wpt/metadata/MANIFEST.json | 11 +++++++- .../websockets/Send-data-worker.htm | 28 +++++++++++++++++++ .../websockets/Send-data-worker.js | 13 +++++++++ 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 tests/wpt/web-platform-tests/websockets/Send-data-worker.htm create mode 100644 tests/wpt/web-platform-tests/websockets/Send-data-worker.js diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 9dda2cb2e02..cfef4a11246 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -33717,7 +33717,16 @@ }, "local_changes": { "deleted": [], - "items": {}, + "items": { + "testharness": { + "websockets/Send-data-worker.htm": [ + { + "path": "websockets/Send-data-worker.htm", + "url": "/websockets/Send-data-worker.htm" + } + ] + } + }, "reftest_nodes": {} }, "reftest_nodes": { diff --git a/tests/wpt/web-platform-tests/websockets/Send-data-worker.htm b/tests/wpt/web-platform-tests/websockets/Send-data-worker.htm new file mode 100644 index 00000000000..bc946f12357 --- /dev/null +++ b/tests/wpt/web-platform-tests/websockets/Send-data-worker.htm @@ -0,0 +1,28 @@ + + + + W3C WebSocket API - Send data - WebSocket from Worker + + + + + +
+ + + diff --git a/tests/wpt/web-platform-tests/websockets/Send-data-worker.js b/tests/wpt/web-platform-tests/websockets/Send-data-worker.js new file mode 100644 index 00000000000..1bb0174b6f6 --- /dev/null +++ b/tests/wpt/web-platform-tests/websockets/Send-data-worker.js @@ -0,0 +1,13 @@ +onmessage = function (evt) { + importScripts('websocket.js?pipe=sub') + var wsocket = CreateWebSocket(false, false, false); + + wsocket.addEventListener('open', function (e) { + wsocket.send(evt.data) + }, true) + + wsocket.addEventListener('message', function (e) { + postMessage(e.data); + }, true); +} + From 396533c47971d1fad1d38a5e14800b7c107e704e Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Thu, 4 Feb 2016 19:01:49 +0530 Subject: [PATCH 4/4] Use a .worker.js test --- tests/wpt/metadata/MANIFEST.json | 6 ++-- .../websockets/Send-data-worker.htm | 28 ------------------- .../websockets/Send-data-worker.js | 13 --------- .../websockets/Send-data.worker.js | 21 ++++++++++++++ 4 files changed, 24 insertions(+), 44 deletions(-) delete mode 100644 tests/wpt/web-platform-tests/websockets/Send-data-worker.htm delete mode 100644 tests/wpt/web-platform-tests/websockets/Send-data-worker.js create mode 100644 tests/wpt/web-platform-tests/websockets/Send-data.worker.js diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index cfef4a11246..fac71bb940d 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -33719,10 +33719,10 @@ "deleted": [], "items": { "testharness": { - "websockets/Send-data-worker.htm": [ + "websockets/Send-data.worker.js": [ { - "path": "websockets/Send-data-worker.htm", - "url": "/websockets/Send-data-worker.htm" + "path": "websockets/Send-data.worker.js", + "url": "/websockets/Send-data.worker" } ] } diff --git a/tests/wpt/web-platform-tests/websockets/Send-data-worker.htm b/tests/wpt/web-platform-tests/websockets/Send-data-worker.htm deleted file mode 100644 index bc946f12357..00000000000 --- a/tests/wpt/web-platform-tests/websockets/Send-data-worker.htm +++ /dev/null @@ -1,28 +0,0 @@ - - - - W3C WebSocket API - Send data - WebSocket from Worker - - - - - -
- - - diff --git a/tests/wpt/web-platform-tests/websockets/Send-data-worker.js b/tests/wpt/web-platform-tests/websockets/Send-data-worker.js deleted file mode 100644 index 1bb0174b6f6..00000000000 --- a/tests/wpt/web-platform-tests/websockets/Send-data-worker.js +++ /dev/null @@ -1,13 +0,0 @@ -onmessage = function (evt) { - importScripts('websocket.js?pipe=sub') - var wsocket = CreateWebSocket(false, false, false); - - wsocket.addEventListener('open', function (e) { - wsocket.send(evt.data) - }, true) - - wsocket.addEventListener('message', function (e) { - postMessage(e.data); - }, true); -} - diff --git a/tests/wpt/web-platform-tests/websockets/Send-data.worker.js b/tests/wpt/web-platform-tests/websockets/Send-data.worker.js new file mode 100644 index 00000000000..f03776fb323 --- /dev/null +++ b/tests/wpt/web-platform-tests/websockets/Send-data.worker.js @@ -0,0 +1,21 @@ +importScripts("/resources/testharness.js"); +importScripts('websocket.js?pipe=sub') + +var data = "test data"; + +async_test(function(t) { + + var wsocket = CreateWebSocket(false, false, false); + + wsocket.addEventListener('open', function (e) { + wsocket.send(data) + }, true) + + wsocket.addEventListener('message', t.step_func_done(function(e) { + assert_equals(e.data, data); + done(); + }), true); + +}, "W3C WebSocket API - Send data on a WebSocket in a Worker") + +