diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-05-27 21:51:42 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-05-27 21:51:42 +0200 |
commit | be01689f43cf6882cf670d33df49ead1f570c53a (patch) | |
tree | 4bb2161d8983b38e3e7ed37b4a50303bfd5e2e85 /Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp | |
parent | a89b2ebb8e192c5e8cea21079bda2ee2c0c7dddd (diff) | |
download | qtwebkit-be01689f43cf6882cf670d33df49ead1f570c53a.tar.gz |
Imported WebKit commit 8d6c5efc74f0222dfc7bcce8d845d4a2707ed9e6 (http://svn.webkit.org/repository/webkit/trunk@118629)
Diffstat (limited to 'Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp')
-rw-r--r-- | Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp b/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp index 65dab6ec2..77ef6c1de 100644 --- a/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp +++ b/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp @@ -65,6 +65,7 @@ enum { SCRIPT_DIALOG, DECIDE_POLICY, + PERMISSION_REQUEST, MOUSE_TARGET_CHANGED, @@ -195,6 +196,12 @@ static gboolean webkitWebViewDecidePolicy(WebKitWebView*, WebKitPolicyDecision* return TRUE; } +static gboolean webkitWebViewPermissionRequest(WebKitWebView*, WebKitPermissionRequest* request) +{ + webkit_permission_request_deny(request); + return TRUE; +} + static void zoomTextOnlyChanged(WebKitSettings* settings, GParamSpec*, WebKitWebView* webView) { WKPageRef wkPage = toAPI(webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView))); @@ -361,6 +368,7 @@ static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass) webViewClass->create = webkitWebViewCreate; webViewClass->script_dialog = webkitWebViewScriptDialog; webViewClass->decide_policy = webkitWebViewDecidePolicy; + webViewClass->permission_request = webkitWebViewPermissionRequest; webViewClass->run_file_chooser = webkitWebViewRunFileChooser; g_type_class_add_private(webViewClass, sizeof(WebKitWebViewPrivate)); @@ -687,6 +695,70 @@ static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass) WEBKIT_TYPE_POLICY_DECISION_TYPE); /** + * WebKitWebView::permission-request: + * @web_view: the #WebKitWebView on which the signal is emitted + * @request: the #WebKitPermissionRequest + * + * This signal is emitted when WebKit is requesting the client to + * decide about a permission request, such as allowing the browser + * to switch to fullscreen mode, sharing its location or similar + * operations. + * + * A possible way to use this signal could be through a dialog + * allowing the user decide what to do with the request: + * + * <informalexample><programlisting> + * static gboolean permission_request_cb (WebKitWebView *web_view, + * WebKitPermissionRequest *request, + * GtkWindow *parent_window) + * { + * GtkWidget *dialog = gtk_message_dialog_new (parent_window, + * GTK_DIALOG_MODAL, + * GTK_MESSAGE_QUESTION, + * GTK_BUTTONS_YES_NO, + * "Allow Permission Request?"); + * gtk_widget_show (dialog); + * gint result = gtk_dialog_run (GTK_DIALOG (dialog)); + * + * switch (result) { + * case GTK_RESPONSE_YES: + * webkit_permission_request_allow (request); + * break; + * default: + * webkit_permission_request_deny (request); + * break; + * } + * gtk_widget_destroy (dialog); + * + * return TRUE; + * } + * </programlisting></informalexample> + * + * It is possible to handle permission requests asynchronously, by + * simply calling g_object_ref() on the @request argument and + * returning %TRUE to block the default signal handler. If the + * last reference is removed on a #WebKitPermissionRequest and the + * request has not been handled, webkit_permission_request_deny() + * will be the default action. + * + * By default, if the signal is not handled, + * webkit_permission_request_deny() will be called over the + * #WebKitPermissionRequest. + * + * Returns: %TRUE to stop other handlers from being invoked for the event. + * %FALSE to propagate the event further. + * + */ + signals[PERMISSION_REQUEST] = + g_signal_new("permission-request", + G_TYPE_FROM_CLASS(webViewClass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET(WebKitWebViewClass, permission_request), + g_signal_accumulator_true_handled, 0 /* accumulator data */, + webkit_marshal_BOOLEAN__OBJECT, + G_TYPE_BOOLEAN, 1, /* number of parameters */ + WEBKIT_TYPE_PERMISSION_REQUEST); + /** * WebKitWebView::mouse-target-changed: * @web_view: the #WebKitWebView on which the signal is emitted * @hit_test_result: a #WebKitHitTestResult @@ -971,6 +1043,12 @@ void webkitWebViewMakePolicyDecision(WebKitWebView* webView, WebKitPolicyDecisio g_signal_emit(webView, signals[DECIDE_POLICY], 0, decision, type, &returnValue); } +void webkitWebViewMakePermissionRequest(WebKitWebView* webView, WebKitPermissionRequest* request) +{ + gboolean returnValue; + g_signal_emit(webView, signals[PERMISSION_REQUEST], 0, request, &returnValue); +} + void webkitWebViewMouseTargetChanged(WebKitWebView* webView, WKHitTestResultRef wkHitTestResult, unsigned modifiers) { WebKitWebViewPrivate* priv = webView->priv; |