- 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
#include <string>
#include <dpl/log/secure_log.h>
#include <string>
#include <dpl/log/secure_log.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>
#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>
namespace {
// Function declare
bool askUserPermission(Evas_Object* parent, PermissionData* data);
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 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)
{
bool askUserPermission(Evas_Object* parent, PermissionData* data)
{
body.c_str(),
WRT_BODY_REMEMBER_PREFERENCE,
popupCallback,
body.c_str(),
WRT_BODY_REMEMBER_PREFERENCE,
popupCallback,
data);
if (popup == NULL) {
delete data;
data);
if (popup == NULL) {
delete data;
-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);
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));
+
+ Evas_Object* popup = getPopup(obj);
evas_object_hide(popup);
evas_object_del(popup);
}
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(
} // anonymous namespace
void permissionRequest(