From 79770c654ae605e16db957cf47ad309f77aa87b7 Mon Sep 17 00:00:00 2001 From: Yuni Jeong Date: Mon, 3 Sep 2012 17:45:20 +0900 Subject: [PATCH] Added APIs for checking whether frame is main frame when policy decision callback is called. [Title] Added APIs for checking whether frame is main frame when policy decision callback is called. [Issue#] N/A [Problem] N/A [Cause] N/A [Solution] N/A Change-Id: I90b5cdb182eda4aefff38ce89e2ca7a0097c857c --- Source/WebKit2/UIProcess/API/efl/ewk_frame.cpp | 10 +++++++++- Source/WebKit2/UIProcess/API/efl/ewk_frame.h | 11 ++++++++++- Source/WebKit2/UIProcess/API/efl/ewk_policy_decision.cpp | 16 +++++++++++++--- Source/WebKit2/UIProcess/API/efl/ewk_policy_decision.h | 10 ++++++++++ .../WebKit2/UIProcess/API/efl/ewk_view_policy_client.cpp | 4 ++-- 5 files changed, 44 insertions(+), 7 deletions(-) diff --git a/Source/WebKit2/UIProcess/API/efl/ewk_frame.cpp b/Source/WebKit2/UIProcess/API/efl/ewk_frame.cpp index d50dfda..0680f43 100755 --- a/Source/WebKit2/UIProcess/API/efl/ewk_frame.cpp +++ b/Source/WebKit2/UIProcess/API/efl/ewk_frame.cpp @@ -85,4 +85,12 @@ Eina_Bool ewk_frame_can_show_mime_type(Ewk_Frame_Ref frame, char* mimeType) WKFrameRef wkFrame = static_cast(frame); WKRetainPtr mimeTypeRef(AdoptWK, WKStringCreateWithUTF8CString(mimeType)); return WKFrameCanShowMIMEType(wkFrame, mimeTypeRef.get()); -} \ No newline at end of file +} + +Eina_Bool ewk_frame_is_main_frame(Ewk_Frame_Ref frame) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(frame, false); + + WKFrameRef wkFrame = static_cast(frame); + return WKFrameIsMainFrame(wkFrame); +} diff --git a/Source/WebKit2/UIProcess/API/efl/ewk_frame.h b/Source/WebKit2/UIProcess/API/efl/ewk_frame.h index c724d77..c87540f 100755 --- a/Source/WebKit2/UIProcess/API/efl/ewk_frame.h +++ b/Source/WebKit2/UIProcess/API/efl/ewk_frame.h @@ -59,7 +59,7 @@ EAPI Ewk_Frame_Ref ewk_frame_parent_get(Ewk_Frame_Ref frame); EAPI Eina_Bool ewk_frame_source_get(Ewk_Frame_Ref frame, Ewk_Frame_Source_Get_Callback callback, void* user_data); /** - * Returns that Whether or not a MIME type can be displayed. + * Gets whether a MIME type can be displayed in the frame. * * @param frame frame object * @param mime_type a mime type @@ -68,6 +68,15 @@ EAPI Eina_Bool ewk_frame_source_get(Ewk_Frame_Ref frame, Ewk_Frame_Source_Get_Ca */ EAPI Eina_Bool ewk_frame_can_show_mime_type(Ewk_Frame_Ref frame, char* mime_type); +/** + * Gets whether the frame is main frame. + * + * @param frame frame object + * + * @return @c EINA_TRUE if the frame is main frame or @c EINA_FALSE otherwise + */ +EAPI Eina_Bool ewk_frame_is_main_frame(Ewk_Frame_Ref frame); + #ifdef __cplusplus } #endif diff --git a/Source/WebKit2/UIProcess/API/efl/ewk_policy_decision.cpp b/Source/WebKit2/UIProcess/API/efl/ewk_policy_decision.cpp index 10e7a22..7a5aa49 100755 --- a/Source/WebKit2/UIProcess/API/efl/ewk_policy_decision.cpp +++ b/Source/WebKit2/UIProcess/API/efl/ewk_policy_decision.cpp @@ -45,6 +45,7 @@ struct _Ewk_Policy_Decision { Eina_Hash* responseHeaders; Ewk_Policy_Decision_Type decisionType; Ewk_Policy_Navigation_Type navigationType; + WKFrameRef frame; bool isDecided; bool isSuspended; @@ -75,6 +76,8 @@ Ewk_Policy_Decision* ewkPolicyDecisionCreate(WKFramePolicyListenerRef listener, policyDecision->decisionType = EWK_POLICY_DECISION_USE; policyDecision->navigationType = static_cast(navigationType); + policyDecision->frame = frame; + if (response) { policyDecision->responseMime = eina_stringshare_add(toImpl(response)->resourceResponse().mimeType().utf8().data()); @@ -248,11 +251,18 @@ Eina_Bool ewk_policy_decision_download(Ewk_Policy_Decision* policyDecision) return true; } -Ewk_Policy_Navigation_Type ewk_policy_decision_navigation_type_get(Ewk_Policy_Decision* policy_decision) +Ewk_Policy_Navigation_Type ewk_policy_decision_navigation_type_get(Ewk_Policy_Decision* policyDecision) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(policyDecision, EWK_POLICY_NAVIGATION_TYPE_OTHER); + + return policyDecision->navigationType; +} + +Ewk_Frame_Ref ewk_policy_decision_frame_get(Ewk_Policy_Decision* policyDecision) { - EINA_SAFETY_ON_NULL_RETURN_VAL(policy_decision, EWK_POLICY_NAVIGATION_TYPE_OTHER); + EINA_SAFETY_ON_NULL_RETURN_VAL(policyDecision, 0); - return policy_decision->navigationType; + return static_cast(policyDecision->frame); } #endif // #if OS(TIZEN) diff --git a/Source/WebKit2/UIProcess/API/efl/ewk_policy_decision.h b/Source/WebKit2/UIProcess/API/efl/ewk_policy_decision.h index dae609b..51cba8f 100755 --- a/Source/WebKit2/UIProcess/API/efl/ewk_policy_decision.h +++ b/Source/WebKit2/UIProcess/API/efl/ewk_policy_decision.h @@ -20,6 +20,7 @@ #ifndef ewk_policy_decision_h #define ewk_policy_decision_h +#include "ewk_frame.h" #include #ifdef __cplusplus @@ -171,6 +172,15 @@ EAPI Eina_Bool ewk_policy_decision_download(Ewk_Policy_Decision* policy_decision */ EAPI Ewk_Policy_Navigation_Type ewk_policy_decision_navigation_type_get(Ewk_Policy_Decision* policy_decision); +/** + * Gets the frame reference from Policy Decision object. + * + * @param policy_decision policy decsision object + * + * @return frame reference on success, or NULL on failure + */ +EAPI Ewk_Frame_Ref ewk_policy_decision_frame_get(Ewk_Policy_Decision* policy_decision); + #ifdef __cplusplus } #endif diff --git a/Source/WebKit2/UIProcess/API/efl/ewk_view_policy_client.cpp b/Source/WebKit2/UIProcess/API/efl/ewk_view_policy_client.cpp index bae5b87..ed44e3b 100755 --- a/Source/WebKit2/UIProcess/API/efl/ewk_view_policy_client.cpp +++ b/Source/WebKit2/UIProcess/API/efl/ewk_view_policy_client.cpp @@ -34,7 +34,7 @@ using namespace WebKit; void decidePolicyForNavigationAction(WKPageRef page, WKFrameRef frame, WKFrameNavigationType navigationType, WKEventModifiers modifiers, WKEventMouseButton mouseButton, WKURLRequestRef request, WKFramePolicyListenerRef listener, WKTypeRef userData, const void* clientInfo) { Evas_Object* ewkView = static_cast(const_cast(clientInfo)); - Ewk_Policy_Decision* policyDecision = ewkPolicyDecisionCreate(listener, request, 0, 0, navigationType); + Ewk_Policy_Decision* policyDecision = ewkPolicyDecisionCreate(listener, request, frame, 0, navigationType); ewkViewPolicyNavigationDecide(ewkView, policyDecision); if (!ewkPolicyDecisionDecided(policyDecision) && !ewkPolicyDecisionSuspended(policyDecision)) @@ -44,7 +44,7 @@ void decidePolicyForNavigationAction(WKPageRef page, WKFrameRef frame, WKFrameNa void decidePolicyForNewWindowAction(WKPageRef page, WKFrameRef frame, WKFrameNavigationType navigationType, WKEventModifiers modifiers, WKEventMouseButton mouseButton, WKURLRequestRef request, WKStringRef frameName, WKFramePolicyListenerRef listener, WKTypeRef userData, const void* clientInfo) { Evas_Object* ewkView = static_cast(const_cast(clientInfo)); - Ewk_Policy_Decision* policyDecision = ewkPolicyDecisionCreate(listener, request, 0, 0, navigationType); + Ewk_Policy_Decision* policyDecision = ewkPolicyDecisionCreate(listener, request, frame, 0, navigationType); ewkViewPolicyNewWindowDecide(ewkView, policyDecision); if (!ewkPolicyDecisionDecided(policyDecision) && !ewkPolicyDecisionSuspended(policyDecision)) -- 2.7.4