[epiphany] view-source-handler: improve error handling!
- From: Michael Catanzaro <mcatanzaro src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [epiphany] view-source-handler: improve error handling!
- Date: Tue, 13 Sep 2016 00:01:05 +0000 (UTC)
commit 018dd229f154e32d0af3d9da045748cd5384115d
Author: Michael Catanzaro <mcatanzaro gnome org>
Date: Mon Sep 12 18:58:10 2016 -0500
view-source-handler: improve error handling!
embed/ephy-view-source-handler.c | 36 +++++++++++++++++++++++-------------
po/POTFILES.in | 1 +
2 files changed, 24 insertions(+), 13 deletions(-)
---
diff --git a/embed/ephy-view-source-handler.c b/embed/ephy-view-source-handler.c
index b6dcac4..41e9e80 100644
--- a/embed/ephy-view-source-handler.c
+++ b/embed/ephy-view-source-handler.c
@@ -26,6 +26,7 @@
#include "ephy-web-view.h"
#include <gio/gio.h>
+#include <glib/gi18n.h>
#include <string.h>
struct _EphyViewSourceHandler {
@@ -77,21 +78,28 @@ ephy_view_source_request_free (EphyViewSourceRequest *request)
static void
finish_uri_scheme_request (EphyViewSourceRequest *request,
- gchar *data)
+ gchar *data,
+ GError *error)
{
GInputStream *stream;
gssize data_length;
- 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_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);
- g_object_unref (stream);
}
static void
@@ -108,10 +116,8 @@ web_resource_data_cb (WebKitWebResource *resource,
data = webkit_web_resource_get_data_finish (resource, result, &length, &error);
if (error) {
- html = g_strdup (error->message);
- length = strlen (html);
+ finish_uri_scheme_request (request, NULL, error);
g_error_free (error);
- finish_uri_scheme_request (request, html);
return;
}
@@ -136,7 +142,7 @@ web_resource_data_cb (WebKitWebResource *resource,
escaped_str);
g_free (escaped_str);
- finish_uri_scheme_request (request, html);
+ finish_uri_scheme_request (request, html, NULL);
}
static void
@@ -246,14 +252,18 @@ ephy_view_source_request_start (EphyViewSourceRequest *request)
original_uri = webkit_uri_scheme_request_get_uri (request->scheme_request);
soup_uri = soup_uri_new (original_uri);
- if (!soup_uri) {
- g_critical ("Failed to construct SoupURI for %s", original_uri);
- finish_uri_scheme_request (request, g_strdup (""));
+ 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 */
- g_assert (soup_uri->fragment);
decoded_fragment = soup_uri_decode (soup_uri->fragment);
soup_uri_set_scheme (soup_uri, decoded_fragment);
soup_uri_set_fragment (soup_uri, NULL);
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 69806b1..2396bde 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -10,6 +10,7 @@ embed/ephy-embed-shell.c
embed/ephy-embed-utils.c
embed/ephy-encodings.c
embed/ephy-find-toolbar.c
+embed/ephy-view-source-handler.c
embed/ephy-web-view.c
lib/ephy-file-helpers.c
lib/ephy-form-auth-data.c
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]