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