summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2020-02-21 10:35:41 -0500
committerGitHub <noreply@github.com>2020-02-21 10:35:41 -0500
commitd9efb8c02a0036d755c35e8e9c88d58bd45a9e2b (patch)
tree2ebce022c1c8b286cfb31845f145d8249f7b395e
parent6dd964384509e71598d08ae09c59f5f2c035a135 (diff)
fix: add io ops to worker to fix fetch (#4054)
-rw-r--r--cli/compilers/compiler_worker.rs2
-rw-r--r--cli/js/unit_tests.ts6
-rw-r--r--cli/js/workers_test.ts23
-rw-r--r--cli/tests/subdir/fetching_worker.js6
-rw-r--r--cli/web_worker.rs4
5 files changed, 37 insertions, 4 deletions
diff --git a/cli/compilers/compiler_worker.rs b/cli/compilers/compiler_worker.rs
index f0489e641..37dda67ab 100644
--- a/cli/compilers/compiler_worker.rs
+++ b/cli/compilers/compiler_worker.rs
@@ -38,9 +38,7 @@ impl CompilerWorker {
// TODO(bartlomieju): CompilerWorker should not
// depend on those ops
ops::os::init(isolate, &state);
- ops::files::init(isolate, &state);
ops::fs::init(isolate, &state);
- ops::io::init(isolate, &state);
}
Self(worker)
}
diff --git a/cli/js/unit_tests.ts b/cli/js/unit_tests.ts
index c43abaa5c..0bdd17964 100644
--- a/cli/js/unit_tests.ts
+++ b/cli/js/unit_tests.ts
@@ -57,10 +57,14 @@ import "./url_search_params_test.ts";
import "./utime_test.ts";
import "./write_file_test.ts";
import "./performance_test.ts";
-import "./permissions_test.ts";
import "./version_test.ts";
import "./workers_test.ts";
+// FIXME(bartlomieju):
+// This test file revokes permissions, it must be run last,
+// otherwise it might revoke permission for tests that need them.
+import "./permissions_test.ts";
+
if (import.meta.main) {
await Deno.runTests();
}
diff --git a/cli/js/workers_test.ts b/cli/js/workers_test.ts
index 9cb4f4a07..eccf83f65 100644
--- a/cli/js/workers_test.ts
+++ b/cli/js/workers_test.ts
@@ -1,5 +1,5 @@
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
-import { test, assert, assertEquals } from "./test_util.ts";
+import { test, testPerm, assert, assertEquals } from "./test_util.ts";
export interface ResolvableMethods<T> {
resolve: (value?: T | PromiseLike<T>) => void;
@@ -82,3 +82,24 @@ test(async function workerThrowsWhenExecuting(): Promise<void> {
await promise;
});
+
+testPerm({ net: true }, async function workerCanUseFetch(): Promise<void> {
+ const promise = createResolvable();
+
+ const fetchingWorker = new Worker("../tests/subdir/fetching_worker.js", {
+ type: "module"
+ });
+
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ fetchingWorker.onerror = (e: any): void => {
+ e.preventDefault();
+ promise.reject(e.message);
+ };
+
+ fetchingWorker.onmessage = (e): void => {
+ assert(e.data === "Done!");
+ promise.resolve();
+ };
+
+ await promise;
+});
diff --git a/cli/tests/subdir/fetching_worker.js b/cli/tests/subdir/fetching_worker.js
new file mode 100644
index 000000000..a4237a97a
--- /dev/null
+++ b/cli/tests/subdir/fetching_worker.js
@@ -0,0 +1,6 @@
+const r = await fetch(
+ "http://localhost:4545/cli/tests/subdir/fetching_worker.js"
+);
+await r.text();
+postMessage("Done!");
+close();
diff --git a/cli/web_worker.rs b/cli/web_worker.rs
index 7efec476c..5c69f8e06 100644
--- a/cli/web_worker.rs
+++ b/cli/web_worker.rs
@@ -36,9 +36,13 @@ impl WebWorker {
ops::runtime::init(isolate, &state);
ops::web_worker::init(isolate, &state, &worker.internal_channels.sender);
ops::worker_host::init(isolate, &state);
+ ops::io::init(isolate, &state);
ops::errors::init(isolate, &state);
ops::timers::init(isolate, &state);
ops::fetch::init(isolate, &state);
+ // FIXME(bartlomieju): this is added only to provide "close"
+ // op - it should be moved to `ops::io`
+ ops::files::init(isolate, &state);
}
Self {