<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[195394] trunk/LayoutTests</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/195394">195394</a></dd>
<dt>Author</dt> <dd>beidson@apple.com</dd>
<dt>Date</dt> <dd>2016-01-20 18:13:21 -0800 (Wed, 20 Jan 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Modern IDB: Add -private.html variants of every storage/indexeddb test that doesn't already have them.
https://bugs.webkit.org/show_bug.cgi?id=153272

Reviewed by Alex Christensen.

This includes some cleanups to the shared js files to make each test more resilient to being run twice.

* TestExpectations:
* platform/mac-wk1/TestExpectations:
* platform/wk2/TestExpectations:

* storage/indexeddb/clone-exception-private-expected.txt: Added.
* storage/indexeddb/clone-exception-private.html: Added.
* storage/indexeddb/closed-cursor-private-expected.txt: Added.
* storage/indexeddb/closed-cursor-private.html: Added.
* storage/indexeddb/connection-leak-private-expected.txt: Added.
* storage/indexeddb/connection-leak-private.html: Added.
* storage/indexeddb/cursor-cast-private-expected.txt: Added.
* storage/indexeddb/cursor-cast-private.html: Added.
* storage/indexeddb/cursor-leak-private-expected.txt: Added.
* storage/indexeddb/cursor-leak-private.html: Added.
* storage/indexeddb/cursor-overloads-private-expected.txt: Added.
* storage/indexeddb/cursor-overloads-private.html: Added.
* storage/indexeddb/cursor-request-cycle-private-expected.txt: Added.
* storage/indexeddb/cursor-request-cycle-private.html: Added.
* storage/indexeddb/deleteIndex-bug110792-private-expected.txt: Added.
* storage/indexeddb/deleteIndex-bug110792-private.html: Added.
* storage/indexeddb/deletedatabase-delayed-by-versionchange-private-expected.txt: Removed.
* storage/indexeddb/deletedatabase-transaction-private-expected.txt: Added.
* storage/indexeddb/deletedatabase-transaction-private.html: Added.
* storage/indexeddb/dont-commit-on-blocked-private-expected.txt: Added.
* storage/indexeddb/dont-commit-on-blocked-private.html: Added.
* storage/indexeddb/lazy-index-population-private-expected.txt: Added.
* storage/indexeddb/lazy-index-population-private.html: Added.
* storage/indexeddb/metadata-race-private-expected.txt: Added.
* storage/indexeddb/metadata-race-private.html: Added.
* storage/indexeddb/modern/abort-objectstore-info-private-expected.txt: Added.
* storage/indexeddb/modern/abort-objectstore-info-private.html: Added.
* storage/indexeddb/modern/abort-requests-cancelled-private-expected.txt: Added.
* storage/indexeddb/modern/abort-requests-cancelled-private.html: Added.
* storage/indexeddb/modern/aborted-put-private-expected.txt: Added.
* storage/indexeddb/modern/aborted-put-private.html: Added.
* storage/indexeddb/modern/autoincrement-abort-private-expected.txt: Added.
* storage/indexeddb/modern/autoincrement-abort-private.html: Added.
* storage/indexeddb/modern/basic-add-private-expected.txt: Added.
* storage/indexeddb/modern/basic-add-private.html: Added.
* storage/indexeddb/modern/basic-put-private-expected.txt: Added.
* storage/indexeddb/modern/basic-put-private.html: Added.
* storage/indexeddb/modern/blocked-open-db-requests-private-expected.txt: Added.
* storage/indexeddb/modern/blocked-open-db-requests-private.html: Added.
* storage/indexeddb/modern/create-index-failures-private-expected.txt: Added.
* storage/indexeddb/modern/create-index-failures-private.html: Added.
* storage/indexeddb/modern/createobjectstore-basic-private-expected.txt: Added.
* storage/indexeddb/modern/createobjectstore-basic-private.html: Added.
* storage/indexeddb/modern/createobjectstore-failures-private-expected.txt: Added.
* storage/indexeddb/modern/createobjectstore-failures-private.html: Added.
* storage/indexeddb/modern/cursor-1-private-expected.txt: Added.
* storage/indexeddb/modern/cursor-1-private.html: Added.
* storage/indexeddb/modern/cursor-2-private-expected.txt: Added.
* storage/indexeddb/modern/cursor-2-private.html: Added.
* storage/indexeddb/modern/cursor-3-private-expected.txt: Added.
* storage/indexeddb/modern/cursor-3-private.html: Added.
* storage/indexeddb/modern/cursor-4-private-expected.txt: Added.
* storage/indexeddb/modern/cursor-4-private.html: Added.
* storage/indexeddb/modern/cursor-5-private-expected.txt: Added.
* storage/indexeddb/modern/cursor-5-private.html: Added.
* storage/indexeddb/modern/cursor-6-private-expected.txt: Added.
* storage/indexeddb/modern/cursor-6-private.html: Added.
* storage/indexeddb/modern/cursor-7-private-expected.txt: Added.
* storage/indexeddb/modern/cursor-7-private.html: Added.
* storage/indexeddb/modern/cursor-8-private-expected.txt: Added.
* storage/indexeddb/modern/cursor-8-private.html: Added.
* storage/indexeddb/modern/date-basic-private-expected.txt: Added.
* storage/indexeddb/modern/date-basic-private.html: Added.
* storage/indexeddb/modern/deletedatabase-1-private-expected.txt: Added.
* storage/indexeddb/modern/deletedatabase-1-private.html: Added.
* storage/indexeddb/modern/deletedatabase-2-private-expected.txt: Added.
* storage/indexeddb/modern/deletedatabase-2-private.html: Added.
* storage/indexeddb/modern/deletedatabase-null-name-exception-private-expected.txt: Added.
* storage/indexeddb/modern/deletedatabase-null-name-exception-private.html: Added.
* storage/indexeddb/modern/deletedatabase-request-event-private-expected.txt: Added.
* storage/indexeddb/modern/deletedatabase-request-event-private.html: Added.
* storage/indexeddb/modern/deletedatabase-request-private-expected.txt: Added.
* storage/indexeddb/modern/deletedatabase-request-private.html: Added.
* storage/indexeddb/modern/deleteindex-1-private-expected.txt: Added.
* storage/indexeddb/modern/deleteindex-1-private.html: Added.
* storage/indexeddb/modern/deleteindex-2-private-expected.txt: Added.
* storage/indexeddb/modern/deleteindex-2-private.html: Added.
* storage/indexeddb/modern/deleteobjectstore-1-private-expected.txt: Added.
* storage/indexeddb/modern/deleteobjectstore-1-private.html: Added.
* storage/indexeddb/modern/double-abort-private-expected.txt: Added.
* storage/indexeddb/modern/double-abort-private.html: Added.
* storage/indexeddb/modern/double-open-private-expected.txt: Added.
* storage/indexeddb/modern/double-open-private.html: Added.
* storage/indexeddb/modern/get-index-failures-private-expected.txt: Added.
* storage/indexeddb/modern/get-index-failures-private.html: Added.
* storage/indexeddb/modern/get-keyrange-private-expected.txt: Added.
* storage/indexeddb/modern/get-keyrange-private.html: Added.
* storage/indexeddb/modern/idbdatabase-deleteobjectstore-failures-private-expected.txt: Added.
* storage/indexeddb/modern/idbdatabase-deleteobjectstore-failures-private.html: Added.
* storage/indexeddb/modern/idbdatabase-transaction-failures-private-expected.txt: Added.
* storage/indexeddb/modern/idbdatabase-transaction-failures-private.html: Added.
* storage/indexeddb/modern/idbindex-properties-basic-private-expected.txt: Added.
* storage/indexeddb/modern/idbindex-properties-basic-private.html: Added.
* storage/indexeddb/modern/idbobjectstore-clear-1-private-expected.txt: Added.
* storage/indexeddb/modern/idbobjectstore-clear-1-private.html: Added.
* storage/indexeddb/modern/idbobjectstore-clear-2-private-expected.txt: Added.
* storage/indexeddb/modern/idbobjectstore-clear-2-private.html: Added.
* storage/indexeddb/modern/idbobjectstore-count-1-private-expected.txt: Added.
* storage/indexeddb/modern/idbobjectstore-count-1-private.html: Added.
* storage/indexeddb/modern/idbobjectstore-count-failures-private-expected.txt: Added.
* storage/indexeddb/modern/idbobjectstore-count-failures-private.html: Added.
* storage/indexeddb/modern/idbobjectstore-delete-1-private-expected.txt: Added.
* storage/indexeddb/modern/idbobjectstore-delete-1-private.html: Added.
* storage/indexeddb/modern/idbobjectstore-delete-2-private-expected.txt: Added.
* storage/indexeddb/modern/idbobjectstore-delete-2-private.html: Added.
* storage/indexeddb/modern/idbobjectstore-delete-failures-private-expected.txt: Added.
* storage/indexeddb/modern/idbobjectstore-delete-failures-private.html: Added.
* storage/indexeddb/modern/idbobjectstore-get-failures-private-expected.txt: Added.
* storage/indexeddb/modern/idbobjectstore-get-failures-private.html: Added.
* storage/indexeddb/modern/idbobjectstore-put-and-clear-failures-private-expected.txt: Added.
* storage/indexeddb/modern/idbobjectstore-put-and-clear-failures-private.html: Added.
* storage/indexeddb/modern/idbtransaction-objectstore-failures-private-expected.txt: Added.
* storage/indexeddb/modern/idbtransaction-objectstore-failures-private.html: Added.
* storage/indexeddb/modern/index-1-private-expected.txt: Added.
* storage/indexeddb/modern/index-1-private.html: Added.
* storage/indexeddb/modern/index-2-private-expected.txt: Added.
* storage/indexeddb/modern/index-2-private.html: Added.
* storage/indexeddb/modern/index-3-private-expected.txt: Added.
* storage/indexeddb/modern/index-3-private.html: Added.
* storage/indexeddb/modern/index-4-private-expected.txt: Added.
* storage/indexeddb/modern/index-4-private.html: Added.
* storage/indexeddb/modern/index-5-private-expected.txt: Added.
* storage/indexeddb/modern/index-5-private.html: Added.
* storage/indexeddb/modern/index-cursor-1-private-expected.txt: Added.
* storage/indexeddb/modern/index-cursor-1-private.html: Added.
* storage/indexeddb/modern/index-cursor-2-private-expected.txt: Added.
* storage/indexeddb/modern/index-cursor-2-private.html: Added.
* storage/indexeddb/modern/index-cursor-3-private-expected.txt: Added.
* storage/indexeddb/modern/index-cursor-3-private.html: Added.
* storage/indexeddb/modern/index-get-count-basic-private-expected.txt: Added.
* storage/indexeddb/modern/index-get-count-basic-private.html: Added.
* storage/indexeddb/modern/index-get-count-failures-private-expected.txt: Added.
* storage/indexeddb/modern/index-get-count-failures-private.html: Added.
* storage/indexeddb/modern/keypath-basic-private-expected.txt: Added.
* storage/indexeddb/modern/keypath-basic-private.html: Added.
* storage/indexeddb/modern/memory-index-not-deleted-with-objectstore-private-expected.txt: Added.
* storage/indexeddb/modern/memory-index-not-deleted-with-objectstore-private.html: Added.
* storage/indexeddb/modern/objectstore-attributes-private-expected.txt: Added.
* storage/indexeddb/modern/objectstore-attributes-private.html: Added.
* storage/indexeddb/modern/objectstore-cursor-advance-failures-private-expected.txt: Added.
* storage/indexeddb/modern/objectstore-cursor-advance-failures-private.html: Added.
* storage/indexeddb/modern/objectstore-cursor-continue-failures-private-expected.txt: Added.
* storage/indexeddb/modern/objectstore-cursor-continue-failures-private.html: Added.
* storage/indexeddb/modern/opencursor-failures-private-expected.txt: Added.
* storage/indexeddb/modern/opencursor-failures-private.html: Added.
* storage/indexeddb/modern/opendatabase-request-event-private-expected.txt: Added.
* storage/indexeddb/modern/opendatabase-request-event-private.html: Added.
* storage/indexeddb/modern/opendatabase-request-private-expected.txt: Added.
* storage/indexeddb/modern/opendatabase-request-private.html: Added.
* storage/indexeddb/modern/opendatabase-success-after-versionchange-private-expected.txt: Added.
* storage/indexeddb/modern/opendatabase-success-after-versionchange-private.html: Added.
* storage/indexeddb/modern/opendatabase-versions-private-expected.txt: Added.
* storage/indexeddb/modern/opendatabase-versions-private.html: Added.
* storage/indexeddb/modern/request-readystate-private-expected.txt: Added.
* storage/indexeddb/modern/request-readystate-private.html: Added.
* storage/indexeddb/modern/resources/opendatabase-request-event.js:
* storage/indexeddb/modern/resources/opendatabase-versions.js:
* storage/indexeddb/modern/resources/request-readystate.js:
* storage/indexeddb/modern/resources/versionchange-abort-then-reopen.js:
* storage/indexeddb/modern/transaction-scheduler-1-private-expected.txt: Added.
* storage/indexeddb/modern/transaction-scheduler-1-private.html: Added.
* storage/indexeddb/modern/transaction-scheduler-2-private-expected.txt: Added.
* storage/indexeddb/modern/transaction-scheduler-2-private.html: Added.
* storage/indexeddb/modern/transaction-scheduler-3-private-expected.txt: Added.
* storage/indexeddb/modern/transaction-scheduler-3-private.html: Added.
* storage/indexeddb/modern/transaction-scheduler-4-private-expected.txt: Added.
* storage/indexeddb/modern/transaction-scheduler-4-private.html: Added.
* storage/indexeddb/modern/transaction-scheduler-5-private-expected.txt: Added.
* storage/indexeddb/modern/transaction-scheduler-5-private.html: Added.
* storage/indexeddb/modern/transaction-scheduler-6-private-expected.txt: Added.
* storage/indexeddb/modern/transaction-scheduler-6-private.html: Added.
* storage/indexeddb/modern/transactions-stop-on-navigation-private-expected.txt: Added.
* storage/indexeddb/modern/transactions-stop-on-navigation-private.html: Added.
* storage/indexeddb/modern/versionchange-abort-then-reopen-private-expected.txt: Added.
* storage/indexeddb/modern/versionchange-abort-then-reopen-private.html: Added.
* storage/indexeddb/modern/versionchange-event-private-expected.txt: Added.
* storage/indexeddb/modern/versionchange-event-private.html: Added.
* storage/indexeddb/mozilla/add-twice-failure-private-expected.txt: Added.
* storage/indexeddb/mozilla/add-twice-failure-private.html: Added.
* storage/indexeddb/mozilla/autoincrement-indexes-private-expected.txt: Added.
* storage/indexeddb/mozilla/autoincrement-indexes-private.html: Added.
* storage/indexeddb/mozilla/bad-keypath-private-expected.txt: Added.
* storage/indexeddb/mozilla/bad-keypath-private.html: Added.
* storage/indexeddb/mozilla/clear-private-expected.txt: Added.
* storage/indexeddb/mozilla/clear-private.html: Added.
* storage/indexeddb/mozilla/create-index-unique-private-expected.txt: Added.
* storage/indexeddb/mozilla/create-index-unique-private.html: Added.
* storage/indexeddb/mozilla/create-index-with-integer-keys-private-expected.txt: Added.
* storage/indexeddb/mozilla/create-index-with-integer-keys-private.html: Added.
* storage/indexeddb/mozilla/create-objectstore-basics-private-expected.txt: Added.
* storage/indexeddb/mozilla/create-objectstore-basics-private.html: Added.
* storage/indexeddb/mozilla/create-objectstore-null-name-private-expected.txt: Added.
* storage/indexeddb/mozilla/create-objectstore-null-name-private.html: Added.
* storage/indexeddb/mozilla/cursor-mutation-objectstore-only-private-expected.txt: Added.
* storage/indexeddb/mozilla/cursor-mutation-objectstore-only-private.html: Added.
* storage/indexeddb/mozilla/cursor-mutation-private-expected.txt: Added.
* storage/indexeddb/mozilla/cursor-mutation-private.html: Added.
* storage/indexeddb/mozilla/cursor-update-updates-indexes-private-expected.txt: Added.
* storage/indexeddb/mozilla/cursor-update-updates-indexes-private.html: Added.
* storage/indexeddb/mozilla/cursors-private-expected.txt: Added.
* storage/indexeddb/mozilla/cursors-private.html: Added.
* storage/indexeddb/mozilla/delete-result-private-expected.txt: Added.
* storage/indexeddb/mozilla/delete-result-private.html: Added.
* storage/indexeddb/mozilla/event-source-private-expected.txt: Added.
* storage/indexeddb/mozilla/event-source-private.html: Added.
* storage/indexeddb/mozilla/global-data-private-expected.txt: Added.
* storage/indexeddb/mozilla/global-data-private.html: Added.
* storage/indexeddb/mozilla/index-prev-no-duplicate-private-expected.txt: Added.
* storage/indexeddb/mozilla/index-prev-no-duplicate-private.html: Added.
* storage/indexeddb/mozilla/indexes-private-expected.txt: Added.
* storage/indexeddb/mozilla/indexes-private.html: Added.
* storage/indexeddb/mozilla/key-requirements-delete-null-key-private-expected.txt: Added.
* storage/indexeddb/mozilla/key-requirements-delete-null-key-private.html: Added.
* storage/indexeddb/mozilla/key-requirements-inline-and-passed-private-expected.txt: Added.
* storage/indexeddb/mozilla/key-requirements-inline-and-passed-private.html: Added.
* storage/indexeddb/mozilla/key-requirements-private-expected.txt: Added.
* storage/indexeddb/mozilla/key-requirements-private.html: Added.
* storage/indexeddb/mozilla/key-requirements-put-no-key-private-expected.txt: Added.
* storage/indexeddb/mozilla/key-requirements-put-no-key-private.html: Added.
* storage/indexeddb/mozilla/key-requirements-put-null-key-private-expected.txt: Added.
* storage/indexeddb/mozilla/key-requirements-put-null-key-private.html: Added.
* storage/indexeddb/mozilla/object-cursors-private-expected.txt: Added.
* storage/indexeddb/mozilla/object-cursors-private.html: Added.
* storage/indexeddb/mozilla/object-identity-private-expected.txt: Added.
* storage/indexeddb/mozilla/object-identity-private.html: Added.
* storage/indexeddb/mozilla/object-store-inline-autoincrement-key-added-on-put-private-expected.txt: Added.
* storage/indexeddb/mozilla/object-store-inline-autoincrement-key-added-on-put-private.html: Added.
* storage/indexeddb/mozilla/object-store-remove-values-private-expected.txt: Added.
* storage/indexeddb/mozilla/object-store-remove-values-private.html: Added.
* storage/indexeddb/mozilla/objectstorenames-private-expected.txt: Added.
* storage/indexeddb/mozilla/objectstorenames-private.html: Added.
* storage/indexeddb/mozilla/odd-result-order-private-expected.txt: Added.
* storage/indexeddb/mozilla/odd-result-order-private.html: Added.
* storage/indexeddb/mozilla/open-database-null-name-private-expected.txt: Added.
* storage/indexeddb/mozilla/open-database-null-name-private.html: Added.
* storage/indexeddb/mozilla/put-get-values-private-expected.txt: Added.
* storage/indexeddb/mozilla/put-get-values-private.html: Added.
* storage/indexeddb/mozilla/readonly-transactions-private-expected.txt: Added.
* storage/indexeddb/mozilla/readonly-transactions-private.html: Added.
* storage/indexeddb/mozilla/readwrite-transactions-private-expected.txt: Added.
* storage/indexeddb/mozilla/readwrite-transactions-private.html: Added.
* storage/indexeddb/mozilla/readyState-private-expected.txt: Added.
* storage/indexeddb/mozilla/readyState-private.html: Added.
* storage/indexeddb/mozilla/remove-index-private-expected.txt: Added.
* storage/indexeddb/mozilla/remove-index-private.html: Added.
* storage/indexeddb/mozilla/remove-objectstore-private-expected.txt: Added.
* storage/indexeddb/mozilla/remove-objectstore-private.html: Added.
* storage/indexeddb/mozilla/versionchange-abort-private-expected.txt: Added.
* storage/indexeddb/mozilla/versionchange-abort-private.html: Added.
* storage/indexeddb/noblobs-private-expected.txt: Added.
* storage/indexeddb/noblobs-private.html: Added.
* storage/indexeddb/object-lookups-in-versionchange-private-expected.txt: Added.
* storage/indexeddb/object-lookups-in-versionchange-private.html: Added.
* storage/indexeddb/open-bad-versions-private-expected.txt: Added.
* storage/indexeddb/open-bad-versions-private.html: Added.
* storage/indexeddb/optional-arguments-private-expected.txt: Added.
* storage/indexeddb/optional-arguments-private.html: Added.
* storage/indexeddb/pending-version-change-stuck-works-with-terminate-private-expected.txt: Added.
* storage/indexeddb/pending-version-change-stuck-works-with-terminate-private.html: Added.
* storage/indexeddb/prefetch-invalidation-private-expected.txt: Added.
* storage/indexeddb/prefetch-invalidation-private.html: Added.
* storage/indexeddb/prefetch-race-private-expected.txt: Added.
* storage/indexeddb/prefetch-race-private.html: Added.
* storage/indexeddb/primary-key-unique-to-objectstore-private-expected.txt: Added.
* storage/indexeddb/primary-key-unique-to-objectstore-private.html: Added.
* storage/indexeddb/request-leak-private-expected.txt: Added.
* storage/indexeddb/request-leak-private.html: Added.
* storage/indexeddb/request-result-cache-private-expected.txt: Added.
* storage/indexeddb/request-result-cache-private.html: Added.
* storage/indexeddb/resources/primary-key-unique-to-objectstore.js:
* storage/indexeddb/resources/shared.js:
* storage/indexeddb/resources/version-change-event-basic.js:
* storage/indexeddb/structured-clone-private-expected.txt: Added.
* storage/indexeddb/structured-clone-private.html: Added.
* storage/indexeddb/transaction-complete-with-js-recursion-cross-frame-private-expected.txt: Added.
* storage/indexeddb/transaction-complete-with-js-recursion-cross-frame-private.html: Added.
* storage/indexeddb/transaction-complete-with-js-recursion-private-expected.txt: Added.
* storage/indexeddb/transaction-complete-with-js-recursion-private.html: Added.
* storage/indexeddb/transaction-crash-in-tasks-private-expected.txt: Added.
* storage/indexeddb/transaction-crash-in-tasks-private.html: Added.
* storage/indexeddb/transaction-ordering-private-expected.txt: Added.
* storage/indexeddb/transaction-ordering-private.html: Added.
* storage/indexeddb/transaction-overlapping-private-expected.txt: Added.
* storage/indexeddb/transaction-overlapping-private.html: Added.
* storage/indexeddb/transaction-starvation-private-expected.txt: Removed.
* storage/indexeddb/version-change-event-basic-private-expected.txt: Added.
* storage/indexeddb/version-change-event-basic-private.html: Added.
* storage/indexeddb/version-change-event-private-expected.txt: Added.
* storage/indexeddb/version-change-event-private.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsTestExpectations">trunk/LayoutTests/TestExpectations</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk1TestExpectations">trunk/LayoutTests/platform/mac-wk1/TestExpectations</a></li>
<li><a href="#trunkLayoutTestsplatformwk2TestExpectations">trunk/LayoutTests/platform/wk2/TestExpectations</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernresourcesopendatabaserequesteventjs">trunk/LayoutTests/storage/indexeddb/modern/resources/opendatabase-request-event.js</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernresourcesopendatabaseversionsjs">trunk/LayoutTests/storage/indexeddb/modern/resources/opendatabase-versions.js</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernresourcesrequestreadystatejs">trunk/LayoutTests/storage/indexeddb/modern/resources/request-readystate.js</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernresourcesversionchangeabortthenreopenjs">trunk/LayoutTests/storage/indexeddb/modern/resources/versionchange-abort-then-reopen.js</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbresourcesprimarykeyuniquetoobjectstorejs">trunk/LayoutTests/storage/indexeddb/resources/primary-key-unique-to-objectstore.js</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbresourcessharedjs">trunk/LayoutTests/storage/indexeddb/resources/shared.js</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbresourcesversionchangeeventbasicjs">trunk/LayoutTests/storage/indexeddb/resources/version-change-event-basic.js</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsstorageindexeddbcloneexceptionprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/clone-exception-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbcloneexceptionprivatehtml">trunk/LayoutTests/storage/indexeddb/clone-exception-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbclosedcursorprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/closed-cursor-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbclosedcursorprivatehtml">trunk/LayoutTests/storage/indexeddb/closed-cursor-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbconnectionleakprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/connection-leak-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbconnectionleakprivatehtml">trunk/LayoutTests/storage/indexeddb/connection-leak-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbcursorcastprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/cursor-cast-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbcursorcastprivatehtml">trunk/LayoutTests/storage/indexeddb/cursor-cast-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbcursorleakprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/cursor-leak-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbcursorleakprivatehtml">trunk/LayoutTests/storage/indexeddb/cursor-leak-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbcursoroverloadsprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/cursor-overloads-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbcursoroverloadsprivatehtml">trunk/LayoutTests/storage/indexeddb/cursor-overloads-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbcursorrequestcycleprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/cursor-request-cycle-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbcursorrequestcycleprivatehtml">trunk/LayoutTests/storage/indexeddb/cursor-request-cycle-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbdeleteIndexbug110792privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/deleteIndex-bug110792-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbdeleteIndexbug110792privatehtml">trunk/LayoutTests/storage/indexeddb/deleteIndex-bug110792-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbdeletedatabasetransactionprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/deletedatabase-transaction-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbdeletedatabasetransactionprivatehtml">trunk/LayoutTests/storage/indexeddb/deletedatabase-transaction-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbdontcommitonblockedprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/dont-commit-on-blocked-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbdontcommitonblockedprivatehtml">trunk/LayoutTests/storage/indexeddb/dont-commit-on-blocked-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddblazyindexpopulationprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/lazy-index-population-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddblazyindexpopulationprivatehtml">trunk/LayoutTests/storage/indexeddb/lazy-index-population-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmetadataraceprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/metadata-race-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmetadataraceprivatehtml">trunk/LayoutTests/storage/indexeddb/metadata-race-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernabortobjectstoreinfoprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/abort-objectstore-info-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernabortobjectstoreinfoprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/abort-objectstore-info-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernabortrequestscancelledprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/abort-requests-cancelled-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernabortrequestscancelledprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/abort-requests-cancelled-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernabortedputprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/aborted-put-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernabortedputprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/aborted-put-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernautoincrementabortprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/autoincrement-abort-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernautoincrementabortprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/autoincrement-abort-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernbasicaddprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/basic-add-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernbasicaddprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/basic-add-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernbasicputprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/basic-put-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernbasicputprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/basic-put-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernblockedopendbrequestsprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/blocked-open-db-requests-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernblockedopendbrequestsprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/blocked-open-db-requests-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderncreateindexfailuresprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/create-index-failures-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderncreateindexfailuresprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/create-index-failures-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderncreateobjectstorebasicprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/createobjectstore-basic-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderncreateobjectstorebasicprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/createobjectstore-basic-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderncreateobjectstorefailuresprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/createobjectstore-failures-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderncreateobjectstorefailuresprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/createobjectstore-failures-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderncursor1privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/cursor-1-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderncursor1privatehtml">trunk/LayoutTests/storage/indexeddb/modern/cursor-1-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderncursor2privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/cursor-2-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderncursor2privatehtml">trunk/LayoutTests/storage/indexeddb/modern/cursor-2-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderncursor3privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/cursor-3-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderncursor3privatehtml">trunk/LayoutTests/storage/indexeddb/modern/cursor-3-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderncursor4privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/cursor-4-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderncursor4privatehtml">trunk/LayoutTests/storage/indexeddb/modern/cursor-4-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderncursor5privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/cursor-5-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderncursor5privatehtml">trunk/LayoutTests/storage/indexeddb/modern/cursor-5-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderncursor6privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/cursor-6-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderncursor6privatehtml">trunk/LayoutTests/storage/indexeddb/modern/cursor-6-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderncursor7privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/cursor-7-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderncursor7privatehtml">trunk/LayoutTests/storage/indexeddb/modern/cursor-7-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderncursor8privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/cursor-8-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderncursor8privatehtml">trunk/LayoutTests/storage/indexeddb/modern/cursor-8-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderndatebasicprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/date-basic-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderndatebasicprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/date-basic-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderndeletedatabase1privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-1-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderndeletedatabase1privatehtml">trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-1-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderndeletedatabase2privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-2-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderndeletedatabase2privatehtml">trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-2-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderndeletedatabasenullnameexceptionprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-null-name-exception-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderndeletedatabasenullnameexceptionprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-null-name-exception-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderndeletedatabaserequesteventprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-request-event-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderndeletedatabaserequesteventprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-request-event-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderndeletedatabaserequestprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-request-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderndeletedatabaserequestprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-request-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderndeleteindex1privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/deleteindex-1-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderndeleteindex1privatehtml">trunk/LayoutTests/storage/indexeddb/modern/deleteindex-1-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderndeleteindex2privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/deleteindex-2-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderndeleteindex2privatehtml">trunk/LayoutTests/storage/indexeddb/modern/deleteindex-2-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderndeleteobjectstore1privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/deleteobjectstore-1-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderndeleteobjectstore1privatehtml">trunk/LayoutTests/storage/indexeddb/modern/deleteobjectstore-1-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderndoubleabortprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/double-abort-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderndoubleabortprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/double-abort-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderndoubleopenprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/double-open-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderndoubleopenprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/double-open-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderngetindexfailuresprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/get-index-failures-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderngetindexfailuresprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/get-index-failures-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderngetkeyrangeprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/get-keyrange-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderngetkeyrangeprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/get-keyrange-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernidbdatabasedeleteobjectstorefailuresprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/idbdatabase-deleteobjectstore-failures-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernidbdatabasedeleteobjectstorefailuresprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/idbdatabase-deleteobjectstore-failures-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernidbdatabasetransactionfailuresprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/idbdatabase-transaction-failures-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernidbdatabasetransactionfailuresprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/idbdatabase-transaction-failures-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernidbindexpropertiesbasicprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/idbindex-properties-basic-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernidbindexpropertiesbasicprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/idbindex-properties-basic-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernidbobjectstoreclear1privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-clear-1-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernidbobjectstoreclear1privatehtml">trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-clear-1-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernidbobjectstoreclear2privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-clear-2-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernidbobjectstoreclear2privatehtml">trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-clear-2-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernidbobjectstorecount1privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-count-1-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernidbobjectstorecount1privatehtml">trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-count-1-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernidbobjectstorecountfailuresprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-count-failures-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernidbobjectstorecountfailuresprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-count-failures-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernidbobjectstoredelete1privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-delete-1-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernidbobjectstoredelete1privatehtml">trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-delete-1-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernidbobjectstoredelete2privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-delete-2-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernidbobjectstoredelete2privatehtml">trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-delete-2-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernidbobjectstoredeletefailuresprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-delete-failures-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernidbobjectstoredeletefailuresprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-delete-failures-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernidbobjectstoregetfailuresprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-get-failures-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernidbobjectstoregetfailuresprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-get-failures-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernidbobjectstoreputandclearfailuresprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-put-and-clear-failures-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernidbobjectstoreputandclearfailuresprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-put-and-clear-failures-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernidbtransactionobjectstorefailuresprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/idbtransaction-objectstore-failures-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernidbtransactionobjectstorefailuresprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/idbtransaction-objectstore-failures-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernindex1privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/index-1-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernindex1privatehtml">trunk/LayoutTests/storage/indexeddb/modern/index-1-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernindex2privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/index-2-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernindex2privatehtml">trunk/LayoutTests/storage/indexeddb/modern/index-2-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernindex3privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/index-3-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernindex3privatehtml">trunk/LayoutTests/storage/indexeddb/modern/index-3-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernindex4privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/index-4-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernindex4privatehtml">trunk/LayoutTests/storage/indexeddb/modern/index-4-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernindex5privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/index-5-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernindex5privatehtml">trunk/LayoutTests/storage/indexeddb/modern/index-5-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernindexcursor1privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/index-cursor-1-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernindexcursor1privatehtml">trunk/LayoutTests/storage/indexeddb/modern/index-cursor-1-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernindexcursor2privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/index-cursor-2-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernindexcursor2privatehtml">trunk/LayoutTests/storage/indexeddb/modern/index-cursor-2-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernindexcursor3privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/index-cursor-3-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernindexcursor3privatehtml">trunk/LayoutTests/storage/indexeddb/modern/index-cursor-3-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernindexgetcountbasicprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/index-get-count-basic-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernindexgetcountbasicprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/index-get-count-basic-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernindexgetcountfailuresprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/index-get-count-failures-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernindexgetcountfailuresprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/index-get-count-failures-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernkeypathbasicprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/keypath-basic-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernkeypathbasicprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/keypath-basic-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernmemoryindexnotdeletedwithobjectstoreprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/memory-index-not-deleted-with-objectstore-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernmemoryindexnotdeletedwithobjectstoreprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/memory-index-not-deleted-with-objectstore-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernobjectstoreattributesprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/objectstore-attributes-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernobjectstoreattributesprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/objectstore-attributes-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernobjectstorecursoradvancefailuresprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/objectstore-cursor-advance-failures-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernobjectstorecursoradvancefailuresprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/objectstore-cursor-advance-failures-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernobjectstorecursorcontinuefailuresprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/objectstore-cursor-continue-failures-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernobjectstorecursorcontinuefailuresprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/objectstore-cursor-continue-failures-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernopencursorfailuresprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/opencursor-failures-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernopencursorfailuresprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/opencursor-failures-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernopendatabaserequesteventprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/opendatabase-request-event-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernopendatabaserequesteventprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/opendatabase-request-event-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernopendatabaserequestprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/opendatabase-request-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernopendatabaserequestprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/opendatabase-request-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernopendatabasesuccessafterversionchangeprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/opendatabase-success-after-versionchange-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernopendatabasesuccessafterversionchangeprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/opendatabase-success-after-versionchange-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernopendatabaseversionsprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/opendatabase-versions-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernopendatabaseversionsprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/opendatabase-versions-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernrequestreadystateprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/request-readystate-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernrequestreadystateprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/request-readystate-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderntransactionscheduler1privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-1-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderntransactionscheduler1privatehtml">trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-1-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderntransactionscheduler2privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-2-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderntransactionscheduler2privatehtml">trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-2-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderntransactionscheduler3privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-3-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderntransactionscheduler3privatehtml">trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-3-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderntransactionscheduler4privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-4-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderntransactionscheduler4privatehtml">trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-4-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderntransactionscheduler5privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-5-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderntransactionscheduler5privatehtml">trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-5-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderntransactionscheduler6privateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-6-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderntransactionscheduler6privatehtml">trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-6-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderntransactionsstoponnavigationprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/transactions-stop-on-navigation-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmoderntransactionsstoponnavigationprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/transactions-stop-on-navigation-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernversionchangeabortthenreopenprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/versionchange-abort-then-reopen-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernversionchangeabortthenreopenprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/versionchange-abort-then-reopen-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernversionchangeeventprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/modern/versionchange-event-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmodernversionchangeeventprivatehtml">trunk/LayoutTests/storage/indexeddb/modern/versionchange-event-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaaddtwicefailureprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/add-twice-failure-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaaddtwicefailureprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/add-twice-failure-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaautoincrementindexesprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/autoincrement-indexes-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaautoincrementindexesprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/autoincrement-indexes-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillabadkeypathprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/bad-keypath-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillabadkeypathprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/bad-keypath-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaclearprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/clear-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaclearprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/clear-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillacreateindexuniqueprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/create-index-unique-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillacreateindexuniqueprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/create-index-unique-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillacreateindexwithintegerkeysprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/create-index-with-integer-keys-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillacreateindexwithintegerkeysprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/create-index-with-integer-keys-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillacreateobjectstorebasicsprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/create-objectstore-basics-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillacreateobjectstorebasicsprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/create-objectstore-basics-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillacreateobjectstorenullnameprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/create-objectstore-null-name-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillacreateobjectstorenullnameprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/create-objectstore-null-name-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillacursormutationobjectstoreonlyprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/cursor-mutation-objectstore-only-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillacursormutationobjectstoreonlyprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/cursor-mutation-objectstore-only-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillacursormutationprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/cursor-mutation-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillacursormutationprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/cursor-mutation-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillacursorupdateupdatesindexesprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/cursor-update-updates-indexes-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillacursorupdateupdatesindexesprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/cursor-update-updates-indexes-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillacursorsprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/cursors-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillacursorsprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/cursors-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozilladeleteresultprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/delete-result-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozilladeleteresultprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/delete-result-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaeventsourceprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/event-source-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaeventsourceprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/event-source-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaglobaldataprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/global-data-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaglobaldataprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/global-data-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaindexprevnoduplicateprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/index-prev-no-duplicate-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaindexprevnoduplicateprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/index-prev-no-duplicate-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaindexesprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/indexes-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaindexesprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/indexes-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillakeyrequirementsdeletenullkeyprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-delete-null-key-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillakeyrequirementsdeletenullkeyprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-delete-null-key-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillakeyrequirementsinlineandpassedprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-inline-and-passed-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillakeyrequirementsinlineandpassedprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-inline-and-passed-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillakeyrequirementsprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillakeyrequirementsprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillakeyrequirementsputnokeyprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-put-no-key-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillakeyrequirementsputnokeyprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-put-no-key-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillakeyrequirementsputnullkeyprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-put-null-key-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillakeyrequirementsputnullkeyprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-put-null-key-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaobjectcursorsprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/object-cursors-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaobjectcursorsprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/object-cursors-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaobjectidentityprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/object-identity-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaobjectidentityprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/object-identity-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaobjectstoreinlineautoincrementkeyaddedonputprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/object-store-inline-autoincrement-key-added-on-put-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaobjectstoreinlineautoincrementkeyaddedonputprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/object-store-inline-autoincrement-key-added-on-put-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaobjectstoreremovevaluesprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/object-store-remove-values-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaobjectstoreremovevaluesprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/object-store-remove-values-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaobjectstorenamesprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/objectstorenames-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaobjectstorenamesprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/objectstorenames-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaoddresultorderprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/odd-result-order-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaoddresultorderprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/odd-result-order-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaopendatabasenullnameprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/open-database-null-name-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaopendatabasenullnameprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/open-database-null-name-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaputgetvaluesprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/put-get-values-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaputgetvaluesprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/put-get-values-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillareadonlytransactionsprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/readonly-transactions-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillareadonlytransactionsprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/readonly-transactions-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillareadwritetransactionsprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/readwrite-transactions-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillareadwritetransactionsprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/readwrite-transactions-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillareadyStateprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/readyState-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillareadyStateprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/readyState-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaremoveindexprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/remove-index-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaremoveindexprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/remove-index-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaremoveobjectstoreprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/remove-objectstore-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaremoveobjectstoreprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/remove-objectstore-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaversionchangeabortprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/mozilla/versionchange-abort-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbmozillaversionchangeabortprivatehtml">trunk/LayoutTests/storage/indexeddb/mozilla/versionchange-abort-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbnoblobsprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/noblobs-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbnoblobsprivatehtml">trunk/LayoutTests/storage/indexeddb/noblobs-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbobjectlookupsinversionchangeprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/object-lookups-in-versionchange-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbobjectlookupsinversionchangeprivatehtml">trunk/LayoutTests/storage/indexeddb/object-lookups-in-versionchange-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbopenbadversionsprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/open-bad-versions-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbopenbadversionsprivatehtml">trunk/LayoutTests/storage/indexeddb/open-bad-versions-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddboptionalargumentsprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/optional-arguments-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddboptionalargumentsprivatehtml">trunk/LayoutTests/storage/indexeddb/optional-arguments-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbpendingversionchangestuckworkswithterminateprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/pending-version-change-stuck-works-with-terminate-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbpendingversionchangestuckworkswithterminateprivatehtml">trunk/LayoutTests/storage/indexeddb/pending-version-change-stuck-works-with-terminate-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbprefetchinvalidationprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/prefetch-invalidation-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbprefetchinvalidationprivatehtml">trunk/LayoutTests/storage/indexeddb/prefetch-invalidation-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbprefetchraceprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/prefetch-race-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbprefetchraceprivatehtml">trunk/LayoutTests/storage/indexeddb/prefetch-race-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbprimarykeyuniquetoobjectstoreprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/primary-key-unique-to-objectstore-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbprimarykeyuniquetoobjectstoreprivatehtml">trunk/LayoutTests/storage/indexeddb/primary-key-unique-to-objectstore-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbrequestleakprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/request-leak-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbrequestleakprivatehtml">trunk/LayoutTests/storage/indexeddb/request-leak-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbrequestresultcacheprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/request-result-cache-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbrequestresultcacheprivatehtml">trunk/LayoutTests/storage/indexeddb/request-result-cache-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbstructuredcloneprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/structured-clone-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbstructuredcloneprivatehtml">trunk/LayoutTests/storage/indexeddb/structured-clone-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbtransactioncompletewithjsrecursioncrossframeprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/transaction-complete-with-js-recursion-cross-frame-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbtransactioncompletewithjsrecursioncrossframeprivatehtml">trunk/LayoutTests/storage/indexeddb/transaction-complete-with-js-recursion-cross-frame-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbtransactioncompletewithjsrecursionprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/transaction-complete-with-js-recursion-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbtransactioncompletewithjsrecursionprivatehtml">trunk/LayoutTests/storage/indexeddb/transaction-complete-with-js-recursion-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbtransactioncrashintasksprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/transaction-crash-in-tasks-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbtransactioncrashintasksprivatehtml">trunk/LayoutTests/storage/indexeddb/transaction-crash-in-tasks-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbtransactionorderingprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/transaction-ordering-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbtransactionorderingprivatehtml">trunk/LayoutTests/storage/indexeddb/transaction-ordering-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbtransactionoverlappingprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/transaction-overlapping-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbtransactionoverlappingprivatehtml">trunk/LayoutTests/storage/indexeddb/transaction-overlapping-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbversionchangeeventbasicprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/version-change-event-basic-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbversionchangeeventbasicprivatehtml">trunk/LayoutTests/storage/indexeddb/version-change-event-basic-private.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbversionchangeeventprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/version-change-event-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbversionchangeeventprivatehtml">trunk/LayoutTests/storage/indexeddb/version-change-event-private.html</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsstorageindexeddbdeletedatabasedelayedbyversionchangeprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/deletedatabase-delayed-by-versionchange-private-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbtransactionstarvationprivateexpectedtxt">trunk/LayoutTests/storage/indexeddb/transaction-starvation-private-expected.txt</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (195393 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-01-21 01:49:12 UTC (rev 195393)
+++ trunk/LayoutTests/ChangeLog        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -1,3 +1,306 @@
</span><ins>+2016-01-20  Brady Eidson  &lt;beidson@apple.com&gt;
+
+        Modern IDB: Add -private.html variants of every storage/indexeddb test that doesn't already have them.
+        https://bugs.webkit.org/show_bug.cgi?id=153272
+
+        Reviewed by Alex Christensen.
+
+        This includes some cleanups to the shared js files to make each test more resilient to being run twice.
+        
+        * TestExpectations:
+        * platform/mac-wk1/TestExpectations:
+        * platform/wk2/TestExpectations:
+
+        * storage/indexeddb/clone-exception-private-expected.txt: Added.
+        * storage/indexeddb/clone-exception-private.html: Added.
+        * storage/indexeddb/closed-cursor-private-expected.txt: Added.
+        * storage/indexeddb/closed-cursor-private.html: Added.
+        * storage/indexeddb/connection-leak-private-expected.txt: Added.
+        * storage/indexeddb/connection-leak-private.html: Added.
+        * storage/indexeddb/cursor-cast-private-expected.txt: Added.
+        * storage/indexeddb/cursor-cast-private.html: Added.
+        * storage/indexeddb/cursor-leak-private-expected.txt: Added.
+        * storage/indexeddb/cursor-leak-private.html: Added.
+        * storage/indexeddb/cursor-overloads-private-expected.txt: Added.
+        * storage/indexeddb/cursor-overloads-private.html: Added.
+        * storage/indexeddb/cursor-request-cycle-private-expected.txt: Added.
+        * storage/indexeddb/cursor-request-cycle-private.html: Added.
+        * storage/indexeddb/deleteIndex-bug110792-private-expected.txt: Added.
+        * storage/indexeddb/deleteIndex-bug110792-private.html: Added.
+        * storage/indexeddb/deletedatabase-delayed-by-versionchange-private-expected.txt: Removed.
+        * storage/indexeddb/deletedatabase-transaction-private-expected.txt: Added.
+        * storage/indexeddb/deletedatabase-transaction-private.html: Added.
+        * storage/indexeddb/dont-commit-on-blocked-private-expected.txt: Added.
+        * storage/indexeddb/dont-commit-on-blocked-private.html: Added.
+        * storage/indexeddb/lazy-index-population-private-expected.txt: Added.
+        * storage/indexeddb/lazy-index-population-private.html: Added.
+        * storage/indexeddb/metadata-race-private-expected.txt: Added.
+        * storage/indexeddb/metadata-race-private.html: Added.
+        * storage/indexeddb/modern/abort-objectstore-info-private-expected.txt: Added.
+        * storage/indexeddb/modern/abort-objectstore-info-private.html: Added.
+        * storage/indexeddb/modern/abort-requests-cancelled-private-expected.txt: Added.
+        * storage/indexeddb/modern/abort-requests-cancelled-private.html: Added.
+        * storage/indexeddb/modern/aborted-put-private-expected.txt: Added.
+        * storage/indexeddb/modern/aborted-put-private.html: Added.
+        * storage/indexeddb/modern/autoincrement-abort-private-expected.txt: Added.
+        * storage/indexeddb/modern/autoincrement-abort-private.html: Added.
+        * storage/indexeddb/modern/basic-add-private-expected.txt: Added.
+        * storage/indexeddb/modern/basic-add-private.html: Added.
+        * storage/indexeddb/modern/basic-put-private-expected.txt: Added.
+        * storage/indexeddb/modern/basic-put-private.html: Added.
+        * storage/indexeddb/modern/blocked-open-db-requests-private-expected.txt: Added.
+        * storage/indexeddb/modern/blocked-open-db-requests-private.html: Added.
+        * storage/indexeddb/modern/create-index-failures-private-expected.txt: Added.
+        * storage/indexeddb/modern/create-index-failures-private.html: Added.
+        * storage/indexeddb/modern/createobjectstore-basic-private-expected.txt: Added.
+        * storage/indexeddb/modern/createobjectstore-basic-private.html: Added.
+        * storage/indexeddb/modern/createobjectstore-failures-private-expected.txt: Added.
+        * storage/indexeddb/modern/createobjectstore-failures-private.html: Added.
+        * storage/indexeddb/modern/cursor-1-private-expected.txt: Added.
+        * storage/indexeddb/modern/cursor-1-private.html: Added.
+        * storage/indexeddb/modern/cursor-2-private-expected.txt: Added.
+        * storage/indexeddb/modern/cursor-2-private.html: Added.
+        * storage/indexeddb/modern/cursor-3-private-expected.txt: Added.
+        * storage/indexeddb/modern/cursor-3-private.html: Added.
+        * storage/indexeddb/modern/cursor-4-private-expected.txt: Added.
+        * storage/indexeddb/modern/cursor-4-private.html: Added.
+        * storage/indexeddb/modern/cursor-5-private-expected.txt: Added.
+        * storage/indexeddb/modern/cursor-5-private.html: Added.
+        * storage/indexeddb/modern/cursor-6-private-expected.txt: Added.
+        * storage/indexeddb/modern/cursor-6-private.html: Added.
+        * storage/indexeddb/modern/cursor-7-private-expected.txt: Added.
+        * storage/indexeddb/modern/cursor-7-private.html: Added.
+        * storage/indexeddb/modern/cursor-8-private-expected.txt: Added.
+        * storage/indexeddb/modern/cursor-8-private.html: Added.
+        * storage/indexeddb/modern/date-basic-private-expected.txt: Added.
+        * storage/indexeddb/modern/date-basic-private.html: Added.
+        * storage/indexeddb/modern/deletedatabase-1-private-expected.txt: Added.
+        * storage/indexeddb/modern/deletedatabase-1-private.html: Added.
+        * storage/indexeddb/modern/deletedatabase-2-private-expected.txt: Added.
+        * storage/indexeddb/modern/deletedatabase-2-private.html: Added.
+        * storage/indexeddb/modern/deletedatabase-null-name-exception-private-expected.txt: Added.
+        * storage/indexeddb/modern/deletedatabase-null-name-exception-private.html: Added.
+        * storage/indexeddb/modern/deletedatabase-request-event-private-expected.txt: Added.
+        * storage/indexeddb/modern/deletedatabase-request-event-private.html: Added.
+        * storage/indexeddb/modern/deletedatabase-request-private-expected.txt: Added.
+        * storage/indexeddb/modern/deletedatabase-request-private.html: Added.
+        * storage/indexeddb/modern/deleteindex-1-private-expected.txt: Added.
+        * storage/indexeddb/modern/deleteindex-1-private.html: Added.
+        * storage/indexeddb/modern/deleteindex-2-private-expected.txt: Added.
+        * storage/indexeddb/modern/deleteindex-2-private.html: Added.
+        * storage/indexeddb/modern/deleteobjectstore-1-private-expected.txt: Added.
+        * storage/indexeddb/modern/deleteobjectstore-1-private.html: Added.
+        * storage/indexeddb/modern/double-abort-private-expected.txt: Added.
+        * storage/indexeddb/modern/double-abort-private.html: Added.
+        * storage/indexeddb/modern/double-open-private-expected.txt: Added.
+        * storage/indexeddb/modern/double-open-private.html: Added.
+        * storage/indexeddb/modern/get-index-failures-private-expected.txt: Added.
+        * storage/indexeddb/modern/get-index-failures-private.html: Added.
+        * storage/indexeddb/modern/get-keyrange-private-expected.txt: Added.
+        * storage/indexeddb/modern/get-keyrange-private.html: Added.
+        * storage/indexeddb/modern/idbdatabase-deleteobjectstore-failures-private-expected.txt: Added.
+        * storage/indexeddb/modern/idbdatabase-deleteobjectstore-failures-private.html: Added.
+        * storage/indexeddb/modern/idbdatabase-transaction-failures-private-expected.txt: Added.
+        * storage/indexeddb/modern/idbdatabase-transaction-failures-private.html: Added.
+        * storage/indexeddb/modern/idbindex-properties-basic-private-expected.txt: Added.
+        * storage/indexeddb/modern/idbindex-properties-basic-private.html: Added.
+        * storage/indexeddb/modern/idbobjectstore-clear-1-private-expected.txt: Added.
+        * storage/indexeddb/modern/idbobjectstore-clear-1-private.html: Added.
+        * storage/indexeddb/modern/idbobjectstore-clear-2-private-expected.txt: Added.
+        * storage/indexeddb/modern/idbobjectstore-clear-2-private.html: Added.
+        * storage/indexeddb/modern/idbobjectstore-count-1-private-expected.txt: Added.
+        * storage/indexeddb/modern/idbobjectstore-count-1-private.html: Added.
+        * storage/indexeddb/modern/idbobjectstore-count-failures-private-expected.txt: Added.
+        * storage/indexeddb/modern/idbobjectstore-count-failures-private.html: Added.
+        * storage/indexeddb/modern/idbobjectstore-delete-1-private-expected.txt: Added.
+        * storage/indexeddb/modern/idbobjectstore-delete-1-private.html: Added.
+        * storage/indexeddb/modern/idbobjectstore-delete-2-private-expected.txt: Added.
+        * storage/indexeddb/modern/idbobjectstore-delete-2-private.html: Added.
+        * storage/indexeddb/modern/idbobjectstore-delete-failures-private-expected.txt: Added.
+        * storage/indexeddb/modern/idbobjectstore-delete-failures-private.html: Added.
+        * storage/indexeddb/modern/idbobjectstore-get-failures-private-expected.txt: Added.
+        * storage/indexeddb/modern/idbobjectstore-get-failures-private.html: Added.
+        * storage/indexeddb/modern/idbobjectstore-put-and-clear-failures-private-expected.txt: Added.
+        * storage/indexeddb/modern/idbobjectstore-put-and-clear-failures-private.html: Added.
+        * storage/indexeddb/modern/idbtransaction-objectstore-failures-private-expected.txt: Added.
+        * storage/indexeddb/modern/idbtransaction-objectstore-failures-private.html: Added.
+        * storage/indexeddb/modern/index-1-private-expected.txt: Added.
+        * storage/indexeddb/modern/index-1-private.html: Added.
+        * storage/indexeddb/modern/index-2-private-expected.txt: Added.
+        * storage/indexeddb/modern/index-2-private.html: Added.
+        * storage/indexeddb/modern/index-3-private-expected.txt: Added.
+        * storage/indexeddb/modern/index-3-private.html: Added.
+        * storage/indexeddb/modern/index-4-private-expected.txt: Added.
+        * storage/indexeddb/modern/index-4-private.html: Added.
+        * storage/indexeddb/modern/index-5-private-expected.txt: Added.
+        * storage/indexeddb/modern/index-5-private.html: Added.
+        * storage/indexeddb/modern/index-cursor-1-private-expected.txt: Added.
+        * storage/indexeddb/modern/index-cursor-1-private.html: Added.
+        * storage/indexeddb/modern/index-cursor-2-private-expected.txt: Added.
+        * storage/indexeddb/modern/index-cursor-2-private.html: Added.
+        * storage/indexeddb/modern/index-cursor-3-private-expected.txt: Added.
+        * storage/indexeddb/modern/index-cursor-3-private.html: Added.
+        * storage/indexeddb/modern/index-get-count-basic-private-expected.txt: Added.
+        * storage/indexeddb/modern/index-get-count-basic-private.html: Added.
+        * storage/indexeddb/modern/index-get-count-failures-private-expected.txt: Added.
+        * storage/indexeddb/modern/index-get-count-failures-private.html: Added.
+        * storage/indexeddb/modern/keypath-basic-private-expected.txt: Added.
+        * storage/indexeddb/modern/keypath-basic-private.html: Added.
+        * storage/indexeddb/modern/memory-index-not-deleted-with-objectstore-private-expected.txt: Added.
+        * storage/indexeddb/modern/memory-index-not-deleted-with-objectstore-private.html: Added.
+        * storage/indexeddb/modern/objectstore-attributes-private-expected.txt: Added.
+        * storage/indexeddb/modern/objectstore-attributes-private.html: Added.
+        * storage/indexeddb/modern/objectstore-cursor-advance-failures-private-expected.txt: Added.
+        * storage/indexeddb/modern/objectstore-cursor-advance-failures-private.html: Added.
+        * storage/indexeddb/modern/objectstore-cursor-continue-failures-private-expected.txt: Added.
+        * storage/indexeddb/modern/objectstore-cursor-continue-failures-private.html: Added.
+        * storage/indexeddb/modern/opencursor-failures-private-expected.txt: Added.
+        * storage/indexeddb/modern/opencursor-failures-private.html: Added.
+        * storage/indexeddb/modern/opendatabase-request-event-private-expected.txt: Added.
+        * storage/indexeddb/modern/opendatabase-request-event-private.html: Added.
+        * storage/indexeddb/modern/opendatabase-request-private-expected.txt: Added.
+        * storage/indexeddb/modern/opendatabase-request-private.html: Added.
+        * storage/indexeddb/modern/opendatabase-success-after-versionchange-private-expected.txt: Added.
+        * storage/indexeddb/modern/opendatabase-success-after-versionchange-private.html: Added.
+        * storage/indexeddb/modern/opendatabase-versions-private-expected.txt: Added.
+        * storage/indexeddb/modern/opendatabase-versions-private.html: Added.
+        * storage/indexeddb/modern/request-readystate-private-expected.txt: Added.
+        * storage/indexeddb/modern/request-readystate-private.html: Added.
+        * storage/indexeddb/modern/resources/opendatabase-request-event.js:
+        * storage/indexeddb/modern/resources/opendatabase-versions.js:
+        * storage/indexeddb/modern/resources/request-readystate.js:
+        * storage/indexeddb/modern/resources/versionchange-abort-then-reopen.js:
+        * storage/indexeddb/modern/transaction-scheduler-1-private-expected.txt: Added.
+        * storage/indexeddb/modern/transaction-scheduler-1-private.html: Added.
+        * storage/indexeddb/modern/transaction-scheduler-2-private-expected.txt: Added.
+        * storage/indexeddb/modern/transaction-scheduler-2-private.html: Added.
+        * storage/indexeddb/modern/transaction-scheduler-3-private-expected.txt: Added.
+        * storage/indexeddb/modern/transaction-scheduler-3-private.html: Added.
+        * storage/indexeddb/modern/transaction-scheduler-4-private-expected.txt: Added.
+        * storage/indexeddb/modern/transaction-scheduler-4-private.html: Added.
+        * storage/indexeddb/modern/transaction-scheduler-5-private-expected.txt: Added.
+        * storage/indexeddb/modern/transaction-scheduler-5-private.html: Added.
+        * storage/indexeddb/modern/transaction-scheduler-6-private-expected.txt: Added.
+        * storage/indexeddb/modern/transaction-scheduler-6-private.html: Added.
+        * storage/indexeddb/modern/transactions-stop-on-navigation-private-expected.txt: Added.
+        * storage/indexeddb/modern/transactions-stop-on-navigation-private.html: Added.
+        * storage/indexeddb/modern/versionchange-abort-then-reopen-private-expected.txt: Added.
+        * storage/indexeddb/modern/versionchange-abort-then-reopen-private.html: Added.
+        * storage/indexeddb/modern/versionchange-event-private-expected.txt: Added.
+        * storage/indexeddb/modern/versionchange-event-private.html: Added.
+        * storage/indexeddb/mozilla/add-twice-failure-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/add-twice-failure-private.html: Added.
+        * storage/indexeddb/mozilla/autoincrement-indexes-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/autoincrement-indexes-private.html: Added.
+        * storage/indexeddb/mozilla/bad-keypath-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/bad-keypath-private.html: Added.
+        * storage/indexeddb/mozilla/clear-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/clear-private.html: Added.
+        * storage/indexeddb/mozilla/create-index-unique-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/create-index-unique-private.html: Added.
+        * storage/indexeddb/mozilla/create-index-with-integer-keys-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/create-index-with-integer-keys-private.html: Added.
+        * storage/indexeddb/mozilla/create-objectstore-basics-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/create-objectstore-basics-private.html: Added.
+        * storage/indexeddb/mozilla/create-objectstore-null-name-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/create-objectstore-null-name-private.html: Added.
+        * storage/indexeddb/mozilla/cursor-mutation-objectstore-only-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/cursor-mutation-objectstore-only-private.html: Added.
+        * storage/indexeddb/mozilla/cursor-mutation-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/cursor-mutation-private.html: Added.
+        * storage/indexeddb/mozilla/cursor-update-updates-indexes-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/cursor-update-updates-indexes-private.html: Added.
+        * storage/indexeddb/mozilla/cursors-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/cursors-private.html: Added.
+        * storage/indexeddb/mozilla/delete-result-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/delete-result-private.html: Added.
+        * storage/indexeddb/mozilla/event-source-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/event-source-private.html: Added.
+        * storage/indexeddb/mozilla/global-data-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/global-data-private.html: Added.
+        * storage/indexeddb/mozilla/index-prev-no-duplicate-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/index-prev-no-duplicate-private.html: Added.
+        * storage/indexeddb/mozilla/indexes-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/indexes-private.html: Added.
+        * storage/indexeddb/mozilla/key-requirements-delete-null-key-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/key-requirements-delete-null-key-private.html: Added.
+        * storage/indexeddb/mozilla/key-requirements-inline-and-passed-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/key-requirements-inline-and-passed-private.html: Added.
+        * storage/indexeddb/mozilla/key-requirements-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/key-requirements-private.html: Added.
+        * storage/indexeddb/mozilla/key-requirements-put-no-key-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/key-requirements-put-no-key-private.html: Added.
+        * storage/indexeddb/mozilla/key-requirements-put-null-key-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/key-requirements-put-null-key-private.html: Added.
+        * storage/indexeddb/mozilla/object-cursors-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/object-cursors-private.html: Added.
+        * storage/indexeddb/mozilla/object-identity-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/object-identity-private.html: Added.
+        * storage/indexeddb/mozilla/object-store-inline-autoincrement-key-added-on-put-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/object-store-inline-autoincrement-key-added-on-put-private.html: Added.
+        * storage/indexeddb/mozilla/object-store-remove-values-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/object-store-remove-values-private.html: Added.
+        * storage/indexeddb/mozilla/objectstorenames-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/objectstorenames-private.html: Added.
+        * storage/indexeddb/mozilla/odd-result-order-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/odd-result-order-private.html: Added.
+        * storage/indexeddb/mozilla/open-database-null-name-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/open-database-null-name-private.html: Added.
+        * storage/indexeddb/mozilla/put-get-values-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/put-get-values-private.html: Added.
+        * storage/indexeddb/mozilla/readonly-transactions-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/readonly-transactions-private.html: Added.
+        * storage/indexeddb/mozilla/readwrite-transactions-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/readwrite-transactions-private.html: Added.
+        * storage/indexeddb/mozilla/readyState-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/readyState-private.html: Added.
+        * storage/indexeddb/mozilla/remove-index-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/remove-index-private.html: Added.
+        * storage/indexeddb/mozilla/remove-objectstore-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/remove-objectstore-private.html: Added.
+        * storage/indexeddb/mozilla/versionchange-abort-private-expected.txt: Added.
+        * storage/indexeddb/mozilla/versionchange-abort-private.html: Added.
+        * storage/indexeddb/noblobs-private-expected.txt: Added.
+        * storage/indexeddb/noblobs-private.html: Added.
+        * storage/indexeddb/object-lookups-in-versionchange-private-expected.txt: Added.
+        * storage/indexeddb/object-lookups-in-versionchange-private.html: Added.
+        * storage/indexeddb/open-bad-versions-private-expected.txt: Added.
+        * storage/indexeddb/open-bad-versions-private.html: Added.
+        * storage/indexeddb/optional-arguments-private-expected.txt: Added.
+        * storage/indexeddb/optional-arguments-private.html: Added.
+        * storage/indexeddb/pending-version-change-stuck-works-with-terminate-private-expected.txt: Added.
+        * storage/indexeddb/pending-version-change-stuck-works-with-terminate-private.html: Added.
+        * storage/indexeddb/prefetch-invalidation-private-expected.txt: Added.
+        * storage/indexeddb/prefetch-invalidation-private.html: Added.
+        * storage/indexeddb/prefetch-race-private-expected.txt: Added.
+        * storage/indexeddb/prefetch-race-private.html: Added.
+        * storage/indexeddb/primary-key-unique-to-objectstore-private-expected.txt: Added.
+        * storage/indexeddb/primary-key-unique-to-objectstore-private.html: Added.
+        * storage/indexeddb/request-leak-private-expected.txt: Added.
+        * storage/indexeddb/request-leak-private.html: Added.
+        * storage/indexeddb/request-result-cache-private-expected.txt: Added.
+        * storage/indexeddb/request-result-cache-private.html: Added.
+        * storage/indexeddb/resources/primary-key-unique-to-objectstore.js:
+        * storage/indexeddb/resources/shared.js:
+        * storage/indexeddb/resources/version-change-event-basic.js:
+        * storage/indexeddb/structured-clone-private-expected.txt: Added.
+        * storage/indexeddb/structured-clone-private.html: Added.
+        * storage/indexeddb/transaction-complete-with-js-recursion-cross-frame-private-expected.txt: Added.
+        * storage/indexeddb/transaction-complete-with-js-recursion-cross-frame-private.html: Added.
+        * storage/indexeddb/transaction-complete-with-js-recursion-private-expected.txt: Added.
+        * storage/indexeddb/transaction-complete-with-js-recursion-private.html: Added.
+        * storage/indexeddb/transaction-crash-in-tasks-private-expected.txt: Added.
+        * storage/indexeddb/transaction-crash-in-tasks-private.html: Added.
+        * storage/indexeddb/transaction-ordering-private-expected.txt: Added.
+        * storage/indexeddb/transaction-ordering-private.html: Added.
+        * storage/indexeddb/transaction-overlapping-private-expected.txt: Added.
+        * storage/indexeddb/transaction-overlapping-private.html: Added.
+        * storage/indexeddb/transaction-starvation-private-expected.txt: Removed.
+        * storage/indexeddb/version-change-event-basic-private-expected.txt: Added.
+        * storage/indexeddb/version-change-event-basic-private.html: Added.
+        * storage/indexeddb/version-change-event-private-expected.txt: Added.
+        * storage/indexeddb/version-change-event-private.html: Added.
+
</ins><span class="cx"> 2016-01-20  Ryan Haddad  &lt;ryanhaddad@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Update ios-simulator specific -expected.txt files after most recent WPT revision in r194580
</span></span></pre></div>
<a id="trunkLayoutTestsTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/TestExpectations (195393 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/TestExpectations        2016-01-21 01:49:12 UTC (rev 195393)
+++ trunk/LayoutTests/TestExpectations        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -671,6 +671,7 @@
</span><span class="cx"> webkit.org/b/145390 storage/indexeddb/removed.html [ Failure ]
</span><span class="cx"> webkit.org/b/145390 storage/indexeddb/removed-private.html [ Failure ]
</span><span class="cx"> 
</span><ins>+webkit.org/b/145390 storage/indexeddb/deleteIndex-bug110792-private.html [ Pass Failure ]
</ins><span class="cx"> webkit.org/b/145390 storage/indexeddb/deleteIndex-bug110792.html [ Pass Failure ]
</span><span class="cx"> 
</span><span class="cx"> # DumpRenderTree does not allow GIFs to animate, thus animated GIF tests don't work in WebKit1.
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk1TestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk1/TestExpectations (195393 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk1/TestExpectations        2016-01-21 01:49:12 UTC (rev 195393)
+++ trunk/LayoutTests/platform/mac-wk1/TestExpectations        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -88,11 +88,15 @@
</span><span class="cx"> storage/indexeddb/open-db-private-browsing.html [ Failure ]
</span><span class="cx"> 
</span><span class="cx"> # Relies on internals.observeGC
</span><ins>+storage/indexeddb/connection-leak-private.html [ Skip ]
</ins><span class="cx"> storage/indexeddb/connection-leak.html [ Skip ]
</span><ins>+storage/indexeddb/cursor-leak-private.html [ Failure ]
</ins><span class="cx"> storage/indexeddb/cursor-leak.html [ Failure ]
</span><ins>+storage/indexeddb/cursor-request-cycle-private.html [ Failure ]
</ins><span class="cx"> storage/indexeddb/cursor-request-cycle.html [ Failure ]
</span><ins>+storage/indexeddb/delete-closed-database-object-private.html [ Skip ]
</ins><span class="cx"> storage/indexeddb/delete-closed-database-object.html [ Skip ]
</span><del>-storage/indexeddb/delete-closed-database-object-private.html [ Skip ]
</del><ins>+storage/indexeddb/request-leak-private.html [ Failure ]
</ins><span class="cx"> storage/indexeddb/request-leak.html [ Failure ]
</span><span class="cx"> 
</span><span class="cx"> # No workers support in Modern IDB yet
</span><span class="lines">@@ -101,19 +105,21 @@
</span><span class="cx"> storage/indexeddb/basics-workers.html
</span><span class="cx"> storage/indexeddb/cursor-advance-workers.html
</span><span class="cx"> storage/indexeddb/deletedatabase-delayed-by-open-and-versionchange-workers.html
</span><ins>+storage/indexeddb/dont-commit-on-blocked-private.html
</ins><span class="cx"> storage/indexeddb/dont-commit-on-blocked.html
</span><span class="cx"> storage/indexeddb/factory-basics-workers.html
</span><span class="cx"> storage/indexeddb/index-basics-workers.html
</span><span class="cx"> storage/indexeddb/objectstore-basics-workers.html
</span><span class="cx"> storage/indexeddb/open-twice-workers.html
</span><span class="cx"> storage/indexeddb/pending-activity-workers.html
</span><ins>+storage/indexeddb/pending-version-change-on-exit-private.html
</ins><span class="cx"> storage/indexeddb/pending-version-change-on-exit.html
</span><del>-storage/indexeddb/pending-version-change-on-exit-private.html
</del><ins>+storage/indexeddb/pending-version-change-stuck-private.html
+storage/indexeddb/pending-version-change-stuck-works-with-terminate-private.html
</ins><span class="cx"> storage/indexeddb/pending-version-change-stuck-works-with-terminate.html
</span><span class="cx"> storage/indexeddb/pending-version-change-stuck.html
</span><del>-storage/indexeddb/pending-version-change-stuck-private.html
</del><ins>+storage/indexeddb/transaction-complete-workers-private.html
</ins><span class="cx"> storage/indexeddb/transaction-complete-workers.html
</span><del>-storage/indexeddb/transaction-complete-workers-private.html
</del><span class="cx"> storage/indexeddb/unprefix-workers.html
</span><span class="cx"> 
</span><span class="cx"> # Need a different way to get database names to the web inspector
</span></span></pre></div>
<a id="trunkLayoutTestsplatformwk2TestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/wk2/TestExpectations (195393 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/wk2/TestExpectations        2016-01-21 01:49:12 UTC (rev 195393)
+++ trunk/LayoutTests/platform/wk2/TestExpectations        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -726,6 +726,9 @@
</span><span class="cx"> # Legacy IndexedDB will never properly support IDB in private browsing
</span><span class="cx"> storage/indexeddb/aborted-versionchange-closes-private.html
</span><span class="cx"> storage/indexeddb/basics-private.html
</span><ins>+storage/indexeddb/clone-exception-private.html
+storage/indexeddb/closed-cursor-private.html
+storage/indexeddb/connection-leak-private.html
</ins><span class="cx"> storage/indexeddb/create-and-remove-object-store-private.html
</span><span class="cx"> storage/indexeddb/create-object-store-options-private.html
</span><span class="cx"> storage/indexeddb/createIndex-after-failure-private.html
</span><span class="lines">@@ -734,6 +737,7 @@
</span><span class="cx"> storage/indexeddb/cursor-added-bug-private.html
</span><span class="cx"> storage/indexeddb/cursor-advance-private.html
</span><span class="cx"> storage/indexeddb/cursor-basics-private.html
</span><ins>+storage/indexeddb/cursor-cast-private.html
</ins><span class="cx"> storage/indexeddb/cursor-continue-dir-private.html
</span><span class="cx"> storage/indexeddb/cursor-continue-private.html
</span><span class="cx"> storage/indexeddb/cursor-continue-validity-private.html
</span><span class="lines">@@ -742,9 +746,12 @@
</span><span class="cx"> storage/indexeddb/cursor-inconsistency-private.html
</span><span class="cx"> storage/indexeddb/cursor-index-delete-private.html
</span><span class="cx"> storage/indexeddb/cursor-key-order-private.html
</span><ins>+storage/indexeddb/cursor-leak-private.html
+storage/indexeddb/cursor-overloads-private.html
</ins><span class="cx"> storage/indexeddb/cursor-prev-no-duplicate-private.html
</span><span class="cx"> storage/indexeddb/cursor-primary-key-order-private.html
</span><span class="cx"> storage/indexeddb/cursor-properties-private.html
</span><ins>+storage/indexeddb/cursor-request-cycle-private.html
</ins><span class="cx"> storage/indexeddb/cursor-reverse-bug-private.html
</span><span class="cx"> storage/indexeddb/cursor-skip-deleted-private.html
</span><span class="cx"> storage/indexeddb/cursor-update-private.html
</span><span class="lines">@@ -762,13 +769,16 @@
</span><span class="cx"> storage/indexeddb/delete-in-upgradeneeded-close-in-open-success-private.html
</span><span class="cx"> storage/indexeddb/delete-in-upgradeneeded-close-in-versionchange-private.html
</span><span class="cx"> storage/indexeddb/delete-range-private.html
</span><del>-storage/indexeddb/deleteIndex-private.html
-storage/indexeddb/deleteObjectStore-name-argument-required-private.html
-storage/indexeddb/deleteObjectStore-null-name-private.html
</del><span class="cx"> storage/indexeddb/deleted-objects-private.html
</span><span class="cx"> storage/indexeddb/deletedatabase-blocked-private.html
</span><span class="cx"> storage/indexeddb/deletedatabase-delayed-by-open-and-versionchange-private.html
</span><span class="cx"> storage/indexeddb/deletedatabase-not-blocked-private.html
</span><ins>+storage/indexeddb/deletedatabase-transaction-private.html
+storage/indexeddb/deleteIndex-bug110792-private.html
+storage/indexeddb/deleteIndex-private.html
+storage/indexeddb/deleteObjectStore-name-argument-required-private.html
+storage/indexeddb/deleteObjectStore-null-name-private.html
+storage/indexeddb/dont-commit-on-blocked-private.html
</ins><span class="cx"> storage/indexeddb/dont-wedge-private.html
</span><span class="cx"> storage/indexeddb/duplicates-private.html
</span><span class="cx"> storage/indexeddb/error-causes-abort-by-default-private.html
</span><span class="lines">@@ -820,48 +830,103 @@
</span><span class="cx"> storage/indexeddb/keypath-intrinsic-properties-private.html
</span><span class="cx"> storage/indexeddb/keyrange-private.html
</span><span class="cx"> storage/indexeddb/keyrange-required-arguments-private.html
</span><ins>+storage/indexeddb/lazy-index-population-private.html
</ins><span class="cx"> storage/indexeddb/lazy-index-types-private.html
</span><span class="cx"> storage/indexeddb/legacy-constants-private.html
</span><span class="cx"> storage/indexeddb/list-ordering-private.html
</span><span class="cx"> storage/indexeddb/metadata-private.html
</span><ins>+storage/indexeddb/metadata-race-private.html
+storage/indexeddb/mozilla/add-twice-failure-private.html
+storage/indexeddb/mozilla/autoincrement-indexes-private.html
+storage/indexeddb/mozilla/bad-keypath-private.html
+storage/indexeddb/mozilla/clear-private.html
+storage/indexeddb/mozilla/create-index-unique-private.html
+storage/indexeddb/mozilla/create-index-with-integer-keys-private.html
+storage/indexeddb/mozilla/create-objectstore-basics-private.html
+storage/indexeddb/mozilla/create-objectstore-null-name-private.html
+storage/indexeddb/mozilla/cursor-mutation-objectstore-only-private.html
+storage/indexeddb/mozilla/cursor-mutation-private.html
+storage/indexeddb/mozilla/cursor-update-updates-indexes-private.html
+storage/indexeddb/mozilla/cursors-private.html
+storage/indexeddb/mozilla/delete-result-private.html
+storage/indexeddb/mozilla/event-source-private.html
+storage/indexeddb/mozilla/global-data-private.html
+storage/indexeddb/mozilla/index-prev-no-duplicate-private.html
+storage/indexeddb/mozilla/indexes-private.html
+storage/indexeddb/mozilla/key-requirements-delete-null-key-private.html
+storage/indexeddb/mozilla/key-requirements-inline-and-passed-private.html
+storage/indexeddb/mozilla/key-requirements-private.html
+storage/indexeddb/mozilla/key-requirements-put-no-key-private.html
+storage/indexeddb/mozilla/key-requirements-put-null-key-private.html
+storage/indexeddb/mozilla/object-cursors-private.html
+storage/indexeddb/mozilla/object-identity-private.html
+storage/indexeddb/mozilla/object-store-inline-autoincrement-key-added-on-put-private.html
+storage/indexeddb/mozilla/object-store-remove-values-private.html
+storage/indexeddb/mozilla/objectstorenames-private.html
+storage/indexeddb/mozilla/odd-result-order-private.html
+storage/indexeddb/mozilla/open-database-null-name-private.html
+storage/indexeddb/mozilla/put-get-values-private.html
+storage/indexeddb/mozilla/readonly-transactions-private.html
+storage/indexeddb/mozilla/readwrite-transactions-private.html
+storage/indexeddb/mozilla/readyState-private.html
+storage/indexeddb/mozilla/remove-index-private.html
+storage/indexeddb/mozilla/remove-objectstore-private.html
+storage/indexeddb/mozilla/versionchange-abort-private.html
</ins><span class="cx"> storage/indexeddb/mutating-cursor-private.html
</span><del>-storage/indexeddb/objectStore-required-arguments-private.html
</del><ins>+storage/indexeddb/noblobs-private.html
+storage/indexeddb/object-lookups-in-versionchange-private.html
</ins><span class="cx"> storage/indexeddb/objectstore-autoincrement-private.html
</span><span class="cx"> storage/indexeddb/objectstore-basics-private.html
</span><span class="cx"> storage/indexeddb/objectstore-clear-private.html
</span><span class="cx"> storage/indexeddb/objectstore-count-private.html
</span><span class="cx"> storage/indexeddb/objectstore-cursor-private.html
</span><span class="cx"> storage/indexeddb/objectstore-removeobjectstore-private.html
</span><ins>+storage/indexeddb/objectStore-required-arguments-private.html
</ins><span class="cx"> storage/indexeddb/odd-strings-private.html
</span><ins>+storage/indexeddb/open-bad-versions-private.html
</ins><span class="cx"> storage/indexeddb/open-cursor-private.html
</span><ins>+storage/indexeddb/open-db-private-browsing.html
</ins><span class="cx"> storage/indexeddb/open-during-transaction-private.html
</span><span class="cx"> storage/indexeddb/open-ordering-private.html
</span><span class="cx"> storage/indexeddb/opencursor-key-private.html
</span><ins>+storage/indexeddb/optional-arguments-private.html
</ins><span class="cx"> storage/indexeddb/pending-activity-private.html
</span><span class="cx"> storage/indexeddb/pending-version-change-on-exit-private.html
</span><span class="cx"> storage/indexeddb/pending-version-change-stuck-private.html
</span><ins>+storage/indexeddb/pending-version-change-stuck-works-with-terminate-private.html
</ins><span class="cx"> storage/indexeddb/persistence-private.html
</span><span class="cx"> storage/indexeddb/prefetch-bugfix-108071-private.html
</span><ins>+storage/indexeddb/prefetch-invalidation-private.html
+storage/indexeddb/prefetch-race-private.html
+storage/indexeddb/primary-key-unique-to-objectstore-private.html
</ins><span class="cx"> storage/indexeddb/queued-commands-private.html
</span><span class="cx"> storage/indexeddb/readonly-private.html
</span><span class="cx"> storage/indexeddb/readonly-properties-private.html
</span><span class="cx"> storage/indexeddb/removed-private.html
</span><span class="cx"> storage/indexeddb/request-continue-abort-private.html
</span><span class="cx"> storage/indexeddb/request-event-propagation-private.html
</span><ins>+storage/indexeddb/request-leak-private.html
+storage/indexeddb/request-result-cache-private.html
</ins><span class="cx"> storage/indexeddb/set_version_blocked-private.html
</span><span class="cx"> storage/indexeddb/setversion-blocked-by-versionchange-close-private.html
</span><span class="cx"> storage/indexeddb/setversion-not-blocked-private.html
</span><ins>+storage/indexeddb/structured-clone-private.html
</ins><span class="cx"> storage/indexeddb/transaction-abort-private.html
</span><span class="cx"> storage/indexeddb/transaction-active-flag-private.html
</span><span class="cx"> storage/indexeddb/transaction-after-close-private.html
</span><span class="cx"> storage/indexeddb/transaction-and-objectstore-calls-private.html
</span><span class="cx"> storage/indexeddb/transaction-basics-private.html
</span><ins>+storage/indexeddb/transaction-complete-with-js-recursion-cross-frame-private.html
+storage/indexeddb/transaction-complete-with-js-recursion-private.html
</ins><span class="cx"> storage/indexeddb/transaction-complete-workers-private.html
</span><span class="cx"> storage/indexeddb/transaction-coordination-across-databases-private.html
</span><span class="cx"> storage/indexeddb/transaction-coordination-within-database-private.html
</span><ins>+storage/indexeddb/transaction-crash-in-tasks-private.html
</ins><span class="cx"> storage/indexeddb/transaction-crash-on-abort-private.html
</span><span class="cx"> storage/indexeddb/transaction-error-private.html
</span><span class="cx"> storage/indexeddb/transaction-event-propagation-private.html
</span><ins>+storage/indexeddb/transaction-ordering-private.html
+storage/indexeddb/transaction-overlapping-private.html
</ins><span class="cx"> storage/indexeddb/transaction-read-only-private.html
</span><span class="cx"> storage/indexeddb/transaction-readwrite-exclusive-private.html
</span><span class="cx"> storage/indexeddb/transaction-rollback-private.html
</span><span class="lines">@@ -871,10 +936,13 @@
</span><span class="cx"> storage/indexeddb/unprefix-private.html
</span><span class="cx"> storage/indexeddb/value-undefined-private.html
</span><span class="cx"> storage/indexeddb/values-odd-types-private.html
</span><del>-storage/indexeddb/versionchangerequest-activedomobject-private.html
</del><span class="cx"> storage/indexeddb/version-change-abort-private.html
</span><ins>+storage/indexeddb/version-change-event-basic-private.html
+storage/indexeddb/version-change-event-private.html
</ins><span class="cx"> storage/indexeddb/version-change-exclusive-private.html
</span><ins>+storage/indexeddb/versionchangerequest-activedomobject-private.html
</ins><span class="cx"> 
</span><ins>+
</ins><span class="cx"> ### END OF (4) Features that are not supported in WebKit2 and likely never will be
</span><span class="cx"> ########################################
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbcloneexceptionprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/clone-exception-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/clone-exception-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/clone-exception-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,39 @@
</span><ins>+Ensure DataCloneError is consistently thrown by IndexedDB methods
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+
+doFirstOpen():
+indexedDB.open(dbname + '1')
+
+onUpgradeNeeded():
+Expecting exception from db.createObjectStore('store').put(NON_CLONEABLE, 0);
+PASS Exception was thrown.
+PASS code is 25
+PASS ename is 'DataCloneError'
+Exception message: Failed to store record in an IDBObjectStore: An object could not be cloned.
+
+doSecondOpen():
+indexedDB.open(dbname + '2')
+
+onUpgradeNeeded():
+Expecting exception from db.createObjectStore('store').put(NON_CLONEABLE, 0);
+PASS Exception was thrown.
+PASS code is 25
+PASS ename is 'DataCloneError'
+Exception message: Failed to store record in an IDBObjectStore: An object could not be cloned.
+
+doThirdOpen():
+indexedDB.open(dbname + '3')
+
+onUpgradeNeeded():
+Expecting exception from db.createObjectStore('store').put(NON_CLONEABLE, INVALID_KEY);
+PASS Exception was thrown.
+PASS code is 25
+PASS ename is 'DataCloneError'
+Exception message: Failed to store record in an IDBObjectStore: An object could not be cloned.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbcloneexceptionprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/clone-exception-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/clone-exception-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/clone-exception-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/clone-exception.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbclosedcursorprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/closed-cursor-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/closed-cursor-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/closed-cursor-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,33 @@
</span><ins>+Verify that that cursors accessed after being closed are well behaved
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+
+prepareDatabase():
+db = event.target.result
+store = db.createObjectStore('store')
+store.put({value: 'value'}, ['key'])
+
+onOpen():
+db = event.target.result
+tx = db.transaction('store')
+store = tx.objectStore('store')
+cursorRequest = store.openCursor()
+
+openCursorSuccess():
+cursor = cursorRequest.result
+Don't continue the cursor, so it retains its key/primaryKey/value
+
+transactionComplete():
+PASS JSON.stringify(cursor.key) is &quot;[\&quot;key\&quot;]&quot;
+PASS JSON.stringify(cursor.primaryKey) is &quot;[\&quot;key\&quot;]&quot;
+PASS JSON.stringify(cursor.value) is &quot;{\&quot;value\&quot;:\&quot;value\&quot;}&quot;
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbclosedcursorprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/closed-cursor-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/closed-cursor-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/closed-cursor-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/closed-cursor.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbconnectionleakprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/connection-leak-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/connection-leak-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/connection-leak-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,44 @@
</span><ins>+Regression test to ensure that IndexedDB connections don't leak
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+dbname = &quot;connection-leak.html&quot;
+
+doFirstOpen():
+request = indexedDB.open(dbname, 1)
+sawUpgradeNeeded1 = false
+
+onUpgradeNeeded1():
+sawUpgradeNeeded1 = true
+
+onOpenSuccess1():
+PASS sawUpgradeNeeded1 is true
+db = request.result
+db.close()
+
+doSecondOpen():
+request = indexedDB.open(dbname, 1)
+
+onOpenSuccess2():
+db = request.result
+db = null
+request = null
+Run GC outside of request's callback via setTimeout()
+window.gc()
+
+doThirdOpen():
+request = indexedDB.open(dbname, 2)
+sawUpgradeNeeded3 = false
+
+onUpgradeNeeded2():
+sawUpgradeNeeded3 = true
+
+onOpenSuccess3():
+PASS sawUpgradeNeeded3 is true
+db = request.result
+db.close()
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbconnectionleakprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/connection-leak-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/connection-leak-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/connection-leak-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/connection-leak.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbcursorcastprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/cursor-cast-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/cursor-cast-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/cursor-cast-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,31 @@
</span><ins>+Ensure cursor wrappers are created correctly.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+
+prepareDatabase():
+db = event.target.result
+store = db.createObjectStore('store')
+store.put(0, 0)
+
+verifyWrappers():
+db = event.target.result
+tx = db.transaction('store', 'readwrite')
+request = tx.objectStore('store').openCursor()
+
+onOpenCursorSuccess():
+cursor = event.target.result
+request = cursor.update(1)
+
+onUpdateSuccess():
+cursor = null
+PASS request.source.toString() is &quot;[object IDBCursorWithValue]&quot;
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbcursorcastprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/cursor-cast-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/cursor-cast-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/cursor-cast-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/cursor-cast.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbcursorleakprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/cursor-leak-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/cursor-leak-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/cursor-leak-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,15 @@
</span><ins>+Verify that that cursors weakly hold script value properties
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+dbname = &quot;cursor-leak.html&quot;
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+PASS cursorObserver.wasCollected is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbcursorleakprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/cursor-leak-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/cursor-leak-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/cursor-leak-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/cursor-leak.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbcursoroverloadsprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/cursor-overloads-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/cursor-overloads-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/cursor-overloads-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,120 @@
</span><ins>+Validate the overloads of IDBObjectStore.openCursor(), IDBIndex.openCursor() and IDBIndex.openKeyCursor().
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+store = db.createObjectStore('store')
+index = store.createIndex('index', 'value')
+store.put({value: 0}, 0)
+
+verifyOverloads():
+trans = db.transaction('store')
+store = trans.objectStore('store')
+index = store.index('index')
+store.openCursor()
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;next&quot;
+store.openCursor(0)
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;next&quot;
+store.openCursor(0, 'next')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;next&quot;
+store.openCursor(0, 'nextunique')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;nextunique&quot;
+store.openCursor(0, 'prev')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;prev&quot;
+store.openCursor(0, 'prevunique')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;prevunique&quot;
+store.openCursor(IDBKeyRange.only(0))
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;next&quot;
+store.openCursor(IDBKeyRange.only(0), 'next')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;next&quot;
+store.openCursor(IDBKeyRange.only(0), 'nextunique')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;nextunique&quot;
+store.openCursor(IDBKeyRange.only(0), 'prev')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;prev&quot;
+store.openCursor(IDBKeyRange.only(0), 'prevunique')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;prevunique&quot;
+index.openCursor()
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;next&quot;
+index.openCursor(0)
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;next&quot;
+index.openCursor(0, 'next')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;next&quot;
+index.openCursor(0, 'nextunique')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;nextunique&quot;
+index.openCursor(0, 'prev')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;prev&quot;
+index.openCursor(0, 'prevunique')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;prevunique&quot;
+index.openCursor(IDBKeyRange.only(0))
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;next&quot;
+index.openCursor(IDBKeyRange.only(0), 'next')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;next&quot;
+index.openCursor(IDBKeyRange.only(0), 'nextunique')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;nextunique&quot;
+index.openCursor(IDBKeyRange.only(0), 'prev')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;prev&quot;
+index.openCursor(IDBKeyRange.only(0), 'prevunique')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;prevunique&quot;
+index.openKeyCursor()
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;next&quot;
+index.openKeyCursor(0)
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;next&quot;
+index.openKeyCursor(0, 'next')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;next&quot;
+index.openKeyCursor(0, 'nextunique')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;nextunique&quot;
+index.openKeyCursor(0, 'prev')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;prev&quot;
+index.openKeyCursor(0, 'prevunique')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;prevunique&quot;
+index.openKeyCursor(IDBKeyRange.only(0))
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;next&quot;
+index.openKeyCursor(IDBKeyRange.only(0), 'next')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;next&quot;
+index.openKeyCursor(IDBKeyRange.only(0), 'nextunique')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;nextunique&quot;
+index.openKeyCursor(IDBKeyRange.only(0), 'prev')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;prev&quot;
+index.openKeyCursor(IDBKeyRange.only(0), 'prevunique')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is &quot;prevunique&quot;
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbcursoroverloadsprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/cursor-overloads-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/cursor-overloads-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/cursor-overloads-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/cursor-overloads.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbcursorrequestcycleprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/cursor-request-cycle-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/cursor-request-cycle-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/cursor-request-cycle-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,63 @@
</span><ins>+Verify that that cursors weakly hold request, and work if request is GC'd
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+dbname = &quot;cursor-request-cycle.html&quot;
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+
+prepareDatabase():
+db = event.target.result
+store = db.createObjectStore('store')
+
+onOpen():
+db = event.target.result
+tx = db.transaction('store')
+store = tx.objectStore('store')
+cursorRequest = store.openCursor()
+otherRequest = store.get(0)
+
+openCursorRequestSuccess():
+Result will be checked later, to ensure that lazy access is safe
+
+otherRequestSuccess():
+Verify that the request's result can be accessed lazily:
+gc()
+cursor = cursorRequest.result
+PASS cursor is non-null.
+PASS cursor.key is &quot;key1&quot;
+PASS cursor.value is &quot;value1&quot;
+cursorRequest.extra = 123
+cursor.extra = 456
+Ensure request is not released if cursor is still around.
+cursorRequest = null
+gc()
+PASS cursorRequestObservation.wasCollected is false
+cursor.continue()
+cursor = null
+gc()
+PASS cursorObservation.wasCollected is false
+finalRequest = store.get(0)
+
+cursorContinueSuccess():
+cursor = event.target.result
+PASS cursor is non-null.
+PASS cursor.key is &quot;key2&quot;
+PASS cursor.value is &quot;value2&quot;
+PASS event.target.extra is 123
+PASS cursor.extra is 456
+
+finalRequestSuccess():
+PASS cursor.key is &quot;key2&quot;
+PASS cursor.value is &quot;value2&quot;
+cursor = null
+gc()
+PASS cursorRequestObservation.wasCollected is true
+PASS cursorObservation.wasCollected is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbcursorrequestcycleprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/cursor-request-cycle-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/cursor-request-cycle-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/cursor-request-cycle-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/cursor-request-cycle.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbdeleteIndexbug110792privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/deleteIndex-bug110792-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/deleteIndex-bug110792-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/deleteIndex-bug110792-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,34 @@
</span><ins>+Ensure IndexedDB's IDBObjectStore.deleteIndex() works if IDBIndex object has not been fetched - regression test for bug 110792.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+dbname = &quot;deleteIndex-bug110792.html&quot;
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname, 1)
+
+onFirstUpgradeNeeded():
+db = event.target.result
+store = db.createObjectStore('store')
+store.createIndex('index', 'keyPath')
+
+closeAndReOpen():
+db.close()
+
+indexedDB.open(dbname, 2)
+
+onSecondUpgradeNeeded():
+db = event.target.result
+store = event.target.transaction.objectStore('store')
+store.deleteIndex('index')
+Expecting exception from store.index('index')
+PASS Exception was thrown.
+PASS code is DOMException.NOT_FOUND_ERR
+PASS ename is 'NotFoundError'
+Exception message: NotFoundError: DOM IDBDatabase Exception 8
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbdeleteIndexbug110792privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/deleteIndex-bug110792-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/deleteIndex-bug110792-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/deleteIndex-bug110792-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/deleteIndex-bug110792.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbdeletedatabasedelayedbyversionchangeprivateexpectedtxt"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/storage/indexeddb/deletedatabase-delayed-by-versionchange-private-expected.txt (195393 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/deletedatabase-delayed-by-versionchange-private-expected.txt        2016-01-21 01:49:12 UTC (rev 195393)
+++ trunk/LayoutTests/storage/indexeddb/deletedatabase-delayed-by-versionchange-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -1,69 +0,0 @@
</span><del>-Test the order when there are pending setVersion, delete and open calls.
-
-On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
-
-
-indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
-
-indexedDB.deleteDatabase(dbname)
-indexedDB.open(dbname)
-
-h1OpenSuccess():
-setVersionBlockedEventFired = false
-versionChangeComplete = false
-deleteDatabaseBlockedEventFired = false
-deleteDatabaseComplete = false
-h1 = event.target.result
-Open h2:
-indexedDB.open(dbname)
-
-h2OpenSuccess():
-Try to open h3:
-indexedDB.open(dbname, 2)
-indexedDB.deleteDatabase(dbname)
-
-h1OnVersionChange():
-PASS event.target.version is 1
-PASS event.oldVersion is 1
-PASS event.newVersion is 2
-
-h2OnVersionChange():
-PASS event.target.version is 1
-PASS event.oldVersion is 1
-PASS event.newVersion is 2
-
-h3Blocked():
-setVersionBlockedEventFired = true
-Try to open h4:
-indexedDB.open(dbname)
-h2.close()
-
-h1SecondOnVersionChange():
-PASS event.target.version is 1
-PASS event.oldVersion is 1
-PASS event.newVersion is null
-
-deleteDatabaseOnBlocked():
-deleteDatabaseBlockedEventFired = true
-h1.close()
-
-h3OnUpgradeneeded():
-
-transactionOnComplete():
-versionChangeComplete = true
-
-h3OpenSuccess():
-h3.close()
-
-deleteDatabaseOnSuccess():
-deleteDatabaseComplete = true
-
-h4OpenSuccess():
-PASS setVersionBlockedEventFired is true
-PASS versionChangeComplete is true
-PASS deleteDatabaseBlockedEventFired is true
-PASS deleteDatabaseComplete is true
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
</del></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbdeletedatabasetransactionprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/deletedatabase-transaction-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/deletedatabase-transaction-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/deletedatabase-transaction-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,23 @@
</span><ins>+Ensure deleteDatabase() can run concurrently with transactions in other databases
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+db.createObjectStore('store')
+
+Start a transaction against the first database:
+trans = db.transaction('store', 'readonly')
+trans.objectStore('store').get(0)
+
+Delete a different database:
+dbname2 = dbname + '2'
+indexedDB.deleteDatabase(dbname2)
+PASS success event was fired at delete request
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbdeletedatabasetransactionprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/deletedatabase-transaction-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/deletedatabase-transaction-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/deletedatabase-transaction-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/deletedatabase-transaction.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbdontcommitonblockedprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/dont-commit-on-blocked-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/dont-commit-on-blocked-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/dont-commit-on-blocked-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,47 @@
</span><ins>+Regression test for WK82678 - don't commit after a blocked event
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+dbname = &quot;dont-commit-on-blocked.html&quot;
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+db.onversionchange = onVersionChange
+store = db.createObjectStore('store1')
+
+holdConnection():
+holding connection until versionchange event
+
+Starting worker: resources/dont-commit-on-blocked-worker.js
+[Worker] indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+[Worker] 
+[Worker] opening database connection
+[Worker] request = indexedDB.open('dont-commit-on-blocked.html', 2)
+[Worker] state = 'setversion'
+[Worker] request.onblocked = onSetVersionBlocked
+[Worker] request.onupgradeneeded = onSetVersionSuccess
+[Worker] spinning for 100ms to let events be queued but prevent dispatch
+[Worker] done spinning
+[Worker] 
+[Worker] onSetVersionBlocked():
+PASS [Worker] state is &quot;setversion&quot;
+[Worker] state = 'blocked'
+[Worker] 
+[Worker] onSetVersionSuccess():
+[Worker] db = event.target.result
+PASS [Worker] state is &quot;blocked&quot;
+[Worker] state = 'success'
+[Worker] creating object store - will fail if transaction commited after blocked event
+[Worker] db.createObjectStore('store2')
+[Worker] 
+[Worker] onTransactionComplete
+PASS [Worker] state is &quot;success&quot;
+PASS [Worker] Number(db.version) is 2
+PASS [Worker] db.objectStoreNames.contains('store1') is true
+PASS [Worker] db.objectStoreNames.contains('store2') is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbdontcommitonblockedprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/dont-commit-on-blocked-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/dont-commit-on-blocked-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/dont-commit-on-blocked-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,36 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script&gt;
+
+description(&quot;Regression test for WK82678 - don't commit after a blocked event&quot;);
+
+indexedDBTest(prepareDatabase, holdConnection);
+function prepareDatabase()
+{
+    db = event.target.result;
+    evalAndLog(&quot;db.onversionchange = onVersionChange&quot;);
+    evalAndLog(&quot;store = db.createObjectStore('store1')&quot;);
+}
+
+function holdConnection()
+{
+    debug(&quot;&quot;);
+    debug(&quot;holdConnection():&quot;);
+    debug(&quot;holding connection until versionchange event&quot;);
+    debug(&quot;&quot;);
+    worker = startWorker(&quot;resources/dont-commit-on-blocked-worker.js&quot;);
+}
+
+function onVersionChange(e)
+{
+    // Timing of logging from worker vs. this event is racy, so do not log here.
+    db.close();
+}
+
+&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddblazyindexpopulationprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/lazy-index-population-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/lazy-index-population-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/lazy-index-population-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,81 @@
</span><ins>+Verify edge cases that lazy index population in an IndexedDB implementation might reveal.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Deleted all object stores.
+store = connection.createObjectStore('store')
+store.createIndex('index1', 'name', {unique: true})
+Verify that uniqueness constraints are enforced with a pre-existing index:
+trans = connection.transaction('store', 'readwrite')
+store = trans.objectStore('store')
+request1 = store.put({name: 'bob'}, 1)
+request2 = store.put({name: 'bob'}, 2)
+state = 0
+request1 received success event
+PASS ++state is 1
+request2 received error event
+PASS ++state is 2
+transaction aborted
+PASS ++state is 3
+PASS trans.error.name is 'ConstraintError'
+
+Verify that uniqueness constraints are enforced when index is created before puts:
+connection.close()
+indexedDB.open(dbname, 2)
+deleteAllObjectStores(connection)
+Deleted all object stores.
+store = connection.createObjectStore('store')
+store.createIndex('index2', 'name', {unique: true})
+request1 = store.put({name: 'carol'}, 1)
+request2 = store.put({name: 'carol'}, 2)
+state = 0
+request1 (index2) received success event
+PASS ++state is 1
+request2 (index2) received error event
+PASS ++state is 2
+transaction aborted
+PASS ++state is 3
+PASS trans.error.name is 'ConstraintError'
+
+Verify that uniqueness constraints are enforced when index is created after puts:
+indexedDB.open(dbname, 3)
+deleteAllObjectStores(connection)
+Deleted all object stores.
+store = connection.createObjectStore('store')
+request1 = store.put({name: 'ted'}, 1)
+request2 = store.put({name: 'ted'}, 2)
+store.createIndex('index3', 'name', {unique: true})
+state = 0
+request1 received success event
+PASS ++state is 1
+request2 received success event
+PASS ++state is 2
+transaction aborted
+PASS ++state is 3
+PASS trans.error.name is 'ConstraintError'
+
+Verify that uniqueness constraints are enforced when index is created between puts:
+indexedDB.open(dbname, 4)
+deleteAllObjectStores(connection)
+Deleted all object stores.
+store = connection.createObjectStore('store')
+request1 = store.put({name: 'alice'}, 1)
+store.createIndex('index4', 'name', {unique: true})
+request2 = store.put({name: 'alice'}, 2)
+state = 0
+request1 received success event
+PASS ++state is 1
+request2 received error event
+PASS ++state is 2
+transaction aborted
+PASS ++state is 3
+PASS trans.error.name is 'ConstraintError'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddblazyindexpopulationprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/lazy-index-population-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/lazy-index-population-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/lazy-index-population-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,174 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;script&gt;
+
+description(&quot;Verify edge cases that lazy index population in an IndexedDB implementation might reveal.&quot;);
+
+indexedDBTest(prepareDatabase, verifyPreExistingIndex);
+function prepareDatabase()
+{
+    connection = event.target.result;
+    deleteAllObjectStores(connection);
+    evalAndLog(&quot;store = connection.createObjectStore('store')&quot;);
+    evalAndLog(&quot;store.createIndex('index1', 'name', {unique: true})&quot;);
+}
+
+function verifyPreExistingIndex()
+{
+    debug(&quot;Verify that uniqueness constraints are enforced with a pre-existing index:&quot;);
+    evalAndLog(&quot;trans = connection.transaction('store', 'readwrite')&quot;);
+    evalAndLog(&quot;store = trans.objectStore('store')&quot;);
+    evalAndLog(&quot;request1 = store.put({name: 'bob'}, 1)&quot;);
+    evalAndLog(&quot;request2 = store.put({name: 'bob'}, 2)&quot;);
+    evalAndLog(&quot;state = 0&quot;);
+
+    request1.onerror = unexpectedErrorCallback;
+    request1.onsuccess = function () {
+        debug(&quot;request1 received success event&quot;);
+        shouldBe(&quot;++state&quot;, &quot;1&quot;);
+    };
+
+    request2.onsuccess = unexpectedSuccessCallback;
+    request2.onerror = function () {
+        debug(&quot;request2 received error event&quot;);
+        shouldBe(&quot;++state&quot;, &quot;2&quot;);
+    };
+
+    trans.oncomplete = unexpectedCompleteCallback;
+    trans.onabort = function () {
+        debug(&quot;transaction aborted&quot;);
+        shouldBe(&quot;++state&quot;, &quot;3&quot;);
+        shouldBe(&quot;trans.error.name&quot;, &quot;'ConstraintError'&quot;);
+        verifyCreateThenPut();
+    };
+}
+
+function verifyCreateThenPut()
+{
+    debug(&quot;&quot;);
+    debug(&quot;Verify that uniqueness constraints are enforced when index is created before puts:&quot;);
+
+    evalAndLog(&quot;connection.close()&quot;);
+    request = evalAndLog(&quot;indexedDB.open(dbname, 2)&quot;);
+    request.onerror = verifyPutThenCreate;
+    request.onblocked = unexpectedBlockedCallback;
+    request.onsuccess = unexpectedSuccessCallback;
+    request.onupgradeneeded = function() {
+        connection = request.result;
+        trans = request.transaction;
+
+        evalAndLog(&quot;deleteAllObjectStores(connection)&quot;);
+
+        evalAndLog(&quot;store = connection.createObjectStore('store')&quot;);
+        evalAndLog(&quot;store.createIndex('index2', 'name', {unique: true})&quot;);
+        evalAndLog(&quot;request1 = store.put({name: 'carol'}, 1)&quot;);
+        evalAndLog(&quot;request2 = store.put({name: 'carol'}, 2)&quot;);
+        evalAndLog(&quot;state = 0&quot;);
+
+        request1.onerror = unexpectedErrorCallback;
+        request1.onsuccess = function () {
+            debug(&quot;request1 (index2) received success event&quot;);
+            shouldBe(&quot;++state&quot;, &quot;1&quot;);
+        };
+
+        request2.onsuccess = unexpectedSuccessCallback;
+        request2.onerror = function () {
+            debug(&quot;request2 (index2) received error event&quot;);
+            shouldBe(&quot;++state&quot;, &quot;2&quot;);
+        };
+
+        trans.oncomplete = unexpectedCompleteCallback;
+        trans.onabort = function () {
+            debug(&quot;transaction aborted&quot;);
+            shouldBe(&quot;++state&quot;, &quot;3&quot;);
+            shouldBe(&quot;trans.error.name&quot;, &quot;'ConstraintError'&quot;);
+        };
+    };
+}
+
+function verifyPutThenCreate()
+{
+    debug(&quot;&quot;);
+    debug(&quot;Verify that uniqueness constraints are enforced when index is created after puts:&quot;);
+
+    request = evalAndLog(&quot;indexedDB.open(dbname, 3)&quot;);
+    request.onerror = verifyPutThenCreateThenPut;
+    request.onblocked = unexpectedBlockedCallback;
+    request.onsuccess = unexpectedSuccessCallback;
+    request.onupgradeneeded = function() {
+        connection = request.result;
+        trans = request.transaction;
+
+        evalAndLog(&quot;deleteAllObjectStores(connection)&quot;);
+
+        evalAndLog(&quot;store = connection.createObjectStore('store')&quot;);
+        evalAndLog(&quot;request1 = store.put({name: 'ted'}, 1)&quot;);
+        evalAndLog(&quot;request2 = store.put({name: 'ted'}, 2)&quot;);
+        evalAndLog(&quot;store.createIndex('index3', 'name', {unique: true})&quot;);
+        evalAndLog(&quot;state = 0&quot;);
+
+        request1.onerror = unexpectedErrorCallback;
+        request1.onsuccess = function () {
+            debug(&quot;request1 received success event&quot;);
+            shouldBe(&quot;++state&quot;, &quot;1&quot;);
+        };
+
+        request2.onerror = unexpectedErrorCallback;
+        request2.onsuccess = function () {
+            debug(&quot;request2 received success event&quot;);
+            shouldBe(&quot;++state&quot;, &quot;2&quot;);
+        };
+
+        trans.oncomplete = unexpectedCompleteCallback;
+        trans.onabort = function () {
+            debug(&quot;transaction aborted&quot;);
+            shouldBe(&quot;++state&quot;, &quot;3&quot;);
+            shouldBe(&quot;trans.error.name&quot;, &quot;'ConstraintError'&quot;);
+        };
+    };
+}
+
+function verifyPutThenCreateThenPut()
+{
+    debug(&quot;&quot;);
+    debug(&quot;Verify that uniqueness constraints are enforced when index is created between puts:&quot;);
+
+    request = evalAndLog(&quot;indexedDB.open(dbname, 4)&quot;);
+    request.onerror = finishJSTest;
+    request.onblocked = unexpectedBlockedCallback;
+    request.onsuccess = unexpectedSuccessCallback;
+    request.onupgradeneeded = function() {
+        connection = request.result;
+        trans = request.transaction;
+
+        evalAndLog(&quot;deleteAllObjectStores(connection)&quot;);
+
+        evalAndLog(&quot;store = connection.createObjectStore('store')&quot;);
+        evalAndLog(&quot;request1 = store.put({name: 'alice'}, 1)&quot;);
+        evalAndLog(&quot;store.createIndex('index4', 'name', {unique: true})&quot;);
+        evalAndLog(&quot;request2 = store.put({name: 'alice'}, 2)&quot;);
+        evalAndLog(&quot;state = 0&quot;);
+
+        request1.onerror = unexpectedErrorCallback;
+        request1.onsuccess = function () {
+            debug(&quot;request1 received success event&quot;);
+            shouldBe(&quot;++state&quot;, &quot;1&quot;);
+        };
+
+        request2.onsuccess = unexpectedSuccessCallback;
+        request2.onerror = function () {
+            debug(&quot;request2 received error event&quot;);
+            shouldBe(&quot;++state&quot;, &quot;2&quot;);
+        };
+
+        trans.oncomplete = unexpectedCompleteCallback;
+        trans.onabort = function () {
+            debug(&quot;transaction aborted&quot;);
+            shouldBe(&quot;++state&quot;, &quot;3&quot;);
+            shouldBe(&quot;trans.error.name&quot;, &quot;'ConstraintError'&quot;);
+        };
+    };
+}
+
+&lt;/script&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmetadataraceprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/metadata-race-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/metadata-race-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/metadata-race-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,32 @@
</span><ins>+Ensure IndexedDB transactions created before open onsuccess have correct metadata
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+
+prepareDatabase():
+db = event.target.result
+store = db.createObjectStore('store')
+store.createIndex('index', 'keyPath')
+transaction = event.target.transaction
+PASS index = transaction.objectStore('store').index('index') did not throw exception.
+
+onTransactionComplete():
+In multiprocess mode, 'complete' event may be dispatched before
+the 'success' arrives with updated metadata. Ensure the new metadata
+is still used for transactions.
+store = db.transaction('store').objectStore('store')
+PASS index = store.index('index') did not throw exception.
+
+onOpenSuccess():
+db = event.target.result
+store = db.transaction('store').objectStore('store')
+PASS index = store.index('index') did not throw exception.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmetadataraceprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/metadata-race-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/metadata-race-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/metadata-race-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/metadata-race.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernabortobjectstoreinfoprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/abort-objectstore-info-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/abort-objectstore-info-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/abort-objectstore-info-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,61 @@
</span><ins>+Explores the edge cases of what IDBObjectStore objects look like after a version change transaction that changed them aborts.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+connection1 = event.target.result;
+objectStore1_1 = connection1.createObjectStore('objectStore1');
+objectStore1_2 = connection1.createObjectStore('objectStore2');
+objectStore1_2.createIndex('index', 'foo');
+
+PASS connection1.version is 1
+PASS connection1.objectStoreNames.length is 2
+PASS objectStore1_1.indexNames.length is 0
+PASS objectStore1_2.indexNames.length is 1
+
+connection1.close();
+secondRequest = indexedDB.open(dbname, 2);
+secondRequest.onupgradeneeded = secondUpgradeNeeded;
+connection2 = event.target.result;
+objectStore2_1 = secondRequest.transaction.objectStore('objectStore1');
+objectStore2_2 = secondRequest.transaction.objectStore('objectStore2');
+objectStore2_3 = connection2.createObjectStore('objectStore3');
+
+PASS connection2.version is 2
+PASS connection2.objectStoreNames.length is 3
+PASS objectStore2_1.indexNames.length is 0
+PASS objectStore2_2.indexNames.length is 1
+PASS objectStore2_3.indexNames.length is 0
+
+objectStore2_1.createIndex('index', 'foo');
+objectStore2_2.deleteIndex('index');
+objectStore2_3.createIndex('index', 'foo');
+
+PASS connection2.version is 2
+PASS connection2.objectStoreNames.length is 3
+PASS objectStore2_1.indexNames.length is 1
+PASS objectStore2_2.indexNames.length is 0
+PASS objectStore2_3.indexNames.length is 1
+
+secondRequest.transaction.abort();
+connection2.close()
+
+checkState():
+PASS connection1.version is 1
+PASS connection1.objectStoreNames.length is 2
+PASS objectStore1_1.indexNames.length is 0
+PASS objectStore1_2.indexNames.length is 1
+
+PASS connection2.version is 1
+PASS connection2.objectStoreNames.length is 2
+PASS objectStore2_1.indexNames.length is 0
+PASS objectStore2_2.indexNames.length is 1
+PASS objectStore2_3.indexNames.length is 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernabortobjectstoreinfoprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/abort-objectstore-info-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/abort-objectstore-info-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/abort-objectstore-info-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/abort-objectstore-info.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernabortrequestscancelledprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/abort-requests-cancelled-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/abort-requests-cancelled-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/abort-requests-cancelled-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,34 @@
</span><ins>+This test makes sure that un-handled requests in a transaction receive onerror callbacks when the transaction is aborted.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Error handling: &quot;objectStore.put({ bar: 'A' }, 1);&quot; (error)
+Error handling: &quot;objectStore.put({ bar: 'B' }, 2);&quot; (error)
+Error handling: &quot;objectStore.put({ bar: 'C' }, 3);&quot; (error)
+Initial upgrade versionchange transaction aborted
+Second upgrade needed: Old version - 0 New version - 1
+Success handling: &quot;objectStore.put({ bar: 'A' }, 1);&quot;
+Success handling: &quot;objectStore.put({ bar: 'B' }, 2);&quot;
+Success handling: &quot;objectStore.put({ bar: 'C' }, 3);&quot;
+Second upgrade versionchange transaction completed
+Error handling: &quot;objectStore.get(1);&quot; (error)
+Error handling: &quot;objectStore.get(2);&quot; (error)
+Error handling: &quot;objectStore.get(3);&quot; (error)
+Error handling: &quot;objectStore.put({ bar: 'D' }, 4);&quot; (error)
+Error handling: &quot;objectStore.put({ bar: 'E' }, 5);&quot; (error)
+Error handling: &quot;objectStore.put({ bar: 'F' }, 6);&quot; (error)
+readwrite transaction aborted
+Error handling: &quot;objectStore.get(1);&quot; (error)
+Error handling: &quot;objectStore.get(2);&quot; (error)
+Error handling: &quot;objectStore.get(3);&quot; (error)
+readonly transaction aborted
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernabortrequestscancelledprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/abort-requests-cancelled-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/abort-requests-cancelled-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/abort-requests-cancelled-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/abort-requests-cancelled.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernabortedputprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/aborted-put-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/aborted-put-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/aborted-put-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,32 @@
</span><ins>+This test creates some object stores, putting some values in them, committing the transaction. In a new transaction, it then overwrites those values, but then aborts the transaction. Finally it verifies everything is set up from the first transaction, and nothing from the aborted one committed.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+First upgrade needed: Old version - 0 New version - 1
+[object IDBTransaction] - versionchange
+[object IDBDatabase]
+put succeeded - key was 'foo'
+get 'foo' succeeded - value was 'bar'
+get 'far' succeeded - value was 'undefined'
+First version change transaction completed
+Second upgrade needed: Old version - 1 New version - 2
+[object IDBTransaction] - versionchange
+[object IDBDatabase]
+get1 'foo' succeeded - value was 'baz'
+get2 'far' succeeded - value was 'boo'
+Second version change transaction abort
+Third upgrade needed: Old version - 1 New version - 2
+[object IDBTransaction] - versionchange
+[object IDBDatabase]
+get1 'foo' succeeded - value was 'bar'
+get2 'far' succeeded - value was 'undefined'
+Third version change transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernabortedputprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/aborted-put-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/aborted-put-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/aborted-put-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/aborted-put.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernautoincrementabortprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/autoincrement-abort-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/autoincrement-abort-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/autoincrement-abort-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,39 @@
</span><ins>+This test creates a new database with an objectstore that autoincrements. It then puts some things in that object store, checking the keys that were used. But it then aborts that transaction. Then it opens a new one and puts something in it, double checking that the key generator was reverted when the above transaction was aborted.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Initial upgrade versionchange transaction complete
+Opening readwrite transaction to bump the key generator, but it will be aborted
+Key used for put was 1
+Key used for put was 2
+Key used for put was 3
+Key used for put was 4
+Key used for put was 5
+Key used for put was 6
+readwrite transaction abort
+Opening readwrite transaction to make sure the key generator had successfully reverted
+Key used for put was 1
+Key used for put was 2
+Key used for put was 3
+Key used for put was 4
+Key used for put was 5
+Key used for put was 6
+readwrite transaction complete
+Opening readwrite transaction to make sure the key generator picks up where it should've left off
+Key used for put was 7
+Key used for put was 8
+Key used for put was 9
+Key used for put was 10
+Key used for put was 11
+Key used for put was 12
+readwrite transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernautoincrementabortprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/autoincrement-abort-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/autoincrement-abort-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/autoincrement-abort-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/autoincrement-abort.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernbasicaddprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/basic-add-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/basic-add-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/basic-add-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,20 @@
</span><ins>+This test does basic testing of IDBObjectStore.add(), making sure that an attempt to overwrite an already-existing key fails with the appropriate error.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Upgrade needed: Old version - 0 New version - 1
+[object IDBTransaction] - versionchange
+[object IDBDatabase]
+put 1 succeeded - key was 'foo'
+put 2 failed - error
+get succeeded - key was 'bar'
+version change transaction completed
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernbasicaddprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/basic-add-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/basic-add-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/basic-add-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/basic-add.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernbasicputprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/basic-put-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/basic-put-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/basic-put-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,14 @@
</span><ins>+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Upgrade needed: Old version - 0 New version - 1
+[object IDBTransaction] - versionchange
+[object IDBDatabase]
+put succeeded - key was 'foo'
+get succeeded - value was 'bar'
+version change transaction completed
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernbasicputprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/basic-put-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/basic-put-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/basic-put-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/basic-put.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernblockedopendbrequestsprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/blocked-open-db-requests-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/blocked-open-db-requests-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/blocked-open-db-requests-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,32 @@
</span><ins>+Makes sure that an OpenDBRequest that would result in a version change is blocked because there are still open connections, it gets the blocked event. Also makes sure that request gets unblocked when the open connections close.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+connection = event.target.result;
+connection.onversionchange = firstVersionChange;
+objectStore = connection.createObjectStore('testObjectStore');
+First version change transaction complete
+firstTransaction = connection.transaction('testObjectStore', 'readwrite');
+objectStore = firstTransaction.objectStore('testObjectStore');
+objectStorePutLoop();
+secondRequest = indexedDB.open(dbname, 2);
+secondRequest.onblocked = secondBlocked;
+secondRequest.onupgradeneeded = secondUpgradeNeeded;
+receivedVersionChange = true;
+++blockedCount
+PASS blockedEvent.oldVersion is 1
+PASS blockedEvent.newVersion is 2
+PASS blockedEvent.target.readyState is 'pending'
+2nd upgradeNeeded
+PASS blockedCount is 1
+PASS event.target.result.version is 2
+event.target.result.close();
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernblockedopendbrequestsprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/blocked-open-db-requests-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/blocked-open-db-requests-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/blocked-open-db-requests-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/blocked-open-db-requests.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderncreateindexfailuresprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/create-index-failures-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/create-index-failures-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/create-index-failures-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,23 @@
</span><ins>+This tests some obvious failures that can happen while calling IDBObjectStore.createIndex().
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Failed to create index with null name
+Failed to create index with invalid key path
+Failed to create index on a deleted object store
+Failed to create multi-entry index with an array key path
+Failed to create index that already exists
+Failed to create index while the transaction is inactive
+Initial upgrade versionchange transaction complete
+Failed to create index outside of a version change transaction
+readonly transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderncreateindexfailuresprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/create-index-failures-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/create-index-failures-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/create-index-failures-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/create-index-failures.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderncreateobjectstorebasicprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/createobjectstore-basic-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/createobjectstore-basic-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/createobjectstore-basic-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,36 @@
</span><ins>+This test starts some version change transactions, creates some object stores, and variably commits or aborts the version change transactions. At various stages it verifies the object stores in the database are as-expected.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Object store names:
+FirstAbortedObjectStore
+Put succeeded
+Initial upgrade versionchange transaction aborted
+Object store names:
+Second upgrade needed: Old version - 0 New version - 1
+Object store names:
+Second upgrade versionchange transaction complete
+Object store names:
+FirstCommittedObjectStore
+Third upgrade needed: Old version - 1 New version - 2
+Object store names:
+FirstCommittedObjectStore
+SecondCommittedObjectStore
+Third upgrade versionchange transaction complete
+Object store names:
+FirstCommittedObjectStore
+SecondCommittedObjectStore
+Fourth upgrade needed: Old version - 2 New version - 3
+Object store names:
+FirstCommittedObjectStore
+SecondCommittedObjectStore
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderncreateobjectstorebasicprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/createobjectstore-basic-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/createobjectstore-basic-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/createobjectstore-basic-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/createobjectstore-basic.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderncreateobjectstorefailuresprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/createobjectstore-failures-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/createobjectstore-failures-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/createobjectstore-failures-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,35 @@
</span><ins>+This test exercises the obvious ways that IDBDatabase.createObjectStore can fail.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Failed to create object store with both autoincrement and an empty keypath: Error: Failed to execute 'createObjectStore' on 'IDBDatabase': The autoIncrement option was set but the keyPath option was empty or an array.
+Object store names:
+Failed to create object store with both autoincrement and a sequence keypath: Error: Failed to execute 'createObjectStore' on 'IDBDatabase': The autoIncrement option was set but the keyPath option was empty or an array.
+Object store names:
+Failed to create object store with invalid keyPath: Error: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
+Object store names:
+Actually created an object store
+Object store names:
+TestObjectStore1
+Failed to create TestObjectStore a second time: Error: Failed to execute 'createObjectStore' on 'IDBDatabase': An object store with the specified name already exists.
+Object store names:
+TestObjectStore1
+Initial upgrade versionchange transaction complete
+Object store names:
+TestObjectStore1
+Failed to create object store while there is no version change transaction: Error: Failed to execute 'createObjectStore' on 'IDBDatabase': The database is not running a version change transaction.
+Object store names:
+TestObjectStore1
+Failed to create object store outside of onupgradeneeded: Error: Failed to execute 'createObjectStore' on 'IDBDatabase': The database is not running a version change transaction.
+Object store names:
+TestObjectStore1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderncreateobjectstorefailuresprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/createobjectstore-failures-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/createobjectstore-failures-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/createobjectstore-failures-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/createobjectstore-failures.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderncursor1privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/cursor-1-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/cursor-1-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/cursor-1-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,87 @@
</span><ins>+This tests basic IDBCursor functionality
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Success opening cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: next
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 0
+Cursor primary key is: 0
+Success opening cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: next
+Cursor source is: [object IDBIndex] (TestIndex1)
+Cursor key is: Hello
+Cursor primary key is: foo
+Success opening cursor
+Cursor is: [object IDBCursor]
+Cursor direction is: next
+Cursor source is: [object IDBIndex] (TestIndex1)
+Cursor key is: Hello
+Cursor primary key is: foo
+Success opening cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: nextunique
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 0
+Cursor primary key is: 0
+Success opening cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: nextunique
+Cursor source is: [object IDBIndex] (TestIndex1)
+Cursor key is: Hello
+Cursor primary key is: foo
+Success opening cursor
+Cursor is: [object IDBCursor]
+Cursor direction is: nextunique
+Cursor source is: [object IDBIndex] (TestIndex1)
+Cursor key is: Hello
+Cursor primary key is: foo
+Success opening cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: prev
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: foo
+Cursor primary key is: foo
+Success opening cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: prev
+Cursor source is: [object IDBIndex] (TestIndex1)
+Cursor key is: Hello
+Cursor primary key is: foo
+Success opening cursor
+Cursor is: [object IDBCursor]
+Cursor direction is: prev
+Cursor source is: [object IDBIndex] (TestIndex1)
+Cursor key is: Hello
+Cursor primary key is: foo
+Success opening cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: prevunique
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: foo
+Cursor primary key is: foo
+Success opening cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: prevunique
+Cursor source is: [object IDBIndex] (TestIndex1)
+Cursor key is: Hello
+Cursor primary key is: foo
+Success opening cursor
+Cursor is: [object IDBCursor]
+Cursor direction is: prevunique
+Cursor source is: [object IDBIndex] (TestIndex1)
+Cursor key is: Hello
+Cursor primary key is: foo
+Initial upgrade versionchange transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderncursor1privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/cursor-1-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/cursor-1-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/cursor-1-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/cursor-1.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderncursor2privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/cursor-2-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/cursor-2-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/cursor-2-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,169 @@
</span><ins>+This test checks basic functionality walking a &quot;next&quot; and &quot;prev&quot; cursor on an object store with some records.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Success iterating next cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: next
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 0
+Cursor value is: Record 0
+Cursor primary key is: 0
+Success iterating next cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: next
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 1
+Cursor value is: Record 1
+Cursor primary key is: 1
+Success iterating next cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: next
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 2
+Cursor value is: Record 2
+Cursor primary key is: 2
+Success iterating next cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: next
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 3
+Cursor value is: Record 3
+Cursor primary key is: 3
+Success iterating next cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: next
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 4
+Cursor value is: Record 4
+Cursor primary key is: 4
+Success iterating next cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: next
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 5
+Cursor value is: Record 5
+Cursor primary key is: 5
+Success iterating next cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: next
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 6
+Cursor value is: Record 6
+Cursor primary key is: 6
+Success iterating next cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: next
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 7
+Cursor value is: Record 7
+Cursor primary key is: 7
+Success iterating next cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: next
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 8
+Cursor value is: Record 8
+Cursor primary key is: 8
+Success iterating next cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: next
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 9
+Cursor value is: Record 9
+Cursor primary key is: 9
+Success iterating next cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: next
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: foo
+Cursor value is: [object Object]
+Cursor primary key is: foo
+Success iterating prev cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: prev
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: foo
+Cursor value is: [object Object]
+Cursor primary key is: foo
+Success iterating prev cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: prev
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 9
+Cursor value is: Record 9
+Cursor primary key is: 9
+Success iterating prev cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: prev
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 8
+Cursor value is: Record 8
+Cursor primary key is: 8
+Success iterating prev cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: prev
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 7
+Cursor value is: Record 7
+Cursor primary key is: 7
+Success iterating prev cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: prev
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 6
+Cursor value is: Record 6
+Cursor primary key is: 6
+Success iterating prev cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: prev
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 5
+Cursor value is: Record 5
+Cursor primary key is: 5
+Success iterating prev cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: prev
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 4
+Cursor value is: Record 4
+Cursor primary key is: 4
+Success iterating prev cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: prev
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 3
+Cursor value is: Record 3
+Cursor primary key is: 3
+Success iterating prev cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: prev
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 2
+Cursor value is: Record 2
+Cursor primary key is: 2
+Success iterating prev cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: prev
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 1
+Cursor value is: Record 1
+Cursor primary key is: 1
+Success iterating prev cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: prev
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 0
+Cursor value is: Record 0
+Cursor primary key is: 0
+Initial upgrade versionchange transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderncursor2privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/cursor-2-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/cursor-2-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/cursor-2-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/cursor-2.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderncursor3privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/cursor-3-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/cursor-3-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/cursor-3-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,85 @@
</span><ins>+This test various uses of advance() and continue() on a &quot;next&quot; cursor.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Success iterating cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: next
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 0
+Cursor value is: Record 0
+Cursor primary key is: 0
+Success iterating cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: next
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 2
+Cursor value is: Record 2
+Cursor primary key is: 2
+Success iterating cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: next
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 4
+Cursor value is: Record 4
+Cursor primary key is: 4
+Success iterating cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: next
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 6
+Cursor value is: Record 6
+Cursor primary key is: 6
+Success iterating cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: next
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 8
+Cursor value is: Record 8
+Cursor primary key is: 8
+Success iterating cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: next
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: foo
+Cursor value is: [object Object]
+Cursor primary key is: foo
+Success iterating cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: next
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 0
+Cursor value is: Record 0
+Cursor primary key is: 0
+Success iterating cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: next
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 3
+Cursor value is: Record 3
+Cursor primary key is: 3
+Success iterating cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: next
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 6
+Cursor value is: Record 6
+Cursor primary key is: 6
+Success iterating cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: next
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 9
+Cursor value is: Record 9
+Cursor primary key is: 9
+Initial upgrade versionchange transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderncursor3privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/cursor-3-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/cursor-3-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/cursor-3-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/cursor-3.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderncursor4privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/cursor-4-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/cursor-4-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/cursor-4-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,78 @@
</span><ins>+This test various uses of advance() and continue() on a &quot;prev&quot; cursor.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Success iterating cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: prev
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 9
+Cursor value is: Record 9
+Cursor primary key is: 9
+Success iterating cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: prev
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 7
+Cursor value is: Record 7
+Cursor primary key is: 7
+Success iterating cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: prev
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 5
+Cursor value is: Record 5
+Cursor primary key is: 5
+Success iterating cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: prev
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 3
+Cursor value is: Record 3
+Cursor primary key is: 3
+Success iterating cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: prev
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 1
+Cursor value is: Record 1
+Cursor primary key is: 1
+Success iterating cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: prev
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 9
+Cursor value is: Record 9
+Cursor primary key is: 9
+Success iterating cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: prev
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 6
+Cursor value is: Record 6
+Cursor primary key is: 6
+Success iterating cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: prev
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 3
+Cursor value is: Record 3
+Cursor primary key is: 3
+Success iterating cursor
+Cursor is: [object IDBCursorWithValue]
+Cursor direction is: prev
+Cursor source is: [object IDBObjectStore] (TestObjectStore)
+Cursor key is: 0
+Cursor value is: Record 0
+Cursor primary key is: 0
+Initial upgrade versionchange transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderncursor4privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/cursor-4-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/cursor-4-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/cursor-4-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/cursor-4.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderncursor5privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/cursor-5-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/cursor-5-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/cursor-5-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,19 @@
</span><ins>+This tests iterating a &quot;next&quot; cursor in a read-write transaction while changing records.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Cursor open at key 0
+Record 0 deleted, even though that's where the cursor currently points.
+Cursor iterated to key 1
+Cursor iterated to key 2 with value 'Scary new actual record!'
+Initial upgrade versionchange transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderncursor5privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/cursor-5-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/cursor-5-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/cursor-5-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/cursor-5.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderncursor6privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/cursor-6-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/cursor-6-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/cursor-6-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,19 @@
</span><ins>+This tests iterating a &quot;prev&quot; cursor in a read-write transaction while changing records.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Cursor open at key 2
+Record 2 deleted, even though that's where the cursor currently points.
+Cursor iterated to key 1
+Cursor iterated to key 0 with value 'Scary new actual record!'
+Initial upgrade versionchange transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderncursor6privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/cursor-6-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/cursor-6-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/cursor-6-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/cursor-6.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderncursor7privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/cursor-7-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/cursor-7-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/cursor-7-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,18 @@
</span><ins>+This tests iterating a &quot;next&quot; cursor in a read-write transaction combined with clearing the object store.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Cursor open at key 0
+Object store cleared.
+Cursor iterated to key 100
+Initial upgrade versionchange transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderncursor7privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/cursor-7-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/cursor-7-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/cursor-7-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/cursor-7.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderncursor8privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/cursor-8-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/cursor-8-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/cursor-8-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,18 @@
</span><ins>+This tests iterating a &quot;prev&quot; cursor in a read-write transaction while changing records.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Cursor open at key 2
+Object store cleared.
+Cursor iterated to key -100
+Initial upgrade versionchange transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderncursor8privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/cursor-8-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/cursor-8-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/cursor-8-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/cursor-8.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderndatebasicprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/date-basic-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/date-basic-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/date-basic-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,28 @@
</span><ins>+This tests using Date objects as keys and values.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Initial upgrade versionchange transaction complete
+Success getting key 'Fri Nov 04 1955 17:00:00 GMT-0700 (PDT)' of type object, result is 'Flux capacitor' of type string
+Key is a Date object, btw
+Success getting key 'Sat Nov 12 1955 10:00:00 GMT-0800 (PST)' of type object, result is 'Fish under the sea' of type string
+Key is a Date object, btw
+Success getting key 'Wed Oct 21 2015 09:00:00 GMT-0700 (PDT)' of type object, result is 'Hoverboards' of type string
+Key is a Date object, btw
+Success getting key 'a' of type string, result is 'Fri Nov 04 1955 17:00:00 GMT-0700 (PDT)' of type object
+Result is a Date object, btw
+Success getting key 'b' of type string, result is 'Sat Nov 12 1955 10:00:00 GMT-0800 (PST)' of type object
+Result is a Date object, btw
+Success getting key 'c' of type string, result is 'Wed Oct 21 2015 09:00:00 GMT-0700 (PDT)' of type object
+Result is a Date object, btw
+readonly transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderndatebasicprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/date-basic-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/date-basic-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/date-basic-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/date-basic.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderndeletedatabase1privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-1-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-1-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-1-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,23 @@
</span><ins>+This tests that if deleteDatabase is called while there is already an open connection to the database that the open connection gets the appropriate versionChange event.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade old version - 0 new version - 1
+Version change complete
+Requesting deleteDatabase
+open db success
+First connection received versionchange event: oldVersion 1, newVersion null
+Delete database success: oldVersion 1, newVersion null
+Recreating database to make sure it's new and empty
+Second upgrade old version - 0 new version - 1
+Unable to get object store in second upgrade transaction (which is correct because it should not be there)
+Second database upgrade success
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderndeletedatabase1privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-1-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-1-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-1-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/deletedatabase-1.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderndeletedatabase2privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-2-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-2-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-2-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,23 @@
</span><ins>+This tests that if deleteDatabase is called while there is already an open connection to the database that the open connection gets the appropriate versionChange event. That open connection also has an in-progress transaction at the time it gets the versionChange event.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade old version - 0 new version - 1
+Requesting deleteDatabase
+First connection received versionchange event: oldVersion 1, newVersion null
+First version change complete
+Open request error: AbortError
+Delete database success: oldVersion 1, newVersion null
+Recreating database to make sure it's new and empty
+Second upgrade old version - 0 new version - 1
+Unable to get object store in second upgrade transaction (which is correct because it should not be there)
+Second database upgrade success
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderndeletedatabase2privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-2-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-2-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-2-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/deletedatabase-2.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderndeletedatabasenullnameexceptionprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-null-name-exception-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-null-name-exception-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-null-name-exception-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+This test calls deleteDatabase on window.indexedDB with a null database name, making sure there is an exception.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+TypeError: Not enough arguments
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderndeletedatabasenullnameexceptionprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-null-name-exception-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-null-name-exception-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-null-name-exception-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/deletedatabase-null-name-exception.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderndeletedatabaserequesteventprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-request-event-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-request-event-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-request-event-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+This test calls deleteDatabase on window.indexedDB and verifies that an event is fired at the request.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+[object IDBOpenDBRequest]
+success
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderndeletedatabaserequesteventprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-request-event-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-request-event-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-request-event-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/deletedatabase-request-event.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderndeletedatabaserequestprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-request-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-request-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-request-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+This test calls deleteDatabase on window.indexedDB and verifies that an IDBOpenDBRequest object is returned.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+[object IDBOpenDBRequest]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderndeletedatabaserequestprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-request-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-request-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-request-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/deletedatabase-request.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderndeleteindex1privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/deleteindex-1-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/deleteindex-1-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/deleteindex-1-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,22 @@
</span><ins>+This tests deleting an index and then committing the transaction.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Count is: 2
+Cursor at record: A / 1
+Cursor at record: A / 2
+Deleted the index
+Initial upgrade versionchange transaction complete
+Object store has indexes:
+Unable to get index from object store (it shouldn't exist)
+Transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderndeleteindex1privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/deleteindex-1-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/deleteindex-1-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/deleteindex-1-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/deleteindex-1.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderndeleteindex2privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/deleteindex-2-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/deleteindex-2-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/deleteindex-2-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,27 @@
</span><ins>+This tests deleting an index and then aborting the transaction.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Count is: 2
+Cursor at record: A / 1
+Cursor at record: A / 2
+Initial upgrade versionchange transaction complete
+Second upgrade needed: Old version - 1 New version - 2
+Deleted the index
+Aborted the transaction
+Second upgrade versionchange transaction abort
+Third upgrade needed: Old version - 1 New version - 3
+Count is: 2
+Cursor at record: A / 1
+Cursor at record: A / 2
+Third upgrade versionchange transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderndeleteindex2privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/deleteindex-2-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/deleteindex-2-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/deleteindex-2-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/deleteindex-2.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderndeleteobjectstore1privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/deleteobjectstore-1-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/deleteobjectstore-1-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/deleteobjectstore-1-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,31 @@
</span><ins>+This test creates an object store then populates it, then commits that transaction. It then deletes it, but aborts that transaction. Finally it checks to make sure everything from step 1 is there as expected.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Initial upgrade versionchange transaction complete
+Second upgrade needed: Old version - 1 New version - 2
+Deleting object store
+Second version change transaction abort
+Request error - [object Event]
+Success opening database connection - Starting final transaction
+Value gotten was AH AH AH AH AH
+Value gotten was AH AH AH AH AH
+Value gotten was AH AH AH AH AH
+Value gotten was AH AH AH AH AH
+Value gotten was AH AH AH AH AH
+Value gotten was AH AH AH AH AH
+Value gotten was AH AH AH AH AH
+Value gotten was AH AH AH AH AH
+Value gotten was AH AH AH AH AH
+Value gotten was AH AH AH AH AH
+Final transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderndeleteobjectstore1privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/deleteobjectstore-1-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/deleteobjectstore-1-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/deleteobjectstore-1-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/deleteobjectstore-1.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderndoubleabortprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/double-abort-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/double-abort-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/double-abort-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+This test aborts the same transaction twice, making the appropriate exception is thrown.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Second abort failed: Error: Failed to execute 'abort' on 'IDBTransaction': The transaction is inactive or finished.
+Initial upgrade versionchange transaction aborted
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderndoubleabortprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/double-abort-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/double-abort-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/double-abort-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/double-abort.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderndoubleopenprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/double-open-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/double-open-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/double-open-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+This test makes sure that quickly opening the same database multiple times is successful without the backend ASSERTing or crashing.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+Second request done
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderndoubleopenprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/double-open-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/double-open-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/double-open-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/double-open.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderngetindexfailuresprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/get-index-failures-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/get-index-failures-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/get-index-failures-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,22 @@
</span><ins>+This tests some obvious failures that can happen while calling IDBObjectStore.index().
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Initial upgrade versionchange transaction complete
+Got an index as expected: [object IDBIndex]
+Failed to get an index with a null name
+Failed to get an index that doesn't exist
+readonly transaction complete
+Second upgrade needed: Old version - 1 New version - 2
+Failed to get an index from a deleted object store
+Second versionchange transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderngetindexfailuresprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/get-index-failures-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/get-index-failures-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/get-index-failures-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/get-index-failures.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderngetkeyrangeprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/get-keyrange-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/get-keyrange-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/get-keyrange-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,138 @@
</span><ins>+This test exercises IDBObjectStore.get() with an IDBKeyRange as the parameter.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Initial upgrade versionchange transaction complete
+Success getting keyRange [-1 (Closed), undefined (Open)]
+Result is &quot;0&quot;
+Success getting keyRange [-1 (Open), undefined (Open)]
+Result is &quot;0&quot;
+Success getting keyRange [0 (Closed), undefined (Open)]
+Result is &quot;0&quot;
+Success getting keyRange [0 (Open), undefined (Open)]
+Result is &quot;1&quot;
+Success getting keyRange [0.1 (Closed), undefined (Open)]
+Result is &quot;1&quot;
+Success getting keyRange [0.1 (Open), undefined (Open)]
+Result is &quot;1&quot;
+Success getting keyRange [99 (Closed), undefined (Open)]
+Result is &quot;99&quot;
+Success getting keyRange [99 (Open), undefined (Open)]
+Result is PosInf
+Success getting keyRange [99.1 (Closed), undefined (Open)]
+Result is PosInf
+Success getting keyRange [99.1 (Open), undefined (Open)]
+Result is PosInf
+Success getting keyRange [undefined (Open), 100 (Closed)]
+Result is NegInf
+Success getting keyRange [undefined (Open), 100 (Open)]
+Result is NegInf
+Success getting keyRange [undefined (Open), 99 (Closed)]
+Result is NegInf
+Success getting keyRange [undefined (Open), 99 (Open)]
+Result is NegInf
+Success getting keyRange [undefined (Open), 98.99999 (Closed)]
+Result is NegInf
+Success getting keyRange [undefined (Open), 98.99999 (Open)]
+Result is NegInf
+Success getting keyRange [undefined (Open), 98 (Closed)]
+Result is NegInf
+Success getting keyRange [undefined (Open), 98 (Open)]
+Result is NegInf
+Success getting keyRange [undefined (Open), 0 (Closed)]
+Result is NegInf
+Success getting keyRange [undefined (Open), 0 (Open)]
+Result is NegInf
+Success getting keyRange [undefined (Open), -0.1 (Closed)]
+Result is NegInf
+Success getting keyRange [undefined (Open), -0.1 (Open)]
+Result is NegInf
+Success getting keyRange [2.5 (Closed), 3.5 (Closed)]
+Result is &quot;3&quot;
+Success getting keyRange [-0.5 (Closed), 0.5 (Closed)]
+Result is &quot;0&quot;
+Success getting keyRange [98.5 (Closed), 99.5 (Closed)]
+Result is &quot;99&quot;
+Success getting keyRange [-1 (Closed), 0 (Closed)]
+Result is &quot;0&quot;
+Success getting keyRange [-1 (Open), 0 (Closed)]
+Result is &quot;0&quot;
+Success getting keyRange [-1 (Closed), 0 (Open)]
+Result is undefined
+Success getting keyRange [-1 (Open), 0 (Open)]
+Result is undefined
+Success getting keyRange [3 (Closed), 4 (Closed)]
+Result is &quot;3&quot;
+Success getting keyRange [3 (Open), 4 (Closed)]
+Result is &quot;4&quot;
+Success getting keyRange [3 (Closed), 4 (Open)]
+Result is &quot;3&quot;
+Success getting keyRange [3 (Open), 4 (Open)]
+Result is undefined
+Success getting keyRange [99 (Closed), 100 (Closed)]
+Result is &quot;99&quot;
+Success getting keyRange [99 (Open), 100 (Closed)]
+Result is undefined
+Success getting keyRange [99 (Closed), 100 (Open)]
+Result is &quot;99&quot;
+Success getting keyRange [99 (Open), 100 (Open)]
+Result is undefined
+Success getting keyRange [Infinity (Closed), a (Closed)]
+Result is PosInf
+Success getting keyRange [Infinity (Open), a (Closed)]
+Result is Flux capacitor
+Success getting keyRange [Infinity (Closed), a (Open)]
+Result is PosInf
+Success getting keyRange [Infinity (Open), a (Open)]
+Result is Flux capacitor
+Success getting keyRange [AS (Closed), a (Closed)]
+Result is AS
+Success getting keyRange [AS (Open), a (Closed)]
+Result is As
+Success getting keyRange [AS (Closed), a (Open)]
+Result is AS
+Success getting keyRange [AS (Open), a (Open)]
+Result is As
+Success getting keyRange [Infinity (Closed),  (Closed)]
+Result is PosInf
+Success getting keyRange [Infinity (Open),  (Closed)]
+Result is Flux capacitor
+Success getting keyRange [Infinity (Closed),  (Open)]
+Result is PosInf
+Success getting keyRange [Infinity (Open),  (Open)]
+Result is Flux capacitor
+Success getting keyRange [Infinity (Closed), a (Closed)]
+Result is PosInf
+Success getting keyRange [Infinity (Open), a (Closed)]
+Result is Flux capacitor
+Success getting keyRange [Infinity (Closed), a (Open)]
+Result is PosInf
+Success getting keyRange [Infinity (Open), a (Open)]
+Result is Flux capacitor
+Success getting keyRange [Infinity (Closed), a (Closed)]
+Result is PosInf
+Success getting keyRange [Infinity (Open), a (Closed)]
+Result is Flux capacitor
+Success getting keyRange [Infinity (Closed), a (Open)]
+Result is PosInf
+Success getting keyRange [Infinity (Open), a (Open)]
+Result is Flux capacitor
+Success getting keyRange [Fri Nov 04 1955 17:00:00 GMT-0700 (PDT) (Closed), Wed Oct 21 2015 09:00:00 GMT-0700 (PDT) (Closed)]
+Result is Flux capacitor
+Success getting keyRange [Fri Nov 04 1955 17:00:00 GMT-0700 (PDT) (Open), Wed Oct 21 2015 09:00:00 GMT-0700 (PDT) (Closed)]
+Result is Fish under the sea
+Success getting keyRange [Fri Nov 04 1955 17:00:00 GMT-0700 (PDT) (Closed), Wed Oct 21 2015 09:00:00 GMT-0700 (PDT) (Open)]
+Result is Flux capacitor
+Success getting keyRange [Fri Nov 04 1955 17:00:00 GMT-0700 (PDT) (Open), Wed Oct 21 2015 09:00:00 GMT-0700 (PDT) (Open)]
+Result is Fish under the sea
+readonly transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderngetkeyrangeprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/get-keyrange-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/get-keyrange-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/get-keyrange-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/get-keyrange.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernidbdatabasedeleteobjectstorefailuresprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/idbdatabase-deleteobjectstore-failures-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/idbdatabase-deleteobjectstore-failures-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/idbdatabase-deleteobjectstore-failures-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,22 @@
</span><ins>+This tests some obvious failures that can happen while calling IDBDatabase.deleteObjectStore()
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Initial upgrade versionchange transaction complete
+readwrite put success - about to try to delete an objectstore
+Failed to deleteObjectStore without a versionchange transaction - Error: Failed to execute 'deleteObjectStore' on 'IDBDatabase': The database is not running a version change transaction.
+readwrite transaction complete
+Second upgrade needed: Old version - 1 New version - 2
+Failed to deleteObjectStore with a non-existent objectstore - Error: Failed to execute 'deleteObjectStore' on 'IDBDatabase': The specified object store was not found.
+Failed to deleteObjectStore with an in-progress versionchange transaction that is inactive - Error: A request was placed against a transaction which is either currently not active, or which is finished.
+Second version change transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernidbdatabasedeleteobjectstorefailuresprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/idbdatabase-deleteobjectstore-failures-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/idbdatabase-deleteobjectstore-failures-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/idbdatabase-deleteobjectstore-failures-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/idbdatabase-deleteobjectstore-failures.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernidbdatabasetransactionfailuresprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/idbdatabase-transaction-failures-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/idbdatabase-transaction-failures-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/idbdatabase-transaction-failures-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,21 @@
</span><ins>+This tests some obvious failures that can happen while calling IDBDatabase.transaction()
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Upgrade needed: Old version - 0 New version - 1
+Failed to start a transaction while a versionChange transaction was in progress - Error: Failed to execute 'transaction' on 'IDBDatabase': A version change transaction is running.
+versionchange transaction completed
+Failed to start a transaction with an empty set of object stores - Error: Failed to execute 'transaction' on 'IDBDatabase': The storeNames parameter was empty.
+Failed to start a transaction to a nonexistent object store - Error: Failed to execute 'transaction' on 'IDBDatabase': One of the specified object stores was not found.
+Failed to start a transaction with an invalid mode - TypeError: Failed to execute 'transaction' on 'IDBDatabase': The mode provided ('blahblah') is not one of 'readonly' or 'readwrite'.
+Failed to explicitly start a versionchange transaction - TypeError: Failed to execute 'transaction' on 'IDBDatabase': The mode provided ('versionchange') is not one of 'readonly' or 'readwrite'.
+Failed to explicitly start a transaction with the close pending flag set - Error: Failed to execute 'transaction' on 'IDBDatabase': The database connection is closing.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernidbdatabasetransactionfailuresprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/idbdatabase-transaction-failures-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/idbdatabase-transaction-failures-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/idbdatabase-transaction-failures-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/idbdatabase-transaction-failures.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernidbindexpropertiesbasicprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/idbindex-properties-basic-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/idbindex-properties-basic-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/idbindex-properties-basic-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,100 @@
</span><ins>+This tests getting basic properties on an IDBIndex.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+TestIndex1
+[object IDBObjectStore]
+TestObjectStore
+foo
+false
+false
+TestIndex2
+[object IDBObjectStore]
+TestObjectStore
+foo
+false
+false
+TestIndex3
+[object IDBObjectStore]
+TestObjectStore
+foo
+false
+true
+TestIndex4
+[object IDBObjectStore]
+TestObjectStore
+foo
+true
+false
+TestIndex5
+[object IDBObjectStore]
+TestObjectStore
+foo
+true
+true
+TestIndex6
+[object IDBObjectStore]
+TestObjectStore
+[object DOMStringList]
+false
+false
+TestIndex7
+[object IDBObjectStore]
+TestObjectStore
+[object DOMStringList]
+false
+false
+Initial upgrade versionchange transaction complete
+TestIndex1
+[object IDBObjectStore]
+TestObjectStore
+foo
+false
+false
+TestIndex2
+[object IDBObjectStore]
+TestObjectStore
+foo
+false
+false
+TestIndex3
+[object IDBObjectStore]
+TestObjectStore
+foo
+false
+true
+TestIndex4
+[object IDBObjectStore]
+TestObjectStore
+foo
+true
+false
+TestIndex5
+[object IDBObjectStore]
+TestObjectStore
+foo
+true
+true
+TestIndex6
+[object IDBObjectStore]
+TestObjectStore
+[object DOMStringList]
+false
+false
+TestIndex7
+[object IDBObjectStore]
+TestObjectStore
+[object DOMStringList]
+false
+false
+readonly transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernidbindexpropertiesbasicprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/idbindex-properties-basic-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/idbindex-properties-basic-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/idbindex-properties-basic-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/idbindex-properties-basic.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernidbobjectstoreclear1privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-clear-1-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-clear-1-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-clear-1-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,36 @@
</span><ins>+This test creates an object store then populates it. It then clears it and makes sure it has nothing left in it.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Initial upgrade versionchange transaction complete
+Success opening database connection - Starting readwrite transaction
+Value gotten was bar1
+Value gotten was bar2
+Value gotten was bar3
+Value gotten was bar4
+Value gotten was bar5
+Value gotten was bar6
+Value gotten was bar7
+Value gotten was bar8
+Value gotten was bar9
+Object store cleared
+Value gotten was undefined
+Value gotten was undefined
+Value gotten was undefined
+Value gotten was undefined
+Value gotten was undefined
+Value gotten was undefined
+Value gotten was undefined
+Value gotten was undefined
+Value gotten was undefined
+Readwrite transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernidbobjectstoreclear1privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-clear-1-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-clear-1-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-clear-1-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/idbobjectstore-clear-1.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernidbobjectstoreclear2privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-clear-2-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-clear-2-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-clear-2-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,47 @@
</span><ins>+This test creates an object store then populates it, then commits that transaction. It then clears it, but aborts that transaction. Finally it checks to make sure everything from step 1 is still in there.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Initial upgrade versionchange transaction complete
+Success opening database connection - Starting readwrite transaction
+Value gotten was bar1
+Value gotten was bar2
+Value gotten was bar3
+Value gotten was bar4
+Value gotten was bar5
+Value gotten was bar6
+Value gotten was bar7
+Value gotten was bar8
+Value gotten was bar9
+Object store cleared, making sure its all gone.
+Value gotten was undefined
+Value gotten was undefined
+Value gotten was undefined
+Value gotten was undefined
+Value gotten was undefined
+Value gotten was undefined
+Value gotten was undefined
+Value gotten was undefined
+Value gotten was undefined
+Readwrite transaction abort
+Success opening database connection - Starting final transaction
+Value gotten was bar1
+Value gotten was bar2
+Value gotten was bar3
+Value gotten was bar4
+Value gotten was bar5
+Value gotten was bar6
+Value gotten was bar7
+Value gotten was bar8
+Value gotten was bar9
+Readwrite transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernidbobjectstoreclear2privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-clear-2-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-clear-2-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-clear-2-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/idbobjectstore-clear-2.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernidbobjectstorecount1privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-count-1-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-count-1-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-count-1-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,65 @@
</span><ins>+This test exercises various uses of IDBObjectStore.count()
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Count is: 1
+Count is: 0
+Count is: 0
+Count is: 0
+Count is: 0
+Count is: 2
+Count is: 0
+Count is: 0
+Count is: 0
+Count is: 0
+Count is: 3
+Count is: 1
+Count is: 0
+Count is: 1
+Count is: 0
+Count is: 4
+Count is: 2
+Count is: 1
+Count is: 2
+Count is: 0
+Count is: 5
+Count is: 3
+Count is: 2
+Count is: 3
+Count is: 0
+Count is: 6
+Count is: 4
+Count is: 3
+Count is: 3
+Count is: 0
+Count is: 7
+Count is: 4
+Count is: 3
+Count is: 3
+Count is: 1
+Count is: 8
+Count is: 4
+Count is: 3
+Count is: 3
+Count is: 1
+Count is: 9
+Count is: 4
+Count is: 3
+Count is: 3
+Count is: 1
+Count is: 10
+Count is: 4
+Count is: 3
+Count is: 3
+Count is: 1
+Initial upgrade versionchange transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernidbobjectstorecount1privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-count-1-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-count-1-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-count-1-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/idbobjectstore-count-1.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernidbobjectstorecountfailuresprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-count-failures-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-count-failures-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-count-failures-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,19 @@
</span><ins>+This tests some obvious failures that can happen while calling IDBObjectStore.count().
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Failed to count records in object store with an invalid key
+Failed to count records in object store that's been deleted
+Initial upgrade versionchange transaction complete
+Failed to count records in object store while transaction is inactive
+readonly transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernidbobjectstorecountfailuresprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-count-failures-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-count-failures-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-count-failures-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/idbobjectstore-count-failures.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernidbobjectstoredelete1privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-delete-1-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-delete-1-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-delete-1-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,35 @@
</span><ins>+This test exercises various uses of IDBObjectStore.delete()
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Count is 113
+Initial upgrade versionchange transaction complete
+Deleted &quot;Mon Jan 03 2000 16:00:00 GMT-0800 (PST)&quot;, and there should now be 1 less things total.
+Count is 112
+Deleted &quot;Mon Jan 03 2000 16:00:00 GMT-0800 (PST)&quot;, and there should now be 0 less things total.
+Count is 112
+Deleted &quot;balyhoo&quot;, and there should now be 0 less things total.
+Count is 112
+Deleted &quot;[object IDBKeyRange]&quot;, and there should now be 0 less things total.
+Count is 112
+Deleted &quot;[object IDBKeyRange]&quot;, and there should now be 1 less things total.
+Count is 111
+Deleted &quot;[object IDBKeyRange]&quot;, and there should now be 1 less things total.
+Count is 110
+Deleted &quot;[object IDBKeyRange]&quot;, and there should now be 5 less things total.
+Count is 105
+Deleted &quot;[object IDBKeyRange]&quot;, and there should now be 98 less things total.
+Count is 7
+Deleted &quot;[object IDBKeyRange]&quot;, and there should now be 3 less things total.
+Count is 4
+readwrite transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernidbobjectstoredelete1privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-delete-1-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-delete-1-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-delete-1-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/idbobjectstore-delete-1.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernidbobjectstoredelete2privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-delete-2-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-delete-2-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-delete-2-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,19 @@
</span><ins>+This test exercises IDBObjectStore.delete() followed by an abort to make sure the delete is un-done.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Initial upgrade versionchange transaction complete
+After delete, record for &quot;foo&quot; has value: undefined
+readwrite transaction aborted
+Record for &quot;foo&quot; has final value: bar
+readonly transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernidbobjectstoredelete2privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-delete-2-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-delete-2-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-delete-2-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/idbobjectstore-delete-2.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernidbobjectstoredeletefailuresprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-delete-failures-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-delete-failures-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-delete-failures-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,20 @@
</span><ins>+This tests some obvious failures that can happen while calling IDBObjectStore.delete().
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Failed to delete record from object store with an invalid key
+Failed to delete record from object store that has been deleted
+Initial upgrade versionchange transaction complete
+Failed to delete a record in read-only transaction
+Failed to delete record with inactive transaction
+readwrite transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernidbobjectstoredeletefailuresprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-delete-failures-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-delete-failures-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-delete-failures-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/idbobjectstore-delete-failures.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernidbobjectstoregetfailuresprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-get-failures-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-get-failures-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-get-failures-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,19 @@
</span><ins>+This tests some obvious failures that can happen while calling IDBObjectStore.get().
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Failed to get record from object store with an invalid key
+Failed to get record from object store that has been deleted
+Initial upgrade versionchange transaction complete
+Failed to get record from object store while the transaction is inactive
+readonly transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernidbobjectstoregetfailuresprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-get-failures-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-get-failures-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-get-failures-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/idbobjectstore-get-failures.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernidbobjectstoreputandclearfailuresprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-put-and-clear-failures-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-put-and-clear-failures-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-put-and-clear-failures-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,22 @@
</span><ins>+This tests some obvious failures that can happen while calling IDBObjectStore.put() and IDBObjectStore.clear().
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Failed to put record into object store with an invalid key
+Failed to put record into object store that has been deleted
+Failed to clear object store that has been deleted
+Initial upgrade versionchange transaction complete
+Failed to clear object store in read-only transaction
+Failed to put record into object store with inactive transaction
+Failed to clear object store with inactive transaction
+readwrite transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernidbobjectstoreputandclearfailuresprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-put-and-clear-failures-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-put-and-clear-failures-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/idbobjectstore-put-and-clear-failures-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/idbobjectstore-put-and-clear-failures.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernidbtransactionobjectstorefailuresprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/idbtransaction-objectstore-failures-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/idbtransaction-objectstore-failures-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/idbtransaction-objectstore-failures-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,22 @@
</span><ins>+This tests some obvious failures that can happen while calling transaction.objectStore()
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Upgrade needed: Old version - 0 New version - 1
+[object IDBTransaction] - versionchange
+[object IDBDatabase]
+Caught attempt to access empty-named object store on the transaction
+Caught attempt to access null-named object store on the transaction
+Caught attempt to access non-existant object store on the transaction
+Caught attempt to access valid object store on a transaction that is already finishing
+put failed (because transaction was aborted)
+First version change transaction unexpected error - [object Event]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernidbtransactionobjectstorefailuresprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/idbtransaction-objectstore-failures-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/idbtransaction-objectstore-failures-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/idbtransaction-objectstore-failures-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/idbtransaction-objectstore-failures.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernindex1privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/index-1-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/index-1-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/index-1-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,146 @@
</span><ins>+This tests the expected values from some more complex index situations.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+get &quot;good&quot; result is: [object Object]
+bar is good
+baz is bad
+getKey &quot;good&quot; result is: 1
+get &quot;bad&quot; result is: undefined
+getKey &quot;bad&quot; result is: undefined
+get &quot;ok&quot; result is: [object Object]
+bar is ok
+baz is meh
+getKey &quot;ok&quot; result is: 4
+get &quot;meh&quot; result is: undefined
+getKey &quot;meh&quot; result is: undefined
+get &quot;super&quot; result is: [object Object]
+bar is super
+baz is thanksForAsking
+getKey &quot;super&quot; result is: 7
+get &quot;thanksForAsking&quot; result is: undefined
+getKey &quot;thanksForAsking&quot; result is: undefined
+get &quot;good,bad&quot; result is: undefined
+getKey &quot;good,bad&quot; result is: undefined
+get &quot;ok,meh&quot; result is: undefined
+getKey &quot;ok,meh&quot; result is: undefined
+get &quot;super,thanksForAsking&quot; result is: undefined
+getKey &quot;super,thanksForAsking&quot; result is: undefined
+get &quot;This is to test&quot; result is: undefined
+getKey &quot;This is to test&quot; result is: undefined
+get &quot;multiEntry indexes&quot; result is: undefined
+getKey &quot;multiEntry indexes&quot; result is: undefined
+get &quot;This is to test,multiEntry indexes&quot; result is: [object Object]
+bar is This is to test,multiEntry indexes
+getKey &quot;This is to test,multiEntry indexes&quot; result is: 10
+count result is: 10
+
+get &quot;good&quot; result is: undefined
+getKey &quot;good&quot; result is: undefined
+get &quot;bad&quot; result is: [object Object]
+bar is good
+baz is bad
+getKey &quot;bad&quot; result is: 1
+get &quot;ok&quot; result is: undefined
+getKey &quot;ok&quot; result is: undefined
+get &quot;meh&quot; result is: [object Object]
+bar is ok
+baz is meh
+getKey &quot;meh&quot; result is: 4
+get &quot;super&quot; result is: undefined
+getKey &quot;super&quot; result is: undefined
+get &quot;thanksForAsking&quot; result is: [object Object]
+bar is super
+baz is thanksForAsking
+getKey &quot;thanksForAsking&quot; result is: 7
+get &quot;good,bad&quot; result is: undefined
+getKey &quot;good,bad&quot; result is: undefined
+get &quot;ok,meh&quot; result is: undefined
+getKey &quot;ok,meh&quot; result is: undefined
+get &quot;super,thanksForAsking&quot; result is: undefined
+getKey &quot;super,thanksForAsking&quot; result is: undefined
+get &quot;This is to test&quot; result is: undefined
+getKey &quot;This is to test&quot; result is: undefined
+get &quot;multiEntry indexes&quot; result is: undefined
+getKey &quot;multiEntry indexes&quot; result is: undefined
+get &quot;This is to test,multiEntry indexes&quot; result is: undefined
+getKey &quot;This is to test,multiEntry indexes&quot; result is: undefined
+count result is: 9
+
+get &quot;good&quot; result is: undefined
+getKey &quot;good&quot; result is: undefined
+get &quot;bad&quot; result is: undefined
+getKey &quot;bad&quot; result is: undefined
+get &quot;ok&quot; result is: undefined
+getKey &quot;ok&quot; result is: undefined
+get &quot;meh&quot; result is: undefined
+getKey &quot;meh&quot; result is: undefined
+get &quot;super&quot; result is: undefined
+getKey &quot;super&quot; result is: undefined
+get &quot;thanksForAsking&quot; result is: undefined
+getKey &quot;thanksForAsking&quot; result is: undefined
+get &quot;good,bad&quot; result is: [object Object]
+bar is good
+baz is bad
+getKey &quot;good,bad&quot; result is: 1
+get &quot;ok,meh&quot; result is: [object Object]
+bar is ok
+baz is meh
+getKey &quot;ok,meh&quot; result is: 4
+get &quot;super,thanksForAsking&quot; result is: [object Object]
+bar is super
+baz is thanksForAsking
+getKey &quot;super,thanksForAsking&quot; result is: 7
+get &quot;This is to test&quot; result is: undefined
+getKey &quot;This is to test&quot; result is: undefined
+get &quot;multiEntry indexes&quot; result is: undefined
+getKey &quot;multiEntry indexes&quot; result is: undefined
+get &quot;This is to test,multiEntry indexes&quot; result is: undefined
+getKey &quot;This is to test,multiEntry indexes&quot; result is: undefined
+count result is: 9
+
+get &quot;good&quot; result is: [object Object]
+bar is good
+baz is bad
+getKey &quot;good&quot; result is: 1
+get &quot;bad&quot; result is: undefined
+getKey &quot;bad&quot; result is: undefined
+get &quot;ok&quot; result is: [object Object]
+bar is ok
+baz is meh
+getKey &quot;ok&quot; result is: 4
+get &quot;meh&quot; result is: undefined
+getKey &quot;meh&quot; result is: undefined
+get &quot;super&quot; result is: [object Object]
+bar is super
+baz is thanksForAsking
+getKey &quot;super&quot; result is: 7
+get &quot;thanksForAsking&quot; result is: undefined
+getKey &quot;thanksForAsking&quot; result is: undefined
+get &quot;good,bad&quot; result is: undefined
+getKey &quot;good,bad&quot; result is: undefined
+get &quot;ok,meh&quot; result is: undefined
+getKey &quot;ok,meh&quot; result is: undefined
+get &quot;super,thanksForAsking&quot; result is: undefined
+getKey &quot;super,thanksForAsking&quot; result is: undefined
+get &quot;This is to test&quot; result is: [object Object]
+bar is This is to test,multiEntry indexes
+getKey &quot;This is to test&quot; result is: 10
+get &quot;multiEntry indexes&quot; result is: [object Object]
+bar is This is to test,multiEntry indexes
+getKey &quot;multiEntry indexes&quot; result is: 10
+get &quot;This is to test,multiEntry indexes&quot; result is: undefined
+getKey &quot;This is to test,multiEntry indexes&quot; result is: undefined
+count result is: 11
+
+Initial upgrade versionchange transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernindex1privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/index-1-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/index-1-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/index-1-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/index-1.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernindex2privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/index-2-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/index-2-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/index-2-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,160 @@
</span><ins>+This tests indexes are left in appropriate states after aborted transactions.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+get &quot;good&quot; result is: [object Object]
+bar is good
+baz is bad
+getKey &quot;good&quot; result is: 1
+get &quot;bad&quot; result is: undefined
+getKey &quot;bad&quot; result is: undefined
+get &quot;multiEntry&quot; result is: undefined
+getKey &quot;multiEntry&quot; result is: undefined
+get &quot;test&quot; result is: undefined
+getKey &quot;test&quot; result is: undefined
+count result is: 2
+
+get &quot;good&quot; result is: undefined
+getKey &quot;good&quot; result is: undefined
+get &quot;bad&quot; result is: [object Object]
+bar is good
+baz is bad
+getKey &quot;bad&quot; result is: 1
+get &quot;multiEntry&quot; result is: undefined
+getKey &quot;multiEntry&quot; result is: undefined
+get &quot;test&quot; result is: undefined
+getKey &quot;test&quot; result is: undefined
+count result is: 1
+
+get &quot;good&quot; result is: [object Object]
+bar is good
+baz is bad
+getKey &quot;good&quot; result is: 1
+get &quot;bad&quot; result is: undefined
+getKey &quot;bad&quot; result is: undefined
+get &quot;multiEntry&quot; result is: [object Object]
+bar is multiEntry,test
+getKey &quot;multiEntry&quot; result is: 2
+get &quot;test&quot; result is: [object Object]
+bar is multiEntry,test
+getKey &quot;test&quot; result is: 2
+count result is: 3
+
+Initial upgrade versionchange transaction complete
+Deleted key 1 from objectstore
+
+get &quot;good&quot; result is: undefined
+getKey &quot;good&quot; result is: undefined
+get &quot;bad&quot; result is: undefined
+getKey &quot;bad&quot; result is: undefined
+get &quot;multiEntry&quot; result is: undefined
+getKey &quot;multiEntry&quot; result is: undefined
+get &quot;test&quot; result is: undefined
+getKey &quot;test&quot; result is: undefined
+count result is: 1
+
+get &quot;good&quot; result is: undefined
+getKey &quot;good&quot; result is: undefined
+get &quot;bad&quot; result is: undefined
+getKey &quot;bad&quot; result is: undefined
+get &quot;multiEntry&quot; result is: undefined
+getKey &quot;multiEntry&quot; result is: undefined
+get &quot;test&quot; result is: undefined
+getKey &quot;test&quot; result is: undefined
+count result is: 0
+
+get &quot;good&quot; result is: undefined
+getKey &quot;good&quot; result is: undefined
+get &quot;bad&quot; result is: undefined
+getKey &quot;bad&quot; result is: undefined
+get &quot;multiEntry&quot; result is: [object Object]
+bar is multiEntry,test
+getKey &quot;multiEntry&quot; result is: 2
+get &quot;test&quot; result is: [object Object]
+bar is multiEntry,test
+getKey &quot;test&quot; result is: 2
+count result is: 2
+
+Cleared objectstore
+
+get &quot;good&quot; result is: undefined
+getKey &quot;good&quot; result is: undefined
+get &quot;bad&quot; result is: undefined
+getKey &quot;bad&quot; result is: undefined
+get &quot;multiEntry&quot; result is: undefined
+getKey &quot;multiEntry&quot; result is: undefined
+get &quot;test&quot; result is: undefined
+getKey &quot;test&quot; result is: undefined
+count result is: 0
+
+get &quot;good&quot; result is: undefined
+getKey &quot;good&quot; result is: undefined
+get &quot;bad&quot; result is: undefined
+getKey &quot;bad&quot; result is: undefined
+get &quot;multiEntry&quot; result is: undefined
+getKey &quot;multiEntry&quot; result is: undefined
+get &quot;test&quot; result is: undefined
+getKey &quot;test&quot; result is: undefined
+count result is: 0
+
+get &quot;good&quot; result is: undefined
+getKey &quot;good&quot; result is: undefined
+get &quot;bad&quot; result is: undefined
+getKey &quot;bad&quot; result is: undefined
+get &quot;multiEntry&quot; result is: undefined
+getKey &quot;multiEntry&quot; result is: undefined
+get &quot;test&quot; result is: undefined
+getKey &quot;test&quot; result is: undefined
+count result is: 0
+
+All done. Moving on to final part
+readwrite transaction aborted
+get &quot;good&quot; result is: [object Object]
+bar is good
+baz is bad
+getKey &quot;good&quot; result is: 1
+get &quot;bad&quot; result is: undefined
+getKey &quot;bad&quot; result is: undefined
+get &quot;multiEntry&quot; result is: undefined
+getKey &quot;multiEntry&quot; result is: undefined
+get &quot;test&quot; result is: undefined
+getKey &quot;test&quot; result is: undefined
+count result is: 2
+
+get &quot;good&quot; result is: undefined
+getKey &quot;good&quot; result is: undefined
+get &quot;bad&quot; result is: [object Object]
+bar is good
+baz is bad
+getKey &quot;bad&quot; result is: 1
+get &quot;multiEntry&quot; result is: undefined
+getKey &quot;multiEntry&quot; result is: undefined
+get &quot;test&quot; result is: undefined
+getKey &quot;test&quot; result is: undefined
+count result is: 1
+
+get &quot;good&quot; result is: [object Object]
+bar is good
+baz is bad
+getKey &quot;good&quot; result is: 1
+get &quot;bad&quot; result is: undefined
+getKey &quot;bad&quot; result is: undefined
+get &quot;multiEntry&quot; result is: [object Object]
+bar is multiEntry,test
+getKey &quot;multiEntry&quot; result is: 2
+get &quot;test&quot; result is: [object Object]
+bar is multiEntry,test
+getKey &quot;test&quot; result is: 2
+count result is: 3
+
+readwrite transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernindex2privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/index-2-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/index-2-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/index-2-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/index-2.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernindex3privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/index-3-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/index-3-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/index-3-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,33 @@
</span><ins>+This test exercises the &quot;unique&quot; constraint of indexes.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+First put success
+Value of 1 is: [object Object]
+Value of 2 is: undefined
+Value of 3 is: undefined
+Count in index 1 is: 1
+Count in index 2 is: 1
+Second put failure
+Value of 1 is: [object Object]
+Value of 2 is: undefined
+Value of 3 is: undefined
+Count in index 1 is: 1
+Count in index 2 is: 1
+Third put failure
+Value of 1 is: [object Object]
+Value of 2 is: undefined
+Value of 3 is: undefined
+Count in index 1 is: 1
+Count in index 2 is: 1
+Initial upgrade versionchange transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernindex3privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/index-3-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/index-3-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/index-3-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/index-3.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernindex4privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/index-4-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/index-4-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/index-4-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,33 @@
</span><ins>+This tests that indexes added to an object store with existing records are populated upon their creation.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Count is: 18
+Cursor at record: A / 1
+Cursor at record: A / 2
+Cursor at record: B / 3
+Cursor at record: B / 4
+Cursor at record: C / 5
+Cursor at record: C / 6
+Cursor at record: D / 7
+Cursor at record: D / 8
+Cursor at record: E / 9
+Cursor at record: E / 10
+Cursor at record: F / 11
+Cursor at record: F / 12
+Cursor at record: G / 13
+Cursor at record: G / 14
+Cursor at record: H / 15
+Cursor at record: H / 16
+Cursor at record: I / 17
+Cursor at record: I / 18
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernindex4privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/index-4-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/index-4-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/index-4-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/index-4.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernindex5privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/index-5-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/index-5-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/index-5-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,17 @@
</span><ins>+This tests creating an index on an object store that already has records, and those records would violate the unique constraint of the index. (The index creation should fail).
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Error getting cursor count
+Error opening or iterating cursor
+Initial upgrade versionchange transaction aborted (expected because index creation failed, and that should've caused transaction abort)
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernindex5privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/index-5-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/index-5-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/index-5-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/index-5.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernindexcursor1privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/index-cursor-1-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/index-cursor-1-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/index-cursor-1-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,416 @@
</span><ins>+This tests cursors that iterate over entire indexes.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+
+Starting a new cursor: testCursorDirection(index1, 'next')
+TestIndex1 count is: 12
+TestIndex2 count is: 12
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: A
+Cursor primary key is: 1
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: A
+Cursor primary key is: 2
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: A
+Cursor primary key is: 3
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 4
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 5
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 6
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 7
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 8
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 9
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: D
+Cursor primary key is: 10
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: D
+Cursor primary key is: 11
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: D
+Cursor primary key is: 12
+Cursor value is: [object Object]
+
+Starting a new cursor: testCursorDirection(index2, 'next')
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex2
+Cursor key is: a
+Cursor primary key is: 1
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex2
+Cursor key is: a
+Cursor primary key is: 2
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex2
+Cursor key is: a
+Cursor primary key is: 3
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex2
+Cursor key is: b
+Cursor primary key is: 4
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex2
+Cursor key is: b
+Cursor primary key is: 5
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex2
+Cursor key is: b
+Cursor primary key is: 6
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex2
+Cursor key is: c
+Cursor primary key is: 7
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex2
+Cursor key is: c
+Cursor primary key is: 8
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex2
+Cursor key is: c
+Cursor primary key is: 9
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex2
+Cursor key is: d
+Cursor primary key is: 10
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex2
+Cursor key is: d
+Cursor primary key is: 11
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex2
+Cursor key is: d
+Cursor primary key is: 12
+Cursor value is: [object Object]
+
+Starting a new cursor: testCursorDirection(index1, 'nextunique')
+Success opening or iterating cursor
+Cursor direction is: nextunique
+Cursor source is: TestIndex1
+Cursor key is: A
+Cursor primary key is: 1
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: nextunique
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 4
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: nextunique
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 7
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: nextunique
+Cursor source is: TestIndex1
+Cursor key is: D
+Cursor primary key is: 10
+Cursor value is: [object Object]
+
+Starting a new cursor: testCursorDirection(index2, 'nextunique')
+Success opening or iterating cursor
+Cursor direction is: nextunique
+Cursor source is: TestIndex2
+Cursor key is: a
+Cursor primary key is: 1
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: nextunique
+Cursor source is: TestIndex2
+Cursor key is: b
+Cursor primary key is: 4
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: nextunique
+Cursor source is: TestIndex2
+Cursor key is: c
+Cursor primary key is: 7
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: nextunique
+Cursor source is: TestIndex2
+Cursor key is: d
+Cursor primary key is: 10
+Cursor value is: [object Object]
+
+Starting a new cursor: testCursorDirection(index1, 'prev')
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: D
+Cursor primary key is: 12
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: D
+Cursor primary key is: 11
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: D
+Cursor primary key is: 10
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 9
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 8
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 7
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 6
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 5
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 4
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: A
+Cursor primary key is: 3
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: A
+Cursor primary key is: 2
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: A
+Cursor primary key is: 1
+Cursor value is: [object Object]
+
+Starting a new cursor: testCursorDirection(index2, 'prev')
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex2
+Cursor key is: d
+Cursor primary key is: 12
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex2
+Cursor key is: d
+Cursor primary key is: 11
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex2
+Cursor key is: d
+Cursor primary key is: 10
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex2
+Cursor key is: c
+Cursor primary key is: 9
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex2
+Cursor key is: c
+Cursor primary key is: 8
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex2
+Cursor key is: c
+Cursor primary key is: 7
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex2
+Cursor key is: b
+Cursor primary key is: 6
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex2
+Cursor key is: b
+Cursor primary key is: 5
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex2
+Cursor key is: b
+Cursor primary key is: 4
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex2
+Cursor key is: a
+Cursor primary key is: 3
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex2
+Cursor key is: a
+Cursor primary key is: 2
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex2
+Cursor key is: a
+Cursor primary key is: 1
+Cursor value is: [object Object]
+
+Starting a new cursor: testCursorDirection(index1, 'prevunique')
+Success opening or iterating cursor
+Cursor direction is: prevunique
+Cursor source is: TestIndex1
+Cursor key is: D
+Cursor primary key is: 10
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prevunique
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 7
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prevunique
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 4
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prevunique
+Cursor source is: TestIndex1
+Cursor key is: A
+Cursor primary key is: 1
+Cursor value is: [object Object]
+
+Starting a new cursor: testCursorDirection(index2, 'prevunique')
+Success opening or iterating cursor
+Cursor direction is: prevunique
+Cursor source is: TestIndex2
+Cursor key is: d
+Cursor primary key is: 10
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prevunique
+Cursor source is: TestIndex2
+Cursor key is: c
+Cursor primary key is: 7
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prevunique
+Cursor source is: TestIndex2
+Cursor key is: b
+Cursor primary key is: 4
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prevunique
+Cursor source is: TestIndex2
+Cursor key is: a
+Cursor primary key is: 1
+Cursor value is: [object Object]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernindexcursor1privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/index-cursor-1-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/index-cursor-1-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/index-cursor-1-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/index-cursor-1.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernindexcursor2privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/index-cursor-2-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/index-cursor-2-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/index-cursor-2-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,439 @@
</span><ins>+This tests cursors that iterate over parts of indexes.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+
+Starting a new cursor: testCursorDirection('next', IDBKeyRange.bound('B', 'D', true, true))
+TestIndex1 count is: 12
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 7
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 8
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 9
+Cursor value is: [object Object]
+
+Starting a new cursor: testCursorDirection('nextunique', IDBKeyRange.bound('B', 'D', true, true))
+Success opening or iterating cursor
+Cursor direction is: nextunique
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 7
+Cursor value is: [object Object]
+
+Starting a new cursor: testCursorDirection('prev', IDBKeyRange.bound('B', 'D', true, true))
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 9
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 8
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 7
+Cursor value is: [object Object]
+
+Starting a new cursor: testCursorDirection('prevunique', IDBKeyRange.bound('B', 'D', true, true))
+Success opening or iterating cursor
+Cursor direction is: prevunique
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 7
+Cursor value is: [object Object]
+
+Starting a new cursor: testCursorDirection('next', IDBKeyRange.bound('B', 'C'))
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 4
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 5
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 6
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 7
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 8
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 9
+Cursor value is: [object Object]
+
+Starting a new cursor: testCursorDirection('nextunique', IDBKeyRange.bound('B', 'C'))
+Success opening or iterating cursor
+Cursor direction is: nextunique
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 4
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: nextunique
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 7
+Cursor value is: [object Object]
+
+Starting a new cursor: testCursorDirection('prev', IDBKeyRange.bound('B', 'C'))
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 9
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 8
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 7
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 6
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 5
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 4
+Cursor value is: [object Object]
+
+Starting a new cursor: testCursorDirection('prevunique', IDBKeyRange.bound('B', 'C'))
+Success opening or iterating cursor
+Cursor direction is: prevunique
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 7
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prevunique
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 4
+Cursor value is: [object Object]
+
+Starting a new cursor: testCursorDirection('next', IDBKeyRange.upperBound('B'))
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: A
+Cursor primary key is: 1
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: A
+Cursor primary key is: 2
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: A
+Cursor primary key is: 3
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 4
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 5
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 6
+Cursor value is: [object Object]
+
+Starting a new cursor: testCursorDirection('nextunique', IDBKeyRange.upperBound('B'))
+Success opening or iterating cursor
+Cursor direction is: nextunique
+Cursor source is: TestIndex1
+Cursor key is: A
+Cursor primary key is: 1
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: nextunique
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 4
+Cursor value is: [object Object]
+
+Starting a new cursor: testCursorDirection('prev', IDBKeyRange.upperBound('B'))
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 6
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 5
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 4
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: A
+Cursor primary key is: 3
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: A
+Cursor primary key is: 2
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: A
+Cursor primary key is: 1
+Cursor value is: [object Object]
+
+Starting a new cursor: testCursorDirection('prevunique', IDBKeyRange.upperBound('B'))
+Success opening or iterating cursor
+Cursor direction is: prevunique
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 4
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prevunique
+Cursor source is: TestIndex1
+Cursor key is: A
+Cursor primary key is: 1
+Cursor value is: [object Object]
+
+Starting a new cursor: testCursorDirection('next', IDBKeyRange.lowerBound('C'))
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 7
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 8
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 9
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: D
+Cursor primary key is: 10
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: D
+Cursor primary key is: 11
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: D
+Cursor primary key is: 12
+Cursor value is: [object Object]
+
+Starting a new cursor: testCursorDirection('nextunique', IDBKeyRange.lowerBound('C'))
+Success opening or iterating cursor
+Cursor direction is: nextunique
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 7
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: nextunique
+Cursor source is: TestIndex1
+Cursor key is: D
+Cursor primary key is: 10
+Cursor value is: [object Object]
+
+Starting a new cursor: testCursorDirection('prev', IDBKeyRange.lowerBound('C'))
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: D
+Cursor primary key is: 12
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: D
+Cursor primary key is: 11
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: D
+Cursor primary key is: 10
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 9
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 8
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 7
+Cursor value is: [object Object]
+
+Starting a new cursor: testCursorDirection('prevunique', IDBKeyRange.lowerBound('C'))
+Success opening or iterating cursor
+Cursor direction is: prevunique
+Cursor source is: TestIndex1
+Cursor key is: D
+Cursor primary key is: 10
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prevunique
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 7
+Cursor value is: [object Object]
+
+Starting a new cursor: testCursorDirection('next', IDBKeyRange.only('B'))
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 4
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 5
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 6
+Cursor value is: [object Object]
+
+Starting a new cursor: testCursorDirection('nextunique', IDBKeyRange.only('B'))
+Success opening or iterating cursor
+Cursor direction is: nextunique
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 4
+Cursor value is: [object Object]
+
+Starting a new cursor: testCursorDirection('prev', IDBKeyRange.only('B'))
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 6
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 5
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 4
+Cursor value is: [object Object]
+
+Starting a new cursor: testCursorDirection('prevunique', IDBKeyRange.only('B'))
+Success opening or iterating cursor
+Cursor direction is: prevunique
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 4
+Cursor value is: [object Object]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernindexcursor2privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/index-cursor-2-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/index-cursor-2-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/index-cursor-2-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/index-cursor-2.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernindexcursor3privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/index-cursor-3-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/index-cursor-3-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/index-cursor-3-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,281 @@
</span><ins>+This tests that index cursors properly handle changing indexes.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Starting a new cursor: testCursorDirection(index, 'next')
+TestIndex1 count is: 18
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: A
+Cursor primary key is: 1
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: A
+Cursor primary key is: 2
+Cursor value is: [object Object]
+Deleted key 2 from object store
+Deleted key 3 from object store
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 4
+Cursor value is: [object Object]
+Deleted key 4 from object store
+Deleted key 5 from object store
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 6
+Cursor value is: [object Object]
+Deleted key 6 from object store
+Deleted key 7 from object store
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: D
+Cursor primary key is: 8
+Cursor value is: [object Object]
+Deleted key 8 from object store
+Deleted key 9 from object store
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: E
+Cursor primary key is: 10
+Cursor value is: [object Object]
+Deleted key 10 from object store
+Deleted key 11 from object store
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: F
+Cursor primary key is: 12
+Cursor value is: [object Object]
+Deleted key 12 from object store
+Deleted key 13 from object store
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: G
+Cursor primary key is: 14
+Cursor value is: [object Object]
+Deleted key 14 from object store
+Deleted key 15 from object store
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: H
+Cursor primary key is: 16
+Cursor value is: [object Object]
+Deleted key 16 from object store
+Deleted key 17 from object store
+Success opening or iterating cursor
+Cursor direction is: next
+Cursor source is: TestIndex1
+Cursor key is: I
+Cursor primary key is: 18
+Cursor value is: [object Object]
+Deleted key 18 from object store
+Success opening or iterating cursor
+Starting a new cursor: testCursorDirection(index, 'prev')
+TestIndex1 count is: 18
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: I
+Cursor primary key is: 18
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: I
+Cursor primary key is: 17
+Cursor value is: [object Object]
+Deleted key 17 from object store
+Deleted key 16 from object store
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: H
+Cursor primary key is: 15
+Cursor value is: [object Object]
+Deleted key 15 from object store
+Deleted key 14 from object store
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: G
+Cursor primary key is: 13
+Cursor value is: [object Object]
+Deleted key 13 from object store
+Deleted key 12 from object store
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: F
+Cursor primary key is: 11
+Cursor value is: [object Object]
+Deleted key 11 from object store
+Deleted key 10 from object store
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: E
+Cursor primary key is: 9
+Cursor value is: [object Object]
+Deleted key 9 from object store
+Deleted key 8 from object store
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: D
+Cursor primary key is: 7
+Cursor value is: [object Object]
+Deleted key 7 from object store
+Deleted key 6 from object store
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 5
+Cursor value is: [object Object]
+Deleted key 5 from object store
+Deleted key 4 from object store
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 3
+Cursor value is: [object Object]
+Deleted key 3 from object store
+Deleted key 2 from object store
+Success opening or iterating cursor
+Cursor direction is: prev
+Cursor source is: TestIndex1
+Cursor key is: A
+Cursor primary key is: 1
+Cursor value is: [object Object]
+Deleted key 1 from object store
+Success opening or iterating cursor
+Starting a new cursor: testCursorDirection(index, 'nextunique')
+TestIndex1 count is: 18
+Success opening or iterating cursor
+Cursor direction is: nextunique
+Cursor source is: TestIndex1
+Cursor key is: A
+Cursor primary key is: 1
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: nextunique
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 3
+Cursor value is: [object Object]
+Deleted key 3 from object store
+Deleted key 4 from object store
+Deleted key 5 from object store
+Success opening or iterating cursor
+Cursor direction is: nextunique
+Cursor source is: TestIndex1
+Cursor key is: C
+Cursor primary key is: 6
+Cursor value is: [object Object]
+Deleted key 6 from object store
+Deleted key 7 from object store
+Deleted key 8 from object store
+Success opening or iterating cursor
+Cursor direction is: nextunique
+Cursor source is: TestIndex1
+Cursor key is: E
+Cursor primary key is: 9
+Cursor value is: [object Object]
+Deleted key 9 from object store
+Deleted key 10 from object store
+Deleted key 11 from object store
+Success opening or iterating cursor
+Cursor direction is: nextunique
+Cursor source is: TestIndex1
+Cursor key is: F
+Cursor primary key is: 12
+Cursor value is: [object Object]
+Deleted key 12 from object store
+Deleted key 13 from object store
+Deleted key 14 from object store
+Success opening or iterating cursor
+Cursor direction is: nextunique
+Cursor source is: TestIndex1
+Cursor key is: H
+Cursor primary key is: 15
+Cursor value is: [object Object]
+Deleted key 15 from object store
+Deleted key 16 from object store
+Deleted key 17 from object store
+Success opening or iterating cursor
+Cursor direction is: nextunique
+Cursor source is: TestIndex1
+Cursor key is: I
+Cursor primary key is: 18
+Cursor value is: [object Object]
+Deleted key 18 from object store
+Deleted key 1 from object store
+Success opening or iterating cursor
+Starting a new cursor: testCursorDirection(index, 'prevunique')
+TestIndex1 count is: 18
+Success opening or iterating cursor
+Cursor direction is: prevunique
+Cursor source is: TestIndex1
+Cursor key is: I
+Cursor primary key is: 17
+Cursor value is: [object Object]
+Success opening or iterating cursor
+Cursor direction is: prevunique
+Cursor source is: TestIndex1
+Cursor key is: H
+Cursor primary key is: 15
+Cursor value is: [object Object]
+Deleted key 15 from object store
+Deleted key 14 from object store
+Deleted key 13 from object store
+Success opening or iterating cursor
+Cursor direction is: prevunique
+Cursor source is: TestIndex1
+Cursor key is: F
+Cursor primary key is: 11
+Cursor value is: [object Object]
+Deleted key 11 from object store
+Deleted key 10 from object store
+Deleted key 9 from object store
+Success opening or iterating cursor
+Cursor direction is: prevunique
+Cursor source is: TestIndex1
+Cursor key is: D
+Cursor primary key is: 7
+Cursor value is: [object Object]
+Deleted key 7 from object store
+Deleted key 6 from object store
+Deleted key 5 from object store
+Success opening or iterating cursor
+Cursor direction is: prevunique
+Cursor source is: TestIndex1
+Cursor key is: B
+Cursor primary key is: 3
+Cursor value is: [object Object]
+Deleted key 3 from object store
+Deleted key 2 from object store
+Deleted key 1 from object store
+Success opening or iterating cursor
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernindexcursor3privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/index-cursor-3-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/index-cursor-3-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/index-cursor-3-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/index-cursor-3.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernindexgetcountbasicprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/index-get-count-basic-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/index-get-count-basic-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/index-get-count-basic-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,20 @@
</span><ins>+This tests the most basic operation of the IDBIndex methods get(), getKey(), and count().
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+get result is: [object Object]
+bar is good
+baz is bad
+getKey result is: foo
+count result is: 1
+Initial upgrade versionchange transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernindexgetcountbasicprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/index-get-count-basic-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/index-get-count-basic-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/index-get-count-basic-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/index-get-count-basic.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernindexgetcountfailuresprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/index-get-count-failures-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/index-get-count-failures-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/index-get-count-failures-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,28 @@
</span><ins>+This tests some obvious failures that can happen while calling the IDBIndex methods get(), getKey(), and count().
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Failed to get with a null key
+Failed to getKey with a null key
+Failed to get with deleted IDBIndex
+Failed to getKey with deleted IDBIndex
+Failed to count with deleted IDBIndex
+Failed to delete a nonexistent IDBIndex
+Failed to get with deleted IDBObjectStore
+Failed to getKey with deleted IDBObjectStore
+Failed to count with deleted IDBObjectStore
+Initial upgrade versionchange transaction complete
+Failed to get while transaction inactive
+Failed to getKey while transaction inactive
+Failed to count while transaction inactive
+readonly transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernindexgetcountfailuresprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/index-get-count-failures-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/index-get-count-failures-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/index-get-count-failures-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/index-get-count-failures.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernkeypathbasicprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/keypath-basic-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/keypath-basic-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/keypath-basic-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,19 @@
</span><ins>+This test creates some object stores with keypaths. It then puts some values in them. It makes sure the keys used are as expected.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+object put SUCCESS - foo1
+array put SUCCESS - foo2
+Second object put SUCCESS - baz1
+Second array put SUCCESS - baz2
+Initial upgrade versionchange transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernkeypathbasicprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/keypath-basic-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/keypath-basic-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/keypath-basic-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/keypath-basic.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernmemoryindexnotdeletedwithobjectstoreprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/memory-index-not-deleted-with-objectstore-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/memory-index-not-deleted-with-objectstore-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/memory-index-not-deleted-with-objectstore-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,164 @@
</span><ins>+Makes sure that when an in-memory object store is deleted, any in-memory indexes it has are also deleted. If the test does not crash, it passes.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+connection = event.target.result;
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+store = connection.createObjectStore('name');
+index = store.createIndex('name', 'foo');
+Deleted all object stores.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernmemoryindexnotdeletedwithobjectstoreprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/memory-index-not-deleted-with-objectstore-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/memory-index-not-deleted-with-objectstore-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/memory-index-not-deleted-with-objectstore-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/memory-index-not-deleted-with-objectstore.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernobjectstoreattributesprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/objectstore-attributes-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/objectstore-attributes-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/objectstore-attributes-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,40 @@
</span><ins>+This test exercises the readonly attributes on an IDBObjectStore.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+First upgrade needed: Old version - 0 New version - 1
+[object IDBTransaction] - versionchange
+[object IDBDatabase]
+TestObjectStore1
+TestObjectStore2
+true
+false
+foo
+null
+[object IDBTransaction]
+[object IDBTransaction]
+true
+true
+true
+Object store has indexes:
+Bar index
+Foo index
+After adding another, object store now has indexes:
+Bar index
+Baz index
+Foo index
+First version change transaction completed
+In a new transaction, object store has indexes:
+Bar index
+Baz index
+Foo index
+readonly transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernobjectstoreattributesprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/objectstore-attributes-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/objectstore-attributes-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/objectstore-attributes-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/objectstore-attributes.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernobjectstorecursoradvancefailuresprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/objectstore-cursor-advance-failures-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/objectstore-cursor-advance-failures-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/objectstore-cursor-advance-failures-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,22 @@
</span><ins>+This tests some obvious failures that can happen while calling IDBCursor.advance() on object store cursors.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Failed to advance object store cursor with undefined count argument
+Failed to advance object store cursor with '0' count argument
+Failed to advance object store cursor with negative count argument
+Failed to advance object store cursor after deleting object store
+Failed to advance an object store cursor when it is already fetching the next record
+Initial upgrade versionchange transaction complete
+Failed to advance object store cursor while transaction inactive
+readonly transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernobjectstorecursoradvancefailuresprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/objectstore-cursor-advance-failures-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/objectstore-cursor-advance-failures-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/objectstore-cursor-advance-failures-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/objectstore-cursor-advance-failures.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernobjectstorecursorcontinuefailuresprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/objectstore-cursor-continue-failures-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/objectstore-cursor-continue-failures-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/objectstore-cursor-continue-failures-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,22 @@
</span><ins>+This tests some obvious failures that can happen while calling IDBCursor.continue() on object store cursors.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Failed to continue a 'next' object store cursor to a key less than the current key
+Failed to continue object store cursor with invalid key
+Failed to continue object store cursor after deleting object store
+Failed to continue a 'prev' object store cursor to a key greater than the current key
+Failed to continue an object store cursor when it is already fetching the next record
+Initial upgrade versionchange transaction complete
+Failed to continue object store cursor while transaction inactive
+readonly transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernobjectstorecursorcontinuefailuresprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/objectstore-cursor-continue-failures-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/objectstore-cursor-continue-failures-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/objectstore-cursor-continue-failures-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/objectstore-cursor-continue-failures.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernopencursorfailuresprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/opencursor-failures-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/opencursor-failures-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/opencursor-failures-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,31 @@
</span><ins>+This tests some obvious failures that can happen while opening cursors.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Failed to open object store cursor with invalid keypath
+Failed to open object store cursor with invalid direction
+Failed to open index cursor with invalid keypath
+Failed to open index cursor with invalid direction
+Failed to open index key cursor with invalid keypath
+Failed to open index key cursor with invalid direction
+Failed to open object store cursor on deleted object store
+Failed to open index cursor on deleted object store
+Failed to open index key cursor on deleted object store
+Initial upgrade versionchange transaction complete
+Failed to open object store cursor from completed transaction
+Failed to open index cursor from completed transaction
+Failed to open index key cursor from completed transaction
+Failed to open object store cursor from inactive transaction
+Failed to open index cursor from inactive transaction
+Failed to open index key cursor from inactive transaction
+readonly transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernopencursorfailuresprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/opencursor-failures-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/opencursor-failures-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/opencursor-failures-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/opencursor-failures.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernopendatabaserequesteventprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/opendatabase-request-event-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/opendatabase-request-event-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/opendatabase-request-event-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,13 @@
</span><ins>+This test calls open on window.indexedDB in various ways, verifying that IDBOpenDBRequest objects are returned when expected and exceptions are thrown when expected.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+Caught exception TypeError: Type error
+Caught exception TypeError: Value -1 is outside the range [0, 9007199254740991]
+[object IDBOpenDBRequest]
+upgradeneeded: old version - 0 new version - 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernopendatabaserequesteventprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/opendatabase-request-event-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/opendatabase-request-event-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/opendatabase-request-event-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/opendatabase-request-event.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernopendatabaserequestprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/opendatabase-request-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/opendatabase-request-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/opendatabase-request-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,13 @@
</span><ins>+This test calls open on window.indexedDB in various ways, verifying that IDBOpenDBRequest objects are returned when expected and exceptions are thrown when expected.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+[object IDBOpenDBRequest]
+[object IDBOpenDBRequest]
+TypeError: Not enough arguments
+TypeError: Type error
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernopendatabaserequestprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/opendatabase-request-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/opendatabase-request-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/opendatabase-request-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/opendatabase-request.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernopendatabasesuccessafterversionchangeprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/opendatabase-success-after-versionchange-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/opendatabase-success-after-versionchange-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/opendatabase-success-after-versionchange-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,17 @@
</span><ins>+This test verifies that: - Opening a new database results in the onupgradeneeded handler being called on the IDBOpenDBRequest. - The versionchange transaction representing the upgrade commits successfully. - After that transaction commits, the onsuccess handler on the original IDBOpenDBRequest is called.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+upgradeneeded: old version - 0 new version - 1
+[object IDBTransaction]
+Version change complete
+Got the onsuccess handler as expected.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernopendatabasesuccessafterversionchangeprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/opendatabase-success-after-versionchange-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/opendatabase-success-after-versionchange-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/opendatabase-success-after-versionchange-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/opendatabase-success-after-versionchange.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernopendatabaseversionsprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/opendatabase-versions-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/opendatabase-versions-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/opendatabase-versions-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,26 @@
</span><ins>+This test creates a new database with the default version, commits that versionchange transaction, and then reopens it at different versions to make sure the IDBOpenDBRequests behave appropriately.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+upgradeneeded (firstPhase): old version - 0 new version - 1
+[object IDBTransaction]
+Version change complete (firstPhase). Database version is now - 1
+[object IDBOpenDBRequest] (secondPhase)
+Open request error (firstPhase) AbortError
+Successfully opened database at version 1 (secondPhase)
+[object IDBOpenDBRequest] (thirdPhase)
+upgradeneeded (thirdPhase): old version - 1 new version - 2
+[object IDBTransaction]
+Version change complete (thirdPhase). Database version is now - 2
+[object IDBOpenDBRequest] (fourthPhase)
+Open request error (thirdPhase) AbortError
+Expected error (fourthPhase) - VersionError
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernopendatabaseversionsprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/opendatabase-versions-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/opendatabase-versions-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/opendatabase-versions-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/opendatabase-versions.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernrequestreadystateprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/request-readystate-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/request-readystate-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/request-readystate-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,17 @@
</span><ins>+This test makes sure that IDBRequest.readyState returns expected values.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+After calling indexedDB.open(), create request readyState is: pending
+Initial upgrade needed: Old version - 0 New version - 1
+Create request readyState is: done
+After calling openCursor, request readyState is: pending
+After successful opening of the cursor, request readyState is: done
+After calling continue(), request readyState is: pending
+After continue() completed, request readyState is: done
+Initial upgrade versionchange transaction complete
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernrequestreadystateprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/request-readystate-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/request-readystate-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/request-readystate-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;script src=&quot;resources/request-readystate.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernresourcesopendatabaserequesteventjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/storage/indexeddb/modern/resources/opendatabase-request-event.js (195393 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/resources/opendatabase-request-event.js        2016-01-21 01:49:12 UTC (rev 195393)
+++ trunk/LayoutTests/storage/indexeddb/modern/resources/opendatabase-request-event.js        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -1,12 +1,11 @@
</span><span class="cx"> description(&quot;This test calls open on window.indexedDB in various ways, verifying that IDBOpenDBRequest objects are returned when expected and exceptions are thrown when expected.&quot;);
</span><span class="cx"> 
</span><del>-
</del><span class="cx"> function done()
</span><span class="cx"> {
</span><span class="cx">     finishJSTest();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-var dbname = &quot;TestDatabase&quot; + Date();
</del><ins>+var dbname = setDBNameFromPath() + Date();
</ins><span class="cx"> 
</span><span class="cx"> try {
</span><span class="cx">     window.indexedDB.open(dbname, 0);
</span></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernresourcesopendatabaseversionsjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/storage/indexeddb/modern/resources/opendatabase-versions.js (195393 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/resources/opendatabase-versions.js        2016-01-21 01:49:12 UTC (rev 195393)
+++ trunk/LayoutTests/storage/indexeddb/modern/resources/opendatabase-versions.js        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -13,25 +13,22 @@
</span><span class="cx">     finishJSTest();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-var request = window.indexedDB.open(&quot;VersionTestDatabase&quot;);
-
</del><span class="cx"> function openSuccessful()
</span><span class="cx"> {
</span><span class="cx">     debug(&quot;First version change successful&quot;);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-var dbname;
</del><ins>+var dbname = setDBNameFromPath() + Date();
</ins><span class="cx"> function prepareDatabase(e)
</span><span class="cx"> {
</span><span class="cx">     var database = event.target.result;
</span><del>-    dbname = database.name;
</del><span class="cx"> 
</span><span class="cx">     event.target.onerror = function(e) {
</span><span class="cx">         debug(&quot;Open request error (firstPhase) &quot; + event.target.error.name);
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     debug(&quot;upgradeneeded (firstPhase): old version - &quot; + e.oldVersion + &quot; new version - &quot; + e.newVersion);
</span><del>-    debug(request.transaction);
</del><ins>+    debug(event.target.transaction);
</ins><span class="cx">     event.target.transaction.oncomplete = function()
</span><span class="cx">     {
</span><span class="cx">         debug(&quot;Version change complete (firstPhase). Database version is now - &quot; + database.version);
</span></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernresourcesrequestreadystatejs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/storage/indexeddb/modern/resources/request-readystate.js (195393 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/resources/request-readystate.js        2016-01-21 01:49:12 UTC (rev 195393)
+++ trunk/LayoutTests/storage/indexeddb/modern/resources/request-readystate.js        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -1,6 +1,5 @@
</span><span class="cx"> description(&quot;This test makes sure that IDBRequest.readyState returns expected values.&quot;);
</span><span class="cx"> 
</span><del>-
</del><span class="cx"> function done()
</span><span class="cx"> {
</span><span class="cx">     finishJSTest();
</span><span class="lines">@@ -11,7 +10,8 @@
</span><span class="cx">     debug(message);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-var createRequest = window.indexedDB.open(&quot;RequestReadyStateDatabase&quot; + Date(), 1);
</del><ins>+var dbname = setDBNameFromPath() + Date();
+var createRequest = window.indexedDB.open(dbname, 1);
</ins><span class="cx"> debug(&quot;After calling indexedDB.open(), create request readyState is: &quot; + createRequest.readyState);
</span><span class="cx"> 
</span><span class="cx"> createRequest.onupgradeneeded = function(event) {
</span></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernresourcesversionchangeabortthenreopenjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/storage/indexeddb/modern/resources/versionchange-abort-then-reopen.js (195393 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/resources/versionchange-abort-then-reopen.js        2016-01-21 01:49:12 UTC (rev 195393)
+++ trunk/LayoutTests/storage/indexeddb/modern/resources/versionchange-abort-then-reopen.js        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -11,6 +11,7 @@
</span><span class="cx">     finishJSTest();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+var dbname;
</ins><span class="cx"> function prepareDatabase(event)
</span><span class="cx"> {
</span><span class="cx">     debug(&quot;Initial upgrade needed: Old version - &quot; + event.oldVersion + &quot; New version - &quot; + event.newVersion);
</span><span class="lines">@@ -19,7 +20,7 @@
</span><span class="cx"> 
</span><span class="cx">     var versionTransaction = event.target.transaction;
</span><span class="cx">     var database = event.target.result;
</span><del>-    event.target.onerror = null;
</del><ins>+    dbname = database.name;
</ins><span class="cx">     
</span><span class="cx">     versionTransaction.abort();
</span><span class="cx"> 
</span><span class="lines">@@ -41,7 +42,7 @@
</span><span class="cx"> 
</span><span class="cx"> function continueTest1()
</span><span class="cx"> {
</span><del>-    createRequest = window.indexedDB.open(&quot;VersionChangeAbortTestDatabase&quot;, 1);
</del><ins>+    createRequest = window.indexedDB.open(dbname, 1);
</ins><span class="cx"> 
</span><span class="cx">     createRequest.onupgradeneeded = function(event) {
</span><span class="cx">         debug(&quot;Second upgrade needed: Old version - &quot; + event.oldVersion + &quot; New version - &quot; + event.newVersion);
</span><span class="lines">@@ -69,7 +70,7 @@
</span><span class="cx"> 
</span><span class="cx"> function continueTest2()
</span><span class="cx"> {
</span><del>-    createRequest = window.indexedDB.open(&quot;VersionChangeAbortTestDatabase&quot;, 2);
</del><ins>+    createRequest = window.indexedDB.open(dbname, 2);
</ins><span class="cx"> 
</span><span class="cx">     createRequest.onupgradeneeded = function(event) {
</span><span class="cx">         debug(&quot;Third upgrade needed: Old version - &quot; + event.oldVersion + &quot; New version - &quot; + event.newVersion);
</span><span class="lines">@@ -98,7 +99,7 @@
</span><span class="cx"> 
</span><span class="cx"> function continueTest3()
</span><span class="cx"> {
</span><del>-    createRequest = window.indexedDB.open(&quot;VersionChangeAbortTestDatabase&quot;, 2);
</del><ins>+    createRequest = window.indexedDB.open(dbname, 2);
</ins><span class="cx"> 
</span><span class="cx">     createRequest.onupgradeneeded = function(event) {
</span><span class="cx">         debug(&quot;Fourth upgrade needed: Old version - &quot; + event.oldVersion + &quot; New version - &quot; + event.newVersion);
</span></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderntransactionscheduler1privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-1-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-1-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-1-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,18 @@
</span><ins>+This test makes sure that two read-only transactions to an object store are active at the same time.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Upgrade needed: Old version - 0 New version - 1
+versionchange transaction completed
+Success opening database connection - request 1
+Success opening database connection - request 2
+Two transactions open at once. Yay.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderntransactionscheduler1privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-1-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-1-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-1-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/transaction-scheduler-1.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderntransactionscheduler2privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-2-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-2-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-2-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,18 @@
</span><ins>+This test makes sure that two read-only transactions to two different object stores are active at the same time.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Upgrade needed: Old version - 0 New version - 1
+versionchange transaction completed
+Success opening database connection - Starting transaction to ObjectStore OS1
+Success opening database connection - Starting transaction to ObjectStore OS2
+Two transactions open at once. Yay.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderntransactionscheduler2privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-2-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-2-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-2-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/transaction-scheduler-2.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderntransactionscheduler3privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-3-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-3-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-3-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,20 @@
</span><ins>+This test makes sure that a write transaction is blocked by a read transaction with overlapping scope. It also makes sure the write transaction starts after the read transaction completes.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Upgrade needed: Old version - 0 New version - 1
+versionchange transaction completed
+Success opening database connection - Starting readonly transaction
+Creating write transaction
+Read transaction complete - [object Event]
+Write transaction put success
+Write transaction complete - [object Event]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderntransactionscheduler3privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-3-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-3-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-3-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/transaction-scheduler-3.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderntransactionscheduler4privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-4-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-4-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-4-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,33 @@
</span><ins>+Makes sure that a read-only transaction scheduled after a read-write transaction with overlapping scope does not start until the read-write transaction completes
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+connection = event.target.result;
+objectStore = connection.createObjectStore('store');
+transaction1 = connection.transaction('store', 'readwrite');
+transaction2 = connection.transaction('store', 'readonly');
+getRequest = transaction2.objectStore('store').get('foo');
+Starting a series of 20 puts in the readwrite transaction to make sure the readonly transaction is deferred for some time
+putCount = 0;
+readWriteTransactionDone = false;
+getRequestDone = false;
+20th put complete
+Transaction 1 (readwrite) completed with 20 puts completed.
+PASS getRequestDone is false
+PASS putCount is 20
+Getting the value of 'foo' completed - This means the readonly transaction started. At this point 20 puts completed in the readwrite transaction.
+PASS readWriteTransactionDone is true
+PASS putCount is 20
+Transaction 1 (readonly) completed
+PASS readWriteTransactionDone is true
+PASS getRequestDone is true
+PASS putCount is 20
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderntransactionscheduler4privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-4-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-4-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-4-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/transaction-scheduler-4.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderntransactionscheduler5privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-5-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-5-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-5-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,21 @@
</span><ins>+This test creates two object stores. It then opens two long running read-only transactions, one per object store. It then opens a read-write transaction to both object stores. The read-only transactions both need to finish before the read-write transaction starts.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Upgrade needed: Old version - 0 New version - 1
+versionchange transaction completed
+Success opening database connection - Starting transactions
+Starting write transaction
+Read transaction complete - [object Event]
+Read transaction complete - [object Event]
+Write to OS1 successful
+Write to OS2 successful
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderntransactionscheduler5privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-5-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-5-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-5-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/transaction-scheduler-5.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderntransactionscheduler6privateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-6-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-6-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-6-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,21 @@
</span><ins>+This test starts two read-only transactions to an object store followed by a read-write transaction. It verifies that the read-write doesn't start until both read-onlys have finished.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Upgrade needed: Old version - 0 New version - 1
+versionchange transaction completed
+Starting a readonly transaction
+Starting a readonly transaction
+readonly transaction completed
+readonly transaction completed
+Write in readwrite transaction succeeded
+readwrite transaction completed
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderntransactionscheduler6privatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-6-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-6-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/transaction-scheduler-6-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/transaction-scheduler-6.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderntransactionsstoponnavigationprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/transactions-stop-on-navigation-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/transactions-stop-on-navigation-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/transactions-stop-on-navigation-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,2 @@
</span><ins>+Makes sure transactions stop on navigation to a new page. If the previous page's transaction is blindly charging forward, this test will probably timeout. If the previous page's connection/transactions did not clean up properly, the delete request in this test will incorrectly be blocked. If every thing is peachy keen, the delete request in this test will correctly succeed.
+Delete request was successful.Done.
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmoderntransactionsstoponnavigationprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/transactions-stop-on-navigation-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/transactions-stop-on-navigation-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/transactions-stop-on-navigation-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/transactions-stop-on-navigation.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernversionchangeabortthenreopenprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/versionchange-abort-then-reopen-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/versionchange-abort-then-reopen-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/versionchange-abort-then-reopen-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,20 @@
</span><ins>+This test opens a new database, then aborts the version change transaction. It then reopens the database, making sure it's a default, empty database, and changes the version successfully. It then reopens the database, upgrading it's version. It aborts this versionchange, as well. Finally it reopens the database again, upgrading its version, making sure things had reverted back to before the second aborted versionchange.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+Initial upgrade needed: Old version - 0 New version - 1
+Initial upgrade versionchange transaction aborted
+Second upgrade needed: Old version - 0 New version - 1
+Second upgrade versionchange transaction complete
+Third upgrade needed: Old version - 1 New version - 2
+Third upgrade versionchange transaction aborted
+Fourth upgrade needed: Old version - 1 New version - 2
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernversionchangeabortthenreopenprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/versionchange-abort-then-reopen-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/versionchange-abort-then-reopen-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/versionchange-abort-then-reopen-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/versionchange-abort-then-reopen.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernversionchangeeventprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/versionchange-event-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/versionchange-event-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/versionchange-event-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,21 @@
</span><ins>+This test: -Opens a connection to a database at version 1, creating the database -Commits the version change transaction for that database -Opens a second connection to that database, requesting version 1 -Opens a third connection to that database, requesting version 2 -Makes sure the first and second connections get the versionchange event -Closes the first and second connections -Makes sure the versionchange transaction for the second connection starts successfully
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+upgradeneeded (firstPhase): old version - 0 new version - 1
+Version change complete (firstPhase). Database version is now - 1
+First version change successful
+Open success (secondPhase)
+thirdPhase - Requested database connection with version 2
+Expected upgrade needed (thirdPhase)
+firstPhase connection had received oldVersion: 1, newVersion: 2
+secondPhase connection had received oldVersion: 1, newVersion: 2
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmodernversionchangeeventprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/modern/versionchange-event-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/modern/versionchange-event-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/versionchange-event-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/versionchange-event.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaaddtwicefailureprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/add-twice-failure-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/add-twice-failure-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/add-twice-failure-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,19 @@
</span><ins>+Test IndexedDB behavior adding the same property twice
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+objectStore = db.createObjectStore('foo');
+key = 10
+request = objectStore.add({}, key);
+PASS request.result is key
+request = objectStore.add({}, key);
+PASS event.target.error.name is 'ConstraintError'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaaddtwicefailureprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/add-twice-failure-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/add-twice-failure-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/add-twice-failure-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/add-twice-failure.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaautoincrementindexesprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/autoincrement-indexes-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/autoincrement-indexes-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/autoincrement-indexes-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,32 @@
</span><ins>+Test IndexedDB indexes against autoincrementing keys
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+objectStore = db.createObjectStore('autoincrement-id', { keyPath: 'id', autoIncrement: true });
+objectStore.createIndex('first', 'first');
+objectStore.createIndex('second', 'second');
+objectStore.createIndex('third', 'third');
+data = { first: 'foo', second: 'foo', third: 'foo' };
+request = objectStore.add(data);
+key = event.target.result;
+PASS key == null is false
+expected key is 1
+objectStore = db.transaction('autoincrement-id').objectStore('autoincrement-id');
+first = objectStore.index('first');
+request = first.get('foo');
+PASS event.target.result.id is key
+second = objectStore.index('second');
+request = second.get('foo');
+PASS event.target.result.id is key
+third = objectStore.index('third');
+request = third.get('foo');
+PASS event.target.result.id is key
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaautoincrementindexesprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/autoincrement-indexes-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/autoincrement-indexes-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/autoincrement-indexes-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/autoincrement-indexes.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillabadkeypathprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/bad-keypath-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/bad-keypath-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/bad-keypath-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,20 @@
</span><ins>+Test IndexedDB adding property with invalid keypath
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+objectStore = db.createObjectStore('foo', { keyPath: 'keyPath' });
+request = objectStore.add({ keyPath: 'foo' });
+Expecting exception from request = objectStore.add({});
+PASS Exception was thrown.
+PASS code is 0
+PASS ename is 'DataError'
+Exception message: Failed to store record in an IDBObjectStore: Evaluating the object store's key path did not yield a value.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillabadkeypathprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/bad-keypath-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/bad-keypath-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/bad-keypath-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/bad-keypath.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaclearprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/clear-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/clear-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/clear-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,25 @@
</span><ins>+Test IndexedDB's clearing an object store
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+objectStore = db.createObjectStore('foo', { autoIncrement: true });
+request = objectStore.add({});
+Expecting exception from db.transaction('foo').objectStore('foo').clear();
+PASS Exception was thrown.
+PASS code is 0
+PASS ename is 'ReadOnlyError'
+Exception message: Failed to execute 'clear' on 'IDBObjectStore': The transaction is read-only.
+db.transaction('foo', 'readwrite')
+transaction.objectStore('foo').clear();
+request = db.transaction('foo').objectStore('foo').openCursor();
+cursor = request.result;
+PASS cursor is null
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaclearprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/clear-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/clear-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/clear-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/clear.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillacreateindexuniqueprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/create-index-unique-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/create-index-unique-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/create-index-unique-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,22 @@
</span><ins>+Test IndexedDB's creating unique index and updating indexNames
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+objectStore = db.createObjectStore('a', { keyPath: 'id', autoIncrement: true });
+index = objectStore.createIndex(indexName, indexKeyPath, { unique: true });
+PASS index.name is indexName
+PASS index.keyPath is indexKeyPath
+PASS index.unique is true
+PASS objectStore.indexNames.length is 1
+PASS foundNewlyCreatedIndex is true
+PASS event.target.transaction.db is db
+PASS event.target.transaction.mode is 'versionchange'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillacreateindexuniqueprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/create-index-unique-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/create-index-unique-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/create-index-unique-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/create-index-unique.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillacreateindexwithintegerkeysprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/create-index-with-integer-keys-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/create-index-with-integer-keys-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/create-index-with-integer-keys-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,22 @@
</span><ins>+Test IndexedDB's creating index with integer keys
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+objectStore = db.createObjectStore('foo', { keyPath: 'id' });
+data = { id: 16, num: 42 };
+objectStore.add(data);
+index = objectStore.createIndex('foo', 'num');
+result = index.openKeyCursor();
+cursor = event.target.result;
+PASS cursor == null is false
+PASS cursor.key is data.num
+PASS cursor.primaryKey is data.id
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillacreateindexwithintegerkeysprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/create-index-with-integer-keys-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/create-index-with-integer-keys-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/create-index-with-integer-keys-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/create-index-with-integer-keys.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillacreateobjectstorebasicsprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/create-objectstore-basics-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/create-objectstore-basics-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/create-objectstore-basics-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,55 @@
</span><ins>+Test IndexedDB's creating object store and updating properties
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+objectStore = db.createObjectStore(info.name, info.options);
+PASS objectStore.name is info.name
+PASS objectStore.indexNames.length is 0
+PASS event.target.transaction.db is db
+PASS event.target.transaction.mode is &quot;versionchange&quot;
+objectStore = db.createObjectStore(info.name, info.options);
+PASS objectStore.name is info.name
+PASS objectStore.indexNames.length is 0
+PASS event.target.transaction.db is db
+PASS event.target.transaction.mode is &quot;versionchange&quot;
+objectStore = db.createObjectStore(info.name, info.options);
+PASS objectStore.name is info.name
+PASS objectStore.indexNames.length is 0
+PASS event.target.transaction.db is db
+PASS event.target.transaction.mode is &quot;versionchange&quot;
+Expecting exception from objectStore = db.createObjectStore(info.name, info.options)
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_ACCESS_ERR
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The autoIncrement option was set but the keyPath option was empty or an array.
+objectStore = db.createObjectStore(info.name, info.options);
+PASS objectStore.name is info.name
+PASS objectStore.indexNames.length is 0
+PASS event.target.transaction.db is db
+PASS event.target.transaction.mode is &quot;versionchange&quot;
+objectStore = db.createObjectStore(info.name, info.options);
+PASS objectStore.name is info.name
+PASS objectStore.keyPath is info.options.keyPath
+PASS objectStore.indexNames.length is 0
+PASS event.target.transaction.db is db
+PASS event.target.transaction.mode is &quot;versionchange&quot;
+objectStore = db.createObjectStore(info.name, info.options);
+PASS objectStore.name is info.name
+PASS objectStore.keyPath is info.options.keyPath
+PASS objectStore.indexNames.length is 0
+PASS event.target.transaction.db is db
+PASS event.target.transaction.mode is &quot;versionchange&quot;
+objectStore = db.createObjectStore(info.name, info.options);
+PASS objectStore.name is info.name
+PASS objectStore.keyPath is info.options.keyPath
+PASS objectStore.indexNames.length is 0
+PASS event.target.transaction.db is db
+PASS event.target.transaction.mode is &quot;versionchange&quot;
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillacreateobjectstorebasicsprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/create-objectstore-basics-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/create-objectstore-basics-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/create-objectstore-basics-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/create-objectstore-basics.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillacreateobjectstorenullnameprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/create-objectstore-null-name-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/create-objectstore-null-name-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/create-objectstore-null-name-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,15 @@
</span><ins>+Test IndexedDB's creating object store with null name
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+objectStore = db.createObjectStore(null);
+PASS objectStore.name is 'null'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillacreateobjectstorenullnameprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/create-objectstore-null-name-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/create-objectstore-null-name-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/create-objectstore-null-name-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/create-objectstore-null-name.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillacursormutationobjectstoreonlyprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/cursor-mutation-objectstore-only-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/cursor-mutation-objectstore-only-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/cursor-mutation-objectstore-only-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,111 @@
</span><ins>+Test IndexedDB's cursor mutation during object store cursor iteration
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+objectStore = db.createObjectStore('foo', { keyPath: 'ss' });
+objectStoreData = [
+        { ss: '237-23-7732', name: 'Bob' },
+        { ss: '237-23-7733', name: 'Ann' },
+        { ss: '237-23-7734', name: 'Ron' },
+        { ss: '237-23-7735', name: 'Sue' },
+        { ss: '237-23-7736', name: 'Joe' },
+        { ss: '237-23-7737', name: 'Pat' }
+    ];
+objectStore.add(objectStoreData[i]);
+objectStore.add(objectStoreData[i]);
+objectStore.add(objectStoreData[i]);
+objectStore.add(objectStoreData[i]);
+objectStore.add(objectStoreData[i]);
+count = 0;
+sawAdded = false;
+sawRemoved = false;
+request = objectStore.openCursor();
+iterateCursor():
+event.target.transaction.oncomplete = checkCursorResultsAndSetupMutatingCursor;
+cursor = event.target.result;
+sawRemoved = true;
+count++;
+cursor.continue();
+iterateCursor():
+event.target.transaction.oncomplete = checkCursorResultsAndSetupMutatingCursor;
+cursor = event.target.result;
+count++;
+cursor.continue();
+iterateCursor():
+event.target.transaction.oncomplete = checkCursorResultsAndSetupMutatingCursor;
+cursor = event.target.result;
+count++;
+cursor.continue();
+iterateCursor():
+event.target.transaction.oncomplete = checkCursorResultsAndSetupMutatingCursor;
+cursor = event.target.result;
+count++;
+cursor.continue();
+iterateCursor():
+event.target.transaction.oncomplete = checkCursorResultsAndSetupMutatingCursor;
+cursor = event.target.result;
+count++;
+cursor.continue();
+iterateCursor():
+event.target.transaction.oncomplete = checkCursorResultsAndSetupMutatingCursor;
+cursor = event.target.result;
+checkCursorResultsAndSetupMutatingCursor():
+PASS count is objectStoreData.length - 1
+PASS sawAdded is false
+PASS sawRemoved is true
+count = 0;
+sawAdded = false;
+sawRemoved = false;
+request = db.transaction('foo', 'readwrite').objectStore('foo').openCursor();
+iterateMutatingCursor():
+event.target.transaction.oncomplete = checkMutatingCursorResults;
+cursor = event.target.result;
+sawRemoved = true;
+PASS cursor.value.name is 'Bob'
+count++
+objectStore = event.target.transaction.objectStore('foo');
+request = objectStore.delete(objectStoreData[0].ss);
+addFinalData():
+request = objectStore.add(objectStoreData[objectStoreData.length - 1]);
+iterateMutatingCursor():
+event.target.transaction.oncomplete = checkMutatingCursorResults;
+cursor = event.target.result;
+PASS cursor.value.name is 'Ann'
+count++
+iterateMutatingCursor():
+event.target.transaction.oncomplete = checkMutatingCursorResults;
+cursor = event.target.result;
+PASS cursor.value.name is 'Ron'
+count++
+iterateMutatingCursor():
+event.target.transaction.oncomplete = checkMutatingCursorResults;
+cursor = event.target.result;
+PASS cursor.value.name is 'Sue'
+count++
+iterateMutatingCursor():
+event.target.transaction.oncomplete = checkMutatingCursorResults;
+cursor = event.target.result;
+PASS cursor.value.name is 'Joe'
+count++
+iterateMutatingCursor():
+event.target.transaction.oncomplete = checkMutatingCursorResults;
+cursor = event.target.result;
+sawAdded = true;
+PASS cursor.value.name is 'Pat'
+count++
+iterateMutatingCursor():
+event.target.transaction.oncomplete = checkMutatingCursorResults;
+cursor = event.target.result;
+checkMutatingCursorResults():
+PASS count is objectStoreData.length
+PASS sawAdded is true
+PASS sawRemoved is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillacursormutationobjectstoreonlyprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/cursor-mutation-objectstore-only-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/cursor-mutation-objectstore-only-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/cursor-mutation-objectstore-only-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/cursor-mutation-objectstore-only.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillacursormutationprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/cursor-mutation-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/cursor-mutation-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/cursor-mutation-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,129 @@
</span><ins>+Test IndexedDB's cursor mutation
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+
+setupObjectStoreAndCreateIndex():
+objectStore = db.createObjectStore('foo', { keyPath: 'ss' })
+index = objectStore.createIndex('name', 'name', { unique: true })
+objectStoreData = [
+        { ss: '237-23-7732', name: 'Bob' },
+        { ss: '237-23-7733', name: 'Ann' },
+        { ss: '237-23-7734', name: 'Ron' },
+        { ss: '237-23-7735', name: 'Sue' },
+        { ss: '237-23-7736', name: 'Joe' },
+        { ss: '237-23-7737', name: 'Pat' }
+    ]
+objectStore.add(objectStoreData[0])
+objectStore.add(objectStoreData[1])
+objectStore.add(objectStoreData[2])
+objectStore.add(objectStoreData[3])
+objectStore.add(objectStoreData[4])
+
+setupCursor():
+count = 0
+sawAdded = false
+sawRemoved = false
+request = objectStore.openCursor()
+
+iterateCursor():
+cursor = event.target.result
+PASS cursor.value.name is &quot;Bob&quot;
+sawRemoved = true
+count++
+cursor.continue()
+
+iterateCursor():
+cursor = event.target.result
+PASS cursor.value.name is &quot;Ann&quot;
+count++
+cursor.continue()
+
+iterateCursor():
+cursor = event.target.result
+PASS cursor.value.name is &quot;Ron&quot;
+count++
+cursor.continue()
+
+iterateCursor():
+cursor = event.target.result
+PASS cursor.value.name is &quot;Sue&quot;
+count++
+cursor.continue()
+
+iterateCursor():
+cursor = event.target.result
+PASS cursor.value.name is &quot;Joe&quot;
+count++
+cursor.continue()
+
+iterateCursor():
+cursor = event.target.result
+
+checkCursorResults():
+PASS count is objectStoreData.length - 1
+PASS sawAdded is false
+PASS sawRemoved is true
+
+setupMutatingCursor():
+count = 0
+sawAdded = false
+sawRemoved = false
+[objectStoreDataNameSort is an array of indexes into objectStoreData in alphabetical order by name]
+objectStoreDataNameSort = [ 1, 4, 5, 2, 3 ]
+
+trans = db.transaction('foo', 'readwrite')
+objectStore = trans.objectStore('foo')
+request = objectStore.index('name').openCursor()
+trans.oncomplete = checkMutatingCursorResults
+
+iterateMutatingCursor():
+cursor = event.target.result
+PASS cursor.value.name is &quot;Ann&quot;
+count++
+
+Mutating the object store:
+Removing Bob
+request = objectStore.delete(objectStoreData[0].ss)
+
+addFinalData():
+Adding Pat
+request = objectStore.add(objectStoreData[objectStoreData.length - 1])
+
+iterateMutatingCursor():
+cursor = event.target.result
+PASS cursor.value.name is &quot;Joe&quot;
+count++
+
+iterateMutatingCursor():
+cursor = event.target.result
+PASS cursor.value.name is &quot;Pat&quot;
+sawAdded = true
+count++
+
+iterateMutatingCursor():
+cursor = event.target.result
+PASS cursor.value.name is &quot;Ron&quot;
+count++
+
+iterateMutatingCursor():
+cursor = event.target.result
+PASS cursor.value.name is &quot;Sue&quot;
+count++
+
+iterateMutatingCursor():
+cursor = event.target.result
+
+checkMutatingCursorResults():
+PASS count is objectStoreData.length - 1
+PASS sawAdded is true
+PASS sawRemoved is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillacursormutationprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/cursor-mutation-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/cursor-mutation-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/cursor-mutation-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/cursor-mutation.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillacursorupdateupdatesindexesprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/cursor-update-updates-indexes-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/cursor-update-updates-indexes-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/cursor-update-updates-indexes-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,131 @@
</span><ins>+Test IndexedDB: mutating records with a r/w cursor updates indexes on those records
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+firstValue = 'hi';
+secondValue = 'bye';
+objectStoreInfo = [
+        { name: '1', options: {}, key: 1,
+          entry: { data: firstValue } },
+        { name: '2', options: { keyPath: 'foo' },
+          entry: { foo: 1, data: firstValue } },
+        { name: '3', options: { autoIncrement: true },
+          entry: { data: firstValue } },
+        { name: '4', options: { keyPath: 'foo', autoIncrement: true },
+          entry: { data: firstValue } },
+    ];
+i = 0;
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+info = objectStoreInfo[i];
+indexedDB.open(dbname)
+setupObjectStoreAndCreateIndex():
+db = event.target.result
+objectStore = db.createObjectStore(info.name, info.options);
+index = objectStore.createIndex('data_index', 'data', { unique: false });
+uniqueIndex = objectStore.createIndex('unique_data_index', 'data', { unique: true });
+request = objectStore.add(info.entry, info.key);
+trans = db.transaction(info.name, 'readwrite')
+trans.oncomplete = test
+objectStore = trans.objectStore(info.name)
+index = objectStore.index('data_index')
+uniqueIndex = objectStore.index('unique_data_index')
+request = objectStore.openCursor();
+cursor = request.result;
+value = cursor.value;
+value.data = secondValue;
+request = cursor.update(value);
+request = index.get(secondValue);
+PASS value.data is event.target.result.data
+request = uniqueIndex.get(secondValue);
+PASS value.data is event.target.result.data
+i++;
+db.close()
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+info = objectStoreInfo[i];
+indexedDB.open(dbname)
+setupObjectStoreAndCreateIndex():
+db = event.target.result
+objectStore = db.createObjectStore(info.name, info.options);
+index = objectStore.createIndex('data_index', 'data', { unique: false });
+uniqueIndex = objectStore.createIndex('unique_data_index', 'data', { unique: true });
+request = objectStore.add(info.entry);
+trans = db.transaction(info.name, 'readwrite')
+trans.oncomplete = test
+objectStore = trans.objectStore(info.name)
+index = objectStore.index('data_index')
+uniqueIndex = objectStore.index('unique_data_index')
+request = objectStore.openCursor();
+cursor = request.result;
+value = cursor.value;
+value.data = secondValue;
+request = cursor.update(value);
+request = index.get(secondValue);
+PASS value.data is event.target.result.data
+request = uniqueIndex.get(secondValue);
+PASS value.data is event.target.result.data
+i++;
+db.close()
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+info = objectStoreInfo[i];
+indexedDB.open(dbname)
+setupObjectStoreAndCreateIndex():
+db = event.target.result
+objectStore = db.createObjectStore(info.name, info.options);
+index = objectStore.createIndex('data_index', 'data', { unique: false });
+uniqueIndex = objectStore.createIndex('unique_data_index', 'data', { unique: true });
+request = objectStore.add(info.entry);
+trans = db.transaction(info.name, 'readwrite')
+trans.oncomplete = test
+objectStore = trans.objectStore(info.name)
+index = objectStore.index('data_index')
+uniqueIndex = objectStore.index('unique_data_index')
+request = objectStore.openCursor();
+cursor = request.result;
+value = cursor.value;
+value.data = secondValue;
+request = cursor.update(value);
+request = index.get(secondValue);
+PASS value.data is event.target.result.data
+request = uniqueIndex.get(secondValue);
+PASS value.data is event.target.result.data
+i++;
+db.close()
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+info = objectStoreInfo[i];
+indexedDB.open(dbname)
+setupObjectStoreAndCreateIndex():
+db = event.target.result
+objectStore = db.createObjectStore(info.name, info.options);
+index = objectStore.createIndex('data_index', 'data', { unique: false });
+uniqueIndex = objectStore.createIndex('unique_data_index', 'data', { unique: true });
+request = objectStore.add(info.entry);
+trans = db.transaction(info.name, 'readwrite')
+trans.oncomplete = test
+objectStore = trans.objectStore(info.name)
+index = objectStore.index('data_index')
+uniqueIndex = objectStore.index('unique_data_index')
+request = objectStore.openCursor();
+cursor = request.result;
+value = cursor.value;
+value.data = secondValue;
+request = cursor.update(value);
+request = index.get(secondValue);
+PASS value.data is event.target.result.data
+request = uniqueIndex.get(secondValue);
+PASS value.data is event.target.result.data
+i++;
+db.close()
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillacursorupdateupdatesindexesprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/cursor-update-updates-indexes-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/cursor-update-updates-indexes-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/cursor-update-updates-indexes-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/cursor-update-updates-indexes.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillacursorsprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/cursors-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/cursors-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/cursors-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,608 @@
</span><ins>+Test IndexedDB cursor behavior
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+db.createObjectStore('autoIncrement', { autoIncrement: true });
+request = objectStore.openCursor();
+PASS event.target.result is null
+db.createObjectStore('autoIncrementKeyPath', { keyPath: 'foo', autoIncrement: true });
+request = objectStore.openCursor();
+PASS event.target.result is null
+db.createObjectStore('keyPath', { keyPath: 'foo' });
+request = objectStore.openCursor();
+PASS event.target.result is null
+db.createObjectStore('foo');
+request = objectStore.openCursor();
+PASS event.target.result is null
+keys = [1, -1, 0, 10, 2000, 'q', 'z', 'two', 'b', 'a'];
+sortedKeys = [-1, 0, 1, 10, 2000, 'a', 'b', 'q', 'two', 'z'];
+keyIndex = 0;
+request = objectStore.add('foo', keys[i]);
+request = objectStore.add('foo', keys[i]);
+request = objectStore.add('foo', keys[i]);
+request = objectStore.add('foo', keys[i]);
+request = objectStore.add('foo', keys[i]);
+request = objectStore.add('foo', keys[i]);
+request = objectStore.add('foo', keys[i]);
+request = objectStore.add('foo', keys[i]);
+request = objectStore.add('foo', keys[i]);
+request = objectStore.add('foo', keys[i]);
+request = objectStore.openCursor();
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+Expecting exception from cursor.continue();
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+Expecting exception from cursor.continue();
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+Expecting exception from cursor.continue();
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+Expecting exception from cursor.continue();
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+Expecting exception from cursor.continue();
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+Expecting exception from cursor.continue();
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+Expecting exception from cursor.continue();
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+Expecting exception from cursor.continue();
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+Expecting exception from cursor.continue();
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+Expecting exception from cursor.continue();
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor = event.target.result;
+PASS keyIndex is keys.length
+keyIndex = 4;
+range = IDBKeyRange.bound(2000, 'q');
+request = objectStore.openCursor(range);
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor = event.target.result;
+PASS keyIndex is 8
+request = objectStore.openCursor();
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue('b');
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex += keyIndex ? 1: 6;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex += keyIndex ? 1: 6;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex += keyIndex ? 1: 6;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex += keyIndex ? 1: 6;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex += keyIndex ? 1: 6;
+cursor = event.target.result;
+PASS keyIndex is keys.length
+keyIndex = 0;
+request = objectStore.openCursor();
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue(10);
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex += keyIndex ? 1: 3;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex += keyIndex ? 1: 3;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex += keyIndex ? 1: 3;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex += keyIndex ? 1: 3;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex += keyIndex ? 1: 3;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex += keyIndex ? 1: 3;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex += keyIndex ? 1: 3;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex += keyIndex ? 1: 3;
+cursor = event.target.result;
+PASS keyIndex is keys.length
+keyIndex = 0;
+request = objectStore.openCursor();
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue('c');
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex += keyIndex ? 1 : 7;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex += keyIndex ? 1 : 7;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex += keyIndex ? 1 : 7;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex += keyIndex ? 1 : 7;
+cursor = event.target.result;
+PASS keyIndex is keys.length
+keyIndex = 0;
+request = objectStore.openCursor();
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor.continue();
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor.continue();
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor.continue();
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor.continue();
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+request = cursor.update('bar');
+keyIndex++;
+cursor.continue();
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor.continue();
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor.continue();
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor.continue();
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor.continue();
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor.continue();
+cursor = event.target.result;
+PASS keyIndex is keys.length
+request = objectStore.get(sortedKeys[4]);
+PASS event.target.result is 'bar'
+request = objectStore.put('foo', sortedKeys[4]);
+keyIndex = 0;
+request = objectStore.openCursor(null, 'next');
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor.continue();
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor.continue();
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor.continue();
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor.continue();
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+request = cursor.delete();
+keyIndex++;
+cursor.continue();
+PASS keyIndex is 5
+gotRemoveEvent = true;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor.continue();
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor.continue();
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor.continue();
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor.continue();
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex++;
+cursor.continue();
+cursor = event.target.result;
+PASS keyIndex is keys.length
+PASS gotRemoveEvent is true
+request = objectStore.get(sortedKeys[4]);
+PASS event.target.result is undefined
+request = objectStore.add('foo', sortedKeys[4]);
+request = objectStore.openCursor(null, 'prev');
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex--;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex--;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex--;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex--;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex--;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex--;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex--;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex--;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex--;
+cursor = event.target.result;
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+cursor.continue();
+PASS cursor.key is sortedKeys[keyIndex]
+PASS cursor.primaryKey is sortedKeys[keyIndex]
+PASS cursor.value is 'foo'
+keyIndex--;
+cursor = event.target.result;
+PASS keyIndex is -1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillacursorsprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/cursors-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/cursors-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/cursors-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/cursors.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozilladeleteresultprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/delete-result-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/delete-result-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/delete-result-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,20 @@
</span><ins>+Test IndexedDB: result property after deleting existing and non-existing record
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+objectStore = db.createObjectStore('foo', { keyPath: 'id', autoIncrement: true });
+request = objectStore.add({});
+id = event.target.result;
+request = objectStore.delete(id);
+PASS event.target.result is undefined
+request = objectStore.delete(id);
+PASS event.target.result is undefined
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozilladeleteresultprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/delete-result-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/delete-result-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/delete-result-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/delete-result.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaeventsourceprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/event-source-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/event-source-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/event-source-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,19 @@
</span><ins>+Test IndexedDB's event.target.source in success callbacks
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+source = event.target.source;
+PASS source is null
+objectStore = db.createObjectStore(objectStoreName, { autoIncrement: true });
+request = objectStore.add({});
+source = event.target.source;
+PASS source is objectStore
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaeventsourceprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/event-source-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/event-source-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/event-source-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/event-source.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaglobaldataprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/global-data-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/global-data-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/global-data-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,28 @@
</span><ins>+Test IndexedDB's opening DB more than once
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+db1.createObjectStore(objectStoreName, objectStoreOptions);
+indexedDB.open(dbname);
+db2 = event.target.result
+PASS db1 !== db2 is true
+PASS db1.objectStoreNames.length is 1
+PASS db1.objectStoreNames.item(0) is objectStoreName
+PASS db2.objectStoreNames.length is 1
+PASS db2.objectStoreNames.item(0) is objectStoreName
+objectStore1 = db1.transaction(objectStoreName).objectStore(objectStoreName);
+PASS objectStore1.name is objectStoreName
+PASS objectStore1.keyPath is objectStoreOptions.keyPath
+objectStore2 = db2.transaction(objectStoreName).objectStore(objectStoreName);
+PASS objectStore1 !== objectStore2 is true
+PASS objectStore2.name is objectStoreName
+PASS objectStore2.keyPath is objectStoreOptions.keyPath
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaglobaldataprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/global-data-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/global-data-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/global-data-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/global-data.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaindexprevnoduplicateprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/index-prev-no-duplicate-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/index-prev-no-duplicate-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/index-prev-no-duplicate-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,174 @@
</span><ins>+Test IndexedDB: iterating backwards through an index, skipping duplicates
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+objectStore = db.createObjectStore(objectStoreName);
+First, add all our data to the object store.
+request = objectStore.add(objectStoreData[i].value, objectStoreData[i].key);
+request = objectStore.add(objectStoreData[i].value, objectStoreData[i].key);
+request = objectStore.add(objectStoreData[i].value, objectStoreData[i].key);
+request = objectStore.add(objectStoreData[i].value, objectStoreData[i].key);
+request = objectStore.add(objectStoreData[i].value, objectStoreData[i].key);
+request = objectStore.add(objectStoreData[i].value, objectStoreData[i].key);
+request = objectStore.add(objectStoreData[i].value, objectStoreData[i].key);
+request = objectStore.add(objectStoreData[i].value, objectStoreData[i].key);
+request = objectStore.add(objectStoreData[i].value, objectStoreData[i].key);
+Now create the indexes.
+objectStore.createIndex(indexData[i].name, indexData[i].keyPath, indexData[i].options);
+objectStore.createIndex(indexData[i].name, indexData[i].keyPath, indexData[i].options);
+objectStore.createIndex(indexData[i].name, indexData[i].keyPath, indexData[i].options);
+trans = db.transaction(objectStoreName, 'readwrite')
+objectStore = trans.objectStore(objectStoreName)
+testPrev()
+trans = db.transaction(objectStoreName)
+objectStore = trans.objectStore(objectStoreName);
+keyIndex = 8;
+request = objectStore.index('height').openCursor(null, 'prev');
+cursor = event.target.result;
+PASS cursor.key is 73
+PASS cursor.primaryKey is '237-23-7740'
+PASS cursor.value.name is 'Sam'
+PASS cursor.value.height is 73
+PASS cursor.value.weight is 110
+cursor.continue();
+keyIndex--;
+  =&gt; 7
+cursor = event.target.result;
+PASS cursor.key is 73
+PASS cursor.primaryKey is '237-23-7734'
+PASS cursor.value.name is 'Ron'
+PASS cursor.value.height is 73
+PASS cursor.value.weight is 180
+cursor.continue();
+keyIndex--;
+  =&gt; 6
+cursor = event.target.result;
+PASS cursor.key is 65
+PASS cursor.primaryKey is '237-23-7739'
+PASS cursor.value.name is 'Jef'
+PASS cursor.value.height is 65
+PASS cursor.value.weight is 120
+cursor.continue();
+keyIndex--;
+  =&gt; 5
+cursor = event.target.result;
+PASS cursor.key is 65
+PASS cursor.primaryKey is '237-23-7738'
+PASS cursor.value.name is 'Leo'
+PASS cursor.value.height is 65
+PASS cursor.value.weight is 180
+cursor.continue();
+keyIndex--;
+  =&gt; 4
+cursor = event.target.result;
+PASS cursor.key is 65
+PASS cursor.primaryKey is '237-23-7737'
+PASS cursor.value.name is 'Pat'
+PASS cursor.value.height is 65
+PASS cursor.value.weight is 100
+cursor.continue();
+keyIndex--;
+  =&gt; 3
+cursor = event.target.result;
+PASS cursor.key is 65
+PASS cursor.primaryKey is '237-23-7736'
+PASS cursor.value.name is 'Joe'
+PASS cursor.value.height is 65
+PASS cursor.value.weight is 150
+cursor.continue();
+keyIndex--;
+  =&gt; 2
+cursor = event.target.result;
+PASS cursor.key is 60
+PASS cursor.primaryKey is '237-23-7732'
+PASS cursor.value.name is 'Bob'
+PASS cursor.value.height is 60
+PASS cursor.value.weight is 120
+cursor.continue();
+keyIndex--;
+  =&gt; 1
+cursor = event.target.result;
+PASS cursor.key is 58
+PASS cursor.primaryKey is '237-23-7735'
+PASS cursor.value.name is 'Sue'
+PASS cursor.value.height is 58
+PASS cursor.value.weight is 130
+cursor.continue();
+keyIndex--;
+  =&gt; 0
+cursor = event.target.result;
+PASS cursor.key is 52
+PASS cursor.primaryKey is '237-23-7733'
+PASS cursor.value.name is 'Ann'
+PASS cursor.value.height is 52
+PASS cursor.value.weight is 110
+cursor.continue();
+keyIndex--;
+  =&gt; -1
+cursor = event.target.result;
+No cursor: null
+PASS keyIndex is -1
+testPrevNoDuplicate()
+objectStore = db.transaction(objectStoreName).objectStore(objectStoreName);
+keyIndex = 8;
+request = objectStore.index('height').openCursor(null, 'prevunique');
+cursor = event.target.result;
+keyIndex -= 1
+  =&gt; Entering with keyIndex = 7
+PASS cursor.key is 73
+PASS cursor.primaryKey is '237-23-7734'
+PASS cursor.value.name is 'Ron'
+PASS cursor.value.height is 73
+PASS cursor.value.weight is 180
+cursor.continue();
+keyIndex--;
+cursor = event.target.result;
+keyIndex -= 3;
+  =&gt; Entering with keyIndex = 3
+PASS cursor.key is 65
+PASS cursor.primaryKey is '237-23-7736'
+PASS cursor.value.name is 'Joe'
+PASS cursor.value.height is 65
+PASS cursor.value.weight is 150
+cursor.continue();
+keyIndex--;
+cursor = event.target.result;
+  =&gt; Entering with keyIndex = 2
+PASS cursor.key is 60
+PASS cursor.primaryKey is '237-23-7732'
+PASS cursor.value.name is 'Bob'
+PASS cursor.value.height is 60
+PASS cursor.value.weight is 120
+cursor.continue();
+keyIndex--;
+cursor = event.target.result;
+  =&gt; Entering with keyIndex = 1
+PASS cursor.key is 58
+PASS cursor.primaryKey is '237-23-7735'
+PASS cursor.value.name is 'Sue'
+PASS cursor.value.height is 58
+PASS cursor.value.weight is 130
+cursor.continue();
+keyIndex--;
+cursor = event.target.result;
+  =&gt; Entering with keyIndex = 0
+PASS cursor.key is 52
+PASS cursor.primaryKey is '237-23-7733'
+PASS cursor.value.name is 'Ann'
+PASS cursor.value.height is 52
+PASS cursor.value.weight is 110
+cursor.continue();
+keyIndex--;
+cursor = event.target.result;
+  =&gt; Entering with keyIndex = -1
+No cursor: null
+PASS keyIndex is -1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaindexprevnoduplicateprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/index-prev-no-duplicate-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/index-prev-no-duplicate-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/index-prev-no-duplicate-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;!--
+  original test: http://mxr.mozilla.org/mozilla2.0/source/dom/indexedDB/test/test_indexes.html?force=1
+  license of original test:
+    &quot; Any copyright is dedicated to the Public Domain.
+      http://creativecommons.org/publicdomain/zero/1.0/ &quot;
+--&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/index-prev-no-duplicate.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaindexesprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/indexes-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/indexes-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/indexes-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,1031 @@
</span><ins>+Test IndexedDB: iterating through index cursors with keys and key ranges
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+objectStore = db.createObjectStore(objectStoreName);
+First, add all our data to the object store.
+request = objectStore.add(objectStoreData[i].value, objectStoreData[i].key);
+request = objectStore.add(objectStoreData[i].value, objectStoreData[i].key);
+request = objectStore.add(objectStoreData[i].value, objectStoreData[i].key);
+request = objectStore.add(objectStoreData[i].value, objectStoreData[i].key);
+request = objectStore.add(objectStoreData[i].value, objectStoreData[i].key);
+request = objectStore.add(objectStoreData[i].value, objectStoreData[i].key);
+Now create the indexes.
+objectStore.createIndex(indexData[i].name, indexData[i].keyPath, indexData[i].options);
+objectStore.createIndex(indexData[i].name, indexData[i].keyPath, indexData[i].options);
+objectStore.createIndex(indexData[i].name, indexData[i].keyPath, indexData[i].options);
+PASS objectStore.indexNames.length is indexData.length
+objectStore = db.transaction(objectStoreName).objectStore(objectStoreName);
+PASS objectStore.indexNames.length is indexData.length
+PASS found is true
+index = objectStore.index(indexData[i].name);
+PASS index.name is indexData[i].name
+PASS index.keyPath is indexData[i].keyPath
+PASS index.unique is true
+PASS found is true
+index = objectStore.index(indexData[i].name);
+PASS index.name is indexData[i].name
+PASS index.keyPath is indexData[i].keyPath
+PASS index.unique is false
+PASS found is true
+index = objectStore.index(indexData[i].name);
+PASS index.name is indexData[i].name
+PASS index.keyPath is indexData[i].keyPath
+PASS index.unique is false
+request = objectStore.index('name').getKey('Bob');
+PASS event.target.result is '237-23-7732'
+request = objectStore.index('name').get('Bob');
+PASS event.target.result.name is 'Bob'
+PASS event.target.result.height is 60
+PASS event.target.result.weight is 120
+request = objectStore.index('name').openKeyCursor();
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS 'value' in cursor is false
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS 'value' in cursor is false
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS 'value' in cursor is false
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS 'value' in cursor is false
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS 'value' in cursor is false
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS 'value' in cursor is false
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS 'value' in cursor is false
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS 'value' in cursor is false
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS 'value' in cursor is false
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS 'value' in cursor is false
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS 'value' in cursor is false
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS 'value' in cursor is false
+keyIndex++;
+cursor = event.target.result;
+PASS keyIndex is objectStoreData.length
+request = objectStore.index('weight').openKeyCursor(null, 'next');
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataWeightSort[keyIndex].value.weight
+PASS cursor.primaryKey is objectStoreDataWeightSort[keyIndex].key
+cursor.continue();
+PASS cursor.key is objectStoreDataWeightSort[keyIndex].value.weight
+PASS cursor.primaryKey is objectStoreDataWeightSort[keyIndex].key
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataWeightSort[keyIndex].value.weight
+PASS cursor.primaryKey is objectStoreDataWeightSort[keyIndex].key
+cursor.continue();
+PASS cursor.key is objectStoreDataWeightSort[keyIndex].value.weight
+PASS cursor.primaryKey is objectStoreDataWeightSort[keyIndex].key
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataWeightSort[keyIndex].value.weight
+PASS cursor.primaryKey is objectStoreDataWeightSort[keyIndex].key
+cursor.continue();
+PASS cursor.key is objectStoreDataWeightSort[keyIndex].value.weight
+PASS cursor.primaryKey is objectStoreDataWeightSort[keyIndex].key
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataWeightSort[keyIndex].value.weight
+PASS cursor.primaryKey is objectStoreDataWeightSort[keyIndex].key
+cursor.continue();
+PASS cursor.key is objectStoreDataWeightSort[keyIndex].value.weight
+PASS cursor.primaryKey is objectStoreDataWeightSort[keyIndex].key
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataWeightSort[keyIndex].value.weight
+PASS cursor.primaryKey is objectStoreDataWeightSort[keyIndex].key
+cursor.continue();
+PASS cursor.key is objectStoreDataWeightSort[keyIndex].value.weight
+PASS cursor.primaryKey is objectStoreDataWeightSort[keyIndex].key
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataWeightSort[keyIndex].value.weight
+PASS cursor.primaryKey is objectStoreDataWeightSort[keyIndex].key
+cursor.continue();
+PASS cursor.key is objectStoreDataWeightSort[keyIndex].value.weight
+PASS cursor.primaryKey is objectStoreDataWeightSort[keyIndex].key
+keyIndex++;
+cursor = event.target.result;
+PASS keyIndex is objectStoreData.length
+objectStore = db.transaction(objectStoreName).objectStore(objectStoreName);
+keyIndex = objectStoreDataNameSort.length - 1;
+request = objectStore.index('name').openKeyCursor(null, 'prev');
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+keyIndex--;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+keyIndex--;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+keyIndex--;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+keyIndex--;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+keyIndex--;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+keyIndex--;
+cursor = event.target.result;
+PASS keyIndex is -1
+keyRange = IDBKeyRange.bound('Bob', 'Ron');
+request = objectStore.index('name').openKeyCursor(keyRange);
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS keyIndex is 5
+keyIndex = 2;
+keyRange = IDBKeyRange.bound('Bob', 'Ron', true);
+request = objectStore.index('name').openKeyCursor(keyRange);
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS keyIndex is 5
+keyIndex = 1;
+keyRange = IDBKeyRange.bound('Bob', 'Ron', false, true);
+request = objectStore.index('name').openKeyCursor(keyRange);
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS keyIndex is 4
+keyIndex = 2;
+keyRange = IDBKeyRange.bound('Bob', 'Ron', true, true);
+request = objectStore.index('name').openKeyCursor(keyRange);
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS keyIndex is 4
+keyIndex = 1;
+keyRange = IDBKeyRange.lowerBound('Bob');
+request = objectStore.index('name').openKeyCursor(keyRange);
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS keyIndex is objectStoreDataNameSort.length
+keyIndex = 2;
+keyRange = IDBKeyRange.lowerBound('Bob', true);
+request = objectStore.index('name').openKeyCursor(keyRange);
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS keyIndex is objectStoreDataNameSort.length
+keyIndex = 0;
+keyRange = IDBKeyRange.upperBound('Joe');
+request = objectStore.index('name').openKeyCursor(keyRange);
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS keyIndex is 3
+keyIndex = 0;
+keyRange = IDBKeyRange.upperBound('Joe', true);
+request = objectStore.index('name').openKeyCursor(keyRange);
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS keyIndex is 2
+keyIndex = 3;
+keyRange = IDBKeyRange.only('Pat');
+request = objectStore.index('name').openKeyCursor(keyRange);
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS keyIndex is 4
+keyIndex = 0;
+request = objectStore.index('name').openCursor();
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+keyIndex++;
+cursor = event.target.result;
+PASS keyIndex is objectStoreDataNameSort.length
+keyIndex = objectStoreDataNameSort.length - 1;
+request = objectStore.index('name').openCursor(null, 'prev');
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor = event.target.result;
+PASS keyIndex is -1
+keyIndex = 1;
+keyRange = IDBKeyRange.bound('Bob', 'Ron');
+request = objectStore.index('name').openCursor(keyRange);
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+keyIndex++;
+cursor = event.target.result;
+PASS keyIndex is 5
+keyIndex = 2;
+keyRange = IDBKeyRange.bound('Bob', 'Ron', true);
+request = objectStore.index('name').openCursor(keyRange);
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+keyIndex++;
+cursor = event.target.result;
+PASS keyIndex is 5
+keyIndex = 1;
+keyRange = IDBKeyRange.bound('Bob', 'Ron', false, true);
+request = objectStore.index('name').openCursor(keyRange);
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+keyIndex++;
+cursor = event.target.result;
+PASS keyIndex is 4
+keyIndex = 2;
+keyRange = IDBKeyRange.bound('Bob', 'Ron', true, true);
+request = objectStore.index('name').openCursor(keyRange);
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+keyIndex++;
+cursor = event.target.result;
+PASS keyIndex is 4
+keyIndex = 4;
+keyRange = IDBKeyRange.bound('Bob', 'Ron');
+request = objectStore.index('name').openCursor(keyRange, 'prev');
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+keyIndex--;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+keyIndex--;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+keyIndex--;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+keyIndex--;
+cursor = event.target.result;
+PASS keyIndex is 0
+keyIndex = 3;
+keyRange = IDBKeyRange.only(65);
+request = objectStore.index('height').openKeyCursor(keyRange, 'next');
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataHeightSort[keyIndex].value.height
+PASS cursor.primaryKey is objectStoreDataHeightSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataHeightSort[keyIndex].value.height
+PASS cursor.primaryKey is objectStoreDataHeightSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS keyIndex is 5
+keyIndex = 3;
+keyRange = IDBKeyRange.only(65);
+request = objectStore.index('height').openKeyCursor(keyRange, 'nextunique');
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataHeightSort[keyIndex].value.height
+PASS cursor.primaryKey is objectStoreDataHeightSort[keyIndex].key
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS keyIndex is 4
+keyIndex = 3;
+keyRange = IDBKeyRange.only(65);
+request = objectStore.index('height').openCursor(keyRange, 'next');
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataHeightSort[keyIndex].value.height
+PASS cursor.primaryKey is objectStoreDataHeightSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataHeightSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataHeightSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataHeightSort[keyIndex].value.weight
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataHeightSort[keyIndex].value.height
+PASS cursor.primaryKey is objectStoreDataHeightSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataHeightSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataHeightSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataHeightSort[keyIndex].value.weight
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS keyIndex is 5
+keyIndex = 3;
+keyRange = IDBKeyRange.only(65);
+request = objectStore.index('height').openCursor(keyRange, 'nextunique');
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataHeightSort[keyIndex].value.height
+PASS cursor.primaryKey is objectStoreDataHeightSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataHeightSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataHeightSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataHeightSort[keyIndex].value.weight
+cursor.continue();
+keyIndex++;
+cursor = event.target.result;
+PASS keyIndex is 4
+keyIndex = 0;
+request = objectStore.index('name').openKeyCursor();
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+nextKey = !keyIndex ? 'Pat' : undefined;
+cursor.continue(nextKey);
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+keyIndex = 3;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+nextKey = !keyIndex ? 'Pat' : undefined;
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+nextKey = !keyIndex ? 'Pat' : undefined;
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+nextKey = !keyIndex ? 'Pat' : undefined;
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+keyIndex++;
+cursor = event.target.result;
+PASS keyIndex is objectStoreData.length
+keyIndex = 0;
+request = objectStore.index('name').openKeyCursor();
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+nextKey = !keyIndex ? 'Flo' : undefined;
+cursor.continue(nextKey);
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+nextKey = !keyIndex ? 'Flo' : undefined;
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+nextKey = !keyIndex ? 'Flo' : undefined;
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+nextKey = !keyIndex ? 'Flo' : undefined;
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+nextKey = !keyIndex ? 'Flo' : undefined;
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+cursor = event.target.result;
+PASS keyIndex is objectStoreData.length
+keyIndex = 0;
+request = objectStore.index('name').openCursor();
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+nextKey = !keyIndex ? 'Pat' : undefined;
+cursor.continue(nextKey);
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+keyIndex = 3;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+nextKey = !keyIndex ? 'Pat' : undefined;
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+nextKey = !keyIndex ? 'Pat' : undefined;
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+keyIndex++;
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+nextKey = !keyIndex ? 'Pat' : undefined;
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+keyIndex++;
+cursor = event.target.result;
+PASS keyIndex is objectStoreDataNameSort.length
+keyIndex = 0;
+request = objectStore.index('name').openCursor();
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+nextKey = !keyIndex ? 'Flo' : undefined;
+cursor.continue(nextKey);
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+nextKey = !keyIndex ? 'Flo' : undefined;
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+nextKey = !keyIndex ? 'Flo' : undefined;
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+nextKey = !keyIndex ? 'Flo' : undefined;
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor = event.target.result;
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+nextKey = !keyIndex ? 'Flo' : undefined;
+cursor.continue();
+PASS cursor.key is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.primaryKey is objectStoreDataNameSort[keyIndex].key
+PASS cursor.value.name is objectStoreDataNameSort[keyIndex].value.name
+PASS cursor.value.height is objectStoreDataNameSort[keyIndex].value.height
+PASS cursor.value.weight is objectStoreDataNameSort[keyIndex].value.weight
+cursor = event.target.result;
+PASS keyIndex is objectStoreDataNameSort.length
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaindexesprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/indexes-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/indexes-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/indexes-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/indexes.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillakeyrequirementsdeletenullkeyprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-delete-null-key-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-delete-null-key-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-delete-null-key-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,19 @@
</span><ins>+Test IndexedDB's behavior deleting entry with no key
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+objectStore = db.createObjectStore('bar');
+Expecting exception from objectStore.delete(null);
+PASS Exception was thrown.
+PASS code is 0
+PASS ename is 'DataError'
+Exception message: Failed to execute 'delete' on 'IDBObjectStore': The parameter is not a valid key range.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillakeyrequirementsdeletenullkeyprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-delete-null-key-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-delete-null-key-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-delete-null-key-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/key-requirements-delete-null-key.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillakeyrequirementsinlineandpassedprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-inline-and-passed-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-inline-and-passed-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-inline-and-passed-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,19 @@
</span><ins>+Test IndexedDB's behavior adding inline and passed key simultaneously
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+objectStore = db.createObjectStore('baz', { keyPath: 'id' });
+Expecting exception from objectStore.add({id: 5}, 5);
+PASS Exception was thrown.
+PASS code is 0
+PASS ename is 'DataError'
+Exception message: Failed to store record in an IDBObjectStore: The object store uses in-line keys and the key parameter was provided.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillakeyrequirementsinlineandpassedprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-inline-and-passed-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-inline-and-passed-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-inline-and-passed-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/key-requirements-inline-and-passed.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillakeyrequirementsprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,24 @@
</span><ins>+Test IndexedDB's event.target.result after add() and put()
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+objectStore = db.createObjectStore('foo', { autoIncrement: true });
+request = objectStore.add({});
+key1 = event.target.result;
+request = objectStore.put({}, key1);
+PASS event.target.result is key1
+key2 = 10;
+request = objectStore.put({}, key2);
+PASS event.target.result is key2
+key2 = 100;
+request = objectStore.put({}, key2);
+PASS event.target.result is key2
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillakeyrequirementsprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/key-requirements.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillakeyrequirementsputnokeyprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-put-no-key-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-put-no-key-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-put-no-key-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,19 @@
</span><ins>+Test IndexedDB's behavior puting without key
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+objectStore = db.createObjectStore('bar');
+Expecting exception from objectStore.put({});
+PASS Exception was thrown.
+PASS code is 0
+PASS ename is 'DataError'
+Exception message: Failed to store record in an IDBObjectStore: The object store uses out-of-line keys and has no key generator and the key parameter was not provided.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillakeyrequirementsputnokeyprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-put-no-key-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-put-no-key-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-put-no-key-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/key-requirements-put-no-key.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillakeyrequirementsputnullkeyprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-put-null-key-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-put-null-key-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-put-null-key-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,19 @@
</span><ins>+Test IndexedDB's behavior put()ing with null key
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+objectStore = db.createObjectStore('bar');
+Expecting exception from objectStore.put({}, null);
+PASS Exception was thrown.
+PASS code is 0
+PASS ename is 'DataError'
+Exception message: Failed to store record in an IDBObjectStore: The parameter is not a valid key.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillakeyrequirementsputnullkeyprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-put-null-key-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-put-null-key-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/key-requirements-put-null-key-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/key-requirements-put-null-key.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaobjectcursorsprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/object-cursors-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/object-cursors-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/object-cursors-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,37 @@
</span><ins>+Test IndexedDB's index cursors
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+autoIncrement = false;
+objectStore = db.createObjectStore('a', { keyPath: 'id', autoIncrement: autoIncrement });
+objectStore.createIndex(indexes[j].name, 'name', indexes[j].options);
+objectStore.createIndex(indexes[j].name, 'name', indexes[j].options);
+data = { name: 'Ben', id: 1 };
+request = objectStore.add(data);
+index = objectStore.index(indexes[j].name);
+request = index.openCursor();
+index = objectStore.index(indexes[j].name);
+request = index.openCursor();
+PASS event.target.result.value.name is 'Ben'
+PASS event.target.result.value.name is 'Ben'
+autoIncrement = true;
+objectStore = db.createObjectStore('b', { keyPath: 'id', autoIncrement: autoIncrement });
+objectStore.createIndex(indexes[j].name, 'name', indexes[j].options);
+objectStore.createIndex(indexes[j].name, 'name', indexes[j].options);
+data = { name: 'Ben' };
+request = objectStore.add(data);
+index = objectStore.index(indexes[j].name);
+request = index.openCursor();
+index = objectStore.index(indexes[j].name);
+request = index.openCursor();
+PASS event.target.result.value.name is 'Ben'
+PASS event.target.result.value.name is 'Ben'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaobjectcursorsprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/object-cursors-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/object-cursors-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/object-cursors-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/object-cursors.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaobjectidentityprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/object-identity-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/object-identity-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/object-identity-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,33 @@
</span><ins>+Test IndexedDB: object identity
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+transaction = event.target.transaction;
+objectStore1 = db.createObjectStore('foo');
+objectStore2 = transaction.objectStore('foo');
+PASS objectStore1 === objectStore2 is true
+index1 = objectStore1.createIndex('bar', 'key');
+index2 = objectStore2.index('bar');
+PASS index1 === index2 is true
+transaction = db.transaction('foo');
+objectStore3 = transaction.objectStore('foo');
+objectStore3.someProperty = 'xyz'
+objectStore4 = transaction.objectStore('foo');
+PASS objectStore3 === objectStore4 is true
+PASS objectStore4.someProperty is &quot;xyz&quot;
+PASS objectStore3 === objectStore1 is false
+PASS objectStore4 === objectStore2 is false
+index3 = objectStore3.index('bar');
+index4 = objectStore4.index('bar');
+PASS index3 === index4 is true
+PASS index3 === index1 is false
+PASS index4 === index2 is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaobjectidentityprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/object-identity-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/object-identity-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/object-identity-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/object-identity.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaobjectstoreinlineautoincrementkeyaddedonputprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/object-store-inline-autoincrement-key-added-on-put-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/object-store-inline-autoincrement-key-added-on-put-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/object-store-inline-autoincrement-key-added-on-put-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,25 @@
</span><ins>+Test IndexedDB adding an autoincremented key and retrieving it successfully
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+test = {
+        name: 'inline key; key generator',
+        autoIncrement: true,
+        storedObject: { name: 'Lincoln' },
+        keyName: 'id',
+    };
+objectStore = db.createObjectStore(test.name, { keyPath: test.keyName, autoIncrement: test.autoIncrement });
+request = objectStore.add(test.storedObject);
+id = event.target.result;
+request = objectStore.get(id);
+PASS event.target.result.name is test.storedObject.name
+PASS event.target.result.id is id
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaobjectstoreinlineautoincrementkeyaddedonputprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/object-store-inline-autoincrement-key-added-on-put-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/object-store-inline-autoincrement-key-added-on-put-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/object-store-inline-autoincrement-key-added-on-put-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/object-store-inline-autoincrement-key-added-on-put.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaobjectstoreremovevaluesprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/object-store-remove-values-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/object-store-remove-values-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/object-store-remove-values-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,85 @@
</span><ins>+Test IndexedDB: adds, gets, deletes, and re-gets a record in a variety of different object store configurations
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+data = [
+        { name: 'inline key; key generator',
+          autoIncrement: true,
+          storedObject: {name: 'Lincoln'},
+          keyName: 'id',
+          keyValue: undefined,
+        },
+        { name: 'inline key; no key generator',
+          autoIncrement: false,
+          storedObject: {id: 1, name: 'Lincoln'},
+          keyName: 'id',
+          keyValue: undefined,
+        },
+        { name: 'out of line key; key generator',
+          autoIncrement: true,
+          storedObject: {name: 'Lincoln'},
+          keyName: undefined,
+          keyValue: undefined,
+        },
+        { name: 'out of line key; no key generator',
+          autoIncrement: false,
+          storedObject: {name: 'Lincoln'},
+          keyName: undefined,
+          keyValue: 1,
+        }
+    ];
+i = 0;
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+objectStore = db.createObjectStore(test.name, { keyPath: test.keyName, autoIncrement: test.autoIncrement });
+request = objectStore.add(test.storedObject);
+id = event.target.result;
+request = objectStore.get(id);
+PASS test.storedObject.name is event.target.result.name
+request = objectStore.delete(id);
+request = objectStore.get(id);
+PASS event.target.result === undefined is true
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+objectStore = db.createObjectStore(test.name, { keyPath: test.keyName, autoIncrement: test.autoIncrement });
+request = objectStore.add(test.storedObject);
+id = event.target.result;
+request = objectStore.get(id);
+PASS test.storedObject.name is event.target.result.name
+request = objectStore.delete(id);
+request = objectStore.get(id);
+PASS event.target.result === undefined is true
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+objectStore = db.createObjectStore(test.name, { autoIncrement: test.autoIncrement });
+request = objectStore.add(test.storedObject);
+id = event.target.result;
+request = objectStore.get(id);
+PASS test.storedObject.name is event.target.result.name
+request = objectStore.delete(id);
+request = objectStore.get(id);
+PASS event.target.result === undefined is true
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+objectStore = db.createObjectStore(test.name, { autoIncrement: test.autoIncrement });
+request = objectStore.add(test.storedObject, test.keyValue);
+id = event.target.result;
+request = objectStore.get(id);
+PASS test.storedObject.name is event.target.result.name
+request = objectStore.delete(id);
+request = objectStore.get(id);
+PASS event.target.result === undefined is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaobjectstoreremovevaluesprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/object-store-remove-values-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/object-store-remove-values-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/object-store-remove-values-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/object-store-remove-values.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaobjectstorenamesprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/objectstorenames-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/objectstorenames-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/objectstorenames-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,17 @@
</span><ins>+Test IndexedDB's objectStoreNames array
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+objectStore = db.createObjectStore(objectStoreName, { keyPath: 'id', autoIncrement: true });
+PASS 'objectStoreNames' in db is true
+PASS db.objectStoreNames.length is 1
+PASS db.objectStoreNames.item(0) is objectStoreName
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaobjectstorenamesprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/objectstorenames-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/objectstorenames-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/objectstorenames-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/objectstorenames.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaoddresultorderprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/odd-result-order-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/odd-result-order-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/odd-result-order-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,41 @@
</span><ins>+Test IndexedDB: request result persists in setTimeout callback
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+objectStore = db.createObjectStore('foo', { keyPath: 'key', autoIncrement: true });
+index = objectStore.createIndex('foo', 'index');
+openSuccess():
+db = null;
+db = request.result;
+checkDatabaseType():
+PASS db instanceof IDBDatabase is true
+addRecord():
+objectStore = db.transaction('foo', 'readwrite').objectStore('foo');
+data = { key: 5, index: 10 };
+request = objectStore.add(data);
+addSuccess():
+key = null;
+key = request.result;
+checkAddedKey():
+PASS key is data.key
+objectStore = db.transaction('foo').objectStore('foo');
+request = objectStore.get(data.key);
+getSuccess():
+record = null;
+record = request.result;
+checkRetrievedKey():
+PASS record.key is data.key
+PASS record.index is data.index
+deleteRecord():
+objectStore = db.transaction('foo', 'readwrite').objectStore('foo');
+request = objectStore.delete(data.key);
+deleteSuccess():
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaoddresultorderprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/odd-result-order-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/odd-result-order-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/odd-result-order-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/odd-result-order.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaopendatabasenullnameprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/open-database-null-name-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/open-database-null-name-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/open-database-null-name-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,14 @@
</span><ins>+Test IndexedDB: should NOT throw when opening a database with a null name
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.open(null);
+db = event.target.result
+PASS db.name is 'null'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaopendatabasenullnameprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/open-database-null-name-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/open-database-null-name-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/open-database-null-name-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/open-database-null-name.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaputgetvaluesprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/put-get-values-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/put-get-values-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/put-get-values-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,33 @@
</span><ins>+Test IndexedDB's putting and getting values in an object store
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+testString = { key: 0, value: 'testString' };
+testInt = { key: 1, value: 1002 };
+objectStore = db.createObjectStore('Objects', { autoIncrement: false });
+request = objectStore.add(testString.value, testString.key);
+PASS event.target.result is testString.key
+request = objectStore.get(testString.key);
+PASS event.target.result is testString.value
+request = objectStore.add(testInt.value, testInt.key);
+PASS event.target.result is testInt.key
+request = objectStore.get(testInt.key);
+PASS event.target.result is testInt.value
+objectStoreAutoIncrement = db.createObjectStore('AutoIncremented Objects', { autoIncrement: true });
+request = objectStoreAutoIncrement.add(testString.value);
+testString.key = event.target.result;
+request = objectStoreAutoIncrement.get(testString.key);
+PASS event.target.result is testString.value
+request = objectStoreAutoIncrement.add(testInt.value);
+testInt.key = event.target.result;
+request = objectStoreAutoIncrement.get(testInt.key);
+PASS event.target.result is testInt.value
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaputgetvaluesprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/put-get-values-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/put-get-values-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/put-get-values-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/put-get-values.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillareadonlytransactionsprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/readonly-transactions-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/readonly-transactions-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/readonly-transactions-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,56 @@
</span><ins>+Test IndexedDB's readonly transactions
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+objectStore = db.createObjectStore(osName, { autoIncrement: true });
+Expecting exception from db.transaction([osName]).objectStore(osName).add({});
+PASS Exception was thrown.
+PASS code is 0
+PASS ename is 'ReadOnlyError'
+Exception message: Failed to store record in an IDBObjectStore: The transaction is read-only.
+Expecting exception from db.transaction(osName).objectStore(osName).add({});
+PASS Exception was thrown.
+PASS code is 0
+PASS ename is 'ReadOnlyError'
+Exception message: Failed to store record in an IDBObjectStore: The transaction is read-only.
+key1 = 1;
+key2 = 2;
+Expecting exception from db.transaction([osName]).objectStore(osName).put({}, key1);
+PASS Exception was thrown.
+PASS code is 0
+PASS ename is 'ReadOnlyError'
+Exception message: Failed to store record in an IDBObjectStore: The transaction is read-only.
+Expecting exception from db.transaction(osName).objectStore(osName).put({}, key2);
+PASS Exception was thrown.
+PASS code is 0
+PASS ename is 'ReadOnlyError'
+Exception message: Failed to store record in an IDBObjectStore: The transaction is read-only.
+Expecting exception from db.transaction([osName]).objectStore(osName).put({}, key1);
+PASS Exception was thrown.
+PASS code is 0
+PASS ename is 'ReadOnlyError'
+Exception message: Failed to store record in an IDBObjectStore: The transaction is read-only.
+Expecting exception from db.transaction(osName).objectStore(osName).put({}, key1);
+PASS Exception was thrown.
+PASS code is 0
+PASS ename is 'ReadOnlyError'
+Exception message: Failed to store record in an IDBObjectStore: The transaction is read-only.
+Expecting exception from db.transaction([osName]).objectStore(osName).delete(key1);
+PASS Exception was thrown.
+PASS code is 0
+PASS ename is 'ReadOnlyError'
+Exception message: Failed to execute 'delete' on 'IDBObjectStore': The transaction is read-only.
+Expecting exception from db.transaction(osName).objectStore(osName).delete(key2);
+PASS Exception was thrown.
+PASS code is 0
+PASS ename is 'ReadOnlyError'
+Exception message: Failed to execute 'delete' on 'IDBObjectStore': The transaction is read-only.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillareadonlytransactionsprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/readonly-transactions-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/readonly-transactions-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/readonly-transactions-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/readonly-transactions.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillareadwritetransactionsprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/readwrite-transactions-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/readwrite-transactions-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/readwrite-transactions-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,32 @@
</span><ins>+Test IndexedDB's read/write transactions
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+objectStore = db.createObjectStore(osName, { autoIncrement: true });
+request = db.transaction([osName], 'readwrite').objectStore(osName).add({});
+PASS event.target.transaction.mode is 'readwrite'
+key1 = event.target.result;
+request = db.transaction(osName, 'readwrite').objectStore(osName).add({});
+PASS event.target.transaction.mode is 'readwrite'
+key2 = event.target.result;
+request = db.transaction([osName], 'readwrite').objectStore(osName).put({}, key1);
+PASS event.target.transaction.mode is 'readwrite'
+request = db.transaction(osName, 'readwrite').objectStore(osName).put({}, key2);
+PASS event.target.transaction.mode is 'readwrite'
+request = db.transaction([osName], 'readwrite').objectStore(osName).put({}, key1);
+PASS event.target.transaction.mode is 'readwrite'
+request = db.transaction(osName, 'readwrite').objectStore(osName).put({}, key1);
+PASS event.target.transaction.mode is 'readwrite'
+request = db.transaction([osName], 'readwrite').objectStore(osName).delete(key1);
+PASS event.target.transaction.mode is 'readwrite'
+request = db.transaction(osName, 'readwrite').objectStore(osName).delete(key2);
+PASS event.target.transaction.mode is 'readwrite'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillareadwritetransactionsprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/readwrite-transactions-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/readwrite-transactions-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/readwrite-transactions-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/readwrite-transactions.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillareadyStateprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/readyState-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/readyState-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/readyState-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,29 @@
</span><ins>+Test IndexedDB readyState property during different operations
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+PASS openRequest.readyState is 'done'
+objectStore = db.createObjectStore('foo');
+key = 10;
+request = objectStore.add({}, key);
+PASS request.readyState is 'pending'
+getRecord():
+PASS request.readyState is 'done'
+PASS event.target.result is key
+request = objectStore.get(key);
+PASS request.readyState is 'pending'
+finalCheck():
+PASS request.readyState is 'done'
+PASS event.target.result == null is false
+checkReadyStateInOpen():
+PASS event.target is openRequest
+PASS openRequest.readyState is &quot;done&quot;
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillareadyStateprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/readyState-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/readyState-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/readyState-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/readyState.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaremoveindexprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/remove-index-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/remove-index-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/remove-index-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,22 @@
</span><ins>+Test IndexedDB's creating and deleting indexes
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+objectStore = db.createObjectStore(objectStoreName, { keyPath: 'foo' });
+PASS db.objectStoreNames.length is 1
+PASS db.objectStoreNames.item(0) is objectStoreName
+PASS objectStore.indexNames.length is 0
+index = objectStore.createIndex(indexName, 'foo');
+PASS objectStore.indexNames.length is 1
+PASS objectStore.indexNames.item(0) is indexName
+objectStore.deleteIndex(indexName);
+PASS objectStore.indexNames.length is 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaremoveindexprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/remove-index-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/remove-index-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/remove-index-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/remove-index.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaremoveobjectstoreprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/remove-objectstore-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/remove-objectstore-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/remove-objectstore-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,134 @@
</span><ins>+Test IndexedDB deleting an object store
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+PASS db.objectStoreNames.length is 0
+objectStoreName = 'Objects';
+objectStore = db.createObjectStore(objectStoreName, { keyPath: 'foo' });
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+request = objectStore.add({foo: i});
+PASS db.objectStoreNames.length is 1
+PASS db.objectStoreNames.item(0) is objectStoreName
+db.close()
+request = indexedDB.open(dbname, 2)
+db.deleteObjectStore(objectStore.name);
+PASS db.objectStoreNames.length is 0
+objectStore = db.createObjectStore(objectStoreName, { keyPath: 'foo' });
+PASS db.objectStoreNames.length is 1
+PASS db.objectStoreNames.item(0) is objectStoreName
+request = objectStore.openCursor();
+PASS event.target.result is null
+db.deleteObjectStore(objectStore.name);
+PASS db.objectStoreNames.length is 0
+db.close()
+request = indexedDB.open(dbname, 3)
+objectStore = db.createObjectStore(objectStoreName, { keyPath: 'foo' });
+request = objectStore.add({foo:'bar'});
+db.deleteObjectStore(objectStoreName);
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaremoveobjectstoreprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/remove-objectstore-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/remove-objectstore-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/remove-objectstore-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/remove-objectstore.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaversionchangeabortprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/versionchange-abort-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/versionchange-abort-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/versionchange-abort-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,20 @@
</span><ins>+When a versionchange transaction is aborted, the version and newly created object stores should be reset
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+objectStore = db.createObjectStore('foo');
+PASS db.objectStoreNames.length is 1
+index = objectStore.createIndex('bar', 'baz');
+PASS objectStore.indexNames.length is 1
+event.target.transaction.abort();
+PASS db.version is 0
+PASS db.objectStoreNames.length is 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbmozillaversionchangeabortprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/mozilla/versionchange-abort-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/mozilla/versionchange-abort-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/mozilla/versionchange-abort-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/versionchange-abort.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbnoblobsprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/noblobs-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/noblobs-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/noblobs-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,80 @@
</span><ins>+Confirm Blob/File/FileList limitations of WebKit's IndexedDB implementation.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+store = db.createObjectStore('storeName')
+store.put('value', 'key')
+
+testBlob():
+PASS FileReader != null is true
+test_content = 'This is a test. This is only a test.'
+blob = new Blob([test_content])
+
+validateExceptions(blob):
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+Expecting exception from store.put(blob, 'key')
+PASS Exception was thrown.
+PASS code is DOMException.DATA_CLONE_ERR
+Exception message: Failed to store record in an IDBObjectStore: BlobURLs are not yet supported.
+Expecting exception from store.add(blob, 'key')
+PASS Exception was thrown.
+PASS code is DOMException.DATA_CLONE_ERR
+Exception message: Failed to store record in an IDBObjectStore: BlobURLs are not yet supported.
+request = store.openCursor()
+cursor = request.result
+Expecting exception from cursor.update(blob)
+PASS Exception was thrown.
+PASS code is DOMException.DATA_CLONE_ERR
+Exception message: Failed to store record in an IDBObjectStore: BlobURLs are not yet supported.
+
+testFile():
+file = fileInput.files[0]
+
+validateExceptions(file):
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+Expecting exception from store.put(file, 'key')
+PASS Exception was thrown.
+PASS code is DOMException.DATA_CLONE_ERR
+Exception message: Failed to store record in an IDBObjectStore: BlobURLs are not yet supported.
+Expecting exception from store.add(file, 'key')
+PASS Exception was thrown.
+PASS code is DOMException.DATA_CLONE_ERR
+Exception message: Failed to store record in an IDBObjectStore: BlobURLs are not yet supported.
+request = store.openCursor()
+cursor = request.result
+Expecting exception from cursor.update(file)
+PASS Exception was thrown.
+PASS code is DOMException.DATA_CLONE_ERR
+Exception message: Failed to store record in an IDBObjectStore: BlobURLs are not yet supported.
+
+testFileList():
+filelist = fileInput.files
+
+validateExceptions(filelist):
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+Expecting exception from store.put(filelist, 'key')
+PASS Exception was thrown.
+PASS code is DOMException.DATA_CLONE_ERR
+Exception message: Failed to store record in an IDBObjectStore: BlobURLs are not yet supported.
+Expecting exception from store.add(filelist, 'key')
+PASS Exception was thrown.
+PASS code is DOMException.DATA_CLONE_ERR
+Exception message: Failed to store record in an IDBObjectStore: BlobURLs are not yet supported.
+request = store.openCursor()
+cursor = request.result
+Expecting exception from cursor.update(filelist)
+PASS Exception was thrown.
+PASS code is DOMException.DATA_CLONE_ERR
+Exception message: Failed to store record in an IDBObjectStore: BlobURLs are not yet supported.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbnoblobsprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/noblobs-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/noblobs-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/noblobs-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;input type=&quot;file&quot; id=&quot;fileInput&quot; multiple&gt;&lt;/input&gt;
+&lt;script src=&quot;resources/noblobs.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbobjectlookupsinversionchangeprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/object-lookups-in-versionchange-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/object-lookups-in-versionchange-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/object-lookups-in-versionchange-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,28 @@
</span><ins>+Regression test for http://webkit.org/b/102547
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+db = event.target.result
+transaction = event.target.transaction
+store = db.createObjectStore('store')
+
+Expecting exception from transaction.objectStore('no-such-store')
+PASS Exception was thrown.
+PASS code is DOMException.NOT_FOUND_ERR
+PASS ename is 'NotFoundError'
+Exception message: Failed to execute 'objectStore' on 'IDBTransaction': The specified object store was not found.
+
+Expecting exception from store.index('no-such-index')
+PASS Exception was thrown.
+PASS code is DOMException.NOT_FOUND_ERR
+PASS ename is 'NotFoundError'
+Exception message: Failed to execute 'index' on 'IDBObjectStore': The specified index was not found.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbobjectlookupsinversionchangeprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/object-lookups-in-versionchange-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/object-lookups-in-versionchange-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/object-lookups-in-versionchange-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/object-lookups-in-versionchange.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbopenbadversionsprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/open-bad-versions-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/open-bad-versions-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/open-bad-versions-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+No crashes when opening and reloading with bad version numbers
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+dbname = String(window.location)
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbopenbadversionsprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/open-bad-versions-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/open-bad-versions-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/open-bad-versions-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/open-bad-versions.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddboptionalargumentsprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/optional-arguments-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/optional-arguments-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/optional-arguments-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,136 @@
</span><ins>+Exercise optional arguments with missing vs. undefined in IndexedDB methods.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+
+prepareDatabase():
+db = event.target.result
+store = db.createObjectStore('store', {keyPath: 'id'})
+store.createIndex('by_name', 'name', {unique: true})
+store.put({id: 1, name: 'a'})
+tx = db.transaction('store', 'readwrite')
+store = tx.objectStore('store')
+index = store.index('by_name')
+PASS IDBKeyRange.lowerBound(0).lowerOpen is false
+PASS IDBKeyRange.upperBound(0).upperOpen is false
+PASS IDBKeyRange.bound(0, 1).lowerOpen is false
+PASS IDBKeyRange.bound(0, 1).upperOpen is false
+PASS IDBKeyRange.lowerBound(0, undefined).lowerOpen is false
+PASS IDBKeyRange.upperBound(0, undefined).upperOpen is false
+PASS IDBKeyRange.bound(0, 1, undefined, undefined).lowerOpen is false
+PASS IDBKeyRange.bound(0, 1, undefined, undefined).upperOpen is false
+PASS store.add({id: 2, name: 'b'}) did not throw exception.
+PASS store.put({id: 3, name: 'c'}) did not throw exception.
+PASS store.add({id: 4, name: 'd'}, undefined) did not throw exception.
+PASS store.put({id: 5, name: 'e'}, undefined) did not throw exception.
+
+verifyCursor():
+request = store.openCursor()
+cursor = request.result
+PASS cursor.direction is &quot;next&quot;
+PASS continues is 5
+
+verifyCursor():
+request = store.openCursor(null)
+cursor = request.result
+PASS cursor.direction is &quot;next&quot;
+PASS continues is 5
+
+verifyCursor():
+request = store.openCursor(IDBKeyRange.lowerBound(4))
+cursor = request.result
+PASS cursor.direction is &quot;next&quot;
+PASS continues is 2
+
+verifyCursor():
+request = store.openCursor(3)
+cursor = request.result
+PASS cursor.direction is &quot;next&quot;
+PASS continues is 1
+
+verifyCursor():
+request = index.openCursor()
+cursor = request.result
+PASS cursor.direction is &quot;next&quot;
+PASS continues is 5
+
+verifyCursor():
+request = index.openCursor(null)
+cursor = request.result
+PASS cursor.direction is &quot;next&quot;
+PASS continues is 5
+
+verifyCursor():
+request = index.openCursor(IDBKeyRange.lowerBound('b'))
+cursor = request.result
+PASS cursor.direction is &quot;next&quot;
+PASS continues is 4
+
+verifyCursor():
+request = index.openCursor('c')
+cursor = request.result
+PASS cursor.direction is &quot;next&quot;
+PASS continues is 1
+
+verifyCursor():
+request = index.openKeyCursor()
+cursor = request.result
+PASS cursor.direction is &quot;next&quot;
+PASS continues is 5
+
+verifyCursor():
+request = index.openKeyCursor(null)
+cursor = request.result
+PASS cursor.direction is &quot;next&quot;
+PASS continues is 5
+
+verifyCursor():
+request = index.openKeyCursor(IDBKeyRange.lowerBound('b'))
+cursor = request.result
+PASS cursor.direction is &quot;next&quot;
+PASS continues is 4
+
+verifyCursor():
+request = index.openKeyCursor('c')
+cursor = request.result
+PASS cursor.direction is &quot;next&quot;
+PASS continues is 1
+
+verifyCount():
+request = store.count()
+PASS request.result is 5
+
+verifyCount():
+request = store.count(null)
+PASS request.result is 5
+
+verifyCount():
+request = store.count(IDBKeyRange.lowerBound(2))
+PASS request.result is 4
+
+verifyCount():
+request = index.count()
+PASS request.result is 5
+
+verifyCount():
+request = index.count(null)
+PASS request.result is 5
+
+verifyCount():
+request = index.count(IDBKeyRange.lowerBound('b'))
+PASS request.result is 4
+
+continueUndefined():
+request = store.openCursor()
+cursor = request.result
+PASS request.result is non-null.
+PASS cursor.continue(undefined) did not throw exception.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddboptionalargumentsprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/optional-arguments-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/optional-arguments-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/optional-arguments-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/optional-arguments.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbpendingversionchangestuckworkswithterminateprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/pending-version-change-stuck-works-with-terminate-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/pending-version-change-stuck-works-with-terminate-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/pending-version-change-stuck-works-with-terminate-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,14 @@
</span><ins>+Explicitly terminating worker with blocked call should allow later open calls to proceed
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+dbname = &quot;pending-version-change-stuck-works-with-terminate.html&quot;
+indexedDB.open(dbname)
+PASS Open worked after page reload.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbpendingversionchangestuckworkswithterminateprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/pending-version-change-stuck-works-with-terminate-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/pending-version-change-stuck-works-with-terminate-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/pending-version-change-stuck-works-with-terminate-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,68 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script&gt;
+
+description(&quot;Explicitly terminating worker with blocked call should allow later open calls to proceed&quot;);
+
+function test()
+{
+    removeVendorPrefixes();
+    setDBNameFromPath();
+    if (self.location.search !== &quot;?second&quot;) {
+        firstOpen();
+    } else {
+        secondOpen();
+    }
+}
+
+function firstOpen() {
+    request = evalAndLog(&quot;indexedDB.deleteDatabase(dbname)&quot;);
+    request.onblocked = unexpectedBlockedCallback;
+    request.onerror = unexpectedErrorCallback;
+    request.onsuccess = function() {
+        request = evalAndLog(&quot;indexedDB.open(dbname)&quot;);
+        request.onblocked = unexpectedBlockedCallback;
+        request.onerror = unexpectedErrorCallback;
+        request.onsuccess = startTheWorker;
+    };
+}
+
+function secondOpen() {
+    request = evalAndLog(&quot;indexedDB.open(dbname)&quot;);
+    request.onblocked = unexpectedBlockedCallback;
+    request.onerror = unexpectedErrorCallback;
+    request.onupgradeneeded = unexpectedUpgradeNeededCallback;
+    request.onsuccess = function() {
+        testPassed(&quot;Open worked after page reload.&quot;);
+        finishJSTest();
+    };
+}
+
+function startTheWorker()
+{
+    worker = startWorker(&quot;resources/pending-version-change-stuck.js?&quot; + encodeURIComponent(dbname));
+    worker.onerror = function(e) {
+        testFailed(e.message);
+        finishJSTest();
+    };
+    originalOnMessage = worker.onmessage;
+    worker.onmessage = function(event) {
+        if (event.data == &quot;gotblocked&quot;) {
+            worker.terminate();
+            self.location = self.location + &quot;?second&quot;;
+            return;
+        }
+
+        originalOnMessage(event);
+    };
+}
+
+test();
+
+&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbprefetchinvalidationprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/prefetch-invalidation-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/prefetch-invalidation-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/prefetch-invalidation-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,56 @@
</span><ins>+Ensure IndexedDB's write operations invalidate cursor prefetch caches
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+
+prepareDatabase():
+db = event.target.result
+store = db.createObjectStore('store')
+
+onOpenSuccess():
+db = event.target.result
+
+-------------------------------------------
+
+doPrefetchInvalidationTest():
+store = db.transaction('store', 'readwrite').objectStore('store')
+Populate the store with 200 records.
+cursorRequest = store.openCursor()
+
+continue100Times():
+PASS cursorRequest.result is non-null.
+
+doOperationAndContinue():
+store.delete(IDBKeyRange.bound(-Infinity, +Infinity))
+cursor = cursorRequest.result
+cursor.continue()
+
+onContinueSuccess():
+PASS cursorRequest.result is null
+
+-------------------------------------------
+
+doPrefetchInvalidationTest():
+store = db.transaction('store', 'readwrite').objectStore('store')
+Populate the store with 200 records.
+cursorRequest = store.openCursor()
+
+continue100Times():
+PASS cursorRequest.result is non-null.
+
+doOperationAndContinue():
+store.clear()
+cursor = cursorRequest.result
+cursor.continue()
+
+onContinueSuccess():
+PASS cursorRequest.result is null
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbprefetchinvalidationprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/prefetch-invalidation-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/prefetch-invalidation-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/prefetch-invalidation-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/prefetch-invalidation.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbprefetchraceprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/prefetch-race-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/prefetch-race-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/prefetch-race-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,57 @@
</span><ins>+Ensure IndexedDB's cursor prefetch cache requests are invalidated
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+
+prepareDatabase():
+db = event.target.result
+store = db.createObjectStore('store')
+Populate with even records...
+
+onOpenSuccess():
+db = event.target.result
+tx = db.transaction('store', 'readwrite')
+store = tx.objectStore('store')
+request = store.openCursor()
+
+cursorSuccess():
+PASS cursor.key is 0
+cursor.continue()
+
+cursorSuccess():
+PASS cursor.key is 2
+cursor.continue()
+
+cursorSuccess():
+PASS cursor.key is 4
+cursor.continue()
+
+That should have triggered a prefetch, injecting odd records...
+
+cursorSuccess():
+PASS cursor.key is 6
+cursor.continue()
+
+cursorSuccess():
+PASS cursor.key is 7
+cursor.continue()
+
+cursorSuccess():
+PASS cursor.key is 8
+cursor.continue()
+
+cursorSuccess():
+PASS cursor.key is 9
+cursor.continue()
+
+cursorSuccess():
+PASS continueCount is 7
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbprefetchraceprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/prefetch-race-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/prefetch-race-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/prefetch-race-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/prefetch-race.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbprimarykeyuniquetoobjectstoreprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/primary-key-unique-to-objectstore-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/primary-key-unique-to-objectstore-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/primary-key-unique-to-objectstore-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+About to add person and note
+Successfully added person
+Successfully added note
+Successfully got person
+name
+id
+Successfully got note
+note
+uid
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbprimarykeyuniquetoobjectstoreprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/primary-key-unique-to-objectstore-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/primary-key-unique-to-objectstore-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/primary-key-unique-to-objectstore-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;div id=&quot;logger&quot;&gt;&lt;/div&gt;
+&lt;script src=&quot;resources/primary-key-unique-to-objectstore.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbrequestleakprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/request-leak-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/request-leak-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/request-leak-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,36 @@
</span><ins>+Verify that that requests weakly hold script value properties
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+dbname = &quot;request-leak.html&quot;
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+
+prepareDatabase():
+db = event.target.result
+store = db.createObjectStore('store')
+store.put({value: 'value'}, 'key')
+
+onOpen():
+db = event.target.result
+tx = db.transaction('store')
+store = tx.objectStore('store')
+request = store.get('key')
+
+onTransactionComplete():
+db.close()
+PASS typeof request.result is &quot;object&quot;
+request.result.x = 123
+PASS request.result.x is 123
+request.result.leak = request
+observer = internals.observeGC(request)
+request = null
+gc()
+PASS observer.wasCollected is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbrequestleakprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/request-leak-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/request-leak-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/request-leak-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/request-leak.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbrequestresultcacheprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/request-result-cache-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/request-result-cache-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/request-result-cache-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,34 @@
</span><ins>+Verify that a request's result is dirtied when a cursor is continued
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+
+prepareDatabase():
+db = event.target.result
+store = db.createObjectStore('store')
+
+onOpen():
+db = event.target.result
+tx = db.transaction('store')
+store = tx.objectStore('store')
+cursorRequest = store.openCursor()
+
+cursorRequestSuccess():
+cursor = cursorRequest.result
+cursor.continue()
+Expecting exception from cursorRequest.result
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to read the 'result' property from 'IDBRequest': The request has not finished.
+
+cursorRequestSuccess():
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbrequestresultcacheprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/request-result-cache-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/request-result-cache-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/request-result-cache-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/request-result-cache.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbresourcesprimarykeyuniquetoobjectstorejs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/storage/indexeddb/resources/primary-key-unique-to-objectstore.js (195393 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/resources/primary-key-unique-to-objectstore.js        2016-01-21 01:49:12 UTC (rev 195393)
+++ trunk/LayoutTests/storage/indexeddb/resources/primary-key-unique-to-objectstore.js        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -12,7 +12,8 @@
</span><span class="cx">     document.getElementById(&quot;logger&quot;).innerHTML += msg + &quot;&lt;br&gt;&quot;;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-var openRequest = indexedDB.open(&quot;pkutos&quot;, 1);
</del><ins>+var dbname = setDBNameFromPath();
+var openRequest = indexedDB.open(dbname, 1);
</ins><span class="cx"> 
</span><span class="cx"> openRequest.onupgradeneeded = function(e) {
</span><span class="cx">     var thisDB = e.target.result;
</span></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbresourcessharedjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/storage/indexeddb/resources/shared.js (195393 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/resources/shared.js        2016-01-21 01:49:12 UTC (rev 195393)
+++ trunk/LayoutTests/storage/indexeddb/resources/shared.js        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -138,6 +138,7 @@
</span><span class="cx">     if (suffix)
</span><span class="cx">         name += suffix;
</span><span class="cx">     eval('dbname = &quot;' + name + '&quot;');
</span><ins>+    return name;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> function preamble(evt)
</span></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbresourcesversionchangeeventbasicjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/storage/indexeddb/resources/version-change-event-basic.js (195393 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/resources/version-change-event-basic.js        2016-01-21 01:49:12 UTC (rev 195393)
+++ trunk/LayoutTests/storage/indexeddb/resources/version-change-event-basic.js        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -12,17 +12,19 @@
</span><span class="cx">     document.getElementById(&quot;logger&quot;).innerHTML += msg + &quot;&lt;br&gt;&quot;;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-var request1 = indexedDB.open(&quot;vceb1&quot;);
</del><ins>+var dbname = setDBNameFromPath();
+
+var request1 = indexedDB.open(dbname + &quot;1&quot;);
</ins><span class="cx"> request1.onupgradeneeded = function(e) {
</span><span class="cx">     log(&quot;First request: &quot; + e.oldVersion + &quot; &quot; + e.newVersion);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-var request2 = indexedDB.open(&quot;vceb2&quot;, 1);
</del><ins>+var request2 = indexedDB.open(dbname + &quot;2&quot;, 1);
</ins><span class="cx"> request2.onupgradeneeded = function(e) {
</span><span class="cx">     log(&quot;Second request: &quot; + e.oldVersion + &quot; &quot; + e.newVersion);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-var request3 = indexedDB.open(&quot;vceb3&quot;, 2);
</del><ins>+var request3 = indexedDB.open(dbname + &quot;3&quot;, 2);
</ins><span class="cx"> request3.onupgradeneeded = function(e) {
</span><span class="cx">     log(&quot;Third request: &quot; + e.oldVersion + &quot; &quot; + e.newVersion);
</span><span class="cx">     if (window.testRunner)
</span><span class="lines">@@ -30,19 +32,19 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> try {
</span><del>-    var request = indexedDB.open(&quot;vceb4&quot;, 0);
</del><ins>+    var request = indexedDB.open(dbname + &quot;4&quot;, 0);
</ins><span class="cx"> } catch (e) {
</span><span class="cx">     log(&quot;0 version: &quot; + e);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> try {
</span><del>-    var request = indexedDB.open(&quot;vceb5&quot;, -1);
</del><ins>+    var request = indexedDB.open(dbname + &quot;5&quot;, -1);
</ins><span class="cx"> } catch (e) {
</span><span class="cx">     log(&quot;Negative version: &quot; + e);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> try {
</span><del>-    var request = indexedDB.open(&quot;vceb6&quot;, &quot;string&quot;);
</del><ins>+    var request = indexedDB.open(dbname + &quot;6&quot;, &quot;string&quot;);
</ins><span class="cx"> } catch (e) {
</span><span class="cx">     log(&quot;String version: &quot; + e);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbstructuredcloneprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/structured-clone-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/structured-clone-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/structured-clone-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,807 @@
</span><ins>+Test structured clone permutations in IndexedDB. File/FileList tests require DumpRenderTree.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+store = db.createObjectStore('storeName')
+This index is not used, but evaluating key path on each put() call will exercise (de)serialization:
+store.createIndex('indexName', 'dummyKeyPath')
+
+Running tests...
+
+Testing: undefined
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS is(test_data, result) is true
+
+
+Testing: null
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS is(test_data, result) is true
+
+
+Testing boolean primitives
+
+Testing: true
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS is(test_data, result) is true
+
+Testing: false
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS is(test_data, result) is true
+
+
+Testing number primitives
+
+Testing: NaN
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS is(test_data, result) is true
+
+Testing: -Infinity
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS is(test_data, result) is true
+
+Testing: -Number.MAX_VALUE
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS is(test_data, result) is true
+
+Testing: -0xffffffff
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS is(test_data, result) is true
+
+Testing: -0x80000000
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS is(test_data, result) is true
+
+Testing: -0x7fffffff
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS is(test_data, result) is true
+
+Testing: -1
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS is(test_data, result) is true
+
+Testing: -Number.MIN_VALUE
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS is(test_data, result) is true
+
+Testing: -0
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS is(test_data, result) is true
+
+Testing: 0
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS is(test_data, result) is true
+
+Testing: 1
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS is(test_data, result) is true
+
+Testing: Number.MIN_VALUE
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS is(test_data, result) is true
+
+Testing: 0x7fffffff
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS is(test_data, result) is true
+
+Testing: 0x80000000
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS is(test_data, result) is true
+
+Testing: 0xffffffff
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS is(test_data, result) is true
+
+Testing: Number.MAX_VALUE
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS is(test_data, result) is true
+
+Testing: Infinity
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS is(test_data, result) is true
+
+
+Testing string primitives
+
+Testing: ''
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS is(test_data, result) is true
+
+Testing: 'this is a sample string'
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS is(test_data, result) is true
+
+Testing: 'null(\0)'
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS is(test_data, result) is true
+
+
+Testing Boolean objects
+
+Testing: new Boolean(true)
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS typeof result is &quot;object&quot;
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data !== result is true
+PASS result.toString() is test_data.toString()
+PASS is(test_data.valueOf(), result.valueOf()) is true
+
+Testing: new Boolean(false)
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS typeof result is &quot;object&quot;
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data !== result is true
+PASS result.toString() is test_data.toString()
+PASS is(test_data.valueOf(), result.valueOf()) is true
+
+
+Testing Number objects
+
+Testing: new Number(NaN)
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS typeof result is &quot;object&quot;
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data !== result is true
+PASS result.toString() is test_data.toString()
+PASS is(test_data.valueOf(), result.valueOf()) is true
+
+Testing: new Number(-Infinity)
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS typeof result is &quot;object&quot;
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data !== result is true
+PASS result.toString() is test_data.toString()
+PASS is(test_data.valueOf(), result.valueOf()) is true
+
+Testing: new Number(-Number.MAX_VALUE)
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS typeof result is &quot;object&quot;
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data !== result is true
+PASS result.toString() is test_data.toString()
+PASS is(test_data.valueOf(), result.valueOf()) is true
+
+Testing: new Number(-Number.MIN_VALUE)
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS typeof result is &quot;object&quot;
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data !== result is true
+PASS result.toString() is test_data.toString()
+PASS is(test_data.valueOf(), result.valueOf()) is true
+
+Testing: new Number(-0)
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS typeof result is &quot;object&quot;
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data !== result is true
+PASS result.toString() is test_data.toString()
+PASS is(test_data.valueOf(), result.valueOf()) is true
+
+Testing: new Number(0)
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS typeof result is &quot;object&quot;
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data !== result is true
+PASS result.toString() is test_data.toString()
+PASS is(test_data.valueOf(), result.valueOf()) is true
+
+Testing: new Number(Number.MIN_VALUE)
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS typeof result is &quot;object&quot;
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data !== result is true
+PASS result.toString() is test_data.toString()
+PASS is(test_data.valueOf(), result.valueOf()) is true
+
+Testing: new Number(Number.MAX_VALUE)
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS typeof result is &quot;object&quot;
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data !== result is true
+PASS result.toString() is test_data.toString()
+PASS is(test_data.valueOf(), result.valueOf()) is true
+
+Testing: new Number(Infinity)
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS typeof result is &quot;object&quot;
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data !== result is true
+PASS result.toString() is test_data.toString()
+PASS is(test_data.valueOf(), result.valueOf()) is true
+
+
+Testing String objects
+
+Testing: new String()
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS typeof result is &quot;object&quot;
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data !== result is true
+PASS result.toString() is test_data.toString()
+PASS is(test_data.valueOf(), result.valueOf()) is true
+
+Testing: new String('this is a sample string')
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS typeof result is &quot;object&quot;
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data !== result is true
+PASS result.toString() is test_data.toString()
+PASS is(test_data.valueOf(), result.valueOf()) is true
+
+Testing: new String('null(\0)')
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS typeof result is &quot;object&quot;
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data !== result is true
+PASS result.toString() is test_data.toString()
+PASS is(test_data.valueOf(), result.valueOf()) is true
+
+
+Testing Date objects
+
+Testing: new Date(-1e13)
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS typeof result is &quot;object&quot;
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data !== result is true
+PASS result.toString() is test_data.toString()
+PASS is(test_data.valueOf(), result.valueOf()) is true
+
+Testing: new Date(-1e12)
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS typeof result is &quot;object&quot;
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data !== result is true
+PASS result.toString() is test_data.toString()
+PASS is(test_data.valueOf(), result.valueOf()) is true
+
+Testing: new Date(-1e9)
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS typeof result is &quot;object&quot;
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data !== result is true
+PASS result.toString() is test_data.toString()
+PASS is(test_data.valueOf(), result.valueOf()) is true
+
+Testing: new Date(-1e6)
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS typeof result is &quot;object&quot;
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data !== result is true
+PASS result.toString() is test_data.toString()
+PASS is(test_data.valueOf(), result.valueOf()) is true
+
+Testing: new Date(-1e3)
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS typeof result is &quot;object&quot;
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data !== result is true
+PASS result.toString() is test_data.toString()
+PASS is(test_data.valueOf(), result.valueOf()) is true
+
+Testing: new Date(0)
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS typeof result is &quot;object&quot;
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data !== result is true
+PASS result.toString() is test_data.toString()
+PASS is(test_data.valueOf(), result.valueOf()) is true
+
+Testing: new Date(1e3)
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS typeof result is &quot;object&quot;
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data !== result is true
+PASS result.toString() is test_data.toString()
+PASS is(test_data.valueOf(), result.valueOf()) is true
+
+Testing: new Date(1e6)
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS typeof result is &quot;object&quot;
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data !== result is true
+PASS result.toString() is test_data.toString()
+PASS is(test_data.valueOf(), result.valueOf()) is true
+
+Testing: new Date(1e9)
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS typeof result is &quot;object&quot;
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data !== result is true
+PASS result.toString() is test_data.toString()
+PASS is(test_data.valueOf(), result.valueOf()) is true
+
+Testing: new Date(1e12)
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS typeof result is &quot;object&quot;
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data !== result is true
+PASS result.toString() is test_data.toString()
+PASS is(test_data.valueOf(), result.valueOf()) is true
+
+Testing: new Date(1e13)
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS typeof result is &quot;object&quot;
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data !== result is true
+PASS result.toString() is test_data.toString()
+PASS is(test_data.valueOf(), result.valueOf()) is true
+
+
+Testing RegExp objects
+
+Testing RegExp: new RegExp()
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS test_data !== result is true
+PASS Object.prototype.toString.call(result) is &quot;[object RegExp]&quot;
+PASS result.toString() is test_data.toString()
+
+Testing RegExp: /abc/
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS test_data !== result is true
+PASS Object.prototype.toString.call(result) is &quot;[object RegExp]&quot;
+PASS result.toString() is test_data.toString()
+
+Testing RegExp: /abc/g
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS test_data !== result is true
+PASS Object.prototype.toString.call(result) is &quot;[object RegExp]&quot;
+PASS result.toString() is test_data.toString()
+
+Testing RegExp: /abc/i
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS test_data !== result is true
+PASS Object.prototype.toString.call(result) is &quot;[object RegExp]&quot;
+PASS result.toString() is test_data.toString()
+
+Testing RegExp: /abc/gi
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS test_data !== result is true
+PASS Object.prototype.toString.call(result) is &quot;[object RegExp]&quot;
+PASS result.toString() is test_data.toString()
+
+Testing RegExp: /abc/m
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS test_data !== result is true
+PASS Object.prototype.toString.call(result) is &quot;[object RegExp]&quot;
+PASS result.toString() is test_data.toString()
+
+Testing RegExp: /abc/mg
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS test_data !== result is true
+PASS Object.prototype.toString.call(result) is &quot;[object RegExp]&quot;
+PASS result.toString() is test_data.toString()
+
+Testing RegExp: /abc/mi
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS test_data !== result is true
+PASS Object.prototype.toString.call(result) is &quot;[object RegExp]&quot;
+PASS result.toString() is test_data.toString()
+
+Testing RegExp: /abc/mgi
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS test_data !== result is true
+PASS Object.prototype.toString.call(result) is &quot;[object RegExp]&quot;
+PASS result.toString() is test_data.toString()
+
+
+Testing ImageData
+canvas = document.createElement('canvas')
+canvas.width = 8
+canvas.height = 8
+test_data = canvas.getContext('2d').getImageData(0, 0, 8, 8)
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS test_data !== result is true
+PASS Object.prototype.toString.call(result) is &quot;[object ImageData]&quot;
+PASS result.width is test_data.width
+PASS result.height is test_data.height
+PASS result.data.length is test_data.data.length
+PASS result data matches
+
+Testing Blob
+Skipping test
+
+Testing File
+Skipping test
+
+Testing FileList
+Skipping test
+
+Testing Array
+test_data = []
+test_data[0] = 'foo'
+test_data[1] = 'bar'
+test_data[10] = true
+test_data[11] = false
+test_data[20] = 123
+test_data[21] = 456
+test_data[30] = null
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS test_data !== result is true
+PASS test_data.length === result.length is true
+PASS test_data[0] is result[0]
+PASS test_data[1] is result[1]
+PASS test_data[10] is result[10]
+PASS test_data[11] is result[11]
+PASS test_data[20] is result[20]
+PASS test_data[21] is result[21]
+PASS test_data[30] is result[30]
+
+Testing Object
+test_data = []
+test_data[0] = 'foo'
+test_data[1] = 'bar'
+test_data['a'] = true
+test_data['b'] = false
+test_data['foo'] = 123
+test_data['bar'] = 456
+test_data[''] = null
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS test_data !== result is true
+PASS arrayCompare(Object.keys(result).sort(), Object.keys(test_data).sort()) is true
+PASS test_data[&quot;0&quot;] is result[&quot;0&quot;]
+PASS test_data[&quot;1&quot;] is result[&quot;1&quot;]
+PASS test_data[&quot;a&quot;] is result[&quot;a&quot;]
+PASS test_data[&quot;b&quot;] is result[&quot;b&quot;]
+PASS test_data[&quot;foo&quot;] is result[&quot;foo&quot;]
+PASS test_data[&quot;bar&quot;] is result[&quot;bar&quot;]
+PASS test_data[&quot;&quot;] is result[&quot;&quot;]
+
+Testing TypedArray
+value = new Uint8Array([])
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS test_data !== result is true
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data.length === result.length is true
+
+value = new Uint8Array([0, 1, 254, 255])
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS test_data !== result is true
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data.length === result.length is true
+PASS is(test_data[0], result[0]) is true
+PASS is(test_data[1], result[1]) is true
+PASS is(test_data[2], result[2]) is true
+PASS is(test_data[3], result[3]) is true
+
+value = new Uint16Array([0x0000, 0x0001, 0xFFFE, 0xFFFF])
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS test_data !== result is true
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data.length === result.length is true
+PASS is(test_data[0], result[0]) is true
+PASS is(test_data[1], result[1]) is true
+PASS is(test_data[2], result[2]) is true
+PASS is(test_data[3], result[3]) is true
+
+value = new Uint32Array([0x00000000, 0x00000001, 0xFFFFFFFE, 0xFFFFFFFF])
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS test_data !== result is true
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data.length === result.length is true
+PASS is(test_data[0], result[0]) is true
+PASS is(test_data[1], result[1]) is true
+PASS is(test_data[2], result[2]) is true
+PASS is(test_data[3], result[3]) is true
+
+value = new Int8Array([0, 1, 254, 255])
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS test_data !== result is true
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data.length === result.length is true
+PASS is(test_data[0], result[0]) is true
+PASS is(test_data[1], result[1]) is true
+PASS is(test_data[2], result[2]) is true
+PASS is(test_data[3], result[3]) is true
+
+value = new Int16Array([0x0000, 0x0001, 0xFFFE, 0xFFFF])
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS test_data !== result is true
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data.length === result.length is true
+PASS is(test_data[0], result[0]) is true
+PASS is(test_data[1], result[1]) is true
+PASS is(test_data[2], result[2]) is true
+PASS is(test_data[3], result[3]) is true
+
+value = new Int32Array([0x00000000, 0x00000001, 0xFFFFFFFE, 0xFFFFFFFF])
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS test_data !== result is true
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data.length === result.length is true
+PASS is(test_data[0], result[0]) is true
+PASS is(test_data[1], result[1]) is true
+PASS is(test_data[2], result[2]) is true
+PASS is(test_data[3], result[3]) is true
+
+value = new Uint8ClampedArray([0, 1, 254, 255])
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS test_data !== result is true
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data.length === result.length is true
+PASS is(test_data[0], result[0]) is true
+PASS is(test_data[1], result[1]) is true
+PASS is(test_data[2], result[2]) is true
+PASS is(test_data[3], result[3]) is true
+
+value = new Float32Array([-Infinity, -1.5, -1, -0.5, 0, 0.5, 1, 1.5, Infinity, NaN])
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS test_data !== result is true
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data.length === result.length is true
+PASS is(test_data[0], result[0]) is true
+PASS is(test_data[1], result[1]) is true
+PASS is(test_data[2], result[2]) is true
+PASS is(test_data[3], result[3]) is true
+PASS is(test_data[4], result[4]) is true
+PASS is(test_data[5], result[5]) is true
+PASS is(test_data[6], result[6]) is true
+PASS is(test_data[7], result[7]) is true
+PASS is(test_data[8], result[8]) is true
+PASS is(test_data[9], result[9]) is true
+
+value = new Float64Array([-Infinity, -Number.MAX_VALUE, -Number.MIN_VALUE, 0, Number.MIN_VALUE, Number.MAX_VALUE, Infinity, NaN])
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+store.put(value, 'key')
+store.get('key')
+PASS test_data !== result is true
+PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
+PASS test_data.length === result.length is true
+PASS is(test_data[0], result[0]) is true
+PASS is(test_data[1], result[1]) is true
+PASS is(test_data[2], result[2]) is true
+PASS is(test_data[3], result[3]) is true
+PASS is(test_data[4], result[4]) is true
+PASS is(test_data[5], result[5]) is true
+PASS is(test_data[6], result[6]) is true
+PASS is(test_data[7], result[7]) is true
+
+
+
+Test types that can't be cloned:
+
+transaction = db.transaction('storeName', 'readwrite')
+store = transaction.objectStore('storeName')
+
+Other JavaScript object types:
+Expecting exception from store.put(new Error, 'key')
+PASS Exception was thrown.
+PASS code is DOMException.DATA_CLONE_ERR
+Exception message: Failed to store record in an IDBObjectStore: An object could not be cloned.
+Expecting exception from store.put(new Function, 'key')
+PASS Exception was thrown.
+PASS code is DOMException.DATA_CLONE_ERR
+Exception message: Failed to store record in an IDBObjectStore: An object could not be cloned.
+
+Other host object types:
+Expecting exception from store.put(self, 'key')
+PASS Exception was thrown.
+PASS code is DOMException.DATA_CLONE_ERR
+Exception message: Failed to store record in an IDBObjectStore: An object could not be cloned.
+Expecting exception from store.put(document, 'key')
+PASS Exception was thrown.
+PASS code is DOMException.DATA_CLONE_ERR
+Exception message: Failed to store record in an IDBObjectStore: An object could not be cloned.
+Expecting exception from store.put(document.body, 'key')
+PASS Exception was thrown.
+PASS code is DOMException.DATA_CLONE_ERR
+Exception message: Failed to store record in an IDBObjectStore: An object could not be cloned.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbstructuredcloneprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/structured-clone-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/structured-clone-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/structured-clone-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;input type=&quot;file&quot; id=&quot;fileInput&quot; multiple&gt;&lt;/input&gt;
+&lt;script src=&quot;resources/structured-clone.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbtransactioncompletewithjsrecursioncrossframeprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/transaction-complete-with-js-recursion-cross-frame-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/transaction-complete-with-js-recursion-cross-frame-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/transaction-complete-with-js-recursion-cross-frame-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,20 @@
</span><ins>+Test that pending transactions are not completed during recursive JS calls until all JS (in all frames) is finished.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+pendingTransaction = db.transaction(['objectStore'], 'readwrite')
+Start re-entrant JS
+transaction = db.transaction(['objectStore'], 'readwrite')
+End re-entrant JS
+store = pendingTransaction.objectStore('objectStore')
+PASS store !== undefined is true
+Pending transaction completed
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbtransactioncompletewithjsrecursioncrossframeprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/transaction-complete-with-js-recursion-cross-frame-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/transaction-complete-with-js-recursion-cross-frame-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/transaction-complete-with-js-recursion-cross-frame-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,13 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;iframe&gt;
+    &lt;body&gt;
+    &lt;/body&gt;
+&lt;/iframe&gt;
+&lt;script src=&quot;resources/transaction-complete-with-js-recursion-cross-frame.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbtransactioncompletewithjsrecursionprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/transaction-complete-with-js-recursion-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/transaction-complete-with-js-recursion-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/transaction-complete-with-js-recursion-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,20 @@
</span><ins>+Test that pending transactions are not completed during recursive JS calls until all JS is finished.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+pendingTransaction = db.transaction(['objectStore'], 'readwrite')
+Start re-entrant JS
+transaction = db.transaction(['objectStore'], 'readwrite')
+End re-entrant JS
+store = pendingTransaction.objectStore('objectStore')
+PASS store !== undefined is true
+PASS Pending transaction completed
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbtransactioncompletewithjsrecursionprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/transaction-complete-with-js-recursion-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/transaction-complete-with-js-recursion-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/transaction-complete-with-js-recursion-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/transaction-complete-with-js-recursion.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbtransactioncrashintasksprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/transaction-crash-in-tasks-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/transaction-crash-in-tasks-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/transaction-crash-in-tasks-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,13 @@
</span><ins>+Regression test for http://webkit.org/b/102283
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.open(dbname, 2)
+indexedDB.open(dbname, 3)
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbtransactioncrashintasksprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/transaction-crash-in-tasks-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/transaction-crash-in-tasks-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/transaction-crash-in-tasks-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/transaction-crash-in-tasks.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbtransactionorderingprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/transaction-ordering-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/transaction-ordering-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/transaction-ordering-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,35 @@
</span><ins>+Verify Indexed DB transactions are ordered per spec
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+
+prepareDatabase():
+db = event.target.result
+store = db.createObjectStore('store')
+
+onOpen():
+db = event.target.result
+
+Create in order tx1, tx2
+tx1 = db.transaction('store', 'readwrite')
+tx2 = db.transaction('store', 'readwrite')
+
+Use in order tx2, tx1
+tx2.objectStore('store').get(0)
+tx1.objectStore('store').get(0)
+
+order = []
+tx1 complete
+tx1 complete
+
+done():
+PASS areArraysEqual(order, [ 1, 2 ]) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbtransactionorderingprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/transaction-ordering-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/transaction-ordering-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/transaction-ordering-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/transaction-ordering.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbtransactionoverlappingprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/transaction-overlapping-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/transaction-overlapping-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/transaction-overlapping-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,34 @@
</span><ins>+Check that transactions that may overlap complete properly.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+
+prepareDatabase():
+db = event.target.result
+store = db.createObjectStore('store')
+store.put('value', 'key')
+
+runParallelTransactions():
+db = event.target.result
+
+transaction1 = db.transaction('store', 'readonly')
+transaction2 = db.transaction('store', 'readonly')
+transaction1GetSuccess = 0
+transaction2GetSuccess = 0
+
+onTransactionComplete():
+first transaction complete, still waiting...
+
+onTransactionComplete():
+PASS transaction1GetSuccess is non-zero.
+PASS transaction2GetSuccess is non-zero.
+db.close()
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbtransactionoverlappingprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/transaction-overlapping-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/transaction-overlapping-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/transaction-overlapping-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/transaction-overlapping.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbtransactionstarvationprivateexpectedtxt"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/storage/indexeddb/transaction-starvation-private-expected.txt (195393 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/transaction-starvation-private-expected.txt        2016-01-21 01:49:12 UTC (rev 195393)
+++ trunk/LayoutTests/storage/indexeddb/transaction-starvation-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -1,36 +0,0 @@
</span><del>-Check that read-only transactions don't starve read-write transactions.
-
-On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
-
-
-indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
-
-indexedDB.deleteDatabase(dbname)
-indexedDB.open(dbname)
-
-prepareDatabase():
-db = event.target.result
-db.createObjectStore('store')
-
-runTransactions():
-db = event.target.result
-
-readWriteTransactionStarted = false
-readWriteTransactionComplete = false
-
-startReadOnlyTransaction():
-transaction = db.transaction('store', 'readonly')
-store = transaction.objectStore('store')
-Keep the transaction alive with an endless series of gets
-
-startReadWriteTransaction():
-transaction = db.transaction('store', 'readwrite')
-readWriteTransactionStarted = true
-
-readWriteTransactionComplete():
-PASS Transaction wasn't starved
-readWriteTransactionComplete = true
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
</del></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbversionchangeeventbasicprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/version-change-event-basic-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/version-change-event-basic-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/version-change-event-basic-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+0 version: TypeError: Type error
+Negative version: TypeError: Value -1 is outside the range [0, 9007199254740991]
+String version: TypeError: Value NaN is outside the range [0, 9007199254740991]
+First request: 0 1
+Second request: 0 1
+Third request: 0 2
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbversionchangeeventbasicprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/version-change-event-basic-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/version-change-event-basic-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/version-change-event-basic-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;div id=&quot;logger&quot;&gt;&lt;/div&gt;
+&lt;script src=&quot;resources/version-change-event-basic.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbversionchangeeventprivateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/version-change-event-private-expected.txt (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/version-change-event-private-expected.txt                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/version-change-event-private-expected.txt        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,21 @@
</span><ins>+Regression test for WK136583 - ensure the versionchange event has the proper name
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+db.onversionchange = onVersionChange
+store = db.createObjectStore('store1')
+PASS db.version is 1
+request = indexedDB.open(dbname, 2)
+db.onversionchange = onVersionChange
+
+onVersionChange():
+PASS event.type is &quot;versionchange&quot;
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbversionchangeeventprivatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/storage/indexeddb/version-change-event-private.html (0 => 195394)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/version-change-event-private.html                                (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/version-change-event-private.html        2016-01-21 02:13:21 UTC (rev 195394)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;resources/version-change-event.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre>
</div>
</div>

</body>
</html>