⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 238734 in webkit


Ignore:
Timestamp:
Nov 30, 2018, 6:52:43 AM (8 years ago)
Author:
commit-queue@webkit.org
Message:

[GTK][MiniBrowser] Handle Device Info permission requests
​https://bugs.webkit.org/show_bug.cgi?id=191585

Patch by Thibault Saunier <​tsaunier@igalia.com> on 2018-11-30
Reviewed by Carlos Garcia Campos.

  • MiniBrowser/gtk/BrowserTab.c:

(permissionRequestDataNew):
(permissionRequestDataFree):
(permissionRequestDialogResponse):
(decidePermissionRequest):
(browserTabConstructed):

Location:
trunk/Tools
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Tools/ChangeLog

    r238730 r238734  
     12018-11-30  Thibault Saunier  <tsaunier@igalia.com>
     2
     3        [GTK][MiniBrowser] Handle Device Info permission requests
     4        https://bugs.webkit.org/show_bug.cgi?id=191585
     5
     6        Reviewed by Carlos Garcia Campos.
     7
     8        * MiniBrowser/gtk/BrowserTab.c:
     9        (permissionRequestDataNew):
     10        (permissionRequestDataFree):
     11        (permissionRequestDialogResponse):
     12        (decidePermissionRequest):
     13        (browserTabConstructed):
     14
    1152018-11-30  Carlos Garcia Campos  <cgarcia@igalia.com>
    216
  • trunk/Tools/MiniBrowser/gtk/BrowserTab.c

    r205343 r238734  
    5757};
    5858
     59static GHashTable *userMediaPermissionGrantedOrigins;
    5960struct _BrowserTabClass {
    6061    GtkBoxClass parent;
    … …  
    6263
    6364G_DEFINE_TYPE(BrowserTab, browser_tab, GTK_TYPE_BOX)
     65
     66typedef struct {
     67    WebKitPermissionRequest *request;
     68    gchar *origin;
     69} PermissionRequestData;
     70
     71static PermissionRequestData *permissionRequestDataNew(WebKitPermissionRequest *request, gchar *origin)
     72{
     73    PermissionRequestData *data = g_malloc0(sizeof(PermissionRequestData));
     74
     75    data->request = g_object_ref(request);
     76    data->origin = origin;
     77
     78    return data;
     79}
     80
     81static void permissionRequestDataFree(PermissionRequestData *data)
     82{
     83    g_clear_object(&data->request);
     84    g_clear_pointer(&data->origin, g_free);
     85    g_free(data);
     86}
     87
     88static gchar *getWebViewOrigin(WebKitWebView *webView)
     89{
     90    WebKitSecurityOrigin *origin = webkit_security_origin_new_for_uri(webkit_web_view_get_uri(webView));
     91    gchar *originStr = webkit_security_origin_to_string(origin);
     92    webkit_security_origin_unref(origin);
     93
     94    return originStr;
     95}
    6496
    6597static void titleChanged(WebKitWebView *webView, GParamSpec *pspec, BrowserTab *tab)
    … …  
    173205}
    174206
    175 static void permissionRequestDialogResponse(GtkWidget *dialog, gint response, WebKitPermissionRequest *request)
     207static void permissionRequestDialogResponse(GtkWidget *dialog, gint response, PermissionRequestData *requestData)
    176208{
    177209    switch (response) {
    178210    case GTK_RESPONSE_YES:
    179         webkit_permission_request_allow(request);
     211        if (WEBKIT_IS_USER_MEDIA_PERMISSION_REQUEST(requestData->request))
     212            g_hash_table_add(userMediaPermissionGrantedOrigins, g_strdup(requestData->origin));
     213
     214        webkit_permission_request_allow(requestData->request);
    180215        break;
    181216    default:
    182         webkit_permission_request_deny(request);
     217        if (WEBKIT_IS_USER_MEDIA_PERMISSION_REQUEST(requestData->request))
     218            g_hash_table_remove(userMediaPermissionGrantedOrigins, requestData->origin);
     219
     220        webkit_permission_request_deny(requestData->request);
    183221        break;
    184222    }
    185223
    186224    gtk_widget_destroy(dialog);
    187     g_object_unref(request);
     225    g_clear_pointer(&requestData, permissionRequestDataFree);
    188226}
    189227
    … …  
    216254        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?",
    217255            webkit_install_missing_media_plugins_permission_request_get_description(WEBKIT_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST(request)));
    218     } else
     256    } else if (WEBKIT_IS_DEVICE_INFO_PERMISSION_REQUEST(request)) {
     257        char* origin = getWebViewOrigin(webView);
     258        if (g_hash_table_contains(userMediaPermissionGrantedOrigins, origin)) {
     259            webkit_permission_request_allow(request);
     260            g_free(origin);
     261            return TRUE;
     262        }
     263        g_free(origin);
    219264        return FALSE;
     265    } else {
     266        g_print("%s request not handled\n", G_OBJECT_TYPE_NAME(request));
     267        return FALSE;
     268    }
    220269
    221270    GtkWidget *dialog = createInfoBarQuestionMessage(title, text);
    222271    g_free(text);
    223     g_signal_connect(dialog, "response", G_CALLBACK(permissionRequestDialogResponse), g_object_ref(request));
     272    g_signal_connect(dialog, "response", G_CALLBACK(permissionRequestDialogResponse), permissionRequestDataNew(request,
     273        getWebViewOrigin(webView)));
    224274
    225275    gtk_box_pack_start(GTK_BOX(tab), dialog, FALSE, FALSE, 0);
    … …  
    401451    gobjectClass->finalize = browserTabFinalize;
    402452
     453    if (!userMediaPermissionGrantedOrigins)
     454        userMediaPermissionGrantedOrigins = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
     455
    403456    g_object_class_install_property(
    404457        gobjectClass,
Note: See TracChangeset for help on using the changeset viewer.