Hi, my opinion is we'd better operate the physical database(aka sqlite database at present)  on DB thread. Our current solution executes all  the SQL commands in Browser::UI thread, this isn't a problem for ApplicationService::Install(), since the message loop is not running yet and UI thread has the permission to make IO calls. However, after message loop starts, UI thread lost the IO permission(we can check this under Debug mode), therefore, it is illegal to operate the sqlite database at this time.
The simpler way to solve this issue is give I/O permission for UI thread again after message loop starts. Consider that this solution may block the UI message loop, e.g. complicated db operations, i think we'd better transfer db task to Browser::DB thread. wdyt?