From e0dff764218ae146b0a21585a6a53ec4ca7e649f Mon Sep 17 00:00:00 2001 From: Cem Keylan Date: Mon, 17 May 2021 15:21:29 +0300 Subject: lariza: handle permission requests --- browser.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/browser.c b/browser.c index 29c694a..2facd88 100644 --- a/browser.c +++ b/browser.c @@ -48,6 +48,7 @@ gboolean key_web_view(GtkWidget *, GdkEvent *, gpointer); void mainwindow_setup(void); void mainwindow_title(gint); void notebook_switch_page(GtkNotebook *, GtkWidget *, guint, gpointer); +gboolean permission_request(WebKitWebView *, WebKitPermissionRequest *, gpointer); gboolean quit_if_nothing_active(void); gboolean remote_msg(GIOChannel *, GIOCondition, gpointer); void run_user_scripts(WebKitWebView *); @@ -175,6 +176,8 @@ client_new(const gchar *uri, WebKitWebView *related_wv, gboolean show, G_CALLBACK(key_web_view), c); g_signal_connect(G_OBJECT(c->web_view), "mouse-target-changed", G_CALLBACK(hover_web_view), c); + g_signal_connect(G_OBJECT(c->web_view), "permission-request", + G_CALLBACK(permission_request), c); g_signal_connect(G_OBJECT(c->web_view), "web-process-crashed", G_CALLBACK(crashed_web_view), c); @@ -1142,6 +1145,51 @@ notebook_switch_page(GtkNotebook *nb, GtkWidget *p, guint idx, gpointer data) mainwindow_title(idx); } +gboolean +permission_request(WebKitWebView *v, WebKitPermissionRequest *r, gpointer data) +{ + char *permission_str; + if (WEBKIT_IS_GEOLOCATION_PERMISSION_REQUEST(r)) + { + permission_str = "Allow this site to see your location?"; + } + else if (WEBKIT_IS_NOTIFICATION_PERMISSION_REQUEST(r)) + { + permission_str = "Allow notifications from this website?"; + } + else if (WEBKIT_IS_USER_MEDIA_PERMISSION_REQUEST(r)) { + if (webkit_user_media_permission_is_for_audio_device( + WEBKIT_USER_MEDIA_PERMISSION_REQUEST(r))) + permission_str = "Allow this site to access your microphone?"; + else if (webkit_user_media_permission_is_for_video_device( + WEBKIT_USER_MEDIA_PERMISSION_REQUEST(r))) + permission_str = "Allow this site to access your webcam?"; + else + return FALSE; + } + else { + /* Deny anything that are not listed above */ + return FALSE; + } + GtkWidget *dialog = gtk_message_dialog_new (NULL, + GTK_DIALOG_MODAL, + GTK_MESSAGE_QUESTION, + GTK_BUTTONS_YES_NO, + permission_str); + gtk_widget_show(dialog); + gint result = gtk_dialog_run(GTK_DIALOG(dialog)); + switch(result) { + case GTK_RESPONSE_YES: + webkit_permission_request_allow(r); + break; + default: + webkit_permission_request_deny(r); + break; + } + gtk_widget_destroy(dialog); + return TRUE; +} + gboolean quit_if_nothing_active(void) { -- cgit v1.2.3