aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGustavo Noronha Silva <gns@gnome.org>2012-03-11 03:52:04 +0800
committerGustavo Noronha Silva <gns@gnome.org>2012-03-14 23:28:26 +0800
commit398e670b1dd80cd0427a1db8a21dfc892bbe5eaf (patch)
tree27d409b421f85736d88fe27f6b05853e3fb12054
parent0ea81088cf97aee3d5bbb1f0ec470b8c805a746d (diff)
downloadgsoc2013-epiphany-398e670b1dd80cd0427a1db8a21dfc892bbe5eaf.tar
gsoc2013-epiphany-398e670b1dd80cd0427a1db8a21dfc892bbe5eaf.tar.gz
gsoc2013-epiphany-398e670b1dd80cd0427a1db8a21dfc892bbe5eaf.tar.bz2
gsoc2013-epiphany-398e670b1dd80cd0427a1db8a21dfc892bbe5eaf.tar.lz
gsoc2013-epiphany-398e670b1dd80cd0427a1db8a21dfc892bbe5eaf.tar.xz
gsoc2013-epiphany-398e670b1dd80cd0427a1db8a21dfc892bbe5eaf.tar.zst
gsoc2013-epiphany-398e670b1dd80cd0427a1db8a21dfc892bbe5eaf.zip
Automatically prefix existing absolute paths with file://
https://bugzilla.gnome.org/show_bug.cgi?id=671792
-rw-r--r--embed/ephy-embed-utils.c12
-rw-r--r--embed/ephy-embed-utils.h9
-rw-r--r--embed/ephy-web-view.c1
-rw-r--r--tests/ephy-embed-utils-test.c1
-rw-r--r--tests/ephy-web-view-test.c2
5 files changed, 20 insertions, 5 deletions
diff --git a/embed/ephy-embed-utils.c b/embed/ephy-embed-utils.c
index e01842496..70c8a6c03 100644
--- a/embed/ephy-embed-utils.c
+++ b/embed/ephy-embed-utils.c
@@ -103,6 +103,13 @@ ephy_embed_utils_address_has_web_scheme (const char *address)
return has_web_scheme;
}
+gboolean
+ephy_embed_utils_address_is_existing_absolute_filename (const char *address)
+{
+ return g_path_is_absolute (address) &&
+ g_file_test (address, G_FILE_TEST_EXISTS);
+}
+
char*
ephy_embed_utils_normalize_address (const char *address)
{
@@ -111,6 +118,9 @@ ephy_embed_utils_normalize_address (const char *address)
g_return_val_if_fail (address, NULL);
+ if (ephy_embed_utils_address_is_existing_absolute_filename (address))
+ return g_strconcat ("file://", address, NULL);
+
uri = soup_uri_new (address);
/* FIXME: if we are here we passed through the "should we
@@ -123,7 +133,7 @@ ephy_embed_utils_normalize_address (const char *address)
* being the port. Ideally we should check if we have a
* handler for the scheme, and since we'll fail for localhost
* and IP, we'd fallback to loading it as a domain. */
- if (!uri ||
+ if (!uri ||
(uri && !g_strcmp0 (uri->scheme, "localhost")) ||
(uri && g_hostname_is_ip_address (uri->scheme)))
effective_address = g_strconcat ("http://", address, NULL);
diff --git a/embed/ephy-embed-utils.h b/embed/ephy-embed-utils.h
index cb7890002..4d8ded161 100644
--- a/embed/ephy-embed-utils.h
+++ b/embed/ephy-embed-utils.h
@@ -40,10 +40,11 @@ G_BEGIN_DECLS
#define EPHY_WEBKIT_BACK_FORWARD_LIMIT 100
-char* ephy_embed_utils_link_message_parse (char *message);
-gboolean ephy_embed_utils_address_has_web_scheme (const char *address);
-char* ephy_embed_utils_normalize_address (const char *address);
-gboolean ephy_embed_utils_url_is_empty (const char *location);
+char* ephy_embed_utils_link_message_parse (char *message);
+gboolean ephy_embed_utils_address_has_web_scheme (const char *address);
+gboolean ephy_embed_utils_address_is_existing_absolute_filename (const char *address);
+char* ephy_embed_utils_normalize_address (const char *address);
+gboolean ephy_embed_utils_url_is_empty (const char *location);
G_END_DECLS
diff --git a/embed/ephy-web-view.c b/embed/ephy-web-view.c
index f5249976c..c0b59db59 100644
--- a/embed/ephy-web-view.c
+++ b/embed/ephy-web-view.c
@@ -2417,6 +2417,7 @@ normalize_or_autosearch_url (EphyWebView *view, const char *url)
/* If the string doesn't look like an URI, let's search it; */
if (!ephy_embed_utils_address_has_web_scheme (url) &&
scheme == NULL &&
+ !ephy_embed_utils_address_is_existing_absolute_filename (url) &&
priv->non_search_regex &&
!g_regex_match (priv->non_search_regex, url, 0, NULL)) {
char *query_param, *url_search;
diff --git a/tests/ephy-embed-utils-test.c b/tests/ephy-embed-utils-test.c
index 446cd8014..669013c2c 100644
--- a/tests/ephy-embed-utils-test.c
+++ b/tests/ephy-embed-utils-test.c
@@ -70,6 +70,7 @@ static const SchemeTest tests_no_scheme[] = {
};
static const NormalizeTest tests_normalize[] = {
+ { "append_file_to_path", "/etc/passwd", "file:///etc/passwd" },
{ "append_http_to_domain", "gnome.org", "http://gnome.org" },
{ "append_http_to_www", "www.gnome.org", "http://www.gnome.org" },
{ "append_http_to_hostname", "gnome", "http://gnome" },
diff --git a/tests/ephy-web-view-test.c b/tests/ephy-web-view-test.c
index 65a03eb16..6afd0a5e5 100644
--- a/tests/ephy-web-view-test.c
+++ b/tests/ephy-web-view-test.c
@@ -174,6 +174,8 @@ static const RegexTest test_non_search_regex[] = {
/* Searches */
{ "localhost localdomain:8080/home/", FALSE },
+ /* Relative paths should be searched */
+ { "./", FALSE },
{ "localhost", TRUE },
{ "localhost.localdomain", TRUE },