Register a key callback to handle back key event with W3C permission popup
authorJihoon Chung <jihoon.chung@samsaung.com>
Tue, 1 Oct 2013 13:47:43 +0000 (22:47 +0900)
committerHoseon LEE <hoseon46.lee@samsung.com>
Mon, 14 Oct 2013 11:19:37 +0000 (20:19 +0900)
    - 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

src/view/webkit/view_logic_web_notification_permission_support.cpp

index 670358a..fd5fa7e 100644 (file)
@@ -23,6 +23,7 @@
 
 #include <string>
 #include <dpl/log/secure_log.h>
+#include <dpl/unused.h>
 #include <wrt-commons/security-origin-dao/security_origin_dao_types.h>
 #include <wrt-commons/security-origin-dao/security_origin_dao.h>
 #include <common/view_logic_security_origin_support.h>
@@ -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<PermissionData*>(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<Ewk_Notification_Permission_Request*>(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<PermissionData*>(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<PermissionData*>(data);
+    setPermissionResult(permData, RESULT_DENY_ONCE);
+    delete permData;
+
+    evas_object_hide(obj);
+    evas_object_del(obj);
+}
 } // anonymous namespace
 
 void permissionRequest(