Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(22)

Unified Diff: third_party/WebKit/LayoutTests/fast/dom/Window/postmessage-transfer-isolated-world.html

Issue 2878053002: Keep materialized ArrayBuffer and ImageBitmap objects in SerializedScriptValue. (Closed)
Patch Set: slight refactor Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/LayoutTests/fast/dom/Window/postmessage-transfer-isolated-world.html
diff --git a/third_party/WebKit/LayoutTests/fast/dom/Window/postmessage-transfer-isolated-world.html b/third_party/WebKit/LayoutTests/fast/dom/Window/postmessage-transfer-isolated-world.html
new file mode 100644
index 0000000000000000000000000000000000000000..b8cfcf5285dfe8ef17faeff4274096724b758eb2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/dom/Window/postmessage-transfer-isolated-world.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<script src="../../../resources/testharness.js"></script>
+<script src="../../../resources/testharnessreport.js"></script>
+<script>
+// Waits for a message in the isolated world, posts its string representation
+// back to the main world, and resolves the promise with it. Not durable to
+// multiple such messages being in-flight at once.
+function awaitMessageInIsolatedWorld() {
+ testRunner.evaluateScriptInIsolatedWorld(1,
+ `window.addEventListener('message', function listener({ data: { origin, data }}) {
+ if (origin == 'main') {
+ window.postMessage({ origin: 'isolated', data: data.toString() }, '*');
+ window.removeEventListener('message', listener);
+ }
+ });`);
+
+ return new Promise((resolve, reject) => {
+ window.addEventListener('message', function listener({ data: { origin, data }}) {
+ if (origin == 'isolated') {
+ resolve(data);
+ window.removeEventListener('message', listener);
+ }
+ });
+ });
+}
+
+// Like awaitMessageInIsolatedWorld, but listens in the main world.
+function awaitMessageInMainWorld() {
+ return new Promise((resolve, reject) => {
+ window.addEventListener('message', function listener({ data: { origin, data }}) {
+ if (origin == 'main') {
+ resolve(data.toString());
+ window.removeEventListener('message', listener);
+ }
+ });
+ });
+}
+
+promise_test(async () => {
+ let mainPromise = awaitMessageInMainWorld();
+ let isolatedPromise = awaitMessageInIsolatedWorld();
+
+ let typedArray = new Uint8Array([1, 2, 3, 4]);
+ let typedArrayAsString = typedArray.toString();
+ window.postMessage({ origin: 'main', data: typedArray }, '*', [typedArray.buffer]);
+
+ assert_equals(await mainPromise, typedArrayAsString);
+ assert_equals(await isolatedPromise, typedArrayAsString);
+}, "Transferred array buffers can be read from messages in multiple worlds.");
+
+promise_test(async () => {
+ let mainPromise = awaitMessageInMainWorld();
+ let isolatedPromise = awaitMessageInIsolatedWorld();
+
+ let imageBitmap = await createImageBitmap(new ImageData(2, 2));
+ let imageBitmapAsString = imageBitmap.toString();
+ window.postMessage({ origin: 'main', data: imageBitmap }, '*', [imageBitmap]);
+
+ assert_equals(await mainPromise, imageBitmapAsString);
+ assert_equals(await isolatedPromise, imageBitmapAsString);
+}, "Transferred image bitmaps can be read from messages in multiple worlds.");
+</script>

Powered by Google App Engine
This is Rietveld 408576698