/**
 * Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/
 */

/* exported testGenerator */
var testGenerator = testSteps();

function* testSteps() {
  const name = "test_wasm_recompile.js";

  const objectStoreName = "Wasm";

  const wasmData = { key: 1 };

  // The goal of this test is to prove that stored wasm is never deserialized.

  info("Installing profile");

  clearAllDatabases(continueToNextStepSync);
  yield undefined;

  // The profile was created with a mythical build (buildId: 20180309213541,
  // cpuId: X64=0x2). It contains one stored wasm module (file id 1 - bytecode
  // and file id 2 - compiled/machine code). The file create_db.js in the
  // package was run locally (specifically it was temporarily added to
  // xpcshell-parent-process.ini and then executed:
  // mach xpcshell-test dom/indexedDB/test/unit/create_db.js
  installPackagedProfile("wasm_get_values_profile");

  info("Opening database");

  let request = indexedDB.open(name);
  request.onerror = errorHandler;
  request.onupgradeneeded = unexpectedSuccessHandler;
  request.onsuccess = continueToNextStepSync;
  yield undefined;

  // success
  let db = request.result;
  db.onerror = errorHandler;

  info("Getting wasm");

  request = db
    .transaction([objectStoreName])
    .objectStore(objectStoreName)
    .get(wasmData.key);
  request.onsuccess = continueToNextStepSync;
  yield undefined;

  info("Verifying wasm");

  let isWasmModule = request.result instanceof WebAssembly.Module;
  ok(!isWasmModule, "Object is not wasm module");

  finishTest();
  yield undefined;
}
