- From: Jonas Sicking <jonas@sicking.cc>
- Date: Thu, 3 May 2012 01:30:19 -0700
- To: Israel Hilerio <israelh@microsoft.com>, Joshua Bell <jsbell@chromium.org>, "David Grogan (dgrogan@chromium.org)" <dgrogan@chromium.org>, Odin Hørthe Omdal (odinho@opera.com) <odinho@opera.com>, "public-webapps@w3.org" <public-webapps@w3.org>
Hi All, The issue of bug 14404 came up at the WebApps face-to-face today. I believe it's now the only remaining non-editorial bug. Since we've tried to fix this bug a couple of times in the spec already, but it still remains confusing/ambigious, I wanted to re-iterate what I believe we had decided on the list already to make sure that we're all on the same page: Please note that in all cases where I say "reverted", it means that the properties on the JS-object instances are actually *changed*. When a versionchange transaction is aborted, the following actions will be taken: IDBTransaction.name is not modified at all. I.e. even if is is a transaction used to create a new database, and thus there is no on-disk database, IDBTransaction.name remains as it was. IDBTransaction.version will be reverted to the version the on-disk database had before the transaction was started. If the versionchange transaction was started because the database was newly created, this means reverting it to version 0, if it was started in response to a version upgrade, this means reverting to the version it had before the transaction was started. Incidentally, this is the only time that the IDBTransaction.version property ever changes value on a given IDBTransaction instance. IDBTransaction.objectStoreNames is reverted to the list of names that it had before the transaction was started. If the versionchange transaction was started because the database was newly created, this means reverting it to an empty list, if it was started in response to a version upgrade, this means reverting to the list of object store names it had before the transaction was started. IDBObjectStore.indexNames for each object store is reverted to the list of names that it had before the transaction was started. Note that while you can't get to object stores using the transaction.objectStore function after a transaction is aborted, the page might still have references to objec store instances and so IDBObjectStore.indexNames can still be accessed. This means that for any object store which was created by the transaction, the list is reverted to an empty list. For any object store which existed before the transaction was started, it means reverting to the list of index names it had before the transaction was started. For any object store which was deleted during the transaction, the list of names is still reverted to the list it had before the transaction was started, which potentially is a non-empty list. (We could of course make an exception for deleted objectStore and define that their .indexNames property remains empty. Either way we should explicitly call it out). The alternative is that when a versionchange transaction is aborted, the IDBTransaction.name/IDBTransaction.objectStoreNames/IDBObjectStore.indexNames properties all remain the value that they have when the transaction is aborted. But last we talked about this Google, Microsoft and Opera preferred the other solution (at least that's how I understood it). I don't think it particularly matters what which solution we chose, I.e. I don't think either solution is better for authors. But whichever solution we choose it should be clearly defined in the spec. / Jonas
Received on Thursday, 3 May 2012 08:31:23 UTC