diff options
Diffstat (limited to 'cli')
-rw-r--r-- | cli/main.rs | 6 | ||||
-rw-r--r-- | cli/program_state.rs | 4 | ||||
-rw-r--r-- | cli/standalone.rs | 1 | ||||
-rw-r--r-- | cli/tests/workers/shared_array_buffer.ts | 9 | ||||
-rw-r--r-- | cli/tests/workers/test.ts | 28 |
5 files changed, 48 insertions, 0 deletions
diff --git a/cli/main.rs b/cli/main.rs index a61f94530..eb7b4d333 100644 --- a/cli/main.rs +++ b/cli/main.rs @@ -123,6 +123,9 @@ fn create_web_worker_callback( get_error_class_fn: Some(&crate::errors::get_error_class_name), blob_store: program_state.blob_store.clone(), broadcast_channel: program_state.broadcast_channel.clone(), + shared_array_buffer_store: Some( + program_state.shared_array_buffer_store.clone(), + ), }; let (mut worker, external_handle) = WebWorker::from_options( @@ -209,6 +212,9 @@ pub fn create_main_worker( }), blob_store: program_state.blob_store.clone(), broadcast_channel: program_state.broadcast_channel.clone(), + shared_array_buffer_store: Some( + program_state.shared_array_buffer_store.clone(), + ), }; let mut worker = MainWorker::from_options(main_module, permissions, &options); diff --git a/cli/program_state.rs b/cli/program_state.rs index becc8faa3..5bb60906e 100644 --- a/cli/program_state.rs +++ b/cli/program_state.rs @@ -15,6 +15,7 @@ use crate::module_graph::TypeLib; use crate::source_maps::SourceMapGetter; use crate::specifier_handler::FetchHandler; use crate::version; +use deno_core::SharedArrayBufferStore; use deno_runtime::deno_broadcast_channel::InMemoryBroadcastChannel; use deno_runtime::deno_web::BlobStore; use deno_runtime::inspector_server::InspectorServer; @@ -55,6 +56,7 @@ pub struct ProgramState { pub ca_data: Option<Vec<u8>>, pub blob_store: BlobStore, pub broadcast_channel: InMemoryBroadcastChannel, + pub shared_array_buffer_store: SharedArrayBufferStore, } impl ProgramState { @@ -81,6 +83,7 @@ impl ProgramState { let blob_store = BlobStore::default(); let broadcast_channel = InMemoryBroadcastChannel::default(); + let shared_array_buffer_store = SharedArrayBufferStore::default(); let file_fetcher = FileFetcher::new( http_cache, @@ -148,6 +151,7 @@ impl ProgramState { ca_data, blob_store, broadcast_channel, + shared_array_buffer_store, }; Ok(Arc::new(program_state)) } diff --git a/cli/standalone.rs b/cli/standalone.rs index 74e5de1ca..c8918563f 100644 --- a/cli/standalone.rs +++ b/cli/standalone.rs @@ -248,6 +248,7 @@ pub async fn run( origin_storage_dir: None, blob_store, broadcast_channel, + shared_array_buffer_store: None, }; let mut worker = MainWorker::from_options(main_module.clone(), permissions, &options); diff --git a/cli/tests/workers/shared_array_buffer.ts b/cli/tests/workers/shared_array_buffer.ts new file mode 100644 index 000000000..4af95863a --- /dev/null +++ b/cli/tests/workers/shared_array_buffer.ts @@ -0,0 +1,9 @@ +self.postMessage("ready"); + +globalThis.addEventListener("message", (e) => { + const bytes1 = new Uint8Array(e.data[0]); + const bytes2 = new Uint8Array(e.data[1]); + bytes1[0] = 1; + bytes2[0] = 2; + self.postMessage("done"); +}); diff --git a/cli/tests/workers/test.ts b/cli/tests/workers/test.ts index b37b7aeb1..d35dbec82 100644 --- a/cli/tests/workers/test.ts +++ b/cli/tests/workers/test.ts @@ -790,6 +790,34 @@ Deno.test({ }); Deno.test({ + name: "worker SharedArrayBuffer", + fn: async function (): Promise<void> { + const promise = deferred(); + const workerOptions: WorkerOptions = { type: "module" }; + const w = new Worker( + new URL("shared_array_buffer.ts", import.meta.url).href, + workerOptions, + ); + const sab1 = new SharedArrayBuffer(1); + const sab2 = new SharedArrayBuffer(1); + const bytes1 = new Uint8Array(sab1); + const bytes2 = new Uint8Array(sab2); + assertEquals(bytes1[0], 0); + assertEquals(bytes2[0], 0); + w.onmessage = (): void => { + w.postMessage([sab1, sab2]); + w.onmessage = (): void => { + assertEquals(bytes1[0], 1); + assertEquals(bytes2[0], 2); + promise.resolve(); + }; + }; + await promise; + w.terminate(); + }, +}); + +Deno.test({ name: "Send MessagePorts from / to workers", fn: async function (): Promise<void> { const result = deferred(); |