<!DOCTYPE html>
<title>IDBCursor.update() - index - attempt to modify a record in an inactive transaction</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="support.js"></script>

<script>

    var db,
      t = async_test(),
      records = [ { pKey: "primaryKey_0", iKey: "indexKey_0" },
                  { pKey: "primaryKey_1", iKey: "indexKey_1" } ];

    var open_rq = createdb(t);
    open_rq.onupgradeneeded = function(e) {
        db = e.target.result;
        var objStore = db.createObjectStore("test", { keyPath: "pKey" });
        var index = objStore.createIndex("index", "iKey");

        for (var i = 0; i < records.length; i++)
            objStore.add(records[i]);

        var cursor_rq = index.openCursor();

        cursor_rq.onsuccess = t.step_func(function(e) {
            var cursor = e.target.result;
            assert_true(cursor instanceof IDBCursor, "cursor exist");
            window.cursor = cursor;
            window.record = cursor.value;
        });

        e.target.transaction.oncomplete = t.step_func(function(e) {
            assert_throws('TransactionInactiveError', function() { window.cursor.update(window.record); })
            t.done();
        });
    }

</script>

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