Implement privilege for usermedia permission
authorJihoon Chung <jihoon.chung@samsung.com>
Wed, 13 Mar 2013 00:01:56 +0000 (09:01 +0900)
committerJihoon Chung <jihoon.chung@samsung.com>
Fri, 15 Mar 2013 03:52:10 +0000 (12:52 +0900)
[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

src/view/common/view_logic_security_origin_support.cpp
src/view/webkit/view_logic.cpp
src/view/webkit/view_logic_usermedia_support.cpp
src/view/webkit/view_logic_usermedia_support.h

index 29e3c08..48cac1e 100644 (file)
@@ -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);
index 0cc576b..2c4606f 100644 (file)
@@ -1456,8 +1456,10 @@ void ViewLogic::usermediaPermissionRequestCallback(
     LogDebug("usermediaPermissionRequestCallback called");
     Assert(data);
     ViewLogic* This = static_cast<ViewLogic*>(data);
-    ViewModule::UsermediaSupport::usermediaPermissionRequest(This->m_window,
-                                                             eventInfo);
+    ViewModule::UsermediaSupport::usermediaPermissionRequest(
+        This->m_window,
+        This->m_securityOriginSupport->getSecurityOriginDAO(),
+        eventInfo);
 }
 
 // helper method
index 8992628..15516ea 100644 (file)
 #include <string>
 #include <dpl/log/log.h>
 #include <dpl/assert.h>
+#include <wrt-commons/security-origin-dao/security_origin_dao_types.h>
+#include <wrt-commons/security-origin-dao/security_origin_dao.h>
 #include <Elementary.h>
 #include <EWebKit2.h>
+#include <common/view_logic_security_origin_support.h>
 
 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<Ewk_User_Media_Permission_Request*>(data);
+    PermissionData* permData = static_cast<PermissionData*>(data);
+    Ewk_User_Media_Permission_Request* permissionRequest =
+        static_cast<Ewk_User_Media_Permission_Request*>(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<Ewk_User_Media_Permission_Request*>(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
index f6ab0e3..9c9b05f 100644 (file)
 #ifndef VIEW_LOGIC_USERMEDIA_SUPPORT_H_
 #define VIEW_LOGIC_USERMEDIA_SUPPORT_H_
 
+#include <memory>
 #include <Elementary.h>
 
+//Forward declarations
+namespace SecurityOriginDB {
+class SecurityOriginDAO;
+}
+
 namespace ViewModule {
 namespace UsermediaSupport {
 void usermediaPermissionRequest(
     Evas_Object* window,
+    SecurityOriginDB::SecurityOriginDAO* securityOriginDAO,
     void* data);
 } // namespace UsermediaSupport
 } // namespace ViewModule