From 008298d1d117a8689fa3c81871f8dc8978ffe436 Mon Sep 17 00:00:00 2001 From: Jihoon Chung Date: Tue, 1 Oct 2013 23:40:38 +0900 Subject: [PATCH] Register a key callback to handle back key event with untrusted certificate confirm popup - This applies to the permission request popup for untrusted certificate confirm [Issue#] N/A [Problem] A web page underneath pop-up moves to the previous page when user expects the pop-up closed. [Cause] The permission request pop-up did not handle the back-key callback. [Solution] Register the key callback. [SCMRequest] N/A Change-Id: Iddee71ee6414a24326eeedd083601571e5726cc7 --- .../view_logic_certificate_confirm_support.cpp | 58 ++++++++++++++++------ 1 file changed, 42 insertions(+), 16 deletions(-) diff --git a/src/view/webkit/view_logic_certificate_confirm_support.cpp b/src/view/webkit/view_logic_certificate_confirm_support.cpp index ae93e66..ebde9f6 100644 --- a/src/view/webkit/view_logic_certificate_confirm_support.cpp +++ b/src/view/webkit/view_logic_certificate_confirm_support.cpp @@ -23,6 +23,8 @@ #include #include #include +#include +#include #include #include #include @@ -42,7 +44,9 @@ namespace { void askUserForCertificatePermission( Evas_Object* window, PermissionData* data); +void setPermissionResult(PermissionData* permData, Result result); static void popupCallback(void* data, Evas_Object* obj, void* eventInfo); +static void eaKeyCallback(void* data, Evas_Object* obj, void* eventInfo); void askUserForCertificatePermission( Evas_Object* window, @@ -59,7 +63,7 @@ void askUserForCertificatePermission( msg.c_str(), WRT_BODY_REMEMBER_PREFERENCE, popupCallback, - NULL, + eaKeyCallback, data); if (popup == NULL) { @@ -71,32 +75,54 @@ void askUserForCertificatePermission( } } -void popupCallback(void* data, Evas_Object* obj, void* /*eventInfo*/) +void setPermissionResult(PermissionData* permData, Result result) { - LogDebug("popupCallback"); - Assert(data); - PermissionData* permData = static_cast(data); + Assert(permData); Ewk_Certificate_Policy_Decision* certificatePolicyDecision = static_cast(permData->m_data); - Evas_Object* popup = getPopup(obj); - Result result = getResult(obj); - if (result != RESULT_UNKNOWN) { - permData->m_certiDao->setCertificateData(permData->m_certiData, - result); + permData->m_certiDao->setCertificateData(permData->m_certiData, result); } - Eina_Bool ret = - (result == RESULT_ALLOW_ALWAYS || result == RESULT_ALLOW_ONCE) ? - EINA_TRUE : EINA_FALSE; - ewk_certificate_policy_decision_allowed_set( - certificatePolicyDecision, - ret); + Eina_Bool ret = (result == RESULT_ALLOW_ALWAYS || result == RESULT_ALLOW_ONCE) ? EINA_TRUE : EINA_FALSE; + ewk_certificate_policy_decision_allowed_set(certificatePolicyDecision, ret); +} + +void popupCallback(void* data, Evas_Object* obj, void* eventInfo) +{ + _D("called"); + + Assert(data); + Assert(obj); + + DPL_UNUSED_PARAM(eventInfo); + + PermissionData* permData = static_cast(data); + setPermissionResult(permData, getResult(obj)); delete permData; + + Evas_Object* popup = getPopup(obj); evas_object_hide(popup); evas_object_del(popup); } + +void eaKeyCallback(void* data, Evas_Object* obj, void* eventInfo) +{ + _D("called"); + + Assert(data); + Assert(obj); + + DPL_UNUSED_PARAM(eventInfo); + + PermissionData* permData = static_cast(data); + setPermissionResult(permData, RESULT_DENY_ONCE); + delete permData; + + evas_object_hide(obj); + evas_object_del(obj); +} } // namespace void certificatePermissionRequest( -- 2.7.4