From 46e0d26aad5fa95e8f06f593199ef86325eb5526 Mon Sep 17 00:00:00 2001 From: Koyyani Maheswari Date: Mon, 30 Jan 2023 18:29:15 +0530 Subject: [PATCH] [M108 Migration][MM] Show permission pop-up to access IO device. 1) Permission pop-up to access IO device. 2) Fix usage of public ewk api for media permission. Reference: https://review.tizen.org/gerrit/280529/ Change-Id: I8aa2aed68c0dc4f0c94dd0b5e02e6aa42d8d6d01 Signed-off-by: Koyyani Maheswari --- .../tizen_speech_recognition_manager_delegate.cc | 7 +--- .../tizen_speech_recognition_manager_delegate.h | 3 +- .../private/ewk_user_media_private.h | 6 ++++ .../efl_integration/private/ewk_view_private.cc | 39 ++++++++++++++++++++++ .../ewk/efl_integration/private/ewk_view_private.h | 5 +++ .../ewk/efl_integration/public/ewk_user_media.cc | 30 ++++++++++++++--- tizen_src/ewk/efl_integration/public/ewk_view.cc | 21 +++--------- 7 files changed, 82 insertions(+), 29 deletions(-) diff --git a/tizen_src/chromium_impl/content/browser/speech/tizen_speech_recognition_manager_delegate.cc b/tizen_src/chromium_impl/content/browser/speech/tizen_speech_recognition_manager_delegate.cc index 8435e66..e48d98b 100644 --- a/tizen_src/chromium_impl/content/browser/speech/tizen_speech_recognition_manager_delegate.cc +++ b/tizen_src/chromium_impl/content/browser/speech/tizen_speech_recognition_manager_delegate.cc @@ -17,11 +17,6 @@ void TizenSpeechRecognitionManagerDelegate::CheckRecognitionIsAllowed( int session_id, base::OnceCallback callback) { // For tizen, we expect speech recognition to happen when requested. - - // Therefore we simply authorize it by calling back with is_allowed=true. The - // first parameter, ask_user, is set to false because we don't want to prompt - // the user for permission with an infobar. - // In browser, a pop-up for permission to use microphone will show up. // In web app, however, the user agrees on the access to microphone // when the app is installed on device. So the pop-up will not show up. @@ -30,7 +25,7 @@ void TizenSpeechRecognitionManagerDelegate::CheckRecognitionIsAllowed( FROM_HERE, base::BindOnce(std::move(callback), IsTIZENWRT(), false)); #else GetIOThreadTaskRunner({})->PostTask( - FROM_HERE, base::BindOnce(std::move(callback), false, true)); + FROM_HERE, base::BindOnce(std::move(callback), true, false)); #endif } diff --git a/tizen_src/chromium_impl/content/browser/speech/tizen_speech_recognition_manager_delegate.h b/tizen_src/chromium_impl/content/browser/speech/tizen_speech_recognition_manager_delegate.h index 6ac79bb..30a584a 100644 --- a/tizen_src/chromium_impl/content/browser/speech/tizen_speech_recognition_manager_delegate.h +++ b/tizen_src/chromium_impl/content/browser/speech/tizen_speech_recognition_manager_delegate.h @@ -12,8 +12,7 @@ namespace content { class SpeechRecognitionEventListener; // This delegate is used by the speech recognition manager to -// check for permission to record audio. For tizen, we always authorize -// speech recognition. +// check for permission to record audio. class TizenSpeechRecognitionManagerDelegate : public SpeechRecognitionManagerDelegate { public: diff --git a/tizen_src/ewk/efl_integration/private/ewk_user_media_private.h b/tizen_src/ewk/efl_integration/private/ewk_user_media_private.h index 8b347c7..6ed456c 100644 --- a/tizen_src/ewk/efl_integration/private/ewk_user_media_private.h +++ b/tizen_src/ewk/efl_integration/private/ewk_user_media_private.h @@ -30,6 +30,12 @@ class _Ewk_User_Media_Permission_Request { bool IsDecided() const { return decided_; } void Suspend() { suspended_ = true; }; bool IsSuspended() const { return suspended_; } + bool IsAudioRequested() const { + return blink::IsAudioInputMediaType(request_.audio_type); + } + bool IsVideoRequested() const { + return blink::IsVideoInputMediaType(request_.video_type); + } private: content::WebContentsDelegateEfl* web_contents_; diff --git a/tizen_src/ewk/efl_integration/private/ewk_view_private.cc b/tizen_src/ewk/efl_integration/private/ewk_view_private.cc index febd993..c12ed9a 100644 --- a/tizen_src/ewk/efl_integration/private/ewk_view_private.cc +++ b/tizen_src/ewk/efl_integration/private/ewk_view_private.cc @@ -314,3 +314,42 @@ bool InitSmartClassInterface(Ewk_View_Smart_Class& api) return true; } + +std::string CreatePermissionMessageRequest( + const Ewk_User_Media_Permission_Request* user_media_permission_request) { + const char msgid_both[] = + "IDS_WEBVIEW_POP_P1SS_HP2SS_IS_REQUESTING_PERMISSION_TO_USE_YOUR_CAMERA_" + "AND_MICROPHONE"; + const char msgid_camera[] = + "IDS_WEBVIEW_POP_P1SS_HP2SS_IS_REQUESTING_PERMISSION_TO_USE_YOUR_CAMERA"; + const char msgid_mic[] = + "IDS_WEBVIEW_POP_P1SS_HP2SS_IS_REQUESTING_PERMISSION_TO_USE_YOUR_" + "MICROPHONE"; + + std::string value = std::string( + ewk_security_origin_host_get(ewk_user_media_permission_request_origin_get( + user_media_permission_request))); + + bool isAudioRequested = user_media_permission_request->IsAudioRequested(); + bool isVideoRequested = user_media_permission_request->IsVideoRequested(); + + const char* msgid = + (isAudioRequested && !isVideoRequested) + ? msgid_mic + : (!isAudioRequested && isVideoRequested) ? msgid_camera : msgid_both; + + std::string message = dgettext("WebKit", msgid); + + std::string replace_str = std::string("%1$s"); + size_t pos = message.find(replace_str.c_str()); + if (pos != std::string::npos) + message.replace(pos, replace_str.length(), value.c_str()); + + replace_str = std::string("(%2$s)"); + pos = message.find(replace_str.c_str()); + if (pos != std::string::npos) + message.replace(pos, replace_str.length(), ""); + + return message; +} + diff --git a/tizen_src/ewk/efl_integration/private/ewk_view_private.h b/tizen_src/ewk/efl_integration/private/ewk_view_private.h index e71b01d..f77c09a 100644 --- a/tizen_src/ewk/efl_integration/private/ewk_view_private.h +++ b/tizen_src/ewk/efl_integration/private/ewk_view_private.h @@ -6,6 +6,7 @@ #define ewk_view_private_h #include +#include #include "eweb_view.h" #include "ewk_view.h" @@ -25,6 +26,10 @@ Ewk_View_Smart_Data* GetEwkViewSmartDataFromEvasObject(const Evas_Object* evas_o EWebView* GetWebViewFromSmartData(const Ewk_View_Smart_Data* smartData); EWebView* GetWebViewFromEvasObject(const Evas_Object* eo); +// permission message request creator +std::string CreatePermissionMessageRequest( + const Ewk_User_Media_Permission_Request* user_media_permission_request); + // helper macro // TODO: "EINA_LOG_ERR" should be changed to "EINA_LOG_CRIT" // (http://web.sec.samsung.net/bugzilla/show_bug.cgi?id=15311) diff --git a/tizen_src/ewk/efl_integration/public/ewk_user_media.cc b/tizen_src/ewk/efl_integration/public/ewk_user_media.cc index 78f6012..ee71eb0 100644 --- a/tizen_src/ewk/efl_integration/public/ewk_user_media.cc +++ b/tizen_src/ewk/efl_integration/public/ewk_user_media.cc @@ -28,6 +28,7 @@ #include "private/ewk_private.h" #include "private/ewk_security_origin_private.h" #include "private/ewk_user_media_private.h" +#include "private/ewk_view_private.h" Eina_Bool ewk_user_media_permission_request_suspend( Ewk_User_Media_Permission_Request* request) { @@ -78,16 +79,36 @@ const Ewk_Security_Origin* ewk_user_media_permission_query_origin_get( #endif } +/* LCOV_EXCL_START */ const char* ewk_user_media_permission_request_message_get(const Ewk_User_Media_Permission_Request* request) { - LOG_EWK_API_MOCKUP(); +#if defined(TIZEN_MULTIMEDIA) && BUILDFLAG(IS_TIZEN_TV) + std::string message = CreatePermissionMessageRequest(request); + return eina_stringshare_add(message.c_str()); +#else + LOG_EWK_API_MOCKUP("This API is deprecated"); return NULL; +#endif } -Ewk_User_Media_Device_Type ewk_user_media_permission_request_device_type_get(const Ewk_User_Media_Permission_Request* request) -{ - LOG_EWK_API_MOCKUP(); +Ewk_User_Media_Device_Type ewk_user_media_permission_request_device_type_get( + const Ewk_User_Media_Permission_Request* request) { +#if BUILDFLAG(IS_TIZEN_TV) + if (!request) + return EWK_USER_MEDIA_DEVICE_TYPE_NONE; + + int deviceType = 0; + if(request->IsAudioRequested()) + deviceType |= EWK_USER_MEDIA_DEVICE_TYPE_MICROPHONE; + + if (request->IsVideoRequested()) + deviceType |= EWK_USER_MEDIA_DEVICE_TYPE_CAMERA; + + return static_cast(deviceType); +#else + LOG_EWK_API_MOCKUP("Only for Tizen TV."); return EWK_USER_MEDIA_DEVICE_TYPE_NONE; +#endif } Ewk_User_Media_Device_Type ewk_user_media_permission_query_device_type_get( @@ -108,3 +129,4 @@ Ewk_User_Media_Device_Type ewk_user_media_permission_query_device_type_get( return EWK_USER_MEDIA_DEVICE_TYPE_NONE; #endif } +/* LCOV_EXCL_STOP */ diff --git a/tizen_src/ewk/efl_integration/public/ewk_view.cc b/tizen_src/ewk/efl_integration/public/ewk_view.cc index aec5ec1..c3407d8 100644 --- a/tizen_src/ewk/efl_integration/public/ewk_view.cc +++ b/tizen_src/ewk/efl_integration/public/ewk_view.cc @@ -102,8 +102,10 @@ Evas_Object* ewk_view_add_with_context(Evas* e, Ewk_Context* context) Evas_Object* ewk_view = CreateWebViewAsEvasObject(context, e); if (ewk_view) { +#if !BUILDFLAG(IS_TIZEN_TV) ewk_view_user_media_permission_callback_set(ewk_view, _ewk_view_default_user_media_permission, 0); +#endif ewk_view_geolocation_permission_callback_set(ewk_view, _ewk_view_default_geolocation_permission, 0); ewk_view_notification_permission_callback_set(ewk_view, @@ -950,23 +952,8 @@ static Eina_Bool _ewk_view_default_user_media_permission( { EWK_VIEW_IMPL_GET_OR_RETURN(ewk_view, impl, EINA_FALSE); - std::string value = std::string(ewk_security_origin_host_get( - ewk_user_media_permission_request_origin_get( - user_media_permission_request))); - - std::string message = std::string(dgettext( - "WebKit", - "IDS_WEBVIEW_POP_P1SS_HP2SS_IS_REQUESTING_PERMISSION_TO_USE_YOUR_CAMERA")); - - std::string replace_str = std::string("%1$s"); - size_t pos = message.find(replace_str.c_str()); - if (pos != std::string::npos) - message.replace(pos, replace_str.length(), value.c_str()); - - replace_str = std::string("(%2$s)"); - pos = message.find(replace_str.c_str()); - if (pos != std::string::npos) - message.replace(pos, replace_str.length(), ""); + std::string message = + CreatePermissionMessageRequest(user_media_permission_request); // add for suspending ewk_user_media_permission_request_suspend(user_media_permission_request); -- 2.7.4