From 259209d2a0c08a6a7eb5d753b7a1b59648328b4a Mon Sep 17 00:00:00 2001 From: Jihoon Chung Date: Tue, 1 Oct 2013 23:14:34 +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 Storage. [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: I0d14b6092678724f1462e8153754a7efe3ec5819 --- src/view/webkit/view_logic_web_storage_support.cpp | 59 ++++++++++++++++------ 1 file changed, 44 insertions(+), 15 deletions(-) diff --git a/src/view/webkit/view_logic_web_storage_support.cpp b/src/view/webkit/view_logic_web_storage_support.cpp index e0f812d..71853f4 100644 --- a/src/view/webkit/view_logic_web_storage_support.cpp +++ b/src/view/webkit/view_logic_web_storage_support.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -50,7 +51,9 @@ struct WebStoragePermissionData { void askUserForWebStorageCreatePermission( 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 askUserForWebStorageCreatePermission( Evas_Object* window, @@ -76,7 +79,7 @@ void askUserForWebStorageCreatePermission( body.c_str(), WRT_BODY_REMEMBER_PREFERENCE, popupCallback, - NULL, + eaKeyCallback, data); if (popup == NULL) { @@ -88,32 +91,58 @@ void askUserForWebStorageCreatePermission( } } -void popupCallback(void* data, Evas_Object* obj, void* /*eventInfo*/) +void setPermissionResult(PermissionData* permData, Result result) { - Assert(data); - PermissionData* permData = static_cast(data); + Assert(permData); WebStoragePermissionData* webStoragePermissionData = static_cast(permData->m_data); - Evas_Object* ewkView = - static_cast(webStoragePermissionData->m_ewkView); - Evas_Object* popup = getPopup(obj); - Result result = getResult(obj); - _D("result : %d", result); if (result != RESULT_UNKNOWN) { - permData->m_originDao->setSecurityOriginData(permData->m_originData, - result); + permData->m_originDao->setSecurityOriginData(permData->m_originData, result); } - Eina_Bool ret = - (result == RESULT_ALLOW_ALWAYS || result == RESULT_ALLOW_ONCE) ? - EINA_TRUE : EINA_FALSE; - webStoragePermissionData->m_replyEAPI(ewkView, ret); + Eina_Bool ret = (result == RESULT_ALLOW_ALWAYS || result == RESULT_ALLOW_ONCE) ? EINA_TRUE : EINA_FALSE; + webStoragePermissionData->m_replyEAPI(webStoragePermissionData->m_ewkView, ret); +} + +void popupCallback(void* data, Evas_Object* obj, void* eventInfo) +{ + Assert(data); + Assert(obj); + DPL_UNUSED_PARAM(eventInfo); + + PermissionData* permData = static_cast(data); + setPermissionResult(permData, getResult(obj)); + WebStoragePermissionData* webStoragePermissionData = + static_cast(permData->m_data); delete webStoragePermissionData; 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); + + WebStoragePermissionData* webStoragePermissionData = + static_cast(permData->m_data); + delete webStoragePermissionData; + delete permData; + + evas_object_hide(obj); + evas_object_del(obj); +} } // namespace void WebStorageSupport::createPermissionRequest( -- 2.7.4