- From: Jonas Sicking <jonas@sicking.cc>
- Date: Sat, 16 Mar 2013 04:39:39 -0700
- To: Joshua Bell <jsbell@chromium.org>
- Cc: public-webapps@w3.org
On Fri, Nov 30, 2012 at 3:26 PM, Joshua Bell <jsbell@chromium.org> wrote: > A spec oddity that we noticed - if you explicitly close a connection during > an upgradeneeded handler (or elsewhere in the transaction), the transaction > should complete (not abort) yet the connection fails (error), upgrading the > database but leaving you without a connection. > > Example: > > var req = indexedDB.open('db' + Date.now(), 2); > var db; > req.onupgradeneeded = function() { > db = req.result; > var trans = req.transaction; > trans.oncomplete = function() { alert("transaction completed"); }; // > should show > db.createObjectStore('new-store'); > db.close(); > }; > req.onsuccess = function() { alert("unexpected success); }; // should NOT > show > req.onerror = function() { alert("connection error, version is: " + > db.version); }; // should show, with 2 > > ... and a subsequent open would reveal that the version is 2 and the the > store exists. > > This behavior is specified by 4.1 "Opening a database" step 8: ...If the > "versionchange" transaction in the previous step was aborted, or if > connection is closed, return a DOMError of type AbortError and abort these > steps. In either of these cases, ensure that connection is closed by running > the steps for closing a database connection before these steps are aborted. > > ... and the specifics of 4.10 around closePending, which ensure that calling > close() has no effect on running transactions. It does seem to make sense to produce an error from a .open() call unless the database was successfully opened. I don't feel strongly though and don't recall why we defined it this way. > The one spec wrinkle might be that in 4.10 "Database closing steps", the > spec says "Wait for all transactions _created_ using /connection/ to > complete..." where _created_ references "A transaction is created using > IDBDatabase.transaction." which is not true of versionchange transactions. Yeah. This should probably make sure to cover all transactions. / Jonas
Received on Saturday, 16 March 2013 11:40:36 UTC