<!DOCTYPE html>
<html>
<head>
<title> postMessage() with a Blob </title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<div id=log></div>
<script>
    var TARGET = null;
    var SOURCE = null;
    var description = "Messages can contain Blobs.";

    var t = async_test("Test Description: " + description);

    var channel = new MessageChannel();
    SOURCE = channel.port1;
    TARGET = channel.port2;
    TARGET.start();
    TARGET.addEventListener("message", t.step_func(TestMessageEvent), true);

    (function() {
      SOURCE.postMessage({blob: new Blob(['foo', 'bar'])});
    })();
    // TODO(https://github.com/web-platform-tests/wpt/issues/7899): Change to
    // some sort of cross-browser GC trigger.
    if (self.gc) self.gc();

    function TestMessageEvent(evt)
    {
        assert_true('blob' in evt.data);
        assert_true(evt.data.blob instanceof Blob);
        assert_equals(evt.data.blob.size, 6);
        const reader = new FileReader();
        reader.onerror = t.unreached_func('Reading blob failed');
        reader.onload = t.step_func(() => {
            assert_equals(reader.result, 'foobar');
            t.done();
          });
        reader.readAsText(evt.data.blob);
    }
</script>
</body>
</html>
