[yelp/carlosgc/webkit2-port: 1/8] yelp-view: Do not block/unlock policy decision callback



commit 3234f9db7fe2f368f95d101cea2cd56c272da454
Author: Carlos Garcia Campos <cgarcia igalia com>
Date:   Thu Apr 9 14:28:53 2015 +0200

    yelp-view: Do not block/unlock policy decision callback
    
    Use a boolean variable to decide whether we need to resolve the uri or
    not in policy decision callback.

 libyelp/yelp-view.c |   34 ++++++++++++++--------------------
 1 files changed, 14 insertions(+), 20 deletions(-)
---
diff --git a/libyelp/yelp-view.c b/libyelp/yelp-view.c
index e10d1d9..d9994f4 100644
--- a/libyelp/yelp-view.c
+++ b/libyelp/yelp-view.c
@@ -255,7 +255,7 @@ struct _YelpViewPrivate {
 
     GSList         *link_actions;
 
-    gint            navigation_requested;
+    gboolean        resolve_uri_on_policy_decision;
 };
 
 #define TARGET_TYPE_URI_LIST     "text/uri-list"
@@ -325,9 +325,9 @@ yelp_view_init (YelpView *view)
 
     priv->prevstate = priv->state = YELP_VIEW_STATE_BLANK;
 
-    priv->navigation_requested =
-        g_signal_connect (view, "decide-policy",
-                          G_CALLBACK (view_policy_decision_requested), NULL);
+    priv->resolve_uri_on_policy_decision = TRUE;
+    g_signal_connect (view, "decide-policy",
+                      G_CALLBACK (view_policy_decision_requested), NULL);
     g_signal_connect (view, "load-changed",
                       G_CALLBACK (view_load_status_changed), NULL);
     g_signal_connect (view, "load-failed",
@@ -1650,16 +1650,20 @@ view_policy_decision_requested (YelpView                *view,
                                 gpointer                 user_data)
 {
     YelpViewPrivate *priv = GET_PRIV (view);
-    WebKitNavigationPolicyDecision *navigation_decision = WEBKIT_NAVIGATION_POLICY_DECISION (decision);
-    WebKitURIRequest *request = webkit_navigation_policy_decision_get_request (navigation_decision);
-    const gchar *requri = webkit_uri_request_get_uri (request);
+    WebKitURIRequest *request;
     gchar *fixed_uri;
     YelpUri *uri;
 
     if (type != WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION)
         return FALSE;
 
-    fixed_uri = build_yelp_uri (requri);
+    if (!priv->resolve_uri_on_policy_decision) {
+        priv->resolve_uri_on_policy_decision = TRUE;
+        return FALSE;
+    }
+
+    request = webkit_navigation_policy_decision_get_request (WEBKIT_NAVIGATION_POLICY_DECISION (decision));
+    fixed_uri = build_yelp_uri (webkit_uri_request_get_uri (request));
 
     webkit_policy_decision_ignore (decision);
 
@@ -1736,9 +1740,6 @@ view_load_status_changed (WebKitWebView   *view,
         break;
     }
     case WEBKIT_LOAD_FINISHED:
-
-        g_signal_handler_unblock (view, priv->navigation_requested);
-
         g_object_set (view, "state", YELP_VIEW_STATE_LOADED, NULL);
 
         /* Setting adjustments only work after the page is loaded. These
@@ -1787,9 +1788,6 @@ view_load_failed (WebKitWebView  *view,
                   GError         *error,
                   gpointer        user_data)
 {
-    YelpViewPrivate *priv = GET_PRIV (view);
-
-    g_signal_handler_unblock (view, priv->navigation_requested);
     view_show_error_page (YELP_VIEW (view), error);
 }
 
@@ -1825,8 +1823,6 @@ view_history_action (GAction   *action,
     GList *newcur;
     YelpViewPrivate *priv = GET_PRIV (view);
 
-    g_signal_handler_unblock (view, priv->navigation_requested);
-
     if (priv->back_cur == NULL)
         return;
 
@@ -1858,8 +1854,6 @@ view_navigation_action (GAction  *action,
     gchar *page_id, *new_id, *xref;
     YelpUri *new_uri;
 
-    g_signal_handler_unblock (view, priv->navigation_requested);
-
     page_id = yelp_uri_get_page_id (priv->uri);
 
     if (g_str_equal (g_action_get_name (action), "yelp-view-go-previous"))
@@ -1980,7 +1974,7 @@ view_load_page (YelpView *view)
     uri_str = build_network_uri (uri_str);
     g_free (tmp_uri);
 
-    g_signal_handler_block (view, priv->navigation_requested);
+    priv->resolve_uri_on_policy_decision = FALSE;
     webkit_web_view_load_uri (WEBKIT_WEB_VIEW (view), uri_str);
 
     g_free (uri_str);
@@ -2132,7 +2126,7 @@ view_show_error_page (YelpView *view,
 
     g_signal_emit (view, signals[LOADED], 0);
 
-    g_signal_handler_block (view, priv->navigation_requested);
+    priv->resolve_uri_on_policy_decision = FALSE;
     webkit_web_view_load_html  (WEBKIT_WEB_VIEW (view),
                                 page,
                                 "file:///error/");


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]