Bug 82776

Summary: [DumpRenderTree] IndexedDB: Each page group/worker has a distinct IDBFactoryBackend
Product: WebKit Reporter: Joshua Bell <jsbell>
Component: WebKit Misc.Assignee: Michael Pruett <michael>
Status: NEW ---    
Severity: Normal CC: abarth, charles.wei, dgrogan, svillar
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: Unspecified   
OS: Unspecified   
Bug Depends on:    
Bug Blocks: 107194, 82678    

Description Joshua Bell 2012-03-30 13:43:40 PDT
The PageGroupIndexedDatabase and WorkerContextIndexedDatabase classes contain IDBFactoryBackendInterface members which are initialized lazily. The IndexedDB implementation assumes there is a single IDBFactoryBackendImpl instance for the entire browser, since it controls access to the backing store, maintains open database connections, and schedules transactions.

The result is that a page and worker, or two workers, that attempt to open connections to the same database end up talking to completely distinct database instances.
Comment 1 Joshua Bell 2012-03-30 13:43:59 PDT
This does not affect the Chromium port, only DumpRenderTree.
Comment 2 Sergio Villar Senin 2013-02-14 04:57:18 PST
(In reply to comment #1)
> This does not affect the Chromium port, only DumpRenderTree.

Why? What about other ports?
Comment 3 Joshua Bell 2013-02-14 09:43:01 PST
(In reply to comment #2)
> (In reply to comment #1)
> > This does not affect the Chromium port, only DumpRenderTree.
> 
> Why?

In full-blown Chromium, the back-end objects run in a different process; all front-end objects talk through proxies which implement IPC to the same back-end. This is true in Chromium's chrome browser and content_shell.

The Chromium port of test_shell (used for DumpRenderTree) is single-process, and runs into the issue in the bug Description.

> What about other ports?

Other ports did not implement IndexedDB at the time I wrote that. I don't know the state of the other ports at the moment, but they would likely run into this issue unless they implement a similar mechanism for separating front- and back-ends.