summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Catanzaro <mcatanzaro@igalia.com>2018-10-11 16:09:29 -0500
committerMichael Catanzaro <mcatanzaro@igalia.com>2018-10-13 11:26:13 -0500
commit7aba6e86fb37fef8705fac7fd2ff5a5822d8d5e2 (patch)
treeb5c280585de19e48e2aee14465b3c37f452a2ebe
parent235657fcb6e70dfa18122abeb0c3a2dc5a66a4b6 (diff)
downloadepiphany-wip/reader-uri.tar.gz
Split out most functionality of EphyViewSourceHandlerwip/reader-uri
Almost all of this logic is reusable for reader mode, so let's move it to a parent class, EphySourceTransformHandler.
-rw-r--r--embed/ephy-embed-shell.c2
-rw-r--r--embed/ephy-source-transform-handler.c310
-rw-r--r--embed/ephy-source-transform-handler.h43
-rw-r--r--embed/ephy-view-source-handler.c280
-rw-r--r--embed/ephy-view-source-handler.h6
-rw-r--r--embed/meson.build1
6 files changed, 377 insertions, 265 deletions
diff --git a/embed/ephy-embed-shell.c b/embed/ephy-embed-shell.c
index 9708df3db..86063187d 100644
--- a/embed/ephy-embed-shell.c
+++ b/embed/ephy-embed-shell.c
@@ -842,7 +842,7 @@ source_request_cb (WebKitURISchemeRequest *request,
{
EphyEmbedShellPrivate *priv = ephy_embed_shell_get_instance_private (shell);
- ephy_view_source_handler_handle_request (priv->source_handler, request);
+ ephy_source_transform_handler_handle_request (EPHY_SOURCE_TRANSFORM_HANDLER (priv->source_handler), request);
}
static void
diff --git a/embed/ephy-source-transform-handler.c b/embed/ephy-source-transform-handler.c
new file mode 100644
index 000000000..2e92c7eeb
--- /dev/null
+++ b/embed/ephy-source-transform-handler.c
@@ -0,0 +1,310 @@
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * Copyright © 2016, 2018 Igalia S.L.
+ *
+ * This file is part of Epiphany.
+ *
+ * Epiphany is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Epiphany is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Epiphany. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+#include "ephy-source-transform-handler.h"
+
+#include "ephy-embed-container.h"
+#include "ephy-embed-shell.h"
+#include "ephy-web-view.h"
+
+#include <gio/gio.h>
+#include <glib/gi18n.h>
+#include <string.h>
+
+typedef struct {
+ GObject parent_instance;
+
+ GList *outstanding_requests;
+} EphySourceTransformHandlerPrivate;
+
+G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (EphySourceTransformHandler, ephy_source_transform_handler, G_TYPE_OBJECT)
+
+typedef struct {
+ EphySourceTransformHandler *transform_handler;
+ WebKitURISchemeRequest *scheme_request;
+ WebKitWebView *web_view;
+ GCancellable *cancellable;
+ guint load_changed_id;
+} EphySourceTransformRequest;
+
+static EphySourceTransformRequest *
+ephy_source_transform_request_new (EphySourceTransformHandler *handler,
+ WebKitURISchemeRequest *request)
+{
+ EphySourceTransformRequest *source_transform_request;
+
+ source_transform_request = g_slice_new (EphySourceTransformRequest);
+ source_transform_request->transform_handler = g_object_ref (handler);
+ source_transform_request->scheme_request = g_object_ref (request);
+ source_transform_request->web_view = NULL; /* created only if required */
+ source_transform_request->cancellable = g_cancellable_new ();
+ source_transform_request->load_changed_id = 0;
+
+ return source_transform_request;
+}
+
+static void
+ephy_source_transform_request_free (EphySourceTransformRequest *request)
+{
+ if (request->load_changed_id > 0)
+ g_signal_handler_disconnect (request->web_view, request->load_changed_id);
+
+ g_object_unref (request->transform_handler);
+ g_object_unref (request->scheme_request);
+ g_clear_object (&request->web_view);
+
+ g_cancellable_cancel (request->cancellable);
+ g_object_unref (request->cancellable);
+
+ g_slice_free (EphySourceTransformRequest, request);
+}
+
+static void
+finish_uri_scheme_request (EphySourceTransformRequest *request,
+ gchar *data,
+ GError *error)
+{
+ EphySourceTransformHandlerPrivate *priv = ephy_source_transform_handler_get_instance_private (request->transform_handler);
+ GInputStream *stream;
+ gssize data_length;
+
+ g_assert ((data && !error) || (!data && error));
+
+ if (error) {
+ webkit_uri_scheme_request_finish_error (request->scheme_request, error);
+ } else {
+ data_length = MIN (strlen (data), G_MAXSSIZE);
+ stream = g_memory_input_stream_new_from_data (data, data_length, g_free);
+ webkit_uri_scheme_request_finish (request->scheme_request, stream, data_length, "text/html");
+ g_object_unref (stream);
+ }
+
+ priv->outstanding_requests = g_list_remove (priv->outstanding_requests, request);
+
+ ephy_source_transform_request_free (request);
+}
+
+static void
+web_resource_data_cb (WebKitWebResource *resource,
+ GAsyncResult *result,
+ EphySourceTransformRequest *request)
+{
+ EphySourceTransformHandler *handler = request->transform_handler;
+ guchar *source;
+ char *html;
+ gsize length;
+ GError *error = NULL;
+
+ source = webkit_web_resource_get_data_finish (resource, result, &length, &error);
+ if (error) {
+ finish_uri_scheme_request (request, NULL, error);
+ g_error_free (error);
+ return;
+ }
+
+ g_assert (EPHY_SOURCE_TRANSFORM_HANDLER_GET_CLASS (handler)->transform_source != NULL);
+ /* FIXME: Encoding schenanigans here */
+ html = (char *)EPHY_SOURCE_TRANSFORM_HANDLER_GET_CLASS (handler)->transform_source (handler, source, length);
+
+ finish_uri_scheme_request (request, html, NULL);
+
+ g_free (source);
+}
+
+static void
+ephy_source_transform_request_begin_get_source_from_web_view (EphySourceTransformRequest *request,
+ WebKitWebView *web_view)
+{
+ WebKitWebResource *resource = webkit_web_view_get_main_resource (web_view);
+ g_assert (resource);
+ webkit_web_resource_get_data (resource,
+ request->cancellable,
+ (GAsyncReadyCallback)(web_resource_data_cb),
+ request);
+}
+
+static void
+load_changed_cb (WebKitWebView *web_view,
+ WebKitLoadEvent load_event,
+ EphySourceTransformRequest *request)
+{
+ if (load_event == WEBKIT_LOAD_FINISHED)
+ ephy_source_transform_request_begin_get_source_from_web_view (request, web_view);
+}
+
+static void
+ephy_source_transform_request_begin_get_source_from_uri (EphySourceTransformRequest *request,
+ const char *uri)
+{
+ EphyEmbedShell *shell = ephy_embed_shell_get_default ();
+ WebKitWebContext *context = ephy_embed_shell_get_web_context (shell);
+
+ request->web_view = WEBKIT_WEB_VIEW (g_object_ref_sink (webkit_web_view_new_with_context (context)));
+
+ g_assert (request->load_changed_id == 0);
+ request->load_changed_id = g_signal_connect (request->web_view, "load-changed",
+ G_CALLBACK (load_changed_cb),
+ request);
+
+ webkit_web_view_load_uri (request->web_view, uri);
+}
+
+static gint
+embed_is_displaying_matching_uri (EphyEmbed *embed,
+ SoupURI *uri)
+{
+ EphyWebView *web_view;
+ SoupURI *view_uri;
+ gint ret = -1;
+
+ if (ephy_embed_has_load_pending (embed))
+ return -1;
+
+ web_view = ephy_embed_get_web_view (embed);
+ if (ephy_web_view_is_loading (web_view))
+ return -1;
+
+ view_uri = soup_uri_new (ephy_web_view_get_address (web_view));
+ if (!view_uri)
+ return -1;
+
+ soup_uri_set_fragment (view_uri, NULL);
+ ret = soup_uri_equal (view_uri, uri) ? 0 : -1;
+
+ soup_uri_free (view_uri);
+
+ return ret;
+}
+
+static WebKitWebView *
+get_web_view_matching_uri (SoupURI *uri)
+{
+ EphyEmbedShell *shell;
+ GtkWindow *window;
+ GList *embeds = NULL;
+ GList *found;
+ EphyEmbed *embed = NULL;
+
+ shell = ephy_embed_shell_get_default ();
+ window = gtk_application_get_active_window (GTK_APPLICATION (shell));
+
+ if (!EPHY_IS_EMBED_CONTAINER (window))
+ goto out;
+
+ embeds = ephy_embed_container_get_children (EPHY_EMBED_CONTAINER (window));
+ found = g_list_find_custom (embeds, uri, (GCompareFunc)embed_is_displaying_matching_uri);
+
+ if (found)
+ embed = found->data;
+
+out:
+ g_list_free (embeds);
+
+ return embed ? WEBKIT_WEB_VIEW (ephy_embed_get_web_view (embed)) : NULL;
+}
+
+static void
+ephy_source_transform_request_start (EphySourceTransformRequest *request)
+{
+ EphySourceTransformHandlerPrivate *priv = ephy_source_transform_handler_get_instance_private (request->transform_handler);
+ SoupURI *soup_uri;
+ char *modified_uri;
+ char *decoded_fragment;
+ const char *original_uri;
+ WebKitWebView *web_view;
+
+ priv->outstanding_requests = g_list_prepend (priv->outstanding_requests, request);
+
+ original_uri = webkit_uri_scheme_request_get_uri (request->scheme_request);
+ soup_uri = soup_uri_new (original_uri);
+
+ if (!soup_uri || !soup_uri->fragment) {
+ /* Can't assert because user could theoretically input something weird */
+ GError *error = g_error_new (WEBKIT_NETWORK_ERROR,
+ WEBKIT_NETWORK_ERROR_FAILED,
+ _("%s is not a valid URI"),
+ original_uri);
+ finish_uri_scheme_request (request, NULL, error);
+ g_error_free (error);
+ return;
+ }
+
+ /* FIXME: Switch to ephy-source:https://gnome.org? */
+ /* Convert e.g. ephy-source://gnome.org#https to https://gnome.org */
+ decoded_fragment = soup_uri_decode (soup_uri->fragment);
+ soup_uri_set_scheme (soup_uri, decoded_fragment);
+ soup_uri_set_fragment (soup_uri, NULL);
+ modified_uri = soup_uri_to_string (soup_uri, FALSE);
+ g_assert (modified_uri);
+
+ web_view = get_web_view_matching_uri (soup_uri);
+ if (web_view)
+ ephy_source_transform_request_begin_get_source_from_web_view (request, WEBKIT_WEB_VIEW (web_view));
+ else
+ ephy_source_transform_request_begin_get_source_from_uri (request, modified_uri);
+
+ g_free (decoded_fragment);
+ g_free (modified_uri);
+ soup_uri_free (soup_uri);
+}
+
+static void
+cancel_outstanding_request (EphySourceTransformRequest *request)
+{
+ g_cancellable_cancel (request->cancellable);
+}
+
+static void
+ephy_source_transform_handler_dispose (GObject *object)
+{
+ EphySourceTransformHandlerPrivate *priv = ephy_source_transform_handler_get_instance_private (EPHY_SOURCE_TRANSFORM_HANDLER (object));
+
+ if (priv->outstanding_requests) {
+ g_list_foreach (priv->outstanding_requests, (GFunc)cancel_outstanding_request, NULL);
+ g_list_free (priv->outstanding_requests);
+ priv->outstanding_requests = NULL;
+ }
+
+ G_OBJECT_CLASS (ephy_source_transform_handler_parent_class)->dispose (object);
+}
+
+static void
+ephy_source_transform_handler_init (EphySourceTransformHandler *handler)
+{
+}
+
+static void
+ephy_source_transform_handler_class_init (EphySourceTransformHandlerClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->dispose = ephy_source_transform_handler_dispose;
+}
+
+void
+ephy_source_transform_handler_handle_request (EphySourceTransformHandler *handler,
+ WebKitURISchemeRequest *scheme_request)
+{
+ EphySourceTransformRequest *source_transform_request;
+
+ source_transform_request = ephy_source_transform_request_new (handler, scheme_request);
+ ephy_source_transform_request_start (source_transform_request);
+}
diff --git a/embed/ephy-source-transform-handler.h b/embed/ephy-source-transform-handler.h
new file mode 100644
index 000000000..2605c1ae3
--- /dev/null
+++ b/embed/ephy-source-transform-handler.h
@@ -0,0 +1,43 @@
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * Copyright © 2016, 2018 Igalia S.L.
+ *
+ * This file is part of Epiphany.
+ *
+ * Epiphany is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Epiphany is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Epiphany. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include <webkit2/webkit2.h>
+
+G_BEGIN_DECLS
+
+#define EPHY_TYPE_SOURCE_TRANSFORM_HANDLER (ephy_source_transform_handler_get_type ())
+
+G_DECLARE_DERIVABLE_TYPE (EphySourceTransformHandler, ephy_source_transform_handler, EPHY, SOURCE_TRANSFORM_HANDLER, GObject)
+
+struct _EphySourceTransformHandlerClass
+{
+ GObjectClass parent_class;
+
+ guchar *(* transform_source) (EphySourceTransformHandler *handler,
+ const guchar *source,
+ gsize length);
+};
+
+void ephy_source_transform_handler_handle_request (EphySourceTransformHandler *handler,
+ WebKitURISchemeRequest *request);
+
+G_END_DECLS
diff --git a/embed/ephy-view-source-handler.c b/embed/ephy-view-source-handler.c
index 31aadfcbd..60d012ac5 100644
--- a/embed/ephy-view-source-handler.c
+++ b/embed/ephy-view-source-handler.c
@@ -30,105 +30,28 @@
#include <string.h>
struct _EphyViewSourceHandler {
- GObject parent_instance;
-
- GList *outstanding_requests;
+ EphySourceTransformHandler parent_instance;
};
-G_DEFINE_TYPE (EphyViewSourceHandler, ephy_view_source_handler, G_TYPE_OBJECT)
-
-typedef struct {
- EphyViewSourceHandler *source_handler;
- WebKitURISchemeRequest *scheme_request;
- WebKitWebView *web_view;
- GCancellable *cancellable;
- guint load_changed_id;
-} EphyViewSourceRequest;
+G_DEFINE_TYPE (EphyViewSourceHandler, ephy_view_source_handler, EPHY_TYPE_SOURCE_TRANSFORM_HANDLER)
-static EphyViewSourceRequest *
-ephy_view_source_request_new (EphyViewSourceHandler *handler,
- WebKitURISchemeRequest *request)
+static guchar *
+ephy_view_source_handler_transform_source (EphySourceTransformHandler *handler,
+ const guchar *source,
+ gsize length)
{
- EphyViewSourceRequest *view_source_request;
-
- view_source_request = g_slice_new (EphyViewSourceRequest);
- view_source_request->source_handler = g_object_ref (handler);
- view_source_request->scheme_request = g_object_ref (request);
- view_source_request->web_view = NULL; /* created only if required */
- view_source_request->cancellable = g_cancellable_new ();
- view_source_request->load_changed_id = 0;
-
- return view_source_request;
-}
-
-static void
-ephy_view_source_request_free (EphyViewSourceRequest *request)
-{
- if (request->load_changed_id > 0)
- g_signal_handler_disconnect (request->web_view, request->load_changed_id);
-
- g_object_unref (request->source_handler);
- g_object_unref (request->scheme_request);
- g_clear_object (&request->web_view);
-
- g_cancellable_cancel (request->cancellable);
- g_object_unref (request->cancellable);
-
- g_slice_free (EphyViewSourceRequest, request);
-}
-
-static void
-finish_uri_scheme_request (EphyViewSourceRequest *request,
- gchar *data,
- GError *error)
-{
- GInputStream *stream;
- gssize data_length;
-
- g_assert ((data && !error) || (!data && error));
-
- if (error) {
- webkit_uri_scheme_request_finish_error (request->scheme_request, error);
- } else {
- data_length = MIN (strlen (data), G_MAXSSIZE);
- stream = g_memory_input_stream_new_from_data (data, data_length, g_free);
- webkit_uri_scheme_request_finish (request->scheme_request, stream, data_length, "text/html");
- g_object_unref (stream);
- }
-
- request->source_handler->outstanding_requests =
- g_list_remove (request->source_handler->outstanding_requests,
- request);
-
- ephy_view_source_request_free (request);
-}
-
-static void
-web_resource_data_cb (WebKitWebResource *resource,
- GAsyncResult *result,
- EphyViewSourceRequest *request)
-{
- guchar *data;
- char *data_str;
+ char *source_str;
char *escaped_str;
char *html;
- gsize length;
- GError *error = NULL;
-
- data = webkit_web_resource_get_data_finish (resource, result, &length, &error);
- if (error) {
- finish_uri_scheme_request (request, NULL, error);
- g_error_free (error);
- return;
- }
- data_str = g_malloc (length + 1);
- strncpy (data_str, (const char *)data, length);
- data_str[length] = '\0';
- g_free (data);
+ source_str = g_malloc (length + 1);
+ strncpy (source_str, (const char *)source, length);
+ source_str[length] = '\0';
- escaped_str = g_markup_escape_text (data_str, -1);
- g_free (data_str);
+ /* FIXME: This is probably wrong because we need to convert from
+ * unknown encoding to UTF-8. */
+ escaped_str = g_markup_escape_text (source_str, -1);
+ g_free (source_str);
html = g_strdup_printf ("<body>"
"<pre>"
@@ -138,163 +61,8 @@ web_resource_data_cb (WebKitWebResource *resource,
escaped_str);
g_free (escaped_str);
- finish_uri_scheme_request (request, html, NULL);
-}
-
-static void
-ephy_view_source_request_begin_get_source_from_web_view (EphyViewSourceRequest *request,
- WebKitWebView *web_view)
-{
- WebKitWebResource *resource = webkit_web_view_get_main_resource (web_view);
- g_assert (resource);
- webkit_web_resource_get_data (resource,
- request->cancellable,
- (GAsyncReadyCallback)(web_resource_data_cb),
- request);
-}
-
-static void
-load_changed_cb (WebKitWebView *web_view,
- WebKitLoadEvent load_event,
- EphyViewSourceRequest *request)
-{
- if (load_event == WEBKIT_LOAD_FINISHED)
- ephy_view_source_request_begin_get_source_from_web_view (request, web_view);
-}
-
-static void
-ephy_view_source_request_begin_get_source_from_uri (EphyViewSourceRequest *request,
- const char *uri)
-{
- EphyEmbedShell *shell = ephy_embed_shell_get_default ();
- WebKitWebContext *context = ephy_embed_shell_get_web_context (shell);
-
- request->web_view = WEBKIT_WEB_VIEW (g_object_ref_sink (webkit_web_view_new_with_context (context)));
-
- g_assert (request->load_changed_id == 0);
- request->load_changed_id = g_signal_connect (request->web_view, "load-changed",
- G_CALLBACK (load_changed_cb),
- request);
-
- webkit_web_view_load_uri (request->web_view, uri);
-}
-
-static gint
-embed_is_displaying_matching_uri (EphyEmbed *embed,
- SoupURI *uri)
-{
- EphyWebView *web_view;
- SoupURI *view_uri;
- gint ret = -1;
-
- if (ephy_embed_has_load_pending (embed))
- return -1;
-
- web_view = ephy_embed_get_web_view (embed);
- if (ephy_web_view_is_loading (web_view))
- return -1;
-
- view_uri = soup_uri_new (ephy_web_view_get_address (web_view));
- if (!view_uri)
- return -1;
-
- soup_uri_set_fragment (view_uri, NULL);
- ret = soup_uri_equal (view_uri, uri) ? 0 : -1;
-
- soup_uri_free (view_uri);
-
- return ret;
-}
-
-static WebKitWebView *
-get_web_view_matching_uri (SoupURI *uri)
-{
- EphyEmbedShell *shell;
- GtkWindow *window;
- GList *embeds = NULL;
- GList *found;
- EphyEmbed *embed = NULL;
-
- shell = ephy_embed_shell_get_default ();
- window = gtk_application_get_active_window (GTK_APPLICATION (shell));
-
- if (!EPHY_IS_EMBED_CONTAINER (window))
- goto out;
-
- embeds = ephy_embed_container_get_children (EPHY_EMBED_CONTAINER (window));
- found = g_list_find_custom (embeds, uri, (GCompareFunc)embed_is_displaying_matching_uri);
-
- if (found)
- embed = found->data;
-
-out:
- g_list_free (embeds);
-
- return embed ? WEBKIT_WEB_VIEW (ephy_embed_get_web_view (embed)) : NULL;
-}
-
-static void
-ephy_view_source_request_start (EphyViewSourceRequest *request)
-{
- SoupURI *soup_uri;
- char *modified_uri;
- char *decoded_fragment;
- const char *original_uri;
- WebKitWebView *web_view;
-
- request->source_handler->outstanding_requests =
- g_list_prepend (request->source_handler->outstanding_requests, request);
-
- original_uri = webkit_uri_scheme_request_get_uri (request->scheme_request);
- soup_uri = soup_uri_new (original_uri);
-
- if (!soup_uri || !soup_uri->fragment) {
- /* Can't assert because user could theoretically input something weird */
- GError *error = g_error_new (WEBKIT_NETWORK_ERROR,
- WEBKIT_NETWORK_ERROR_FAILED,
- _("%s is not a valid URI"),
- original_uri);
- finish_uri_scheme_request (request, NULL, error);
- g_error_free (error);
- return;
- }
-
- /* Convert e.g. ephy-source://gnome.org#https to https://gnome.org */
- decoded_fragment = soup_uri_decode (soup_uri->fragment);
- soup_uri_set_scheme (soup_uri, decoded_fragment);
- soup_uri_set_fragment (soup_uri, NULL);
- modified_uri = soup_uri_to_string (soup_uri, FALSE);
- g_assert (modified_uri);
-
- web_view = get_web_view_matching_uri (soup_uri);
- if (web_view)
- ephy_view_source_request_begin_get_source_from_web_view (request, WEBKIT_WEB_VIEW (web_view));
- else
- ephy_view_source_request_begin_get_source_from_uri (request, modified_uri);
-
- g_free (decoded_fragment);
- g_free (modified_uri);
- soup_uri_free (soup_uri);
-}
-
-static void
-cancel_outstanding_request (EphyViewSourceRequest *request)
-{
- g_cancellable_cancel (request->cancellable);
-}
-
-static void
-ephy_view_source_handler_dispose (GObject *object)
-{
- EphyViewSourceHandler *handler = EPHY_VIEW_SOURCE_HANDLER (object);
-
- if (handler->outstanding_requests) {
- g_list_foreach (handler->outstanding_requests, (GFunc)cancel_outstanding_request, NULL);
- g_list_free (handler->outstanding_requests);
- handler->outstanding_requests = NULL;
- }
-
- G_OBJECT_CLASS (ephy_view_source_handler_parent_class)->dispose (object);
+ /* FIXME: Also wrong because the result of g_strdup_printf is probably UTF-8. */
+ return (guchar *)html;
}
static void
@@ -305,23 +73,13 @@ ephy_view_source_handler_init (EphyViewSourceHandler *handler)
static void
ephy_view_source_handler_class_init (EphyViewSourceHandlerClass *klass)
{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ EphySourceTransformHandlerClass *handler_class = EPHY_SOURCE_TRANSFORM_HANDLER_CLASS (klass);
- object_class->dispose = ephy_view_source_handler_dispose;
+ handler_class->transform_source = ephy_view_source_handler_transform_source;
}
EphyViewSourceHandler *
ephy_view_source_handler_new (void)
{
return EPHY_VIEW_SOURCE_HANDLER (g_object_new (EPHY_TYPE_VIEW_SOURCE_HANDLER, NULL));
-}
-
-void
-ephy_view_source_handler_handle_request (EphyViewSourceHandler *handler,
- WebKitURISchemeRequest *scheme_request)
-{
- EphyViewSourceRequest *view_source_request;
-
- view_source_request = ephy_view_source_request_new (handler, scheme_request);
- ephy_view_source_request_start (view_source_request);
-}
+} \ No newline at end of file
diff --git a/embed/ephy-view-source-handler.h b/embed/ephy-view-source-handler.h
index 268b0cce6..2af24badc 100644
--- a/embed/ephy-view-source-handler.h
+++ b/embed/ephy-view-source-handler.h
@@ -20,18 +20,18 @@
#pragma once
+#include "ephy-source-transform-handler.h"
+
#include <webkit2/webkit2.h>
G_BEGIN_DECLS
#define EPHY_TYPE_VIEW_SOURCE_HANDLER (ephy_view_source_handler_get_type ())
-G_DECLARE_FINAL_TYPE (EphyViewSourceHandler, ephy_view_source_handler, EPHY, VIEW_SOURCE_HANDLER, GObject)
+G_DECLARE_FINAL_TYPE (EphyViewSourceHandler, ephy_view_source_handler, EPHY, VIEW_SOURCE_HANDLER, EphySourceTransformHandler)
#define EPHY_VIEW_SOURCE_SCHEME "ephy-source"
EphyViewSourceHandler *ephy_view_source_handler_new (void);
-void ephy_view_source_handler_handle_request (EphyViewSourceHandler *handler,
- WebKitURISchemeRequest *request);
G_END_DECLS
diff --git a/embed/meson.build b/embed/meson.build
index e3a217c34..6628df688 100644
--- a/embed/meson.build
+++ b/embed/meson.build
@@ -25,6 +25,7 @@ libephyembed_sources = [
'ephy-file-monitor.c',
'ephy-filters-manager.c',
'ephy-find-toolbar.c',
+ 'ephy-source-transform-handler.c',
'ephy-view-source-handler.c',
'ephy-web-view.c',
'ephy-web-extension-proxy.c',