]> spindle.queued.net Git - midori/commitdiff
Midori.URI.parse_hostname clearer semantics and tests
authorChristian Dywan <christian@twotoasts.de>
Fri, 18 Nov 2011 00:42:02 +0000 (01:42 +0100)
committerChristian Dywan <christian@twotoasts.de>
Fri, 18 Nov 2011 00:44:48 +0000 (01:44 +0100)
extensions/addons.c
extensions/colorful-tabs.c
katze/midori-uri.vala
midori/midori-view.c
midori/sokoke.c
tests/magic-uri.c

index 5ded3fa8179c563db66f3e4a8909682ade8433cb..eb2d23fd4be821a93db03f8455793f6a59a86b8c 100644 (file)
@@ -109,7 +109,7 @@ addons_install_response (GtkWidget*  infobar,
             WebKitNetworkRequest* request;
             WebKitDownload* download;
 
-            hostname = midori_uri_parse (uri, &path);
+            hostname = midori_uri_parse_hostname (uri, &path);
             temp_uri = NULL;
             filename = NULL;
             folder = NULL;
@@ -259,7 +259,7 @@ addons_notify_load_status_cb (MidoriView*      view,
            else
            {
                gchar* path;
-               gchar* hostname = midori_uri_parse (uri, &path);
+               gchar* hostname = midori_uri_parse_hostname (uri, &path);
                if (!strcmp (hostname, "userscripts.org")
                 && (g_str_has_prefix (path, "/scripts/show/")
                  || g_str_has_prefix (path, "/scripts/review/")))
index c00122f8802c245bce26f275be745cf6893dda4f..bb261d5869f13af983812e7437f5011ad11c2728 100644 (file)
@@ -47,7 +47,7 @@ colorful_tabs_view_notify_uri_cb (MidoriView*      view,
     label = midori_view_get_proxy_tab_label (view);
 
     if (!midori_uri_is_blank (midori_view_get_display_uri (view))
-      && (hostname = midori_uri_parse (midori_view_get_display_uri (view), NULL))
+      && (hostname = midori_uri_parse_hostname (midori_view_get_display_uri (view), NULL))
       && katze_object_get_enum (view, "load-status") == MIDORI_LOAD_FINISHED)
     {
         icon = midori_view_get_icon (view);
index 480635716bef84171d7201e97de3ba0d87c25047..8fb7bcab1b2b6b4155aa4fc39f6c709985d3360c 100644 (file)
@@ -16,15 +16,14 @@ namespace GLib {
 
 namespace Midori {
     public class URI : Object {
-        public static string parse (string? uri, out string path) {
-            /* path may be null.
-               If there's no hostname, the original URI is returned */
+        public static string? parse_hostname (string? uri, out string path) {
+            /* path may be null. */
             if (uri == null)
                 return uri;
             unowned string? hostname = uri.chr (-1, '/');
             if (hostname == null || hostname[1] != '/'
              || hostname.chr (-1, ' ') != null)
-                return uri;
+                return null;
             hostname = hostname.offset (2);
             if (&path != null) {
                 if ((path = hostname.chr (-1, '/')) != null)
@@ -38,7 +37,7 @@ namespace Midori {
             if (uri.chr (-1, '/') != null && uri.chr (-1, ':') != null)
                 proto = uri.split ("://")[0];
             string? path = null;
-            string hostname = parse (uri, out path);
+            string? hostname = parse_hostname (uri, out path) ?? uri;
             string encoded = hostname_to_ascii (hostname);
             if (encoded != null) {
                 return (proto ?? "")
@@ -67,7 +66,7 @@ namespace Midori {
                 else if (!unescaped.validate ())
                     return uri;
                 string path;
-                string hostname = parse (unescaped, out path);
+                string hostname = parse_hostname (unescaped, out path);
                 string decoded = hostname_to_unicode (hostname);
                 if (decoded != null)
                     return "http://" + decoded + path;
index 11452f768bf501d4d05efb8e1dfa57bf622c1333..204e854f1a6b46e81784683a737be161234e5c5c 100644 (file)
@@ -1339,13 +1339,14 @@ midori_view_web_view_database_quota_exceeded_cb (WebKitWebView*     web_view,
                                                  MidoriView*        view)
 {
     const gchar* uri = webkit_web_frame_get_uri (web_frame);
-    const gchar* hostname = midori_uri_parse (uri, NULL);
+    gchar* hostname = midori_uri_parse_hostname (uri, NULL);
     gchar* message = g_strdup_printf (_("%s wants to save an HTML5 database."),
                                       hostname && *hostname ? hostname : uri);
     midori_view_add_info_bar (view, GTK_MESSAGE_QUESTION, message,
         G_CALLBACK (midori_view_database_response_cb), database,
         _("_Deny"), GTK_RESPONSE_REJECT, _("_Allow"), GTK_RESPONSE_ACCEPT,
         NULL);
+    g_free (hostname);
     g_free (message);
 }
 
@@ -1368,13 +1369,14 @@ midori_view_web_view_geolocation_decision_cb (WebKitWebView*                   w
                                               MidoriView*                      view)
 {
     const gchar* uri = webkit_web_frame_get_uri (web_frame);
-    const gchar* hostname = midori_uri_parse (uri, NULL);
+    gchar* hostname = midori_uri_parse_hostname (uri, NULL);
     gchar* message = g_strdup_printf (_("%s wants to know your location."),
                                      hostname && *hostname ? hostname : uri);
     midori_view_add_info_bar (view, GTK_MESSAGE_QUESTION,
         message, G_CALLBACK (midori_view_location_response_cb), decision,
         _("_Deny"), GTK_RESPONSE_REJECT, _("_Allow"), GTK_RESPONSE_ACCEPT,
         NULL);
+    g_free (hostname);
     g_free (message);
     return TRUE;
 }
index 48dc974e36f84e8f1f3321da4701a03118ef1555..bb6616dc5156179d245c50c8b51b0bb065c73bca 100644 (file)
@@ -1433,8 +1433,7 @@ sokoke_prefetch_uri (MidoriWebSettings*  settings,
     if (settings && !katze_object_get_boolean (settings, "enable-dns-prefetching"))
         return FALSE;
 
-    if (!(hostname = midori_uri_parse (uri, NULL))
-     || !strcmp (hostname, uri)
+    if (!(hostname = midori_uri_parse_hostname (uri, NULL))
      || g_hostname_is_ip_address (hostname)
      || !midori_uri_is_http (uri))
     {
index 008d1b51009bd069ddd6f8a5cbd6a2674efa1e32..d596dd521bc5c4aa7cd344ae1ff1edd325bdd311 100644 (file)
@@ -69,6 +69,9 @@ test_input (const gchar* input,
 static void
 magic_uri_uri (void)
 {
+    const gchar* uri;
+    gchar* path;
+
     test_input ("ftp://ftp.mozilla.org", "ftp://ftp.mozilla.org");
     test_input ("ftp://ftp.mozilla.org/pub", "ftp://ftp.mozilla.org/pub");
     test_input ("http://www.example.com", "http://www.example.com");
@@ -93,6 +96,20 @@ magic_uri_uri (void)
     test_input ("foo:123@bar.baz", "http://foo:123@bar.baz");
     /* test_input ("foo:f1o2o3@bar.baz", "http://f1o2o3:foo@bar.baz"); */
     /* test_input ("foo:foo@bar.baz", "http://foo:foo@bar.baz"); */
+
+    uri = "http://bugs.launchpad.net/midori";
+    g_assert_cmpstr ("bugs.launchpad.net", ==, midori_uri_parse_hostname (uri, NULL));
+    uri = "https://bugs.launchpad.net/midori";
+    g_assert_cmpstr ("bugs.launchpad.net", ==, midori_uri_parse_hostname (uri, NULL));
+    g_assert_cmpstr ("bugs.launchpad.net", ==, midori_uri_parse_hostname (uri, &path));
+    g_assert_cmpstr ("/midori", ==, path);
+    uri = "http://айкидо.ru/users/kotyata";
+    g_assert_cmpstr ("айкидо.ru", ==, midori_uri_parse_hostname (uri, &path));
+    g_assert_cmpstr ("/users/kotyata", ==, path);
+    uri = "invalid:/uri.like/thing";
+    g_assert_cmpstr (NULL, ==, midori_uri_parse_hostname (uri, NULL));
+    uri = "invalid-uri.like:thing";
+    g_assert_cmpstr (NULL, ==, midori_uri_parse_hostname (uri, NULL));
 }
 
 static void