RESOLVED FIXED Bug 121996
IndexedDB IDL Refactoring
https://bugs.webkit.org/show_bug.cgi?id=121996
Summary IndexedDB IDL Refactoring
Brady Eidson
Reported 2013-09-26 16:47:37 PDT
IndexedDB IDL Refactoring This includes: 1 - Leveraging EventTarget.idl inheritance 2 - Removing comments 3 - Reordering to match the spec's IDLs 4 - Removing nonstandard, WebKit-specific methods 5 - Updating interfaces to match the spec (versions are only uint64_t's now...) 6 - Updating implementation code as needed (versions are only uint64_t's now...)
Attachments
Patch v1 (37.14 KB, patch)
2013-09-26 16:52 PDT, Brady Eidson
gtk-ews: commit-queue-
Patch v2 - Minimal fixes to keep leveldb building (42.18 KB, patch)
2013-09-27 13:29 PDT, Brady Eidson
ap: review+
eflews.bot: commit-queue-
Patch v3 - Give LevelDB ewses another shot (53.62 KB, patch)
2013-09-27 15:10 PDT, Brady Eidson
eflews.bot: commit-queue-
Patch v4 - Now with more stdint.h (53.80 KB, patch)
2013-09-27 15:47 PDT, Brady Eidson
eflews.bot: commit-queue-
Patch v5 - Now with more manual INT64_MAX (53.87 KB, patch)
2013-09-27 16:00 PDT, Brady Eidson
eflews.bot: commit-queue-
Patch v6 - Glad their EWS is fast (54.69 KB, patch)
2013-09-27 16:21 PDT, Brady Eidson
no flags
Brady Eidson
Comment 1 2013-09-26 16:52:24 PDT
Created attachment 212768 [details] Patch v1
kov's GTK+ EWS bot
Comment 2 2013-09-27 01:30:45 PDT
EFL EWS Bot
Comment 3 2013-09-27 02:32:02 PDT
EFL EWS Bot
Comment 4 2013-09-27 03:17:18 PDT
Comment on attachment 212768 [details] Patch v1 Attachment 212768 [details] did not pass efl-wk2-ews (efl-wk2): Output: http://webkit-queues.appspot.com/results/2649121
Brady Eidson
Comment 5 2013-09-27 13:29:00 PDT
Created attachment 212835 [details] Patch v2 - Minimal fixes to keep leveldb building
WebKit Commit Bot
Comment 6 2013-09-27 13:30:15 PDT
Attachment 212835 [details] did not pass style-queue: Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'Source/WebCore/ChangeLog', u'Source/WebCore/Modules/indexeddb/IDBCallbacks.h', u'Source/WebCore/Modules/indexeddb/IDBCursor.idl', u'Source/WebCore/Modules/indexeddb/IDBDatabase.cpp', u'Source/WebCore/Modules/indexeddb/IDBDatabase.h', u'Source/WebCore/Modules/indexeddb/IDBDatabase.idl', u'Source/WebCore/Modules/indexeddb/IDBDatabaseCallbacks.h', u'Source/WebCore/Modules/indexeddb/IDBDatabaseCallbacksImpl.cpp', u'Source/WebCore/Modules/indexeddb/IDBDatabaseCallbacksImpl.h', u'Source/WebCore/Modules/indexeddb/IDBFactory.cpp', u'Source/WebCore/Modules/indexeddb/IDBFactory.h', u'Source/WebCore/Modules/indexeddb/IDBFactory.idl', u'Source/WebCore/Modules/indexeddb/IDBIndex.idl', u'Source/WebCore/Modules/indexeddb/IDBKeyRange.idl', u'Source/WebCore/Modules/indexeddb/IDBMetadata.h', u'Source/WebCore/Modules/indexeddb/IDBObjectStore.idl', u'Source/WebCore/Modules/indexeddb/IDBOpenDBRequest.cpp', u'Source/WebCore/Modules/indexeddb/IDBOpenDBRequest.h', u'Source/WebCore/Modules/indexeddb/IDBRequest.cpp', u'Source/WebCore/Modules/indexeddb/IDBRequest.h', u'Source/WebCore/Modules/indexeddb/IDBRequest.idl', u'Source/WebCore/Modules/indexeddb/IDBTransaction.cpp', u'Source/WebCore/Modules/indexeddb/IDBTransaction.h', u'Source/WebCore/Modules/indexeddb/IDBTransaction.idl', u'Source/WebCore/Modules/indexeddb/IDBVersionChangeEvent.cpp', u'Source/WebCore/Modules/indexeddb/IDBVersionChangeEvent.h', u'Source/WebCore/Modules/indexeddb/IDBVersionChangeEvent.idl', u'Source/WebCore/Modules/indexeddb/IndexedDB.h', u'Source/WebCore/Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp', u'Source/WebCore/Modules/indexeddb/leveldb/IDBLevelDBCoding.cpp']" exit_code: 1 Source/WebCore/ChangeLog:74: Need whitespace between colon and description [changelog/filechangedescriptionwhitespace] [5] Source/WebCore/ChangeLog:75: Need whitespace between colon and description [changelog/filechangedescriptionwhitespace] [5] Total errors found: 2 in 25 files If any of these errors are false positives, please file a bug against check-webkit-style.
EFL EWS Bot
Comment 7 2013-09-27 13:37:28 PDT
Comment on attachment 212835 [details] Patch v2 - Minimal fixes to keep leveldb building Attachment 212835 [details] did not pass efl-wk2-ews (efl-wk2): Output: http://webkit-queues.appspot.com/results/2692065
Alexey Proskuryakov
Comment 8 2013-09-27 13:38:41 PDT
Comment on attachment 212835 [details] Patch v2 - Minimal fixes to keep leveldb building View in context: https://bugs.webkit.org/attachment.cgi?id=212835&action=review Nice! > Source/WebCore/Modules/indexeddb/IDBDatabaseCallbacksImpl.h:51 > - void connect(IDBDatabase*); > + virtual void connect(IDBDatabase*); Should this class be FINAL, and all virtual functions OVERRIDE? Not sure if the former implies the latter... > Source/WebCore/Modules/indexeddb/IDBFactory.cpp:118 > + IDB_TRACE("IDBFactory::open"); What's IDB_TRACE, and why is it not LOG()? > Source/WebCore/Modules/indexeddb/IndexedDB.h:53 > +enum VersionNullness { What's better, nullness or nullity? Generally, having enums inside other headers results in including too much, and slowing down compilation, so we factor them out eventually. I don't know if that's a practical issue here. > Source/WebCore/Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:538 > + // If the magic negative value is retrieved from the database Unfinished comment?
EFL EWS Bot
Comment 9 2013-09-27 13:50:29 PDT
Comment on attachment 212835 [details] Patch v2 - Minimal fixes to keep leveldb building Attachment 212835 [details] did not pass efl-ews (efl): Output: http://webkit-queues.appspot.com/results/2660237
Brady Eidson
Comment 10 2013-09-27 14:25:38 PDT
(In reply to comment #8) > (From update of attachment 212835 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=212835&action=review > > Nice! > > > Source/WebCore/Modules/indexeddb/IDBDatabaseCallbacksImpl.h:51 > > - void connect(IDBDatabase*); > > + virtual void connect(IDBDatabase*); > > Should this class be FINAL, and all virtual functions OVERRIDE? Not sure if the former implies the latter... I think it can be. > > Source/WebCore/Modules/indexeddb/IDBFactory.cpp:118 > > + IDB_TRACE("IDBFactory::open"); > > What's IDB_TRACE, and why is it not LOG()? I have no idea - long standing code from Google. =/ > > Source/WebCore/Modules/indexeddb/IndexedDB.h:53 > > +enum VersionNullness { > > What's better, nullness or nullity? I waffled back and forth. Not sure. > Generally, having enums inside other headers results in including too much, and slowing down compilation, so we factor them out eventually. I don't know if that's a practical issue here. This one is legitimately needed from multiple compilation units *for now* > > Source/WebCore/Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:538 > > + // If the magic negative value is retrieved from the database > > Unfinished comment? Yup!
Brady Eidson
Comment 11 2013-09-27 14:26:41 PDT
I'll make the requested changes from review, and give another crack at keeping the leveldb build going.
Brady Eidson
Comment 12 2013-09-27 15:10:39 PDT
Created attachment 212845 [details] Patch v3 - Give LevelDB ewses another shot
EFL EWS Bot
Comment 13 2013-09-27 15:15:08 PDT
Comment on attachment 212845 [details] Patch v3 - Give LevelDB ewses another shot Attachment 212845 [details] did not pass efl-wk2-ews (efl-wk2): Output: http://webkit-queues.appspot.com/results/2654221
EFL EWS Bot
Comment 14 2013-09-27 15:15:28 PDT
Comment on attachment 212845 [details] Patch v3 - Give LevelDB ewses another shot Attachment 212845 [details] did not pass efl-ews (efl): Output: http://webkit-queues.appspot.com/results/2655237
Brady Eidson
Comment 15 2013-09-27 15:46:46 PDT
(In reply to comment #14) > (From update of attachment 212845 [details]) > Attachment 212845 [details] did not pass efl-ews (efl): > Output: http://webkit-queues.appspot.com/results/2655237 I *think* I only botched the <stdint.h> include.
Brady Eidson
Comment 16 2013-09-27 15:47:43 PDT
Created attachment 212847 [details] Patch v4 - Now with more stdint.h
EFL EWS Bot
Comment 17 2013-09-27 15:54:45 PDT
Comment on attachment 212847 [details] Patch v4 - Now with more stdint.h Attachment 212847 [details] did not pass efl-wk2-ews (efl-wk2): Output: http://webkit-queues.appspot.com/results/2660273
Brady Eidson
Comment 18 2013-09-27 16:00:56 PDT
Created attachment 212849 [details] Patch v5 - Now with more manual INT64_MAX
EFL EWS Bot
Comment 19 2013-09-27 16:16:18 PDT
Comment on attachment 212849 [details] Patch v5 - Now with more manual INT64_MAX Attachment 212849 [details] did not pass efl-wk2-ews (efl-wk2): Output: http://webkit-queues.appspot.com/results/2692103
Brady Eidson
Comment 20 2013-09-27 16:21:14 PDT
Created attachment 212851 [details] Patch v6 - Glad their EWS is fast
Brady Eidson
Comment 21 2013-09-27 16:44:26 PDT
Sweet, EWS build is happy. I'll assume that's good for the other leveldb builds also. Landed in http://trac.webkit.org/changeset/156590
Zan Dobersek
Comment 22 2013-09-29 10:26:04 PDT
This regressed pretty badly on the GTK port where the IDB tests are run. I understand this is a work in progress so I'll skip the tests until you enable them on the Mac port. I'll point out two crash-inducing problems, but there are other problems as well that make most of the tests timing out.
Zan Dobersek
Comment 23 2013-09-29 10:31:24 PDT
Comment on attachment 212851 [details] Patch v6 - Glad their EWS is fast View in context: https://bugs.webkit.org/attachment.cgi?id=212851&action=review > Source/WebCore/Modules/indexeddb/IDBDatabase.idl:32 > +] interface IDBDatabase : EventTarget { The JSGenerateToNativeObject and JSGenerateToJSObject attributes are required on the interface so the proper wrapper and unwrapper functions are generated that are then used in WebCore::toJS(ExecState*, JSDOMGlobalObject*, EventTarget*). If not generated, the EventTarget wrapper/unwrapper function is called recursively, which ends in a crash. > Source/WebCore/Modules/indexeddb/IDBFactory.cpp:119 > + return openInternal(context, name, 0, IndexedDB::NullVersion, ec); IDBDatabaseMetadata::NoIntVersion should be passed into openInternal() here instead of 0.
Brady Eidson
Comment 24 2013-09-29 12:43:06 PDT
(In reply to comment #23) > (From update of attachment 212851 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=212851&action=review > > > Source/WebCore/Modules/indexeddb/IDBDatabase.idl:32 > > +] interface IDBDatabase : EventTarget { > > The JSGenerateToNativeObject and JSGenerateToJSObject attributes are required on the interface so the proper wrapper and unwrapper functions are generated that are then used in WebCore::toJS(ExecState*, JSDOMGlobalObject*, EventTarget*). If not generated, the EventTarget wrapper/unwrapper function is called recursively, which ends in a crash. Inheriting from EventTarget is definitely the way to go forward. Thanks for skipping for now, and I'll definitely get to it soon once we get to the point of enabling tests across the board. This is tangential enough to the refactoring/new code I'm working on that anybody with spare cycles is free to take a look in the meantime. > > Source/WebCore/Modules/indexeddb/IDBFactory.cpp:119 > > + return openInternal(context, name, 0, IndexedDB::NullVersion, ec); > > IDBDatabaseMetadata::NoIntVersion should be passed into openInternal() here instead of 0. That's not quite correct. The spec has changed and only int versions exist, and databases always start with a version of 0. So while this line might currently be a bit wrong, the entire notion of having a string version is completely wrong. The concept of the string version is so pervasive in the LevelDB implementation that I didn't try to get rid of it... but going forward somebody who lives on the LevelDB implementation will need to correctly factor out the string version altogether. It has no place in the cross-platform bindings implementation at all.
Joshua Bell
Comment 25 2013-09-30 09:02:58 PDT
(In reply to comment #24) > > The concept of the string version is so pervasive in the LevelDB implementation that I didn't try to get rid of it... but going forward somebody who lives on the LevelDB implementation will need to correctly factor out the string version altogether. It has no place in the cross-platform bindings implementation at all. FYI, Chromium shipped IndexedDB with the older string-based versioning; once the spec changed the implementation needed to support both int and string versions so that web apps could migrate. Ports that didn't enable IDB before the change don't need this, so the string-versioning code can be nuked from WebKit.
Note You need to log in before you can comment on or make changes to this bug.