From 08cc23cd54de44356a324fc8dd86ea8f61eb8023 Mon Sep 17 00:00:00 2001 From: Jihoon Chung Date: Tue, 1 Oct 2013 22:47:43 +0900 Subject: [PATCH] Register a key callback to handle back key event with W3C permission popup - This applies to the permission request popup for W3C Web Notification. [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: I9489658ebafe750a2d157d15c4d573ae7b51a147 --- ...w_logic_web_notification_permission_support.cpp | 59 ++++++++++++++++------ 1 file changed, 43 insertions(+), 16 deletions(-) diff --git a/src/view/webkit/view_logic_web_notification_permission_support.cpp b/src/view/webkit/view_logic_web_notification_permission_support.cpp index 670358a..fd5fa7e 100644 --- a/src/view/webkit/view_logic_web_notification_permission_support.cpp +++ b/src/view/webkit/view_logic_web_notification_permission_support.cpp @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -39,7 +40,9 @@ using namespace ViewModule::SecurityOriginSupportUtil; namespace { // Function declare bool askUserPermission(Evas_Object* parent, 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); bool askUserPermission(Evas_Object* parent, PermissionData* data) { @@ -65,7 +68,7 @@ bool askUserPermission(Evas_Object* parent, PermissionData* data) body.c_str(), WRT_BODY_REMEMBER_PREFERENCE, popupCallback, - NULL, + eaKeyCallback, data); if (popup == NULL) { delete data; @@ -76,29 +79,53 @@ bool askUserPermission(Evas_Object* parent, PermissionData* data) return true; } -void popupCallback(void* data, Evas_Object* obj, void* /*eventInfo*/) +void setPermissionResult(PermissionData* permData, Result result) { - LogDebug("called"); - Assert(data); - PermissionData* permData = static_cast(data); - Ewk_Notification_Permission_Request* request = + Assert(permData); + if (result != RESULT_UNKNOWN) { + permData->m_originDao->setSecurityOriginData(permData->m_originData, result); + } + + Ewk_Notification_Permission_Request* permissionRequest = static_cast(permData->m_data); + Eina_Bool ret = (result == RESULT_ALLOW_ALWAYS || result == RESULT_ALLOW_ONCE) ? EINA_TRUE : EINA_FALSE; + ewk_notification_permission_request_set(permissionRequest, ret); +} - Evas_Object* popup = getPopup(obj); - Result result = getResult(obj); +void popupCallback(void* data, Evas_Object* obj, void* eventInfo) +{ + _D("called"); - if (result != RESULT_UNKNOWN) { - permData->m_originDao->setSecurityOriginData(permData->m_originData, - result); - } - Eina_Bool ret = - (result == RESULT_ALLOW_ALWAYS || result == RESULT_ALLOW_ONCE) ? - EINA_TRUE : EINA_FALSE; - ewk_notification_permission_request_set(request, ret); + 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); +} } // anonymous namespace void permissionRequest( -- 2.7.4