Title: [122742] trunk/Source/WebKit2
Revision
122742
Author
commit-qu...@webkit.org
Date
2012-07-16 11:21:26 -0700 (Mon, 16 Jul 2012)

Log Message

[EFL][WK2] Make Ewk_Navigation_Policy_Decision ref counted
https://bugs.webkit.org/show_bug.cgi?id=91343

Patch by Christophe Dumez <christophe.du...@intel.com> on 2012-07-16
Reviewed by Antonio Gomes.

Make Ewk_Navigation_Policy_Decision ref counted so that the
client can make navigation policy decisions asynchronously
by ref'ing the Ewk_Navigation_Policy_Decision object passed
with the "policy,*" signals.

* UIProcess/API/efl/ewk_navigation_policy_decision.cpp:
(_Ewk_Navigation_Policy_Decision):
(_Ewk_Navigation_Policy_Decision::_Ewk_Navigation_Policy_Decision):
(_Ewk_Navigation_Policy_Decision::~_Ewk_Navigation_Policy_Decision):
(ewk_navigation_policy_decision_ref):
(ewk_navigation_policy_decision_unref):
* UIProcess/API/efl/ewk_navigation_policy_decision.h:
* UIProcess/API/efl/ewk_view.h:
* UIProcess/API/efl/ewk_view_policy_client.cpp:
(decidePolicyForNavigationAction):
(decidePolicyForNewWindowAction):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (122741 => 122742)


--- trunk/Source/WebKit2/ChangeLog	2012-07-16 18:16:42 UTC (rev 122741)
+++ trunk/Source/WebKit2/ChangeLog	2012-07-16 18:21:26 UTC (rev 122742)
@@ -1,3 +1,27 @@
+2012-07-16  Christophe Dumez  <christophe.du...@intel.com>
+
+        [EFL][WK2] Make Ewk_Navigation_Policy_Decision ref counted
+        https://bugs.webkit.org/show_bug.cgi?id=91343
+
+        Reviewed by Antonio Gomes.
+
+        Make Ewk_Navigation_Policy_Decision ref counted so that the
+        client can make navigation policy decisions asynchronously
+        by ref'ing the Ewk_Navigation_Policy_Decision object passed
+        with the "policy,*" signals.
+
+        * UIProcess/API/efl/ewk_navigation_policy_decision.cpp:
+        (_Ewk_Navigation_Policy_Decision):
+        (_Ewk_Navigation_Policy_Decision::_Ewk_Navigation_Policy_Decision):
+        (_Ewk_Navigation_Policy_Decision::~_Ewk_Navigation_Policy_Decision):
+        (ewk_navigation_policy_decision_ref):
+        (ewk_navigation_policy_decision_unref):
+        * UIProcess/API/efl/ewk_navigation_policy_decision.h:
+        * UIProcess/API/efl/ewk_view.h:
+        * UIProcess/API/efl/ewk_view_policy_client.cpp:
+        (decidePolicyForNavigationAction):
+        (decidePolicyForNewWindowAction):
+
 2012-07-16  Zoltan Horvath  <zol...@webkit.org>
 
         [Qt] Change NativeImagePtr from QPixmap* to QImage*

Modified: trunk/Source/WebKit2/UIProcess/API/efl/ewk_navigation_policy_decision.cpp (122741 => 122742)


--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_navigation_policy_decision.cpp	2012-07-16 18:16:42 UTC (rev 122741)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_navigation_policy_decision.cpp	2012-07-16 18:21:26 UTC (rev 122742)
@@ -40,6 +40,7 @@
  * @brief   Contains the navigation policy decision data.
  */
 struct _Ewk_Navigation_Policy_Decision {
+    unsigned int __ref; /**< the reference count of the object */
     WKRetainPtr<WKFramePolicyListenerRef> listener;
     bool actedUponByClient;
     Ewk_Navigation_Type navigationType;
@@ -49,7 +50,8 @@
     const char* frameName;
 
     _Ewk_Navigation_Policy_Decision(WKFramePolicyListenerRef _listener, Ewk_Navigation_Type _navigationType, Event_Mouse_Button _mouseButton, Event_Modifier_Keys _modifiers, Ewk_Url_Request* _request, const char* _frameName)
-        : listener(_listener)
+        : __ref(1)
+        , listener(_listener)
         , actedUponByClient(false)
         , navigationType(_navigationType)
         , mouseButton(_mouseButton)
@@ -60,6 +62,8 @@
 
     ~_Ewk_Navigation_Policy_Decision()
     {
+        ASSERT(!__ref);
+
         // This is the default choice for all policy decisions in WebPageProxy.cpp.
         if (!actedUponByClient)
             WKFramePolicyListenerUse(listener.get());
@@ -69,10 +73,20 @@
     }
 };
 
-void ewk_navigation_policy_decision_free(Ewk_Navigation_Policy_Decision* decision)
+void ewk_navigation_policy_decision_ref(Ewk_Navigation_Policy_Decision* decision)
 {
     EINA_SAFETY_ON_NULL_RETURN(decision);
 
+    ++decision->__ref;
+}
+
+void ewk_navigation_policy_decision_unref(Ewk_Navigation_Policy_Decision* decision)
+{
+    EINA_SAFETY_ON_NULL_RETURN(decision);
+
+    if (--decision->__ref)
+        return;
+
     delete decision;
 }
 

Modified: trunk/Source/WebKit2/UIProcess/API/efl/ewk_navigation_policy_decision.h (122741 => 122742)


--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_navigation_policy_decision.h	2012-07-16 18:16:42 UTC (rev 122741)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_navigation_policy_decision.h	2012-07-16 18:21:26 UTC (rev 122742)
@@ -67,13 +67,22 @@
 } Event_Modifier_Keys;
 
 /**
- * Frees the given object.
+ * Increases the reference count of the given object.
  *
- * @param decision the policy decision object to free
+ * @param decision the policy decision object to increase the reference count
  */
-EAPI void ewk_navigation_policy_decision_free(Ewk_Navigation_Policy_Decision *decision);
+EAPI void ewk_navigation_policy_decision_ref(Ewk_Navigation_Policy_Decision *decision);
 
 /**
+ * Decreases the reference count of the given object, possibly freeing it.
+ *
+ * When the reference count reaches 0, the object is freed.
+ *
+ * @param decision the policy decision object to decrease the reference count
+ */
+EAPI void ewk_navigation_policy_decision_unref(Ewk_Navigation_Policy_Decision *decision);
+
+/**
  * Query type for this navigation policy decision.
  *
  * @param decision navigation policy decision object to query.

Modified: trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.h (122741 => 122742)


--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.h	2012-07-16 18:16:42 UTC (rev 122741)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.h	2012-07-16 18:21:26 UTC (rev 122742)
@@ -35,7 +35,11 @@
  * - "load,provisional,redirect", void: view received redirect for provisional load.
  * - "load,provisional,started", void: view started provisional load.
  * - "policy,decision,navigation", Ewk_Navigation_Policy_Decision*: a navigation policy decision should be taken.
+ *   To make a policy decision asynchronously, simply increment the reference count of the
+ *   #Ewk_Navigation_Policy_Decision object using ewk_navigation_policy_decision_ref().
  * - "policy,decision,new,window", Ewk_Navigation_Policy_Decision*: a new window policy decision should be taken.
+ *   To make a policy decision asynchronously, simply increment the reference count of the
+ *   #Ewk_Navigation_Policy_Decision object using ewk_navigation_policy_decision_ref().
  * - "resource,request,failed", const Ewk_Web_Resource_Load_Error*: a resource failed loading.
  * - "resource,request,finished", const Ewk_Web_Resource*: a resource finished loading.
  * - "resource,request,new", const Ewk_Web_Resource_Request*: a resource request was initiated.

Modified: trunk/Source/WebKit2/UIProcess/API/efl/ewk_view_policy_client.cpp (122741 => 122742)


--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_view_policy_client.cpp	2012-07-16 18:16:42 UTC (rev 122741)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_view_policy_client.cpp	2012-07-16 18:21:26 UTC (rev 122742)
@@ -43,14 +43,14 @@
 {
     Ewk_Navigation_Policy_Decision* decision = ewk_navigation_policy_decision_new(navigationType, mouseButton, modifiers, request, 0, listener);
     ewk_view_navigation_policy_decision(toEwkView(clientInfo), decision);
-    ewk_navigation_policy_decision_free(decision);
+    ewk_navigation_policy_decision_unref(decision);
 }
 
 static void decidePolicyForNewWindowAction(WKPageRef page, WKFrameRef frame, WKFrameNavigationType navigationType, WKEventModifiers modifiers, WKEventMouseButton mouseButton, WKURLRequestRef request, WKStringRef frameName, WKFramePolicyListenerRef listener, WKTypeRef userData, const void* clientInfo)
 {
     Ewk_Navigation_Policy_Decision* decision = ewk_navigation_policy_decision_new(navigationType, mouseButton, modifiers, request, toImpl(frameName)->string().utf8().data(), listener);
     ewk_view_new_window_policy_decision(toEwkView(clientInfo), decision);
-    ewk_navigation_policy_decision_free(decision);
+    ewk_navigation_policy_decision_unref(decision);
 }
 
 void ewk_view_policy_client_attach(WKPageRef pageRef, Evas_Object* ewkView)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to