[M108 Migration][MM] Show permission pop-up to access IO device. 82/287482/6
authorKoyyani Maheswari <m.koyyani@samsung.com>
Mon, 30 Jan 2023 12:59:15 +0000 (18:29 +0530)
committerBot Blink <blinkbot@samsung.com>
Mon, 20 Feb 2023 10:10:53 +0000 (10:10 +0000)
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 <m.koyyani@samsung.com>
tizen_src/chromium_impl/content/browser/speech/tizen_speech_recognition_manager_delegate.cc
tizen_src/chromium_impl/content/browser/speech/tizen_speech_recognition_manager_delegate.h
tizen_src/ewk/efl_integration/private/ewk_user_media_private.h
tizen_src/ewk/efl_integration/private/ewk_view_private.cc
tizen_src/ewk/efl_integration/private/ewk_view_private.h
tizen_src/ewk/efl_integration/public/ewk_user_media.cc
tizen_src/ewk/efl_integration/public/ewk_view.cc

index 8435e66f23111ebd768e9087d52b417e6d03d689..e48d98b9132ae57b72c224eea3d92ac9b75bfcfb 100644 (file)
@@ -17,11 +17,6 @@ void TizenSpeechRecognitionManagerDelegate::CheckRecognitionIsAllowed(
     int session_id,
     base::OnceCallback<void(bool ask_user, bool is_allowed)> 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
 }
 
index 6ac79bb33d007fb1430b8f04b4cd9b6302e743a6..30a584a00806f2e09a070fffc6cea5beaa383909 100644 (file)
@@ -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:
index 8b347c735caf3e49d5ee7d36d092b8d94b24468d..6ed456c4394e918b70d7d224025cf61584c0a98e 100644 (file)
@@ -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_;
index febd9934e8e9bc2327abfb81cf5cb1ab675022e9..c12ed9ab243e95f083e8072538c070afcb7b640c 100644 (file)
@@ -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;
+}
+
index e71b01d012019875c73268a2f61b9e5535da8dde..f77c09a6c633150e84fb74d21c6c675429d44c03 100644 (file)
@@ -6,6 +6,7 @@
 #define ewk_view_private_h
 
 #include <Evas.h>
+#include <string>
 
 #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)
index 78f6012ab6da42f16371bcd1fa29b51ec4a13c12..ee71eb074d6ea3ad2fa737291d4c34d2f07426e7 100644 (file)
@@ -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<Ewk_User_Media_Device_Type>(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 */
index aec5ec1e5c6a6b10b5631e6b20833179c69261f3..c3407d8d8375f35cdb2e80a53c14161762dfedb7 100644 (file)
@@ -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);