[webkit-dev] Odd binding problems
Eric Uhrhane
ericu at chromium.org
Mon Feb 22 15:16:06 PST 2010
I'm working on adding JSC bindings so that the Database can be
accessed from Web Workers. I've got it pretty much working, but I
must be missing something important because I'm getting the following
bad behavior:
If I run the existing database layout tests, they're fine. If I run
my one new Worker database test, it's fine.
If I run the Worker database test and any other database test, in
either order, the second one I run will fail. Non-database tests
aren't affected.
The failure is that the object returned from openDatabase lacks
certain properties. You can convert it to a string ("[object
Database]"), but if you look for e.g. database.transaction or
database.version, they're undefined. If you try to iterate over its
properties, you assert in PropertyNameArray::add, because the
identifier [in this case "version"], fails the
identifier->isIdentifier() check.
This isn't anything timing-related; I can see all the setup and
teardown of the tests and their threads happening just when I expect
them to happen, in a nicely non-overlapping way. Likewise I can see
the database being opened correctly. My bet is I've failed to add
something critical to the bindings, some override for the
idl-generated code that wasn't needed in the DOM bindings but is for
the Worker bindings. In fact the only binding change I made was to
add the openDatabase call to WorkerContext.idl. I haven't changed the
bindings for the Database object itself at all.
The changes I've made are backed up on the chromium codereview site:
The bindings and related minor changes: http://codereview.chromium.org/602013
Making the DatabaseTracker thread-safe [needed for this to run]:
http://codereview.chromium.org/596028
One layout test refactored to run in workers as well:
http://codereview.chromium.org/598034
Does this sort of a failure mode ring a bell for anyone?
Thanks for any pointers,
Eric Uhrhane
More information about the webkit-dev
mailing list