diff -up evolution-3.22.6/mail/e-http-request.c.remote-content-cache evolution-3.22.6/mail/e-http-request.c --- evolution-3.22.6/mail/e-http-request.c.remote-content-cache 2016-09-19 10:22:58.000000000 +0200 +++ evolution-3.22.6/mail/e-http-request.c 2017-03-24 13:47:48.814647889 +0100 @@ -186,7 +186,7 @@ e_http_request_process_sync (EContentReq GError **error) { SoupURI *soup_uri; - gchar *evo_uri, *use_uri; + gchar *evo_uri = NULL, *use_uri; gchar *mail_uri = NULL; GInputStream *stream; gboolean force_load_images = FALSE; @@ -221,6 +221,14 @@ e_http_request_process_sync (EContentReq g_hash_table_remove (query, "__evo-mail"); + /* Required, because soup_uri_set_query_from_form() can change + order of arguments, then the URL checksum doesn't match. */ + evo_uri = g_hash_table_lookup (query, "__evo-original-uri"); + if (evo_uri) + evo_uri = g_strdup (evo_uri); + + g_hash_table_remove (query, "__evo-original-uri"); + /* Remove __evo-load-images if present (and in such case set * force_load_images to TRUE) */ force_load_images = g_hash_table_remove (query, "__evo-load-images"); @@ -229,7 +237,8 @@ e_http_request_process_sync (EContentReq g_hash_table_unref (query); } - evo_uri = soup_uri_to_string (soup_uri, FALSE); + if (!evo_uri) + evo_uri = soup_uri_to_string (soup_uri, FALSE); if (camel_debug_start ("emformat:requests")) { printf ( diff -up evolution-3.22.6/mail/e-mail-display.c.remote-content-cache evolution-3.22.6/mail/e-mail-display.c --- evolution-3.22.6/mail/e-mail-display.c.remote-content-cache 2017-03-24 13:47:48.803647890 +0100 +++ evolution-3.22.6/mail/e-mail-display.c 2017-03-24 13:47:48.814647889 +0100 @@ -1745,6 +1745,10 @@ mail_display_uri_requested_cb (EWebView enc = soup_uri_encode (mail_uri, NULL); g_hash_table_insert (query, g_strdup ("__evo-mail"), enc); + /* Required, because soup_uri_set_query_from_form() can change + order of arguments, then the URL checksum doesn't match. */ + g_hash_table_insert (query, g_strdup ("__evo-original-uri"), g_strdup (uri)); + if (display->priv->force_image_load || can_download_uri) { g_hash_table_insert ( query, diff -up evolution-3.22.6/modules/webkit-editor/e-webkit-editor.c.remote-content-cache evolution-3.22.6/modules/webkit-editor/e-webkit-editor.c --- evolution-3.22.6/modules/webkit-editor/e-webkit-editor.c.remote-content-cache 2017-03-24 13:47:48.804647890 +0100 +++ evolution-3.22.6/modules/webkit-editor/e-webkit-editor.c 2017-03-24 13:50:26.450640886 +0100 @@ -23,6 +23,8 @@ #include "web-extension/e-editor-web-extension-names.h" #include +#include "mail/e-http-request.h" + #include #define E_WEBKIT_EDITOR_GET_PRIVATE(obj) \ @@ -4989,9 +4991,58 @@ webkit_editor_get_web_extension (EWebKit } static void +webkit_editor_uri_request_done_cb (GObject *source_object, + GAsyncResult *result, + gpointer user_data) +{ + WebKitURISchemeRequest *request = user_data; + GInputStream *stream = NULL; + gint64 stream_length = -1; + gchar *mime_type = NULL; + GError *error = NULL; + + g_return_if_fail (E_IS_CONTENT_REQUEST (source_object)); + g_return_if_fail (WEBKIT_IS_URI_SCHEME_REQUEST (request)); + + if (!e_content_request_process_finish (E_CONTENT_REQUEST (source_object), + result, &stream, &stream_length, &mime_type, &error)) { + webkit_uri_scheme_request_finish_error (request, error); + g_clear_error (&error); + } else { + webkit_uri_scheme_request_finish (request, stream, stream_length, mime_type); + + g_clear_object (&stream); + g_free (mime_type); + } + + g_object_unref (request); +} + +static void +webkit_editor_process_uri_request_cb (WebKitURISchemeRequest *request, + gpointer user_data) +{ + EContentRequest *content_request = user_data; + const gchar *uri; + GObject *requester; + + g_return_if_fail (WEBKIT_IS_URI_SCHEME_REQUEST (request)); + g_return_if_fail (E_IS_CONTENT_REQUEST (content_request)); + + uri = webkit_uri_scheme_request_get_uri (request); + requester = G_OBJECT (webkit_uri_scheme_request_get_web_view (request)); + + g_return_if_fail (e_content_request_can_process_uri (content_request, uri)); + + e_content_request_process (content_request, uri, requester, NULL, + webkit_editor_uri_request_done_cb, g_object_ref (request)); +} + +static void webkit_editor_constructed (GObject *object) { EWebKitEditor *wk_editor; + EContentRequest *content_request; gchar **languages; WebKitWebContext *web_context; WebKitSettings *web_settings; @@ -5012,6 +5063,13 @@ webkit_editor_constructed (GObject *obje webkit_web_context_set_spell_checking_languages (web_context, (const gchar * const *) languages); g_strfreev (languages); + content_request = e_http_request_new (); + webkit_web_context_register_uri_scheme (web_context, "evo-http", webkit_editor_process_uri_request_cb, + g_object_ref (content_request), g_object_unref); + webkit_web_context_register_uri_scheme (web_context, "evo-https", webkit_editor_process_uri_request_cb, + g_object_ref (content_request), g_object_unref); + g_object_unref (content_request); + webkit_web_view_set_editable (web_view, TRUE); web_settings = webkit_web_view_get_settings (web_view); diff -up evolution-3.22.6/modules/webkit-editor/Makefile.am.remote-content-cache evolution-3.22.6/modules/webkit-editor/Makefile.am --- evolution-3.22.6/modules/webkit-editor/Makefile.am.remote-content-cache 2017-03-24 13:51:12.164638855 +0100 +++ evolution-3.22.6/modules/webkit-editor/Makefile.am 2017-03-24 13:51:23.553638350 +0100 @@ -21,6 +21,7 @@ module_webkit_editor_la_SOURCES = \ module_webkit_editor_la_LIBADD = \ $(top_builddir)/e-util/libevolution-util.la \ + $(top_builddir)/mail/libevolution-mail.la \ $(EVOLUTION_DATA_SERVER_LIBS) \ $(GNOME_PLATFORM_LIBS) \ $(NULL)