Bug 182846 - WebKit 2.18.6 get's stuck/hang sometimes when clicking back button
Summary: WebKit 2.18.6 get's stuck/hang sometimes when clicking back button
Status: NEW
Alias: None
Product: WebKit
Classification: Unclassified
Component: History (show other bugs)
Version: WebKit Local Build
Hardware: PC Linux
: P2 Major
Assignee: Nobody
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2018-02-15 15:56 PST by Stefan Fröberg
Modified: 2018-02-15 15:56 PST (History)
0 users

See Also:


Attachments
Gentoo WebKit 2.18.6 configure log (19.76 KB, text/plain)
2018-02-15 15:56 PST, Stefan Fröberg
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Stefan Fröberg 2018-02-15 15:56:50 PST
Created attachment 333962 [details]
Gentoo WebKit 2.18.6 configure log

Hello

I built WebKit 2.18.6 on 64-bit Gentoo and tried it with the following little test code, webkit2test.c.


Build:

gcc -o test `pkg-config --cflags gtk+-3.0 webkit2gtk-4.0` webkit2test.c  -lwebkit2gtk-4.0 -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lsoup-2.4 -lgio-2.0 -lgobject-2.0 -ljavascriptcoregtk-4.0 -lglib-2.0


Testing:

./test https://encrypted.google.com

Then some search of wikipedia articles and some random surfing on it's pages. Everything okay so far.

However, sometimes, it get's stuck when selecting the "Back" option from the right-clicked context menu. 

Nothing happens and trying to resize the window just paints it blank and I have to restart the test program again.
Clicking "Forward" from the context menu does not seem to stuck it, only when sometimes clicking "Back". 
And if I go back all the way to the first page (a.k.a. https://encrypted.google.com) then it get's stuck for 100% sure.

Attached is gentoo configure log.


And here is the test program:

#include <gio/gio.h>
#include <gtk/gtk.h>
#include <webkit2/webkit2.h>


static void destroyWindowCb(GtkWidget* widget, GtkWidget* window);
static gboolean closeWebViewCb(WebKitWebView* webView, GtkWidget* window);
static void	changedCb(WebKitBackForwardList     *back_forward_list, WebKitBackForwardListItem *item_added, gpointer items_removed, gpointer  user_data);


int main(int argc, char* argv[])
{
    // Initialize GTK+
    gtk_init(&argc, &argv);

    // Create an 800x600 window that will contain the browser instance
    GtkWidget *main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_default_size(GTK_WINDOW(main_window), 800, 600);

    // Create a browser instance
    WebKitWebView *webView = WEBKIT_WEB_VIEW(webkit_web_view_new());

    // Put the browser area into the main window
    gtk_container_add(GTK_CONTAINER(main_window), GTK_WIDGET(webView));

    // Set up callbacks so that if either the main window or the browser instance is
    // closed, the program will exit
    g_signal_connect(main_window, "destroy", G_CALLBACK(destroyWindowCb), NULL);
    g_signal_connect(webView, "close", G_CALLBACK(closeWebViewCb), main_window);

    // Load a web page into the browser instance
    webkit_web_view_load_uri(webView, argv[1]);

    // Make sure that when the browser area becomes visible, it will get mouse
    // and keyboard events
    gtk_widget_grab_focus(GTK_WIDGET(webView));

    // Make sure the main window and all its contents are visible
    gtk_widget_show_all(main_window);


    WebKitBackForwardList* list = webkit_web_view_get_back_forward_list(webView);

    g_signal_connect(list,"changed", G_CALLBACK(changedCb),NULL);

    // Run the main GTK+ event loop
    gtk_main();

    return 0;
}


static void destroyWindowCb(GtkWidget* widget, GtkWidget* window)
{
    gtk_main_quit();
}

static gboolean closeWebViewCb(WebKitWebView* webView, GtkWidget* window)
{
    gtk_widget_destroy(window);
    return TRUE;
}

static void	changedCb(WebKitBackForwardList     *back_forward_list, WebKitBackForwardListItem *item_added, gpointer items_removed, gpointer  user_data)
{
   printf("Items in list: %u\n",webkit_back_forward_list_get_length(back_forward_list));

}