Title: [151496] trunk/Tools
Revision
151496
Author
[email protected]
Date
2013-06-12 06:39:19 -0700 (Wed, 12 Jun 2013)

Log Message

[GTK] MiniBrowser to automatically download "non-showable" documents when left click in link
https://bugs.webkit.org/show_bug.cgi?id=117533

Patch by Andres Gomez <[email protected]> on 2013-06-12
Reviewed by Carlos Garcia Campos.

MiniBrowser now starts automatically the download of the documents
that cannot be shown just by WebKit itself on link left clicking.

* MiniBrowser/gtk/BrowserWindow.c:
(webViewDecidePolicy): handled the
WEBKIT_POLICY_DECISION_TYPE_RESPONSE decision type too.

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (151495 => 151496)


--- trunk/Tools/ChangeLog	2013-06-12 12:25:41 UTC (rev 151495)
+++ trunk/Tools/ChangeLog	2013-06-12 13:39:19 UTC (rev 151496)
@@ -1,3 +1,17 @@
+2013-06-12  Andres Gomez  <[email protected]>
+
+        [GTK] MiniBrowser to automatically download "non-showable" documents when left click in link
+        https://bugs.webkit.org/show_bug.cgi?id=117533
+
+        Reviewed by Carlos Garcia Campos.
+
+        MiniBrowser now starts automatically the download of the documents
+        that cannot be shown just by WebKit itself on link left clicking.
+
+        * MiniBrowser/gtk/BrowserWindow.c:
+        (webViewDecidePolicy): handled the
+        WEBKIT_POLICY_DECISION_TYPE_RESPONSE decision type too.
+
 2013-06-12  Zan Dobersek  <[email protected]>
 
         [GTK] Remove the WebCoreLayer(Gtk2).a archives before regenerating them

Modified: trunk/Tools/MiniBrowser/gtk/BrowserWindow.c (151495 => 151496)


--- trunk/Tools/MiniBrowser/gtk/BrowserWindow.c	2013-06-12 12:25:41 UTC (rev 151495)
+++ trunk/Tools/MiniBrowser/gtk/BrowserWindow.c	2013-06-12 13:39:19 UTC (rev 151496)
@@ -339,22 +339,43 @@
 
 static gboolean webViewDecidePolicy(WebKitWebView *webView, WebKitPolicyDecision *decision, WebKitPolicyDecisionType decisionType, BrowserWindow *window)
 {
-    if (decisionType != WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION)
-        return FALSE;
+    switch (decisionType) {
+    case WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION: {
+        WebKitNavigationPolicyDecision *navigationDecision = WEBKIT_NAVIGATION_POLICY_DECISION(decision);
+        if (webkit_navigation_policy_decision_get_navigation_type(navigationDecision) != WEBKIT_NAVIGATION_TYPE_LINK_CLICKED
+            || webkit_navigation_policy_decision_get_mouse_button(navigationDecision) != GDK_BUTTON_MIDDLE)
+            return FALSE;
 
-    WebKitNavigationPolicyDecision *navigationDecision = WEBKIT_NAVIGATION_POLICY_DECISION(decision);
-    if (webkit_navigation_policy_decision_get_navigation_type(navigationDecision) != WEBKIT_NAVIGATION_TYPE_LINK_CLICKED
-        || webkit_navigation_policy_decision_get_mouse_button(navigationDecision) != 2)
-        return FALSE;
+        // Opening a new window if link clicked with the middle button.
+        WebKitWebView *newWebView = WEBKIT_WEB_VIEW(webkit_web_view_new_with_context(webkit_web_view_get_context(webView)));
+        GtkWidget *newWindow = browser_window_new(newWebView, GTK_WINDOW(window));
+        webkit_web_view_load_request(newWebView, webkit_navigation_policy_decision_get_request(navigationDecision));
+        gtk_widget_show(newWindow);
 
-    WebKitWebView *newWebView = WEBKIT_WEB_VIEW(webkit_web_view_new_with_context(webkit_web_view_get_context(webView)));
-    webkit_web_view_set_settings(newWebView, webkit_web_view_get_settings(webView));
-    GtkWidget *newWindow = browser_window_new(newWebView, GTK_WINDOW(window));
-    webkit_web_view_load_request(newWebView, webkit_navigation_policy_decision_get_request(navigationDecision));
-    gtk_widget_show(newWindow);
+        webkit_policy_decision_ignore(decision);
+        return TRUE;
+    }
+    case WEBKIT_POLICY_DECISION_TYPE_RESPONSE: {
+        WebKitResponsePolicyDecision *responseDecision = WEBKIT_RESPONSE_POLICY_DECISION(decision);
+        WebKitURIResponse *response = webkit_response_policy_decision_get_response(responseDecision);
+        const char *mimeType = webkit_uri_response_get_mime_type(response);
 
-    webkit_policy_decision_ignore(decision);
-    return TRUE;
+        if (webkit_web_view_can_show_mime_type(webView, mimeType))
+            return FALSE;
+
+        WebKitWebResource *mainResource = webkit_web_view_get_main_resource(webView);
+        WebKitURIRequest *request = webkit_response_policy_decision_get_request(responseDecision);
+        const char *requestURI = webkit_uri_request_get_uri(request);
+        if (g_strcmp0(webkit_web_resource_get_uri(mainResource), requestURI))
+            return FALSE;
+
+        webkit_policy_decision_download(decision);
+        return TRUE;
+    }
+    case WEBKIT_POLICY_DECISION_TYPE_NEW_WINDOW_ACTION:
+    default:
+        return FALSE;
+    }
 }
 
 static gboolean webViewDecidePermissionRequest(WebKitWebView *webView, WebKitPermissionRequest *request, BrowserWindow *window)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to