From b420ec65565151dd6fe23b5cc3f584e835332afa Mon Sep 17 00:00:00 2001 From: Jihoon Chung Date: Wed, 13 Mar 2013 09:01:56 +0900 Subject: [PATCH] Implement privilege for usermedia permission [Issue#] TDIS-4324 [Problem] N/A [Cause] N/A [Solution] Implement privilege for usermedia permission popup If web application define privilege for usermedia permission, "http://tizen.org/privilege/mediacapture", web application is possible to use usermedia without user permission [SCMRequest] must imported with wrt-commons Change-Id: If85b30bcbfefb288fad711b3a9489de09868a2ec --- .../common/view_logic_security_origin_support.cpp | 6 +-- src/view/webkit/view_logic.cpp | 6 ++- src/view/webkit/view_logic_usermedia_support.cpp | 51 +++++++++++++++++----- src/view/webkit/view_logic_usermedia_support.h | 7 +++ 4 files changed, 54 insertions(+), 16 deletions(-) diff --git a/src/view/common/view_logic_security_origin_support.cpp b/src/view/common/view_logic_security_origin_support.cpp index 29e3c08..48cac1e 100644 --- a/src/view/common/view_logic_security_origin_support.cpp +++ b/src/view/common/view_logic_security_origin_support.cpp @@ -151,11 +151,11 @@ Evas_Object* SecurityOriginSupportUtil::createPopup( evas_object_show(layout); elm_object_content_set(popup, layout); Evas_Object* btn1 = elm_button_add(popup); - elm_object_text_set(btn1, "YES"); + elm_object_text_set(btn1, "Allow"); elm_object_part_content_set(popup, "button1", btn1); evas_object_smart_callback_add(btn1, "clicked", buttonCallback, data); Evas_Object* btn2 = elm_button_add(popup); - elm_object_text_set(btn2, "NO"); + elm_object_text_set(btn2, "Deny"); elm_object_part_content_set(popup, "button2", btn2); evas_object_smart_callback_add(btn2, "clicked", buttonCallback, data); return popup; @@ -198,7 +198,7 @@ SecurityOriginDB::Result SecurityOriginSupportUtil::getResult( if (popup == NULL) { return RESULT_UNKNOWN; } - bool allow = !strcmp("YES", elm_object_text_get(button)); + bool allow = !strcmp("Allow", elm_object_text_get(button)); // get check evas_object Evas_Object* check = getCheck(popup); diff --git a/src/view/webkit/view_logic.cpp b/src/view/webkit/view_logic.cpp index 0cc576b..2c4606f 100644 --- a/src/view/webkit/view_logic.cpp +++ b/src/view/webkit/view_logic.cpp @@ -1456,8 +1456,10 @@ void ViewLogic::usermediaPermissionRequestCallback( LogDebug("usermediaPermissionRequestCallback called"); Assert(data); ViewLogic* This = static_cast(data); - ViewModule::UsermediaSupport::usermediaPermissionRequest(This->m_window, - eventInfo); + ViewModule::UsermediaSupport::usermediaPermissionRequest( + This->m_window, + This->m_securityOriginSupport->getSecurityOriginDAO(), + eventInfo); } // helper method diff --git a/src/view/webkit/view_logic_usermedia_support.cpp b/src/view/webkit/view_logic_usermedia_support.cpp index 8992628..15516ea 100644 --- a/src/view/webkit/view_logic_usermedia_support.cpp +++ b/src/view/webkit/view_logic_usermedia_support.cpp @@ -23,20 +23,25 @@ #include #include #include +#include +#include #include #include +#include namespace ViewModule { +using namespace SecurityOriginDB; +using namespace ViewModule::SecurityOriginSupportUtil; namespace { const char* const USERMEDIA_USE_ASK_BODY = "This application wants to use your media"; // function declare -void askUserForUsermediaPermission(Evas_Object* window, void* data); +void askUserForUsermediaPermission(Evas_Object* window, PermissionData* data); Evas_Object* getPopup(Evas_Object* button); static void popupCallback(void* data, Evas_Object* obj, void* eventInfo); -void askUserForUsermediaPermission(Evas_Object* window, void* data) +void askUserForUsermediaPermission(Evas_Object* window, PermissionData* data) { LogDebug("askUserForUsermediaPermission called"); @@ -74,33 +79,57 @@ void popupCallback(void* data, Evas_Object* obj, void* /*eventInfo*/) { LogDebug("popupCallback"); Assert(data); - Ewk_User_Media_Permission_Request* usermediaPermission = - static_cast(data); + PermissionData* permData = static_cast(data); + Ewk_User_Media_Permission_Request* permissionRequest = + static_cast(permData->m_data); Assert(obj); Evas_Object* popup = getPopup(obj); Assert(popup); - bool allow = !strcmp("Allow", elm_object_text_get(obj)); + bool allow = !strcmp("Allow", elm_object_text_get(obj)); Eina_Bool ret = allow ? EINA_TRUE : EINA_FALSE; - ewk_user_media_permission_request_set(usermediaPermission, ret); - + ewk_user_media_permission_request_set(permissionRequest, ret); + delete permData; evas_object_hide(popup); evas_object_del(popup); } } // namespace void UsermediaSupport::usermediaPermissionRequest(Evas_Object* window, + SecurityOriginDAO* securityOriginDAO, void* data) { LogDebug("usermediaPermissionRequest called"); - Assert(window); + Assert(securityOriginDAO); Assert(data); - Ewk_User_Media_Permission_Request* usermediaPermission = + Ewk_User_Media_Permission_Request* permissionRequest = static_cast(data); - ewk_user_media_permission_request_suspend(usermediaPermission); + + SecurityOriginData securityOriginData( + FEATURE_USER_MEDIA, + Origin(DPL::FromUTF8String(""), DPL::FromUTF8String(""), 0)); + + // In case of usermedia ewk doesn't support origin data + // cache data also only store allow data by privilege + Result result = securityOriginDAO->getResult(securityOriginData); + if (RESULT_ALLOW_ALWAYS == result) { + LogDebug("allow"); + ewk_user_media_permission_request_set(permissionRequest, EINA_TRUE); + return; + } else if (RESULT_DENY_ALWAYS == result) { + LogDebug("deny"); + ewk_user_media_permission_request_set(permissionRequest, EINA_FALSE); + return; + } + + ewk_user_media_permission_request_suspend(permissionRequest); // ask to user - askUserForUsermediaPermission(window, data); + PermissionData* permissionData = + new PermissionData(securityOriginDAO, + securityOriginData, + data); + askUserForUsermediaPermission(window, permissionData); return; } } // namespace ViewModule diff --git a/src/view/webkit/view_logic_usermedia_support.h b/src/view/webkit/view_logic_usermedia_support.h index f6ab0e3..9c9b05f 100644 --- a/src/view/webkit/view_logic_usermedia_support.h +++ b/src/view/webkit/view_logic_usermedia_support.h @@ -21,12 +21,19 @@ #ifndef VIEW_LOGIC_USERMEDIA_SUPPORT_H_ #define VIEW_LOGIC_USERMEDIA_SUPPORT_H_ +#include #include +//Forward declarations +namespace SecurityOriginDB { +class SecurityOriginDAO; +} + namespace ViewModule { namespace UsermediaSupport { void usermediaPermissionRequest( Evas_Object* window, + SecurityOriginDB::SecurityOriginDAO* securityOriginDAO, void* data); } // namespace UsermediaSupport } // namespace ViewModule -- 2.7.4