summaryrefslogtreecommitdiff
path: root/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2012-05-27 21:51:42 +0200
committerSimon Hausmann <simon.hausmann@nokia.com>2012-05-27 21:51:42 +0200
commitbe01689f43cf6882cf670d33df49ead1f570c53a (patch)
tree4bb2161d8983b38e3e7ed37b4a50303bfd5e2e85 /Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp
parenta89b2ebb8e192c5e8cea21079bda2ee2c0c7dddd (diff)
downloadqtwebkit-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.cpp78
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;