This is a follow-up question from How to debug WebKit2GTK+ extensions. While there is more code there for reference, I have changed it up a little.
I have the following webkit extension:
#include <webkit2/webkit-web-extension.h>
#include <iostream>
static void web_page_created_callback(WebKitWebExtension* extension, WebKitWebPage* webPage, gpointer userData)
{
std::cout << "Page " << webkit_web_page_get_id(webPage) << " created for " << webkit_web_page_get_uri(webPage) << "\n";
g_print("Page %lu created for %s\n", webkit_web_page_get_id(webPage), webkit_web_page_get_uri(webPage));
}
extern "C" G_MODULE_EXPORT void webkit_web_extension_initialize(WebKitWebExtension* extension)
{
g_signal_connect(extension, "page-created", G_CALLBACK(web_page_created_callback), NULL);
}
According to https://webkitgtk.org/reference/webkit2gtk/stable/WebKitWebExtension.html and https://blogs.igalia.com/carlosgc/2013/09/10/webkit2gtk-web-process-extensions/, this should print out a message everytime a page is created. I am using the implementation of the extension the same way as the webkit reference doc, where it is a callback for "initialize-web-extension".
I do not know if this makes a difference, but my WebKitWebView object is packed in a GTKWidget box object. This is the output I get:
Page 1 created for Page 1 created for (null)
And this never gets printed again, even when I open a new file (I have a file choose dialog that opens up a file, that's why the WebKitWebView is packed into a GTK_BOX).
Here is what the WebKit2GTK docs say for the "page-created" handler:
void user_function (WebKitWebExtension *extension, WebKitWebPage *web_page, gpointer user_data)
This signal is emitted when a new WebKitWebPage is created in the Web Process. Parameters
extension: the WebKitWebExtension on which the signal is emitted
web_page: the WebKitWebPage created
user_data: user data set when the signal handler was connected.
Flags: Run Last
If this gives the WebPage created, then why can't I get the uri with webkit_web_page_get_uri()
? Why does this only give an output (albeit messed up) for only the first page that is loaded?
Edit: I am loading the page with webkit_web_view_load_uri()