WebKit Bugzilla
Attachment 356171 Details for
Bug 191585
: [GTK][MiniBrowser] Handle Device Info permission requests
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch for landing
bug-191585-20181130110246.patch (text/plain), 5.41 KB, created by
Thibault Saunier
on 2018-11-30 06:02:47 PST
(
hide
)
Description:
Patch for landing
Filename:
MIME Type:
Creator:
Thibault Saunier
Created:
2018-11-30 06:02:47 PST
Size:
5.41 KB
patch
obsolete
>Subversion Revision: 238666 >diff --git a/Tools/ChangeLog b/Tools/ChangeLog >index 67489f269084b5f5c84e45431b780b0fec9e63c9..aed3aee5d1c599e4072c366cb64e01934576f3fc 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,17 @@ >+2018-11-13 Thibault Saunier <tsaunier@igalia.com> >+ >+ [GTK][MiniBrowser] Handle Device Info permission requests >+ https://bugs.webkit.org/show_bug.cgi?id=191585 >+ >+ Reviewed by Carlos Garcia Campos. >+ >+ * MiniBrowser/gtk/BrowserTab.c: >+ (permissionRequestDataNew): >+ (permissionRequestDataFree): >+ (permissionRequestDialogResponse): >+ (decidePermissionRequest): >+ (browserTabConstructed): >+ > 2018-11-28 Wenson Hsieh <wenson_hsieh@apple.com> > > [iOSMac] Dropping text selections from web content into editable elements crashes the web process >diff --git a/Tools/MiniBrowser/gtk/BrowserTab.c b/Tools/MiniBrowser/gtk/BrowserTab.c >index a6b2ea42e00bdc8f3edb818d71e7220f4633d0cf..4efc633114c397c4b194a20676adf486db969eff 100644 >--- a/Tools/MiniBrowser/gtk/BrowserTab.c >+++ b/Tools/MiniBrowser/gtk/BrowserTab.c >@@ -56,12 +56,44 @@ struct _BrowserTab { > GtkWidget *titleCloseButton; > }; > >+static GHashTable *userMediaPermissionGrantedOrigins; > struct _BrowserTabClass { > GtkBoxClass parent; > }; > > G_DEFINE_TYPE(BrowserTab, browser_tab, GTK_TYPE_BOX) > >+typedef struct { >+ WebKitPermissionRequest *request; >+ gchar *origin; >+} PermissionRequestData; >+ >+static PermissionRequestData *permissionRequestDataNew(WebKitPermissionRequest *request, gchar *origin) >+{ >+ PermissionRequestData *data = g_malloc0(sizeof(PermissionRequestData)); >+ >+ data->request = g_object_ref(request); >+ data->origin = origin; >+ >+ return data; >+} >+ >+static void permissionRequestDataFree(PermissionRequestData *data) >+{ >+ g_clear_object(&data->request); >+ g_clear_pointer(&data->origin, g_free); >+ g_free(data); >+} >+ >+static gchar *getWebViewOrigin(WebKitWebView *webView) >+{ >+ WebKitSecurityOrigin *origin = webkit_security_origin_new_for_uri(webkit_web_view_get_uri(webView)); >+ gchar *originStr = webkit_security_origin_to_string(origin); >+ webkit_security_origin_unref(origin); >+ >+ return originStr; >+} >+ > static void titleChanged(WebKitWebView *webView, GParamSpec *pspec, BrowserTab *tab) > { > const char *title = webkit_web_view_get_title(webView); >@@ -172,19 +204,25 @@ static gboolean loadFailedWithTLSerrors(WebKitWebView *webView, const char *fail > return TRUE; > } > >-static void permissionRequestDialogResponse(GtkWidget *dialog, gint response, WebKitPermissionRequest *request) >+static void permissionRequestDialogResponse(GtkWidget *dialog, gint response, PermissionRequestData *requestData) > { > switch (response) { > case GTK_RESPONSE_YES: >- webkit_permission_request_allow(request); >+ if (WEBKIT_IS_USER_MEDIA_PERMISSION_REQUEST(requestData->request)) >+ g_hash_table_add(userMediaPermissionGrantedOrigins, g_strdup(requestData->origin)); >+ >+ webkit_permission_request_allow(requestData->request); > break; > default: >- webkit_permission_request_deny(request); >+ if (WEBKIT_IS_USER_MEDIA_PERMISSION_REQUEST(requestData->request)) >+ g_hash_table_remove(userMediaPermissionGrantedOrigins, requestData->origin); >+ >+ webkit_permission_request_deny(requestData->request); > break; > } > > gtk_widget_destroy(dialog); >- g_object_unref(request); >+ g_clear_pointer(&requestData, permissionRequestDataFree); > } > > static gboolean decidePermissionRequest(WebKitWebView *webView, WebKitPermissionRequest *request, BrowserTab *tab) >@@ -215,12 +253,24 @@ static gboolean decidePermissionRequest(WebKitWebView *webView, WebKitPermission > title = "Media plugin missing request"; > text = g_strdup_printf("The media backend was unable to find a plugin to play the requested media:\n%s.\nAllow to search and install the missing plugin?", > webkit_install_missing_media_plugins_permission_request_get_description(WEBKIT_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST(request))); >- } else >+ } else if (WEBKIT_IS_DEVICE_INFO_PERMISSION_REQUEST(request)) { >+ char* origin = getWebViewOrigin(webView); >+ if (g_hash_table_contains(userMediaPermissionGrantedOrigins, origin)) { >+ webkit_permission_request_allow(request); >+ g_free(origin); >+ return TRUE; >+ } >+ g_free(origin); >+ return FALSE; >+ } else { >+ g_print("%s request not handled\n", G_OBJECT_TYPE_NAME(request)); > return FALSE; >+ } > > GtkWidget *dialog = createInfoBarQuestionMessage(title, text); > g_free(text); >- g_signal_connect(dialog, "response", G_CALLBACK(permissionRequestDialogResponse), g_object_ref(request)); >+ g_signal_connect(dialog, "response", G_CALLBACK(permissionRequestDialogResponse), permissionRequestDataNew(request, >+ getWebViewOrigin(webView))); > > gtk_box_pack_start(GTK_BOX(tab), dialog, FALSE, FALSE, 0); > gtk_box_reorder_child(GTK_BOX(tab), dialog, 0); >@@ -400,6 +450,9 @@ static void browser_tab_class_init(BrowserTabClass *klass) > gobjectClass->set_property = browserTabSetProperty; > gobjectClass->finalize = browserTabFinalize; > >+ if (!userMediaPermissionGrantedOrigins) >+ userMediaPermissionGrantedOrigins = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); >+ > g_object_class_install_property( > gobjectClass, > PROP_VIEW,
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 191585
:
354668
|
354963
|
355040
|
355046
|
355052
|
355466
|
356004
|
356170
| 356171