### Class

# WebKit2WebExtension WebExtension

#### Description [src]

    class WebKit2WebExtension.WebExtension : GObject.Object
    {
      priv: WebKitWebExtensionPrivate*
    }

Represents an extension of the WebProcess.

WebKitWebExtension is a loadable module for the WebProcess. It allows you to execute code in the WebProcess and being able to use the DOM API, to change any request or to inject custom JavaScript code, for example.

To create a WebKitWebExtension you should write a module with an initialization function that could be either `webkit_web_extension_initialize()` with prototype `WebKitWebExtensionInitializeFunction` or `webkit_web_extension_initialize_with_user_data()` with prototype `WebKitWebExtensionInitializeWithUserDataFunction`. 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 (WebKitWebExtension *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_extension_initialize (WebKitWebExtension *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 `WebKitWebPage` is created.

WebKit has to know where it can find the created WebKitWebExtension. 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_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 ();

      // ...
    }

#### Ancestors

- GObject

#### Instance methods

###### webkit_web_extension_get_page

Get the web page of the given `page_id`.

###### webkit_web_extension_send_message_to_context

Send `message` to the `WebKitWebContext` corresponding to `extension`. If `message` is floating, it’s consumed.

since: 2.28

###### webkit_web_extension_send_message_to_context_finish

Finish an asynchronous operation started with webkit_web_extension_send_message_to_context().

since: 2.28

##### Methods inherited from GObject (43)

Please see GObject for a full list of methods.

#### Signals

###### WebKit2WebExtension.WebExtension::page-created

This signal is emitted when a new `WebKitWebPage` is created in the Web Process.

###### WebKit2WebExtension.WebExtension::user-message-received

This signal is emitted when a `WebKitUserMessage` is received from the `WebKitWebContext` corresponding to `extension`. Messages sent by `WebKitWebContext` are always broadcasted to all `WebKitWebExtension`s and they can’t be replied to. Calling `webkit_user_message_send_reply()` will do nothing.

since: 2.28

##### Signals inherited from GObject (1)

###### GObject::notify

The notify signal is emitted on an object when one of its properties has its value set through g_object_set_property(), g_object_set(), et al.

#### Class structure

    struct WebKit2WebExtensionWebExtensionClass {
      GObjectClass parent_class;

    }

No description available.

###### Class members

`parent_class: GObjectClass`

  No description available.