Summary: | [GTK][PSON] Crash in NetworkProcessProxy::openNetworkProcessConnection | ||||||
---|---|---|---|---|---|---|---|
Product: | WebKit | Reporter: | Michael Catanzaro <mcatanzaro> | ||||
Component: | WebKitGTK | Assignee: | Nobody <webkit-unassigned> | ||||
Status: | RESOLVED FIXED | ||||||
Severity: | Normal | CC: | berto, bugs-noreply, cgarcia, ews-watchlist, gustavo, mcatanzaro | ||||
Priority: | P2 | ||||||
Version: | WebKit Nightly Build | ||||||
Hardware: | PC | ||||||
OS: | Linux | ||||||
Attachments: |
|
Description
Michael Catanzaro
2019-11-29 08:02:44 PST
I think it would be an assertion failure in debug builds. WebProcessProxy::sessionID() gets called before m_websiteDataStore is set. OK, here's a 100% reproducer: * Load a website in the web view, e.g. https://webkit.org * Load a different website in the same web view, e.g. https://gnome.org. This triggers the creation of a new WebProcessProxy and a process swap. The new WebProcessProxy uses the same WebsiteDataStore as the original, and all works fine. * Ctrl+L to open the address bar dropdown, hold the down arrow key. A new WebProcessProxy is created (not sure why, is it for prewarming?) without any WebsiteDataStore. Then WebProcessProxy::getNetworkProcessConnection() gets called from somewhere, and we crash because WebProcessProxy::setWebsiteDataStore() has not been called yet. (In reply to Michael Catanzaro from comment #0) > It doesn't happen always, but it occurs so > frequently during regular browser usage that I'll likely roll Epiphany back > to 2.26.2. I'll just disable PSON for now. (In reply to Michael Catanzaro from comment #2) > * Load a different website in the same web view, e.g. https://gnome.org. > This triggers the creation of a new WebProcessProxy and a process swap. The > new WebProcessProxy uses the same WebsiteDataStore as the original, and all > works fine. > * Ctrl+L to open the address bar dropdown, hold the down arrow key. A new > WebProcessProxy is created (not sure why, is it for prewarming?) without any > WebsiteDataStore. I missed a step here. After you Ctrl+L, you have to type some characters to display history results. Just pressing the down arrow does nothing unless you type first. (In reply to Michael Catanzaro from comment #2) > OK, here's a 100% reproducer: > > * Load a website in the web view, e.g. https://webkit.org > * Load a different website in the same web view, e.g. https://gnome.org. > This triggers the creation of a new WebProcessProxy and a process swap. The > new WebProcessProxy uses the same WebsiteDataStore as the original, and all > works fine. > * Ctrl+L to open the address bar dropdown, hold the down arrow key. A new > WebProcessProxy is created (not sure why, is it for prewarming?) without any > WebsiteDataStore. If it only happens with the keyboard, but not with the mouse, I would blame the DNS prefetch that we start when selecting entries of the dropdown list. > Then WebProcessProxy::getNetworkProcessConnection() gets called from > somewhere, and we crash because WebProcessProxy::setWebsiteDataStore() has > not been called yet. Created attachment 384542 [details]
Patch
Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API Comment on attachment 384542 [details]
Patch
Nice, thanks
(In reply to Michael Catanzaro from comment #1) > I think it would be an assertion failure in debug builds. > WebProcessProxy::sessionID() gets called before m_websiteDataStore is set. I think I would change this to be a RELEASE_ASSERT(). It seems somewhat fragile and that will likely help debugging in the future. Committed r252980: <https://trac.webkit.org/changeset/252980> |