diff options
author | Xan Lopez <xan@igalia.com> | 2012-08-15 00:09:08 +0800 |
---|---|---|
committer | Xan Lopez <xan@igalia.com> | 2012-08-15 00:09:08 +0800 |
commit | 2801de37638347280be76be5c7e34b1237236b7d (patch) | |
tree | 67a45ebf041d7a683f3dbf1ab68a4c0972d66168 /embed | |
parent | 33f9683837f7f1130851c3f234dec00a6c1ae505 (diff) | |
download | gsoc2013-epiphany-2801de37638347280be76be5c7e34b1237236b7d.tar.gz gsoc2013-epiphany-2801de37638347280be76be5c7e34b1237236b7d.tar.zst gsoc2013-epiphany-2801de37638347280be76be5c7e34b1237236b7d.zip |
ephy-web-view: ignore paths when deciding whether a URI has a TLD
SoupTLD is not happy if we give it something like ".com/blah/blah".
Add a unit test for this case too.
Diffstat (limited to 'embed')
-rw-r--r-- | embed/ephy-web-view.c | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/embed/ephy-web-view.c b/embed/ephy-web-view.c index f27226555..5caa27a58 100644 --- a/embed/ephy-web-view.c +++ b/embed/ephy-web-view.c @@ -2853,20 +2853,35 @@ ephy_web_view_new (void) static gboolean is_public_domain (EphyWebView *view, const char *url) { + SoupURI *soup_uri; + gboolean retval = FALSE; + const char *host = NULL; EphyWebViewPrivate *priv = view->priv; - if (g_regex_match (priv->domain_regex, url, 0, NULL)) { - if (g_str_equal (url, "localhost")) - return TRUE; + soup_uri = soup_uri_new (url); + if (!soup_uri) { + char *effective_url = g_strconcat ("http://", url, NULL); + soup_uri = soup_uri_new (effective_url); + g_free (effective_url); + } + g_return_val_if_fail (soup_uri, FALSE); + + host = soup_uri->host; - url = g_strrstr (url, "."); - if (!url || *url == '\0') - return FALSE; + if (g_regex_match (priv->domain_regex, host, 0, NULL)) { + if (g_str_equal (host, "localhost")) + retval = TRUE; + else { + host = g_strrstr (host, "."); - return soup_tld_domain_is_public_suffix (url); + if (host && *host != '\0') + retval = soup_tld_domain_is_public_suffix (host); + } } - return FALSE; + soup_uri_free (soup_uri); + + return retval; } /** |