aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doc/reference/epiphany-sections.txt1
-rw-r--r--embed/ephy-request-about.c16
-rw-r--r--embed/ephy-web-view.c33
-rw-r--r--lib/ephy-file-helpers.c51
-rw-r--r--lib/ephy-file-helpers.h2
5 files changed, 62 insertions, 41 deletions
diff --git a/doc/reference/epiphany-sections.txt b/doc/reference/epiphany-sections.txt
index f0d044ffd..00881e0de 100644
--- a/doc/reference/epiphany-sections.txt
+++ b/doc/reference/epiphany-sections.txt
@@ -193,6 +193,7 @@ ephy_file_launch_handler
ephy_file_switch_temp_file
ephy_file_tmp_dir
ephy_file_tmp_filename
+ephy_file_create_data_uri_for_filename
</SECTION>
<SECTION>
diff --git a/embed/ephy-request-about.c b/embed/ephy-request-about.c
index e239c1123..bfff22f95 100644
--- a/embed/ephy-request-about.c
+++ b/embed/ephy-request-about.c
@@ -182,19 +182,17 @@ ephy_request_about_send (SoupRequest *request,
applications = ephy_web_application_get_application_list ();
for (p = applications; p; p = p->next) {
- char *img_data = NULL, *img_data_base64 = NULL;
- gsize data_length;
+ char *icon_uri;
EphyWebApplication *app = (EphyWebApplication*)p->data;
-
- if (g_file_get_contents (app->icon_url, &img_data, &data_length, NULL))
- img_data_base64 = g_base64_encode ((guchar*)img_data, data_length);
- g_string_append_printf (data_str, "<tbody><tr><td class=\"icon\"><img width=64 height=64 src=\"data:image/png;base64,%s\">" \
+
+ icon_uri = ephy_file_create_data_uri_for_filename (app->icon_url, "image/png");
+ g_string_append_printf (data_str, "<tbody><tr><td class=\"icon\"><img width=64 height=64 src=\"%s\">" \
" </img></td><td class=\"data\"><div class=\"appname\">%s</div><div class=\"appurl\">%s</div></td><td class=\"input\"><input type=\"submit\" value=\"Delete\" id=\"%s\"></td><td class=\"date\">%s <br /> %s</td></tr>",
- img_data_base64, app->name, app->url, app->name,
+ icon_uri ? icon_uri : "",
+ app->name, app->url, app->name,
/* Note for translators: this refers to the installation date. */
_("Installed on:"), app->install_date);
- g_free (img_data_base64);
- g_free (img_data);
+ g_free (icon_uri);
}
g_string_append (data_str, "</form></table></body>");
diff --git a/embed/ephy-web-view.c b/embed/ephy-web-view.c
index f0b3d8f94..e4ae30f09 100644
--- a/embed/ephy-web-view.c
+++ b/embed/ephy-web-view.c
@@ -2052,37 +2052,6 @@ load_status_cb (WebKitWebView *web_view,
g_object_thaw_notify (object);
}
-static char *
-get_file_content_as_base64 (const char *path)
-{
- GFile *file;
- GFileInfo *file_info;
- const char *image_type;
- char *image_raw;
- gsize len;
- char *image_data;
- char *image64;
-
- file = g_file_new_for_path (path);
- file_info = g_file_query_info (file,
- G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE,
- G_FILE_QUERY_INFO_NONE,
- NULL, NULL);
- image_type = g_file_info_get_content_type (file_info);
-
- g_file_get_contents (path, &image_raw, &len, NULL);
- image_data = g_base64_encode ((guchar *) image_raw, len);
- image64 = g_strdup_printf ("data:%s;base64,%s", image_type, image_data);
-
- g_free (image_raw);
- g_free (image_data);
-
- g_object_unref (file);
- g_object_unref (file_info);
-
- return image64;
-}
-
/**
* ephy_web_view_load_error_page:
* @view: an #EphyWebView
@@ -2175,7 +2144,7 @@ ephy_web_view_load_error_page (EphyWebView *view,
48,
GTK_ICON_LOOKUP_GENERIC_FALLBACK);
- image_data = icon_info ? get_file_content_as_base64 (gtk_icon_info_get_filename (icon_info)) : NULL;
+ image_data = icon_info ? ephy_file_create_data_uri_for_filename (gtk_icon_info_get_filename (icon_info), NULL) : NULL;
g_file_get_contents (html_file, &template, NULL, NULL);
diff --git a/lib/ephy-file-helpers.c b/lib/ephy-file-helpers.c
index 13ae06de2..4975811f8 100644
--- a/lib/ephy-file-helpers.c
+++ b/lib/ephy-file-helpers.c
@@ -970,3 +970,54 @@ ephy_file_delete_uri (const char *uri)
}
g_object_unref (file);
}
+
+/**
+ * ephy_file_create_data_uri_for_filename:
+ * @filename: the filename of a local path
+ * @mime_type: the MIME type of the filename, or %NULL
+ *
+ * Create a data uri using the contents of @filename.
+ * If @mime_type is %NULL, the %G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE
+ * attribute of @filename will be used.
+ *
+ * Returns: a new allocated string containg the data uri, or %NULL if the
+ * data uri could not be created
+ */
+char *ephy_file_create_data_uri_for_filename (const char *filename,
+ const char *mime_type)
+{
+ gchar *data;
+ gsize data_length;
+ gchar *base64;
+ gchar *uri = NULL;
+ GFileInfo *file_info = NULL;
+
+ g_return_val_if_fail (filename != NULL, NULL);
+
+ if (!g_file_get_contents (filename, &data, &data_length, NULL))
+ return NULL;
+
+ base64 = g_base64_encode ((const guchar *)data, data_length);
+ g_free (data);
+
+ if (!mime_type) {
+ GFile *file;
+
+ file = g_file_new_for_path (filename);
+ file_info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE,
+ G_FILE_QUERY_INFO_NONE, NULL, NULL);
+ if (file_info)
+ mime_type = g_file_info_get_content_type (file_info);
+
+ g_object_unref (file);
+ }
+
+ if (mime_type)
+ uri = g_strdup_printf ("data:%s;charset=utf8;base64,%s", mime_type, base64);
+ g_free(base64);
+
+ if (file_info)
+ g_object_unref (file_info);
+
+ return uri;
+}
diff --git a/lib/ephy-file-helpers.h b/lib/ephy-file-helpers.h
index bdabf87c1..4b7b8e21d 100644
--- a/lib/ephy-file-helpers.h
+++ b/lib/ephy-file-helpers.h
@@ -88,6 +88,8 @@ gboolean ephy_file_browse_to (GFile *file,
gboolean ephy_file_delete_dir_recursively (GFile *file,
GError **error);
void ephy_file_delete_uri (const char *uri);
+char * ephy_file_create_data_uri_for_filename (const char *filename,
+ const char *mime_type);
G_END_DECLS