<!DOCTYPE html>
<title>Databases on different origins use separate locking</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/get-host-info.sub.js"></script>
<script src="support.js"></script>
<script src="support-promises.js"></script>
<script>

var host_info = get_host_info();

promise_test(async testCase => {
  await deleteAllDatabases(testCase);

  // Create an iframe to open and hold a database on a different origin.
  var iframe = document.createElement('iframe');
  var newLocation = window.location.href.replace('www', 'www2');

  const keepalive_watcher = new EventWatcher(testCase, window, 'message');
  iframe.src = host_info.HTTP_REMOTE_ORIGIN +
      '/IndexedDB/resources/idbfactory-origin-isolation-iframe.html';
  document.body.appendChild(iframe);

  // Wait until the iframe starts its transaction.
  var event = await keepalive_watcher.wait_for('message');
  assert_equals("keep_alive_started", event.data);

  // Create our own database with the same name, and perform a simple get.
  const db = await createNamedDatabase(
      testCase, 'db-isolation-test', database => {
        database.createObjectStore('s');
      });
  const tx = db.transaction('s');
  var request = tx.objectStore('s').get(0);
  request.onsuccess = testCase.step_func_done();
  request.onerror = testCase.unreached_func("There should be no errors.");
}, "Test to make sure that origins have separate locking schemes");

</script>

<div id="log"></div>
