-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add tests for importing revoked blob URLs across agents (#30986)
Ref: denoland/deno#12248
- Loading branch information
Andreu Botella
authored
Sep 28, 2021
1 parent
af89838
commit a9327c5
Showing
2 changed files
with
71 additions
and
0 deletions.
There are no files selected for viewing
60 changes: 60 additions & 0 deletions
60
...semantics/scripting-1/the-script-element/module/dynamic-import/blob-url-workers.window.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
function objectUrlFromModule(module) { | ||
const blob = new Blob([module], { type: "text/javascript" }); | ||
return URL.createObjectURL(blob); | ||
} | ||
|
||
const moduleText = `export const foo = "bar";`; | ||
|
||
async_test((t) => { | ||
const moduleBlobUrl = objectUrlFromModule(moduleText); | ||
t.add_cleanup(() => URL.revokeObjectURL(moduleBlobUrl)); | ||
|
||
const worker = new Worker("./resources/blob-url-worker.js"); | ||
worker.postMessage(moduleBlobUrl); | ||
|
||
worker.addEventListener( | ||
"message", | ||
t.step_func_done((evt) => { | ||
assert_true(evt.data.importSucceeded); | ||
assert_equals(evt.data.module.foo, "bar"); | ||
}) | ||
); | ||
}, "A blob URL created in a window agent can be imported from a worker"); | ||
|
||
async_test((t) => { | ||
const moduleBlobUrl = objectUrlFromModule(moduleText); | ||
URL.revokeObjectURL(moduleBlobUrl); | ||
|
||
const worker = new Worker("./resources/blob-url-worker.js"); | ||
worker.postMessage(moduleBlobUrl); | ||
|
||
worker.addEventListener( | ||
"message", | ||
t.step_func_done((evt) => { | ||
assert_false(evt.data.importSucceeded); | ||
assert_equals(evt.data.errorName, "TypeError"); | ||
}) | ||
); | ||
}, "A blob URL revoked in a window agent will not resolve in a worker"); | ||
|
||
promise_test(async (t) => { | ||
const moduleBlobUrl = objectUrlFromModule(moduleText); | ||
|
||
await import(moduleBlobUrl); | ||
|
||
URL.revokeObjectURL(moduleBlobUrl); | ||
|
||
const worker = new Worker("./resources/blob-url-worker.js"); | ||
worker.postMessage(moduleBlobUrl); | ||
|
||
await new Promise((resolve) => { | ||
worker.addEventListener( | ||
"message", | ||
t.step_func((evt) => { | ||
assert_false(evt.data.importSucceeded); | ||
assert_equals(evt.data.errorName, "TypeError"); | ||
resolve(); | ||
}) | ||
); | ||
}); | ||
}, "A revoked blob URL will not resolve in a worker even if it's in the window's module graph"); |
11 changes: 11 additions & 0 deletions
11
...mantics/scripting-1/the-script-element/module/dynamic-import/resources/blob-url-worker.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
self.addEventListener("message", (evt) => { | ||
const importModule = import(evt.data); | ||
importModule.then( | ||
(module) => { | ||
self.postMessage({ importSucceeded: true, module: { ...module } }); | ||
}, | ||
(error) => { | ||
self.postMessage({ importSucceeded: false, errorName: error.name }); | ||
} | ||
); | ||
}); |