Changeset 238734 in webkit
- Timestamp:
- Nov 30, 2018, 6:52:43 AM (8 years ago)
- Location:
- trunk/Tools
- Files:
-
- 2 edited
-
ChangeLog (modified) (1 diff)
-
MiniBrowser/gtk/BrowserTab.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Tools/ChangeLog
r238730 r238734 1 2018-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 1 15 2018-11-30 Carlos Garcia Campos <cgarcia@igalia.com> 2 16 -
trunk/Tools/MiniBrowser/gtk/BrowserTab.c
r205343 r238734 57 57 }; 58 58 59 static GHashTable *userMediaPermissionGrantedOrigins; 59 60 struct _BrowserTabClass { 60 61 GtkBoxClass parent; … … 62 63 63 64 G_DEFINE_TYPE(BrowserTab, browser_tab, GTK_TYPE_BOX) 65 66 typedef struct { 67 WebKitPermissionRequest *request; 68 gchar *origin; 69 } PermissionRequestData; 70 71 static 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 81 static 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 88 static 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 } 64 96 65 97 static void titleChanged(WebKitWebView *webView, GParamSpec *pspec, BrowserTab *tab) … … 173 205 } 174 206 175 static void permissionRequestDialogResponse(GtkWidget *dialog, gint response, WebKitPermissionRequest *request)207 static void permissionRequestDialogResponse(GtkWidget *dialog, gint response, PermissionRequestData *requestData) 176 208 { 177 209 switch (response) { 178 210 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); 180 215 break; 181 216 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); 183 221 break; 184 222 } 185 223 186 224 gtk_widget_destroy(dialog); 187 g_ object_unref(request);225 g_clear_pointer(&requestData, permissionRequestDataFree); 188 226 } 189 227 … … 216 254 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?", 217 255 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); 219 264 return FALSE; 265 } else { 266 g_print("%s request not handled\n", G_OBJECT_TYPE_NAME(request)); 267 return FALSE; 268 } 220 269 221 270 GtkWidget *dialog = createInfoBarQuestionMessage(title, text); 222 271 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))); 224 274 225 275 gtk_box_pack_start(GTK_BOX(tab), dialog, FALSE, FALSE, 0); … … 401 451 gobjectClass->finalize = browserTabFinalize; 402 452 453 if (!userMediaPermissionGrantedOrigins) 454 userMediaPermissionGrantedOrigins = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); 455 403 456 g_object_class_install_property( 404 457 gobjectClass,
Note:
See TracChangeset
for help on using the changeset viewer.