- 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)