diff --git a/crates/web-sys/tests/wasm/element.js b/crates/web-sys/tests/wasm/element.js
index e3b94578c59..ed51fbdbe71 100644
--- a/crates/web-sys/tests/wasm/element.js
+++ b/crates/web-sys/tests/wasm/element.js
@@ -151,16 +151,6 @@ export function new_title() {
return document.createElement("title");
}
-export function new_webgl_rendering_context() {
- const canvas = document.createElement('canvas');
- return canvas.getContext('webgl');
-}
-
-export function new_webgl2_rendering_context() {
- const canvas = document.createElement('canvas');
- return canvas.getContext('webgl2');
-}
-
export function new_xpath_result() {
let xmlDoc = new DOMParser().parseFromString("tomato", "application/xml");
let xpathResult = xmlDoc.evaluate("/root//value", xmlDoc, null, XPathResult.ANY_TYPE, null);
diff --git a/crates/web-sys/tests/wasm/whitelisted_immutable_slices.rs b/crates/web-sys/tests/wasm/whitelisted_immutable_slices.rs
index 92c3161904d..223f2750505 100644
--- a/crates/web-sys/tests/wasm/whitelisted_immutable_slices.rs
+++ b/crates/web-sys/tests/wasm/whitelisted_immutable_slices.rs
@@ -4,86 +4,73 @@
//! In certain cases we know for sure that the slice will not get mutated - for
//! example when working with the WebGlRenderingContext APIs.
//!
-//! These tests ensure that whitelisted methods do indeed accept mutable slices.
+//! These tests ensure that whitelisted methods do indeed accept immutable slices.
//! Especially important since this whitelist is stringly typed and currently
//! maintained by hand.
//!
//! @see https://github.com/rustwasm/wasm-bindgen/issues/1005
-use wasm_bindgen::prelude::*;
-use web_sys::{WebGl2RenderingContext, WebGlRenderingContext};
+use web_sys::{WebGl2RenderingContext, WebGlRenderingContext, WebSocket};
+use wasm_bindgen::{JsValue, JsCast};
-#[wasm_bindgen(module = "/tests/wasm/element.js")]
-extern "C" {
- fn new_webgl_rendering_context() -> WebGlRenderingContext;
- fn new_webgl2_rendering_context() -> WebGl2RenderingContext;
-// TODO: Add a function to create another type to test here.
-// These functions come from element.js
+// Ensure that our whitelisted WebGlRenderingContext methods compile with immutable slices.
+fn test_webgl_rendering_context_immutable_slices() {
+ let gl = JsValue::null().unchecked_into::();
+
+ gl.vertex_attrib1fv_with_f32_array(0, &[1.]);
+ gl.vertex_attrib2fv_with_f32_array(0, &[1.]);
+ gl.vertex_attrib3fv_with_f32_array(0, &[1.]);
+ gl.vertex_attrib4fv_with_f32_array(0, &[1.]);
+
+ gl.uniform1fv_with_f32_array(None, &[1.]);
+ gl.uniform2fv_with_f32_array(None, &[1.]);
+ gl.uniform3fv_with_f32_array(None, &[1.]);
+ gl.uniform4fv_with_f32_array(None, &[1.]);
+
+ gl.uniform_matrix2fv_with_f32_array(None, false, &[1.]);
+ gl.uniform_matrix3fv_with_f32_array(None, false, &[1.]);
+ gl.uniform_matrix4fv_with_f32_array(None, false, &[1.]);
+
+ gl.tex_image_2d_with_i32_and_i32_and_i32_and_format_and_type_and_opt_u8_array(
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ Some(&[1]),
+ );
+ gl.tex_sub_image_2d_with_i32_and_i32_and_u32_and_type_and_opt_u8_array(
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ Some(&[1]),
+ );
+ gl.compressed_tex_image_2d_with_u8_array(0, 0, 0, 0, 0, 0, &[1]);
}
-// TODO: Uncomment WebGlRenderingContext test. Every now and then we can check if this works
-// in the latest geckodriver.
-//
-// Currently commented out because WebGl isn't working in geckodriver.
-//
-// It currently works in chromedriver so if you need to run this in the meantime you can
-// uncomment this block and run it in using chromedriver.
-//
-// CHROMEDRIVER=chromedriver cargo test --manifest-path crates/web-sys/Cargo.toml --target wasm32-unknown-unknown --all-features test_webgl_rendering_context_immutable_slices
+// Ensure that our whitelisted WebGl2RenderingContext methods compile with immutable slices.
+fn test_webgl2_rendering_context_immutable_slices() {
+ let gl = JsValue::null().unchecked_into::();
-// Ensure that our whitelisted WebGlRenderingContext methods work
-//#[wasm_bindgen_test]
-//fn test_webgl_rendering_context_immutable_slices() {
-// let gl = new_webgl_rendering_context();
-//
-// gl.vertex_attrib1fv_with_f32_array(0, &[1.]);
-// gl.vertex_attrib2fv_with_f32_array(0, &[1.]);
-// gl.vertex_attrib3fv_with_f32_array(0, &[1.]);
-// gl.vertex_attrib4fv_with_f32_array(0, &[1.]);
-//
-// gl.uniform1fv_with_f32_array(None, &[1.]);
-// gl.uniform2fv_with_f32_array(None, &[1.]);
-// gl.uniform3fv_with_f32_array(None, &[1.]);
-// gl.uniform4fv_with_f32_array(None, &[1.]);
-//
-// gl.uniform_matrix2fv_with_f32_array(None, false, &[1.]);
-// gl.uniform_matrix3fv_with_f32_array(None, false, &[1.]);
-// gl.uniform_matrix4fv_with_f32_array(None, false, &[1.]);
-//
-// gl.tex_image_2d_with_i32_and_i32_and_i32_and_format_and_type_and_opt_u8_array(
-// 0,
-// 0,
-// 0,
-// 0,
-// 0,
-// 0,
-// 0,
-// 0,
-// Some(&[1]),
-// );
-// gl.tex_sub_image_2d_with_i32_and_i32_and_u32_and_type_and_opt_u8_array(
-// 0,
-// 0,
-// 0,
-// 0,
-// 0,
-// 0,
-// 0,
-// 0,
-// Some(&[1]),
-// );
-// gl.compressed_tex_image_2d_with_u8_array(0, 0, 0, 0, 0, 0, &[1]);
-// }
-//
-//#[wasm_bindgen_test]
-//fn test_webgl2_rendering_context_immutable_slices() {
-// let gl = new_webgl2_rendering_context();
+ gl.tex_image_3d_with_opt_u8_array(0, 0, 0, 0, 0, 0, 0, 0, 0, Some(&[1]));
+ gl.tex_sub_image_3d_with_opt_u8_array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, Some(&[1]));
+ gl.compressed_tex_image_3d_with_u8_array(0, 0, 0, 0, 0, 0, 0, &[1]);
+}
+
+// Ensure that our whitelisted WebSocket methods compile with immutable slices.
+fn test_websocket_immutable_slices() {
+ let ws = JsValue::null().unchecked_into::();
+ ws.send_with_u8_array(&[0]);
+}
-// gl.tex_image_3d_with_opt_u8_array(0, 0, 0, 0, 0, 0, 0, 0, 0, Some(&[1]));
-// gl.tex_sub_image_3d_with_opt_u8_array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, Some(&[1]));
-// gl.compressed_tex_image_3d_with_u8_array(0, 0, 0, 0, 0, 0, 0, &[1]);
-//}
-//
// TODO:
//#[wasm_bindgen_test]
//fn test_another_types_immutable_slices_here() {
diff --git a/crates/webidl/src/lib.rs b/crates/webidl/src/lib.rs
index 8fc374f6bc8..d145dcc5c5b 100644
--- a/crates/webidl/src/lib.rs
+++ b/crates/webidl/src/lib.rs
@@ -244,6 +244,8 @@ fn immutable_slice_whitelist() -> BTreeSet<&'static str> {
"clearBufferfv",
"clearBufferiv",
"clearBufferuiv",
+ // WebSocket
+ "send",
// TODO: Add another type's functions here. Leave a comment header with the type name
])
}