#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>
+#include <common/view_logic_get_parent_window_util.h>
-namespace ViewModule {
+#if (ELM_VERSION_MAJOR == 1 && ELM_VERSION_MINOR == 7)
+#define POPUP_CLASSNAME "popup"
+#else
+//#if ELM_VERSION_MAJOR == 1 && ELM_VERSION_MINOR == 8)
+#define POPUP_CLASSNAME "elm_popup"
+#endif
+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");
- Evas_Object* popup = elm_popup_add(window);
+ Evas_Object* parentWindow = PopupUtil::getParentWindow(window);
+ Evas_Object* popup = elm_popup_add(parentWindow);
evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_object_text_set(popup, USERMEDIA_USE_ASK_BODY);
Assert(button);
Evas_Object* popup = button;
- while (strcmp(elm_object_widget_type_get(popup), "elm_popup")) {
+ while (strcmp(elm_object_widget_type_get(popup), POPUP_CLASSNAME)) {
popup = elm_object_parent_widget_get(popup);
if (!popup) {
return NULL;
{
LogDebug("popupCallback");
Assert(data);
- Ewk_User_Media_Permission* usermediaPermission =
- static_cast<Ewk_User_Media_Permission*>(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_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,
- void* data)
+ SecurityOriginDAO* securityOriginDAO,
+ void* data)
{
LogDebug("usermediaPermissionRequest called");
- Assert(window);
+ Assert(securityOriginDAO);
Assert(data);
+ Ewk_User_Media_Permission_Request* permissionRequest =
+ static_cast<Ewk_User_Media_Permission_Request*>(data);
+
+ SecurityOriginData securityOriginData(
+ WrtDB::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