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>
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.
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
}
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:
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_;
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;
+}
+
#define ewk_view_private_h
#include <Evas.h>
+#include <string>
#include "eweb_view.h"
#include "ewk_view.h"
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)
#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) {
#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(
return EWK_USER_MEDIA_DEVICE_TYPE_NONE;
#endif
}
+/* LCOV_EXCL_STOP */
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,
{
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);