diff options
| author | Quentin Rameau <quinq@fifth.space> | 2022-10-16 17:39:05 +0200 |
|---|---|---|
| committer | Quentin Rameau <quinq@fifth.space> | 2022-10-16 17:39:05 +0200 |
| commit | 665a709b522a6fa18c671f1fc41297603292d0e8 (patch) | |
| tree | b0eec87c8965f307e99fd33a2804546ebb8c594d /surf.c | |
| parent | 609ea1c8e620ed38e71bf03a46a759c042e76500 (diff) | |
webext: Exchange fd over webkit messages
This is more complex, but webkit2gtk prevents passing file descriptors
to processes in 2.38.0.
Diffstat (limited to 'surf.c')
| -rw-r--r-- | surf.c | 36 |
1 files changed, 28 insertions, 8 deletions
@@ -214,6 +214,8 @@ static void downloadstarted(WebKitWebContext *wc, WebKitDownload *d, Client *c); static void responsereceived(WebKitDownload *d, GParamSpec *ps, Client *c); static void download(Client *c, WebKitURIResponse *r); +static gboolean viewusrmsgrcv(WebKitWebView *v, WebKitUserMessage *m, + gpointer u); static void webprocessterminated(WebKitWebView *v, WebKitWebProcessTerminationReason r, Client *c); @@ -1224,6 +1226,8 @@ newview(Client *c, WebKitWebView *rv) G_CALLBACK(permissionrequested), c); g_signal_connect(G_OBJECT(v), "ready-to-show", G_CALLBACK(showview), c); + g_signal_connect(G_OBJECT(v), "user-message-received", + G_CALLBACK(viewusrmsgrcv), c); g_signal_connect(G_OBJECT(v), "web-process-terminated", G_CALLBACK(webprocessterminated), c); @@ -1262,14 +1266,6 @@ readsock(GIOChannel *s, GIOCondition ioc, gpointer unused) void initwebextensions(WebKitWebContext *wc, Client *c) { - GVariant *gv; - - if (spair[1] < 0) - return; - - gv = g_variant_new("i", spair[1]); - - webkit_web_context_set_web_extensions_initialization_user_data(wc, gv); webkit_web_context_set_web_extensions_directory(wc, WEBEXTDIR); } @@ -1572,6 +1568,30 @@ titlechanged(WebKitWebView *view, GParamSpec *ps, Client *c) updatetitle(c); } +gboolean +viewusrmsgrcv(WebKitWebView *v, WebKitUserMessage *m, gpointer unused) +{ + WebKitUserMessage *r; + GUnixFDList *gfd; + const char *name; + + name = webkit_user_message_get_name(m); + if (strcmp(name, "page-created") != 0) { + fprintf(stderr, "surf: Unknown UserMessage: %s\n", name); + return TRUE; + } + + if (spair[1] < 0) + return TRUE; + + gfd = g_unix_fd_list_new_from_array(&spair[1], 1); + r = webkit_user_message_new_with_fd_list("surf-pipe", NULL, gfd); + + webkit_user_message_send_reply(m, r); + + return TRUE; +} + void mousetargetchanged(WebKitWebView *v, WebKitHitTestResult *h, guint modifiers, Client *c) |