IDB: idbobjectstore_put WPT extended to workers in addition to window.

web_tests/external/wpt/IndexedDB/Tests currently only verify in window
environment. Extend tests to cover dedicated, shared and service
workers. Tests related to idbobjectstore_put.htm have been extended. 16
files have been consolidated into one file:- idbobjectstore_put.any.js

Bug: 41455766
Change-Id: I883b1df334fdca1b64e3eb82c45d08af99d10160
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5355266
Reviewed-by: Evan Stade <estade@chromium.org>
Reviewed-by: Ayu Ishii <ayui@chromium.org>
Commit-Queue: Sneha Agarwal <snehagarwal@microsoft.com>
Cr-Commit-Position: refs/heads/main@{#1271140}
diff --git a/IndexedDB/idbobjectstore_put.any.js b/IndexedDB/idbobjectstore_put.any.js
new file mode 100644
index 0000000..8930329
--- /dev/null
+++ b/IndexedDB/idbobjectstore_put.any.js
@@ -0,0 +1,427 @@
+// META: global=window,worker
+// META: title=IDBObjectStore.put()
+// META: script=resources/support.js
+// @author Microsoft <https://www.microsoft.com>
+// @author Intel <http://www.intel.com>
+
+'use strict';
+
+async_test(t => {
+    let db;
+    const record = { key: 1, property: "data" };
+
+    const open_rq = createdb(t);
+    open_rq.onupgradeneeded = function(e) {
+        db = e.target.result;
+        const objStore = db.createObjectStore("store", { keyPath: "key" });
+
+        objStore.put(record);
+    };
+
+    open_rq.onsuccess = function(e) {
+        const rq = db.transaction("store", "readonly",
+         { durability: 'relaxed' })
+                   .objectStore("store")
+                   .get(record.key);
+
+        rq.onsuccess = t.step_func(function(e) {
+            assert_equals(e.target.result.property, record.property);
+            assert_equals(e.target.result.key, record.key);
+            t.done();
+        });
+    };
+}, 'put() with an inline key');
+
+async_test(t => {
+    let db;
+    const key = 1;
+    const record = { property: "data" };
+
+    const open_rq = createdb(t);
+    open_rq.onupgradeneeded = function(e) {
+        db = e.target.result;
+        const objStore = db.createObjectStore("store");
+
+        objStore.put(record, key);
+    };
+
+    open_rq.onsuccess = function(e) {
+        const rq = db.transaction("store", "readonly", {durability: 'relaxed'})
+                   .objectStore("store")
+                   .get(key);
+
+        rq.onsuccess = t.step_func(function(e) {
+            assert_equals(e.target.result.property, record.property);
+
+            t.done();
+        });
+    };
+},'put() with an out-of-line key');
+
+async_test(t => {
+    let db;
+    let success_event;
+    const record = { key: 1, property: "data" };
+    const record_put = { key: 1, property: "changed", more: ["stuff", 2] };
+
+    const open_rq = createdb(t);
+    open_rq.onupgradeneeded = function(e) {
+        db = e.target.result;
+        const objStore = db.createObjectStore("store", { keyPath: "key" });
+        objStore.put(record);
+
+        const rq = objStore.put(record_put);
+        rq.onerror = fail(t, "error on put");
+
+        rq.onsuccess = t.step_func(function(e) {
+            success_event = true;
+        });
+    };
+
+    open_rq.onsuccess = function(e) {
+        assert_true(success_event);
+
+        const rq = db.transaction("store", "readonly",
+         { durability: 'relaxed' })
+                   .objectStore("store")
+                   .get(1);
+
+        rq.onsuccess = t.step_func(function(e) {
+            const rec = e.target.result;
+
+            assert_equals(rec.key, record_put.key);
+            assert_equals(rec.property, record_put.property);
+            assert_array_equals(rec.more, record_put.more);
+
+            t.done();
+        });
+    };
+}, 'put() record with key already exists');
+
+async_test(t => {
+    const record = { key: 1, property: "data" };
+
+    const open_rq = createdb(t);
+    open_rq.onupgradeneeded = function(e) {
+        let db = e.target.result;
+        const objStore = db.createObjectStore("store", {
+             autoIncrement: true });
+        objStore.createIndex("i1", "property", { unique: true });
+        objStore.put(record);
+
+        const rq = objStore.put(record);
+        rq.onsuccess = fail(t, "success on putting duplicate indexed record");
+
+        rq.onerror = t.step_func(function(e) {
+            assert_equals(rq.error.name, "ConstraintError");
+            assert_equals(e.target.error.name, "ConstraintError");
+
+            assert_equals(e.type, "error");
+
+            e.preventDefault();
+            e.stopPropagation();
+        });
+    };
+
+    // Defer done, giving a spurious rq.onsuccess a chance to run
+    open_rq.onsuccess = function(e) {
+        t.done();
+    };
+}, 'put() where an index has unique:true specified');
+
+async_test(t => {
+    let db;
+    const record = { test: { obj: { key: 1 } }, property: "data" };
+
+    const open_rq = createdb(t);
+    open_rq.onupgradeneeded = function(e) {
+        db = e.target.result;
+        const objStore = db.createObjectStore("store",
+        { keyPath: "test.obj.key" });
+        objStore.put(record);
+    };
+
+    open_rq.onsuccess = function(e) {
+        const rq = db.transaction("store", "readonly",
+        { durability: 'relaxed' })
+                   .objectStore("store")
+                   .get(record.test.obj.key);
+
+        rq.onsuccess = t.step_func(function(e) {
+            assert_equals(e.target.result.property, record.property);
+
+            t.done();
+        });
+    };
+}, 'Object store\'s key path is an object attribute');
+
+async_test(t => {
+    let db;
+    const record = { property: "data" };
+    const expected_keys = [1, 2, 3, 4];
+
+    const open_rq = createdb(t);
+    open_rq.onupgradeneeded = function(e) {
+      db = e.target.result;
+      const objStore = db.createObjectStore("store", { keyPath: "key",
+      autoIncrement: true });
+
+      objStore.put(record);
+      objStore.put(record);
+      objStore.put(record);
+      objStore.put(record);
+    };
+
+    open_rq.onsuccess = function(e) {
+      let actual_keys = [];
+      const rq = db.transaction("store", "readonly", { durability: 'relaxed' })
+          .objectStore("store")
+          .openCursor();
+
+      rq.onsuccess = t.step_func(function(e) {
+        const cursor = e.target.result;
+
+        if (cursor) {
+          actual_keys.push(cursor.value.key);
+          cursor.continue();
+        } else {
+          assert_array_equals(actual_keys, expected_keys);
+          t.done();
+        }
+      });
+    };
+  }, 'autoIncrement and inline keys');
+
+async_test(t => {
+    let db;
+    const record = { property: "data" };
+    const expected_keys = [1, 2, 3, 4];
+
+    const open_rq = createdb(t);
+    open_rq.onupgradeneeded = function(e) {
+        db = e.target.result;
+        const objStore = db.createObjectStore("store", { keyPath: "key",
+        autoIncrement: true });
+
+        objStore.put(record);
+        objStore.put(record);
+        objStore.put(record);
+        objStore.put(record);
+    };
+
+    open_rq.onsuccess = function(e) {
+        const actual_keys = [];
+        const rq = db.transaction("store", "readonly",
+        { durability: 'relaxed' })
+                   .objectStore("store")
+                   .openCursor();
+
+        rq.onsuccess = t.step_func(function(e) {
+            const cursor = e.target.result;
+
+            if(cursor) {
+                actual_keys.push(cursor.value.key);
+                cursor.continue();
+            } else {
+                assert_array_equals(actual_keys, expected_keys);
+                t.done();
+            }
+        });
+    };
+}, 'autoIncrement and out-of-line keys');
+
+async_test(t => {
+    let db;
+    const record = { property: "data" };
+    const expected_keys = [1, 2, 3, 4];
+
+    const open_rq = createdb(t);
+    open_rq.onupgradeneeded = function(e) {
+        db = e.target.result;
+        const objStore = db.createObjectStore("store",
+        { keyPath: "test.obj.key", autoIncrement: true });
+
+        objStore.put(record);
+        objStore.put(record);
+        objStore.put(record);
+        objStore.put(record);
+    };
+
+    open_rq.onsuccess = function(e) {
+        const actual_keys = [];
+        const rq = db.transaction("store", "readonly",
+        { durability: 'relaxed' })
+            .objectStore("store")
+            .openCursor();
+
+        rq.onsuccess = t.step_func(function(e) {
+            const cursor = e.target.result;
+
+            if (cursor) {
+                actual_keys.push(cursor.value.test.obj.key);
+                cursor.continue();
+            } else {
+                assert_array_equals(actual_keys, expected_keys);
+                t.done();
+            }
+        });
+    };
+}, 'Object store has autoIncrement:true and the key path is an object \
+attribute');
+
+async_test(t => {
+    const record = { key: 1, property: "data" };
+
+    const open_rq = createdb(t);
+    open_rq.onupgradeneeded = function(e) {
+        let rq;
+        const db = e.target.result;
+        const objStore = db.createObjectStore("store", { keyPath: "key" });
+
+        assert_throws_dom("DataError", function() {
+            rq = objStore.put(record, 1);
+        });
+
+        assert_equals(rq, undefined);
+        t.done();
+    };
+}, 'Attempt to put() a record that does not meet the constraints of an object \
+store\'s inline key requirements');
+
+async_test(t => {
+    const record = { property: "data" };
+
+    const open_rq = createdb(t);
+    open_rq.onupgradeneeded = function(e) {
+        let db = e.target.result;
+
+        let rq;
+        const objStore = db.createObjectStore("store", { keyPath: "key" });
+
+        assert_throws_dom("DataError", function() {
+            rq = objStore.put(record);
+        });
+
+        assert_equals(rq, undefined);
+        t.done();
+    };
+}, 'Attempt to call put() without an key parameter when the object store uses \
+out-of-line keys');
+
+async_test(t => {
+    const record = { key: { value: 1 }, property: "data" };
+
+    const open_rq = createdb(t);
+    open_rq.onupgradeneeded = function(e) {
+        const db = e.target.result;
+
+        let rq;
+        const objStore = db.createObjectStore("store", { keyPath: "key" });
+
+        assert_throws_dom("DataError", function() {
+            rq = objStore.put(record);
+        });
+
+        assert_equals(rq, undefined);
+        t.done();
+    };
+}, 'Attempt to put() a record where the record\'s key does not meet the \
+constraints of a valid key');
+
+async_test(t => {
+    const record = { property: "data" };
+
+    const open_rq = createdb(t);
+    open_rq.onupgradeneeded = function(e) {
+        const db = e.target.result;
+
+        let rq;
+        const objStore = db.createObjectStore("store", { keyPath: "key" });
+
+        assert_throws_dom("DataError", function() {
+            rq = objStore.put(record);
+        });
+
+        assert_equals(rq, undefined);
+        t.done();
+    };
+}, 'Attempt to put() a record where the record\'s in-line key is not defined');
+
+async_test(t => {
+    const record = { property: "data" };
+
+    const open_rq = createdb(t);
+    open_rq.onupgradeneeded = function(e) {
+        const db = e.target.result;
+
+        let rq;
+        const objStore = db.createObjectStore("store");
+
+        assert_throws_dom("DataError", function() {
+            rq = objStore.put(record, { value: 1 });
+        });
+
+        assert_equals(rq, undefined);
+        t.done();
+    };
+}, 'Attempt to put() a record where the out of line key provided does not \
+meet the constraints of a valid key');
+
+async_test(t => {
+    const record = { key: 1, indexedProperty: { property: "data" } };
+
+    const open_rq = createdb(t);
+    open_rq.onupgradeneeded = function(e) {
+        const db = e.target.result;
+
+        let rq;
+        const objStore = db.createObjectStore("store", { keyPath: "key" });
+
+        objStore.createIndex("index", "indexedProperty");
+
+        rq = objStore.put(record);
+
+        assert_true(rq instanceof IDBRequest);
+        rq.onsuccess = function() {
+            t.done();
+        };
+    };
+}, 'put() a record where a value being indexed does not meet the constraints \
+of a valid key');
+
+async_test(t => {
+    let db;
+    const open_rq = createdb(t);
+    open_rq.onupgradeneeded = function(event) {
+        db = event.target.result;
+        db.createObjectStore("store", { keyPath: "pKey" });
+    };
+
+    open_rq.onsuccess = function(event) {
+        const txn = db.transaction("store", "readonly",
+        { durability: 'relaxed' });
+        const ostore = txn.objectStore("store");
+        t.step(function() {
+            assert_throws_dom("ReadOnlyError", function() {
+                ostore.put({ pKey: "primaryKey_0" });
+            });
+        });
+        t.done();
+    };
+}, 'If the transaction this IDBObjectStore belongs to has its mode set to \
+readonly, throw ReadOnlyError');
+
+async_test(t => {
+    let ostore;
+    const open_rq = createdb(t);
+    open_rq.onupgradeneeded = function(event) {
+        const db = event.target.result;
+        ostore = db.createObjectStore("store", { keyPath: "pKey" });
+        db.deleteObjectStore("store");
+        assert_throws_dom("InvalidStateError", function() {
+            ostore.put({ pKey: "primaryKey_0" });
+        });
+        t.done();
+    };
+}, 'If the object store has been deleted, the implementation must throw a \
+DOMException of type InvalidStateError');
diff --git a/IndexedDB/idbobjectstore_put.htm b/IndexedDB/idbobjectstore_put.htm
deleted file mode 100644
index e277ce5..0000000
--- a/IndexedDB/idbobjectstore_put.htm
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>IDBObjectStore.put() - put with an inline key </title>
-<link rel="author" title="Microsoft" href="http://www.microsoft.com">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/support.js"></script>
-
-<script>
-    var db,
-      t = async_test(),
-      record = { key: 1, property: "data" };
-
-    var open_rq = createdb(t);
-    open_rq.onupgradeneeded = function(e) {
-        db = e.target.result;
-        var objStore = db.createObjectStore("store", { keyPath: "key" });
-
-        objStore.put(record);
-    };
-
-    open_rq.onsuccess = function(e) {
-        var rq = db.transaction("store", "readonly", {durability: 'relaxed'})
-                   .objectStore("store")
-                   .get(record.key);
-
-        rq.onsuccess = t.step_func(function(e) {
-            assert_equals(e.target.result.property, record.property);
-            assert_equals(e.target.result.key, record.key);
-            t.done();
-        });
-    };
-</script>
-
-<div id="log"></div>
diff --git a/IndexedDB/idbobjectstore_put10.htm b/IndexedDB/idbobjectstore_put10.htm
deleted file mode 100644
index 6882e8e..0000000
--- a/IndexedDB/idbobjectstore_put10.htm
+++ /dev/null
@@ -1,29 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>IDBObjectStore.put() - Attempt to call 'put' without an key parameter when the object store uses out-of-line keys </title>
-<link rel="author" title="Microsoft" href="http://www.microsoft.com">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/support.js"></script>
-
-<script>
-    var db,
-      t = async_test(),
-      record = { property: "data" };
-
-    var open_rq = createdb(t);
-    open_rq.onupgradeneeded = function(e) {
-        db = e.target.result;
-
-        var rq,
-          objStore = db.createObjectStore("store", { keyPath: "key" });
-
-        assert_throws_dom("DataError",
-            function() { rq = objStore.put(record); });
-
-        assert_equals(rq, undefined);
-        t.done();
-    };
-</script>
-
-<div id="log"></div>
diff --git a/IndexedDB/idbobjectstore_put11.htm b/IndexedDB/idbobjectstore_put11.htm
deleted file mode 100644
index a5ed2db..0000000
--- a/IndexedDB/idbobjectstore_put11.htm
+++ /dev/null
@@ -1,29 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>IDBObjectStore.put() - Attempt to put a record where the record's key does not meet the constraints of a valid key </title>
-<link rel="author" title="Microsoft" href="http://www.microsoft.com">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/support.js"></script>
-
-<script>
-    var db,
-      t = async_test(),
-      record = { key: { value: 1 }, property: "data" };
-
-    var open_rq = createdb(t);
-    open_rq.onupgradeneeded = function(e) {
-        db = e.target.result;
-
-        var rq,
-          objStore = db.createObjectStore("store", { keyPath: "key" });
-
-        assert_throws_dom("DataError",
-            function() { rq = objStore.put(record); });
-
-        assert_equals(rq, undefined);
-        t.done();
-    };
-</script>
-
-<div id="log"></div>
diff --git a/IndexedDB/idbobjectstore_put12.htm b/IndexedDB/idbobjectstore_put12.htm
deleted file mode 100644
index 0693980..0000000
--- a/IndexedDB/idbobjectstore_put12.htm
+++ /dev/null
@@ -1,29 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>IDBObjectStore.put() - Attempt to put a record where the record's in-line key is not defined </title>
-<link rel="author" title="Microsoft" href="http://www.microsoft.com">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/support.js"></script>
-
-<script>
-    var db,
-      t = async_test(),
-      record = { property: "data" };
-
-    var open_rq = createdb(t);
-    open_rq.onupgradeneeded = function(e) {
-        db = e.target.result;
-
-        var rq,
-          objStore = db.createObjectStore("store", { keyPath: "key" });
-
-        assert_throws_dom("DataError",
-            function() { rq = objStore.put(record); });
-
-        assert_equals(rq, undefined);
-        t.done();
-    };
-</script>
-
-<div id="log"></div>
diff --git a/IndexedDB/idbobjectstore_put13.htm b/IndexedDB/idbobjectstore_put13.htm
deleted file mode 100644
index 8ae6561..0000000
--- a/IndexedDB/idbobjectstore_put13.htm
+++ /dev/null
@@ -1,29 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>IDBObjectStore.put() - Attempt to put a record where the out of line key provided does not meet the constraints of a valid key </title>
-<link rel="author" title="Microsoft" href="http://www.microsoft.com">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/support.js"></script>
-
-<script>
-    var db,
-      t = async_test(),
-      record = { property: "data" };
-
-    var open_rq = createdb(t);
-    open_rq.onupgradeneeded = function(e) {
-        db = e.target.result;
-
-        var rq,
-          objStore = db.createObjectStore("store");
-
-        assert_throws_dom("DataError",
-            function() { rq = objStore.put(record, { value: 1 }); });
-
-        assert_equals(rq, undefined);
-        t.done();
-    };
-</script>
-
-<div id="log"></div>
diff --git a/IndexedDB/idbobjectstore_put14.htm b/IndexedDB/idbobjectstore_put14.htm
deleted file mode 100644
index bc5647f..0000000
--- a/IndexedDB/idbobjectstore_put14.htm
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>IDBObjectStore.put() - Put a record where a value being indexed does not meet the constraints of a valid key </title>
-<link rel="author" title="Microsoft" href="http://www.microsoft.com">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/support.js"></script>
-
-<script>
-    var db,
-      t = async_test(),
-      record = { key: 1, indexedProperty: { property: "data" } };
-
-    var open_rq = createdb(t);
-    open_rq.onupgradeneeded = function(e) {
-        db = e.target.result;
-
-        var rq,
-          objStore = db.createObjectStore("store", { keyPath: "key" });
-
-        objStore.createIndex("index", "indexedProperty");
-
-        rq = objStore.put(record);
-
-        assert_true(rq instanceof IDBRequest);
-        rq.onsuccess = function() {
-            t.done();
-        }
-    };
-</script>
-
-<div id="log"></div>
diff --git a/IndexedDB/idbobjectstore_put15.htm b/IndexedDB/idbobjectstore_put15.htm
deleted file mode 100644
index e7affad..0000000
--- a/IndexedDB/idbobjectstore_put15.htm
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>IDBObjectStore.put() - If the transaction this IDBObjectStore belongs to has its mode set to readonly, throw ReadOnlyError</title>
-<link rel="author" title="Intel" href="http://www.intel.com">
-<link rel="help" href="https://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#widl-IDBObjectStore-put-IDBRequest-any-value-any-key">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/support.js"></script>
-<div id="log"></div>
-<script>
-    var db,
-        t = async_test();
-
-    var open_rq = createdb(t);
-    open_rq.onupgradeneeded = function (event) {
-        db = event.target.result;
-        db.createObjectStore("store", {keyPath:"pKey"});
-    }
-
-    open_rq.onsuccess = function (event) {
-        var txn = db.transaction("store", "readonly", {durability: 'relaxed'});
-        var ostore = txn.objectStore("store");
-        t.step(function(){
-            assert_throws_dom("ReadOnlyError", function(){
-                ostore.put({pKey: "primaryKey_0"});
-            });
-        });
-        t.done();
-    }
-</script>
-
diff --git a/IndexedDB/idbobjectstore_put16.htm b/IndexedDB/idbobjectstore_put16.htm
deleted file mode 100644
index e298ba8..0000000
--- a/IndexedDB/idbobjectstore_put16.htm
+++ /dev/null
@@ -1,25 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>IDBObjectStore.put() - If the object store has been deleted, the implementation must throw a DOMException of type InvalidStateError</title>
-<link rel="author" title="Intel" href="http://www.intel.com">
-<link rel="help" href="https://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#widl-IDBObjectStore-put-IDBRequest-any-value-any-key">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/support.js"></script>
-<div id="log"></div>
-<script>
-    var db,
-        ostore,
-        t = async_test();
-
-    var open_rq = createdb(t);
-    open_rq.onupgradeneeded = function (event) {
-        db = event.target.result;
-        ostore = db.createObjectStore("store", {keyPath:"pKey"});
-        db.deleteObjectStore("store");
-        assert_throws_dom("InvalidStateError", function(){
-            ostore.put({pKey: "primaryKey_0"});
-        });
-        t.done();
-    }
-</script>
diff --git a/IndexedDB/idbobjectstore_put2.htm b/IndexedDB/idbobjectstore_put2.htm
deleted file mode 100644
index 733e2cb..0000000
--- a/IndexedDB/idbobjectstore_put2.htm
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>IDBObjectStore.put() - put with an out-of-line key </title>
-<link rel="author" title="Microsoft" href="http://www.microsoft.com">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/support.js"></script>
-
-<script>
-    var db,
-      t = async_test(),
-      key = 1,
-      record = { property: "data" };
-
-    var open_rq = createdb(t);
-    open_rq.onupgradeneeded = function(e) {
-        db = e.target.result;
-        var objStore = db.createObjectStore("store");
-
-        objStore.put(record, key);
-    };
-
-    open_rq.onsuccess = function(e) {
-        var rq = db.transaction("store", "readonly", {durability: 'relaxed'})
-                   .objectStore("store")
-                   .get(key);
-
-        rq.onsuccess = t.step_func(function(e) {
-            assert_equals(e.target.result.property, record.property);
-
-            t.done();
-        });
-    };
-</script>
-
-<div id="log"></div>
diff --git a/IndexedDB/idbobjectstore_put3.htm b/IndexedDB/idbobjectstore_put3.htm
deleted file mode 100644
index b7792bd..0000000
--- a/IndexedDB/idbobjectstore_put3.htm
+++ /dev/null
@@ -1,48 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>IDBObjectStore.put() - record with same key already exists </title>
-<link rel="author" title="Microsoft" href="http://www.microsoft.com">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/support.js"></script>
-
-<script>
-    var db, success_event,
-      t = async_test(),
-      record = { key: 1, property: "data" },
-      record_put = { key: 1, property: "changed", more: ["stuff", 2] };
-
-    var open_rq = createdb(t);
-    open_rq.onupgradeneeded = function(e) {
-        db = e.target.result;
-        var objStore = db.createObjectStore("store", { keyPath: "key" });
-        objStore.put(record);
-
-        var rq = objStore.put(record_put);
-        rq.onerror = fail(t, "error on put");
-
-        rq.onsuccess = t.step_func(function(e) {
-            success_event = true;
-        });
-    };
-
-    open_rq.onsuccess = function(e) {
-        assert_true(success_event);
-
-        var rq = db.transaction("store", "readonly", {durability: 'relaxed'})
-                   .objectStore("store")
-                   .get(1);
-
-        rq.onsuccess = t.step_func(function(e) {
-            var rec = e.target.result;
-
-            assert_equals(rec.key, record_put.key);
-            assert_equals(rec.property, record_put.property);
-            assert_array_equals(rec.more, record_put.more);
-
-            t.done();
-        });
-    };
-</script>
-
-<div id="log"></div>
diff --git a/IndexedDB/idbobjectstore_put4.htm b/IndexedDB/idbobjectstore_put4.htm
deleted file mode 100644
index 4a59836..0000000
--- a/IndexedDB/idbobjectstore_put4.htm
+++ /dev/null
@@ -1,40 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>IDBObjectStore.put() - put where an index has unique:true specified </title>
-<link rel="author" title="Microsoft" href="http://www.microsoft.com">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/support.js"></script>
-
-<script>
-    var db,
-      record = { key: 1, property: "data" };
-
-    var open_rq = createdb(async_test());
-    open_rq.onupgradeneeded = function(e) {
-        db = e.target.result;
-        var objStore = db.createObjectStore("store", { autoIncrement: true });
-        objStore.createIndex("i1", "property", { unique: true });
-        objStore.put(record);
-
-        var rq = objStore.put(record);
-        rq.onsuccess = fail(this, "success on putting duplicate indexed record")
-
-        rq.onerror = this.step_func(function(e) {
-            assert_equals(rq.error.name, "ConstraintError");
-            assert_equals(e.target.error.name, "ConstraintError");
-
-            assert_equals(e.type, "error");
-
-            e.preventDefault();
-            e.stopPropagation();
-        });
-    };
-
-    // Defer done, giving a spurious rq.onsuccess a chance to run
-    open_rq.onsuccess = function(e) {
-        this.done();
-    }
-</script>
-
-<div id="log"></div>
diff --git a/IndexedDB/idbobjectstore_put5.htm b/IndexedDB/idbobjectstore_put5.htm
deleted file mode 100644
index 6e945e2..0000000
--- a/IndexedDB/idbobjectstore_put5.htm
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>IDBObjectStore.put() - object store's key path is an object attribute </title>
-<link rel="author" title="Microsoft" href="http://www.microsoft.com">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/support.js"></script>
-
-<script>
-    var db,
-      t = async_test(),
-      record = { test: { obj: { key: 1 } }, property: "data" };
-
-    var open_rq = createdb(t);
-    open_rq.onupgradeneeded = function(e) {
-        db = e.target.result;
-        var objStore = db.createObjectStore("store", { keyPath: "test.obj.key" });
-        objStore.put(record);
-    };
-
-    open_rq.onsuccess = function(e) {
-        var rq = db.transaction("store", "readonly", {durability: 'relaxed'})
-                   .objectStore("store")
-                   .get(record.test.obj.key);
-
-        rq.onsuccess = t.step_func(function(e) {
-            assert_equals(e.target.result.property, record.property);
-
-            t.done();
-        });
-    };
-</script>
-
-<div id="log"></div>
diff --git a/IndexedDB/idbobjectstore_put6.htm b/IndexedDB/idbobjectstore_put6.htm
deleted file mode 100644
index f0b6f0b..0000000
--- a/IndexedDB/idbobjectstore_put6.htm
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>IDBObjectStore.put() - autoIncrement and inline keys </title>
-<link rel="author" title="Microsoft" href="http://www.microsoft.com">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/support.js"></script>
-
-<script>
-    var db,
-      t = async_test(),
-      record = { property: "data" },
-      expected_keys = [ 1, 2, 3, 4 ];
-
-    var open_rq = createdb(t);
-    open_rq.onupgradeneeded = function(e) {
-        db = e.target.result;
-        var objStore = db.createObjectStore("store", { keyPath: "key", autoIncrement: true });
-
-        objStore.put(record);
-        objStore.put(record);
-        objStore.put(record);
-        objStore.put(record);
-    };
-
-    open_rq.onsuccess = function(e) {
-        var actual_keys = [],
-          rq = db.transaction("store", "readonly", {durability: 'relaxed'})
-                 .objectStore("store")
-                 .openCursor();
-
-        rq.onsuccess = t.step_func(function(e) {
-            var cursor = e.target.result;
-
-            if (cursor) {
-                actual_keys.push(cursor.value.key);
-                cursor.continue();
-            }
-            else {
-                assert_array_equals(actual_keys, expected_keys);
-                t.done();
-            }
-        });
-    };
-</script>
-
-<div id="log"></div>
diff --git a/IndexedDB/idbobjectstore_put7.htm b/IndexedDB/idbobjectstore_put7.htm
deleted file mode 100644
index e41959f..0000000
--- a/IndexedDB/idbobjectstore_put7.htm
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>IDBObjectStore.put() - autoIncrement and out-of-line keys </title>
-<link rel="author" title="Microsoft" href="http://www.microsoft.com">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/support.js"></script>
-
-<script>
-    var db,
-      t = async_test(),
-      record = { property: "data" },
-      expected_keys = [ 1, 2, 3, 4 ];
-
-    var open_rq = createdb(t);
-    open_rq.onupgradeneeded = function(e) {
-        db = e.target.result;
-        var objStore = db.createObjectStore("store", { autoIncrement: true });
-
-        objStore.put(record);
-        objStore.put(record);
-        objStore.put(record);
-        objStore.put(record);
-    };
-
-    open_rq.onsuccess = function(e) {
-        var actual_keys = [],
-          rq = db.transaction("store", "readonly", {durability: 'relaxed'})
-                 .objectStore("store")
-                 .openCursor();
-
-        rq.onsuccess = t.step_func(function(e) {
-            var cursor = e.target.result;
-
-            if (cursor) {
-                actual_keys.push(cursor.key);
-                cursor.continue();
-            }
-            else {
-                assert_array_equals(actual_keys, expected_keys);
-                t.done();
-            }
-        });
-    };
-</script>
-
-<div id="log"></div>
diff --git a/IndexedDB/idbobjectstore_put8.htm b/IndexedDB/idbobjectstore_put8.htm
deleted file mode 100644
index 2bec639..0000000
--- a/IndexedDB/idbobjectstore_put8.htm
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>IDBObjectStore.put() - object store has autoIncrement:true and the key path is an object attribute </title>
-<link rel="author" title="Microsoft" href="http://www.microsoft.com">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/support.js"></script>
-
-<script>
-    var db,
-      t = async_test(),
-      record = { property: "data" },
-      expected_keys = [ 1, 2, 3, 4 ];
-
-    var open_rq = createdb(t);
-    open_rq.onupgradeneeded = function(e) {
-        db = e.target.result;
-        var objStore = db.createObjectStore("store", { keyPath: "test.obj.key", autoIncrement: true });
-
-        objStore.put(record);
-        objStore.put(record);
-        objStore.put(record);
-        objStore.put(record);
-    };
-
-    open_rq.onsuccess = function(e) {
-        var actual_keys = [],
-          rq = db.transaction("store", "readonly", {durability: 'relaxed'})
-                 .objectStore("store")
-                 .openCursor();
-
-        rq.onsuccess = t.step_func(function(e) {
-            var cursor = e.target.result;
-
-            if (cursor) {
-                actual_keys.push(cursor.value.test.obj.key);
-                cursor.continue();
-            }
-            else {
-                assert_array_equals(actual_keys, expected_keys);
-                t.done();
-            }
-        });
-    };
-</script>
-
-<div id="log"></div>
diff --git a/IndexedDB/idbobjectstore_put9.htm b/IndexedDB/idbobjectstore_put9.htm
deleted file mode 100644
index dff9415..0000000
--- a/IndexedDB/idbobjectstore_put9.htm
+++ /dev/null
@@ -1,27 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>IDBObjectStore.put() - Attempt to put a record that does not meet the constraints of an object store's inline key requirements </title>
-<link rel="author" title="Microsoft" href="http://www.microsoft.com">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/support.js"></script>
-
-<script>
-    var t = async_test(),
-      record = { key: 1, property: "data" };
-
-    var open_rq = createdb(t);
-    open_rq.onupgradeneeded = function(e) {
-        var rq,
-          db = e.target.result,
-          objStore = db.createObjectStore("store", { keyPath: "key" });
-
-        assert_throws_dom("DataError",
-            function() { rq = objStore.put(record, 1); });
-
-        assert_equals(rq, undefined);
-        t.done();
-    };
-</script>
-
-<div id="log"></div>