diff options
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; } /** |