[Xfce4-commits] <midori:master> Make 'special' a property and add test cases

Christian Dywan noreply at xfce.org
Sat Oct 6 01:42:01 CEST 2012


Updating branch refs/heads/master
         to 536036283ae440447f61614816c1b7b794c3213b (commit)
       from 69bcbd3d6e291248d9d26185f3e405e6a0369f82 (commit)

commit 536036283ae440447f61614816c1b7b794c3213b
Author: Christian Dywan <christian at twotoasts.de>
Date:   Sat Oct 6 01:36:39 2012 +0200

    Make 'special' a property and add test cases

 katze/midori-paths.vala |    5 ++++
 midori/midori-browser.c |    4 +-
 midori/midori-tab.vala  |    4 ++-
 midori/midori-view.c    |   29 ++++++++----------------
 midori/midori.vapi      |    4 +-
 tests/tab.vala          |   56 +++++++++++++++++++++++++++++++++++++++++++++-
 6 files changed, 76 insertions(+), 26 deletions(-)

diff --git a/katze/midori-paths.vala b/katze/midori-paths.vala
index ce4c07d..e13fc93 100644
--- a/katze/midori-paths.vala
+++ b/katze/midori-paths.vala
@@ -61,6 +61,11 @@ namespace Midori {
             return readonly_dir != null;
         }
 
+        public RuntimeMode get_runtime_mode () {
+            assert (mode != RuntimeMode.UNDEFINED);
+            return mode;
+        }
+
         public static void init (RuntimeMode new_mode, string? config_base) {
             assert (mode == RuntimeMode.UNDEFINED);
             assert (new_mode != RuntimeMode.UNDEFINED);
diff --git a/midori/midori-browser.c b/midori/midori-browser.c
index 48efcb8..c4c0f7a 100644
--- a/midori/midori-browser.c
+++ b/midori/midori-browser.c
@@ -335,9 +335,9 @@ _midori_browser_update_interface (MidoriBrowser* browser,
     _action_set_sensitive (browser, "ZoomNormal",
         midori_view_get_zoom_level (view) != 1.0f);
     _action_set_sensitive (browser, "Encoding",
-        midori_view_can_view_source (view));
+        midori_tab_can_view_source (MIDORI_TAB (view)));
     _action_set_sensitive (browser, "SourceView",
-        midori_view_can_view_source (view));
+        midori_tab_can_view_source (MIDORI_TAB (view)));
 
     action = _action_by_name (browser, "NextForward");
     if (midori_view_can_go_forward (view))
diff --git a/midori/midori-tab.vala b/midori/midori-tab.vala
index e4a7cd1..7e09b5d 100644
--- a/midori/midori-tab.vala
+++ b/midori/midori-tab.vala
@@ -43,6 +43,8 @@ namespace Midori {
         }
         }
 
+        /* Special is an error, blank or delayed page */
+        public bool special { get; protected set; default = false; }
         /* Since: 0.4.8 */
         public string mime_type { get; protected set; default = "text/plain"; }
         /* Since: 0.1.2 */
@@ -72,7 +74,7 @@ namespace Midori {
         }
 
         public bool can_view_source () {
-            if (is_blank ())
+            if (is_blank () || special)
                 return false;
             string content_type = ContentType.from_mime_type (mime_type);
 #if HAVE_WIN32
diff --git a/midori/midori-view.c b/midori/midori-view.c
index 150e1ec..41a0f42 100644
--- a/midori/midori-view.c
+++ b/midori/midori-view.c
@@ -90,7 +90,6 @@ struct _MidoriView
 {
     MidoriTab parent_instance;
 
-    gboolean special;
     gchar* title;
     GdkPixbuf* icon;
     gchar* icon_uri;
@@ -723,7 +722,7 @@ _midori_web_view_load_icon (MidoriView* view)
             g_hash_table_insert (midori_view_get_memory (),
                 g_strdup (view->icon_uri), g_object_ref (pixbuf));
         }
-        else if (!view->special)
+        else if (!midori_tab_get_special (MIDORI_TAB (view)))
         {
             katze_net_load_uri (NULL, view->icon_uri,
                 (KatzeNetStatusCb)katze_net_icon_status_cb,
@@ -754,9 +753,6 @@ midori_view_update_load_status (MidoriView*      view,
     if (midori_tab_get_load_status (MIDORI_TAB (view)) == load_status)
         return;
 
-    if (load_status == MIDORI_LOAD_FINISHED)
-        view->special = FALSE;
-
     midori_tab_set_load_status (MIDORI_TAB (view), load_status);
 
     #ifdef HAVE_GRANITE
@@ -805,7 +801,7 @@ midori_view_web_view_navigation_decision_cb (WebKitWebView*             web_view
         return TRUE;
     }
     #ifdef HAVE_GCR
-    else if (/* view->special && */ !strncmp (uri, "https", 5))
+    else if (/* midori_tab_get_special (MIDORI_TAB (view)) && */ !strncmp (uri, "https", 5))
     {
         /* We show an error page if the certificate is invalid.
            If a "special", unverified page loads a form, it must be that page.
@@ -851,7 +847,7 @@ midori_view_web_view_navigation_decision_cb (WebKitWebView*             web_view
         }
     }
     #endif
-    view->special = FALSE;
+    midori_tab_set_special (MIDORI_TAB (view), FALSE);
 
     if (katze_item_get_meta_integer (view->item, "delay") == MIDORI_DELAY_PENDING_UNDELAY)
         katze_item_set_meta_integer (view->item, "delay", MIDORI_DELAY_UNDELAYED);
@@ -947,7 +943,7 @@ webkit_web_view_load_committed_cb (WebKitWebView*  web_view,
          && soup_message_get_flags (message) & SOUP_MESSAGE_CERTIFICATE_TRUSTED)
             midori_tab_set_security (MIDORI_TAB (view), MIDORI_SECURITY_TRUSTED);
         #ifdef HAVE_GCR
-        else if (!view->special && message != NULL)
+        else if (!midori_tab_get_special (MIDORI_TAB (view)) && message != NULL)
         {
             GTlsCertificate* tls_cert;
             GcrCertificate* gcr_cert;
@@ -1011,7 +1007,7 @@ midori_view_web_view_resource_request_cb (WebKitWebView*         web_view,
     const gchar* uri = webkit_network_request_get_uri (request);
 
     /* Only apply custom URIs to special pages for security purposes */
-    if (!view->special && !midori_view_is_blank (view))
+    if (!midori_tab_get_special (MIDORI_TAB (view)))
         return;
 
     if (g_str_has_prefix (uri, "res://"))
@@ -1320,7 +1316,7 @@ midori_view_load_alternate_string (MidoriView*     view,
     WebKitWebView* web_view = WEBKIT_WEB_VIEW (view->web_view);
     if (!web_frame)
         web_frame = webkit_web_view_get_main_frame (web_view);
-    view->special = TRUE;
+    midori_tab_set_special (MIDORI_TAB (view), TRUE);
     webkit_web_frame_load_alternate_string (
         web_frame, data, uri, uri);
 }
@@ -1343,8 +1339,9 @@ midori_view_display_error (MidoriView*     view,
         const gchar* icon;
         gchar* result;
 
-        gboolean show_button_images = katze_object_get_boolean (
-            gtk_widget_get_settings (view->web_view), "gtk-button-images");
+        GtkSettings* gtk_settings = gtk_widget_get_settings (view->web_view);
+        gboolean show_button_images = gtk_settings != NULL
+          && katze_object_get_boolean (gtk_settings, "gtk-button-images");
         if (uri == NULL)
             uri = midori_tab_get_uri (MIDORI_TAB (view));
         title_escaped = g_markup_escape_text (title ? title : view->title, -1);
@@ -3160,7 +3157,7 @@ webkit_web_view_window_object_cleared_cb (GtkWidget*      web_view,
     if (!midori_uri_is_http (page_uri))
         return;
 
-    if (katze_object_get_boolean (view->settings, "enable-private-browsing"))
+    if (midori_paths_get_runtime_mode () == MIDORI_RUNTIME_MODE_PRIVATE)
     {
         /* Mask language, architecture, no plugin list */
         gchar* result = sokoke_js_script_eval (js_context,
@@ -5108,12 +5105,6 @@ midori_view_can_zoom_out (MidoriView* view)
         || !g_str_has_prefix (midori_tab_get_mime_type (MIDORI_TAB (view)), "image/"));
 }
 
-gboolean
-midori_view_can_view_source (MidoriView* view)
-{
-    return midori_tab_can_view_source (MIDORI_TAB (view));
-}
-
 /**
  * midori_view_can_save:
  * @view: a #MidoriView
diff --git a/midori/midori.vapi b/midori/midori.vapi
index bd78501..ec45b9d 100644
--- a/midori/midori.vapi
+++ b/midori/midori.vapi
@@ -8,6 +8,7 @@ namespace Midori {
     [CCode (cheader_filename = "midori/midori.h")]
     public class App : GLib.Object {
         public App ();
+        public static bool setup ([CCode (array_length_pos = 0.9)] ref unowned string[] args, [CCode (array_length = false)] GLib.OptionEntry[]? entries) throws GLib.Error;
         public Browser create_browser ();
         public GLib.List<weak Browser> get_browsers ();
 
@@ -146,8 +147,7 @@ namespace Midori {
         public Gtk.Menu get_tab_menu ();
         public Pango.EllipsizeMode get_label_ellipsize ();
         public Gtk.Label get_proxy_tab_label ();
-        public Katze.Item get_proxy_item ();
-        public bool can_view_source ();
+        public unowned Katze.Item get_proxy_item ();
         public void search_text (string text, bool case_sensitive, bool forward);
         public void mark_text_matches (string text, bool case_sensitive);
         public void set_highlight_text_matches (bool highlight);
diff --git a/tests/tab.vala b/tests/tab.vala
index d6f4069..b217fed 100644
--- a/tests/tab.vala
+++ b/tests/tab.vala
@@ -54,8 +54,10 @@ const TestCaseEllipsize[] titles = {
 static void tab_display_title () {
     foreach (var title in titles) {
         string result = Midori.Tab.get_display_title (title.title, title.uri);
-        unowned string? expected = title.expected_title ?? "‪" + title.title;
-        Katze.assert_str_equal (title.title, expected, result);
+        string expected = title.expected_title ?? "‪" + title.title;
+        if (result != expected)
+            error ("%s expected for %s but got %s",
+                   expected, title.title, result);
     }
 }
 
@@ -69,11 +71,61 @@ static void tab_display_ellipsize () {
     }
 }
 
+void tab_special () {
+    var browser = new Gtk.Window (Gtk.WindowType.TOPLEVEL);
+    /*
+    var dial = new Midori.SpeedDial ("/", null);
+    var settings = new Midori.WebSettings ();
+    var browser = new Midori.Browser ();
+    browser.set ("speed-dial", dial, "settings", settings);
+    */
+    var tab = new Midori.View.with_title ();
+    browser.add (tab);
+    /* browser.add_tab (tab); */
+    var loop = MainContext.default ();
+
+    /* tab.set_uri ("about:blank"); */
+    do { loop.iteration (true); } while (tab.load_status != Midori.LoadStatus.FINISHED);
+    assert (tab.is_blank ());
+    assert (!tab.can_view_source ());
+    /* FIXME assert (tab.special); */
+
+    tab.set_uri ("error:nodocs file:///some/docs/path");
+    do { loop.iteration (true); } while (tab.load_status != Midori.LoadStatus.FINISHED);
+    assert (!tab.is_blank ());
+    assert (tab.can_view_source ());
+    /* FIXME assert (tab.special); */
+
+    tab.set_uri ("http://.invalid");
+    do { loop.iteration (true); } while (tab.load_status != Midori.LoadStatus.FINISHED);
+    assert (!tab.is_blank ());
+    assert (!tab.can_view_source ());
+    assert (tab.special);
+
+    var item = tab.get_proxy_item ();
+    item.set_meta_integer ("delay", Midori.Delay.UNDELAYED);
+    tab.set_uri ("http://example.com");
+    do { loop.iteration (true); } while (tab.load_status != Midori.LoadStatus.FINISHED);
+    /* FIXME assert (!tab.can_view_source ()); */
+    /* FIXME assert (tab.special); */
+
+    /* FIXME use an HTTP URI that's available even offline */
+    tab.set_uri ("http://example.com");
+    do { loop.iteration (true); } while (tab.load_status != Midori.LoadStatus.FINISHED);
+    assert (!tab.is_blank ());
+    assert (tab.can_view_source ());
+    assert (!tab.special);
+}
+
 void main (string[] args) {
     Test.init (ref args);
+    Midori.App.setup (ref args, null);
+    Midori.Paths.init (Midori.RuntimeMode.NORMAL, null);
+    WebKit.get_default_session ().set_data<bool> ("midori-session-initialized", true);
     Test.add_func ("/tab/load-title", tab_load_title);
     Test.add_func ("/tab/display-title", tab_display_title);
     Test.add_func ("/tab/ellipsize", tab_display_ellipsize);
+    Test.add_func ("/tab/special", tab_special);
     Test.run ();
 }
 


More information about the Xfce4-commits mailing list