fune/dom/base/test/test_structuredclone_backref.html
violet de4e05e120 Bug 1538622 - StructuredClone serialize and deserialize should treat back reference consistently r=jorendorff
1. If an object needs a custom function to |write|, it will be added to |memory|
   in |JSStructuredCloneWriter| before calling the custom function. But in
   JSStructuredCloneReader::startRead we did the opposite. This will cause
   out-of-order if the custom function also writes some objects (e.g.
   WriteStructuredCloneImageData). We fix this by keeping the same order in
   |startRead|.
2. |JS_WriteTypedArray| should not call |writeTypedArray| directly, because it
   will miss an entry in |memory| for the typed array itself. We fix this by calling
   |startWrite| instead.

Differential Revision: https://phabricator.services.mozilla.com/D24670

--HG--
extra : moz-landing-system : lando
2019-03-29 00:42:08 +00:00

32 lines
876 B
HTML

<!DOCTYPE HTML>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" href="/tests/SimpleTest/test.css">
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1538622">Mozilla Bug 1538622</a>
<script>
SimpleTest.waitForExplicitFinish();
let o1 = new ImageData(25, 1),
o2 = new ImageData(50, 1),
o3 = new ImageData(75, 1),
o4 = new ImageData(100, 1);
let data = {
img1: o1,
img2: o2,
img3: o3,
img4: o4,
img5: o4,
};
window.addEventListener("message", windowMessage);
window.postMessage(data);
function windowMessage(e) {
let dataCopied = e.data;
ok(dataCopied.img5 instanceof ImageData, "backref ImageData should still be an ImageData");
is(dataCopied.img5, dataCopied.img4, "backref ImageData should be the referenced one");
SimpleTest.finish();
}
</script>