chromium/third_party/blink/web_tests/storage/indexeddb/resources/dont-commit-on-blocked-worker.js

importScripts('../../../resources/js-test.js');
importScripts('shared.js');

debug("opening database connection");
evalAndLog("request = indexedDB.open('dont-commit-on-blocked.html', 2)");
request.onerror = unexpectedErrorCallback;
evalAndLog("state = 'setversion'");
evalAndLog("request.onblocked = onSetVersionBlocked");
evalAndLog("request.onupgradeneeded = onSetVersionSuccess");
request.onsuccess = onTransactionComplete;
debug("spinning for 100ms to let events be queued but prevent dispatch");
var t = Date.now();
while ((Date.now() - t) < 100) {
}
debug("done spinning");

function onSetVersionBlocked(e)
{
  debug("");
  debug("onSetVersionBlocked():");
  shouldBeEqualToString("state", "setversion");
  evalAndLog("state = 'blocked'");
}

function onSetVersionSuccess(e)
{
  preamble(e);
  evalAndLog("db = event.target.result");
  db.onerror = unexpectedErrorCallback;
  shouldBeEqualToString("state", "blocked");
  evalAndLog("state = 'success'");

  debug("creating object store - will fail if transaction commited after blocked event");
  evalAndLog("db.createObjectStore('store2')");
}

function onTransactionComplete(e)
{
  debug("");
  debug("onTransactionComplete");

  shouldBeEqualToString("state", "success");

  shouldBe("Number(db.version)", "2");
  shouldBeTrue("db.objectStoreNames.contains('store1')");
  shouldBeTrue("db.objectStoreNames.contains('store2')");
  finishJSTest();
}