chromium/third_party/blink/web_tests/fast/webgl/OffscreenCanvas-webgl-preserveDrawingBuffer.html

<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script>

function getPixelsFromOffscreenWebgl(preserveFlag, asserts) {
  var canvas = document.createElement("canvas");
  var offscreenCanvas = canvas.transferControlToOffscreen();
  var gl = offscreenCanvas.getContext("webgl", {preserveDrawingBuffer: preserveFlag});

  // Draw some color on gl and commit
  gl.clearColor(1, 0, 1, 1);
  gl.clear(gl.COLOR_BUFFER_BIT);

  requestAnimationFrame(() => {
    requestAnimationFrame(() => {
      var pixels = new Uint8Array(50 * 50 * 4);
      gl.readPixels(0, 0, 50, 50, gl.RGBA, gl.UNSIGNED_BYTE, pixels);
      asserts(pixels);
    }, 0);
  });
}

async_test(function(t) {
  getPixelsFromOffscreenWebgl(true, (pixels) => {
    assert_equals(pixels[0], 255);
    assert_equals(pixels[1], 0);
    assert_equals(pixels[2], 255);
    assert_equals(pixels[3], 255);
    t.done();
  });
}, "test if OffscreenCanvas.webgl retains context if preserveDrawingBuffer is true.");

async_test(function(t) {
  getPixelsFromOffscreenWebgl(false, (pixels) => {
    assert_equals(pixels[0], 0);
    assert_equals(pixels[1], 0);
    assert_equals(pixels[2], 0);
    assert_equals(pixels[3], 0);
    t.done();
  });
}, "test if OffscreenCanvas.webgl loses context if presereDrawingbuffer is false.");
</script>