[Xfce4-commits] <midori:master> Implement res:// and stock:// in WebKit2
Christian Dywan
noreply at xfce.org
Fri Apr 5 01:24:01 CEST 2013
Updating branch refs/heads/master
to f33299b41b0fd3f7aa5cb1edd7c6e65a960907b7 (commit)
from 2673578d883029dbb13700df99d71b2167df1de6 (commit)
commit f33299b41b0fd3f7aa5cb1edd7c6e65a960907b7
Author: Christian Dywan <christian at twotoasts.de>
Date: Fri Apr 5 00:56:40 2013 +0200
Implement res:// and stock:// in WebKit2
midori/midori-view.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 53 insertions(+), 4 deletions(-)
diff --git a/midori/midori-view.c b/midori/midori-view.c
index b4d2d30..336d42c 100644
--- a/midori/midori-view.c
+++ b/midori/midori-view.c
@@ -74,6 +74,12 @@ midori_view_web_view_get_snapshot (GtkWidget* web_view,
gint width,
gint height);
+#ifdef HAVE_WEBKIT2
+static void
+midori_view_uri_scheme_res (WebKitURISchemeRequest* request,
+ gpointer user_data);
+#endif
+
static gboolean
midori_view_display_error (MidoriView* view,
const gchar* uri,
@@ -383,6 +389,14 @@ midori_view_class_init (MidoriViewClass* class)
"The associated settings",
MIDORI_TYPE_WEB_SETTINGS,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ #ifdef HAVE_WEBKIT2
+ WebKitWebContext* context = webkit_web_context_get_default ();
+ webkit_web_context_register_uri_scheme (context,
+ "res", midori_view_uri_scheme_res, NULL, NULL);
+ webkit_web_context_register_uri_scheme (context,
+ "stock", midori_view_uri_scheme_res, NULL, NULL);
+ #endif
}
static void
@@ -922,7 +936,15 @@ webkit_web_view_progress_changed_cb (WebKitWebView* web_view,
midori_tab_set_progress (MIDORI_TAB (view), progress);
}
-#ifndef HAVE_WEBKIT2
+#ifdef HAVE_WEBKIT2
+static void
+midori_view_uri_scheme_res (WebKitURISchemeRequest* request,
+ gpointer user_data)
+{
+ const gchar* uri = webkit_uri_scheme_request_get_uri (request);
+ WebKitWebView* web_view = webkit_uri_scheme_request_get_web_view (request);
+ MidoriView* view = midori_view_get_for_widget (GTK_WIDGET (web_view));
+#else
static void
midori_view_web_view_resource_request_cb (WebKitWebView* web_view,
WebKitWebFrame* web_frame,
@@ -932,6 +954,7 @@ midori_view_web_view_resource_request_cb (WebKitWebView* web_view,
MidoriView* view)
{
const gchar* uri = webkit_network_request_get_uri (request);
+#endif
/* Only apply custom URIs to special pages for security purposes */
if (!midori_tab_get_special (MIDORI_TAB (view)))
@@ -940,10 +963,25 @@ midori_view_web_view_resource_request_cb (WebKitWebView* web_view,
if (g_str_has_prefix (uri, "res://"))
{
gchar* filepath = midori_paths_get_res_filename (&uri[6]);
+ #ifdef HAVE_WEBKIT2
+ gchar* contents;
+ gsize length;
+ if (g_file_get_contents (filepath, &contents, &length, NULL))
+ {
+ gchar* content_type = g_content_type_guess (filepath, (guchar*)contents, length, NULL);
+ gchar* mime_type = g_content_type_get_mime_type (content_type);
+ GInputStream* stream = g_memory_input_stream_new_from_data (contents, -1, g_free);
+ webkit_uri_scheme_request_finish (request, stream, -1, mime_type);
+ g_object_unref (stream);
+ g_free (mime_type);
+ g_free (content_type);
+ }
+ #else
gchar* file_uri = g_filename_to_uri (filepath, NULL, NULL);
- g_free (filepath);
webkit_network_request_set_uri (request, file_uri);
g_free (file_uri);
+ #endif
+ g_free (filepath);
}
else if (g_str_has_prefix (uri, "stock://"))
{
@@ -992,12 +1030,18 @@ midori_view_web_view_resource_request_cb (WebKitWebView* web_view,
gsize buffer_size;
if (g_file_get_contents (icon_filename, &buffer, &buffer_size, NULL))
{
+ #ifdef HAVE_WEBKIT2
+ GInputStream* stream = g_memory_input_stream_new_from_data (buffer, buffer_size, g_free);
+ webkit_uri_scheme_request_finish (request, stream, -1, "image/svg+xml");
+ g_object_unref (stream);
+ #else
gchar* encoded = g_base64_encode ((guchar*)buffer, buffer_size);
gchar* data_uri = g_strconcat ("data:image/svg+xml;base64,", encoded, NULL);
g_free (buffer);
g_free (encoded);
webkit_network_request_set_uri (request, data_uri);
g_free (data_uri);
+ #endif
return;
}
}
@@ -1021,16 +1065,21 @@ midori_view_web_view_resource_request_cb (WebKitWebView* web_view,
return;
encoded = g_base64_encode ((guchar*)buffer, buffer_size);
- g_free (buffer);
data_uri = g_strconcat ("data:image/png;base64,", encoded, NULL);
g_free (encoded);
+ #ifdef HAVE_WEBKIT2
+ GInputStream* stream = g_memory_input_stream_new_from_data (buffer, buffer_size, g_free);
+ webkit_uri_scheme_request_finish (request, stream, -1, "image/png");
+ g_object_unref (stream);
+ #else
+ g_free (buffer);
webkit_network_request_set_uri (request, data_uri);
+ #endif
g_free (data_uri);
return;
}
}
}
-#endif
#define HAVE_GTK_INFO_BAR GTK_CHECK_VERSION (2, 18, 0)
More information about the Xfce4-commits
mailing list