WebProcessExtension
Added in version 2.40.
Superclasses: Object
Represents an extension of the web process.
WebKitWebProcessExtension is a loadable module for the web process. It allows you to execute code in the web process and being able to use the DOM API, to change any request or to inject custom JavaScript code, for example.
To create a WebKitWebProcessExtension you should write a module with an initialization function that could
be either webkit_web_process_extension_initialize() with prototype WebKitWebProcessExtensionInitializeFunction
or
webkit_web_process_extension_initialize_with_user_data() with prototype WebKitWebProcessExtensionInitializeWithUserDataFunction
.
This function has to be public and it has to use the G_MODULE_EXPORT
macro. It is called when the
web process is initialized.
static void
web_page_created_callback (WebKitWebProcessExtension *extension,
WebKitWebPage *web_page,
gpointer user_data)
{
g_print ("Page ``%d`` created for ``%s``\n",
webkit_web_page_get_id (web_page),
webkit_web_page_get_uri (web_page));
}
G_MODULE_EXPORT void
webkit_web_process_extension_initialize (WebKitWebProcessExtension *extension)
{
g_signal_connect (extension, "page-created",
G_CALLBACK (web_page_created_callback),
NULL);
}
The previous piece of code shows a trivial example of an extension that notifies when
a WebPage
is created.
WebKit has to know where it can find the created WebKitWebProcessExtension. To do so you
should use the webkit_web_context_set_web_extensions_directory() function. The signal
WebKitWebContext
::initialize-web-extensions is the recommended place to call it.
To provide the initialization data used by the webkit_web_process_extension_initialize_with_user_data() function, you have to call webkit_web_context_set_web_extensions_initialization_user_data() with the desired data as parameter. You can see an example of this in the following piece of code:
``define`` WEB_EXTENSIONS_DIRECTORY // ...
static void
initialize_web_extensions (WebKitWebContext *context,
gpointer user_data)
{
// Web Extensions get a different ID for each Web Process
static guint32 unique_id = 0;
webkit_web_context_set_web_extensions_directory (
context, WEB_EXTENSIONS_DIRECTORY);
webkit_web_context_set_web_extensions_initialization_user_data (
context, g_variant_new_uint32 (unique_id++));
}
int main (int argc, char **argv)
{
g_signal_connect (webkit_web_context_get_default (),
"initialize-web-extensions",
G_CALLBACK (initialize_web_extensions),
NULL);
GtkWidget *view = webkit_web_view_new ();
// ...
}
Methods
- class WebProcessExtension
- get_page(page_id: int) WebPage
Get the web page of the given
page_id
.Added in version 2.40.
- Parameters:
page_id – the identifier of the
WebPage
to get
- send_message_to_context(message: UserMessage, cancellable: Cancellable | None = None, callback: Callable[[...], None] | None = None, *user_data: Any) None
Send
message
to theWebKitWebContext
corresponding toextension
. Ifmessage
is floating, it’s consumed.If you don’t expect any reply, or you simply want to ignore it, you can pass
None
ascalback
. When the operation is finished,callback
will be called. You can then callsend_message_to_context_finish()
to get the message reply.Added in version 2.40.
- Parameters:
message – a
UserMessage
cancellable – a
Cancellable
orNone
to ignorecallback – A
AsyncReadyCallback
to call when the request is satisfied orNone
user_data – the data to pass to callback function
- send_message_to_context_finish(result: AsyncResult) UserMessage
Finish an asynchronous operation started with
send_message_to_context()
.Added in version 2.40.
- Parameters:
result – a
AsyncResult
Signals
- class WebProcessExtension.signals
- page_created(web_page: WebPage) None
This signal is emitted when a new
WebPage
is created in the Web Process.Added in version 2.40.
- Parameters:
web_page – the
WebPage
created
- user_message_received(message: UserMessage) None
This signal is emitted when a
UserMessage
is received from theWebKitWebContext
corresponding toextension
. Messages sent byWebKitWebContext
are always broadcasted to all web extensions and they can’t be replied to. Callingsend_reply()
will do nothing.Added in version 2.40.
- Parameters:
message – the
UserMessage
received