diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/model/WidgetType.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/model/WidgetType.kt
index 24f3a155ed..f02fe4f9de 100644
--- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/model/WidgetType.kt
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/model/WidgetType.kt
@@ -29,7 +29,7 @@ private val DEFINED_TYPES by lazy {
             WidgetType.Grafana,
             WidgetType.Custom,
             WidgetType.IntegrationManager,
-            WidgetType.ElementCall
+            WidgetType.ElementCall,
     )
 }
 
diff --git a/vector/src/main/java/im/vector/app/core/utils/CheckWebViewPermissionsUseCase.kt b/vector/src/main/java/im/vector/app/core/utils/CheckWebViewPermissionsUseCase.kt
new file mode 100644
index 0000000000..df84e24f90
--- /dev/null
+++ b/vector/src/main/java/im/vector/app/core/utils/CheckWebViewPermissionsUseCase.kt
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2022 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package im.vector.app.core.utils
+
+import android.app.Activity
+import android.content.pm.PackageManager
+import android.webkit.PermissionRequest
+import androidx.core.content.ContextCompat
+import javax.inject.Inject
+
+class CheckWebViewPermissionsUseCase @Inject constructor() {
+
+    /**
+     * Checks if required WebView permissions are already granted system level.
+     * @param activity the calling Activity that is requesting the permissions (or fragment parent)
+     * @param request WebView permission request of onPermissionRequest function
+     * @return true if WebView permissions are already granted, false otherwise
+     */
+    fun execute(activity: Activity, request: PermissionRequest): Boolean {
+        return request.resources.all {
+            when (it) {
+                PermissionRequest.RESOURCE_AUDIO_CAPTURE -> {
+                    PERMISSIONS_FOR_AUDIO_IP_CALL.all { permission ->
+                        ContextCompat.checkSelfPermission(activity.applicationContext, permission) == PackageManager.PERMISSION_GRANTED
+                    }
+                }
+                PermissionRequest.RESOURCE_VIDEO_CAPTURE -> {
+                    PERMISSIONS_FOR_VIDEO_IP_CALL.all { permission ->
+                        ContextCompat.checkSelfPermission(activity.applicationContext, permission) == PackageManager.PERMISSION_GRANTED
+                    }
+                }
+                else -> {
+                    false
+                }
+            }
+        }
+    }
+}
diff --git a/vector/src/main/java/im/vector/app/core/utils/PermissionsTools.kt b/vector/src/main/java/im/vector/app/core/utils/PermissionsTools.kt
index 051a6cd8ce..9ad95d3c55 100644
--- a/vector/src/main/java/im/vector/app/core/utils/PermissionsTools.kt
+++ b/vector/src/main/java/im/vector/app/core/utils/PermissionsTools.kt
@@ -19,7 +19,6 @@ package im.vector.app.core.utils
 import android.Manifest
 import android.app.Activity
 import android.content.pm.PackageManager
-import android.webkit.PermissionRequest
 import androidx.activity.ComponentActivity
 import androidx.activity.result.ActivityResultLauncher
 import androidx.activity.result.contract.ActivityResultContracts
@@ -138,32 +137,6 @@ fun checkPermissions(
     }
 }
 
-/**
- * Checks if required WebView permissions are already granted system level.
- * @param activity the calling Activity that is requesting the permissions (or fragment parent)
- * @param request WebView permission request of onPermissionRequest function
- * @return true if WebView permissions are already granted, false otherwise
- */
-fun checkWebViewPermissions(activity: Activity, request: PermissionRequest): Boolean {
-    return request.resources.all {
-        when (it) {
-            PermissionRequest.RESOURCE_AUDIO_CAPTURE -> {
-                PERMISSIONS_FOR_AUDIO_IP_CALL.all { permission ->
-                    ContextCompat.checkSelfPermission(activity.applicationContext, permission) == PackageManager.PERMISSION_GRANTED
-                }
-            }
-            PermissionRequest.RESOURCE_VIDEO_CAPTURE -> {
-                PERMISSIONS_FOR_VIDEO_IP_CALL.all { permission ->
-                    ContextCompat.checkSelfPermission(activity.applicationContext, permission) == PackageManager.PERMISSION_GRANTED
-                }
-            }
-            else -> {
-                false
-            }
-        }
-    }
-}
-
 /**
  * To be call after the permission request.
  *
diff --git a/vector/src/main/java/im/vector/app/features/widgets/WidgetFragment.kt b/vector/src/main/java/im/vector/app/features/widgets/WidgetFragment.kt
index 390bd3c88b..9ac085fa89 100644
--- a/vector/src/main/java/im/vector/app/features/widgets/WidgetFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/widgets/WidgetFragment.kt
@@ -43,6 +43,7 @@ import im.vector.app.core.extensions.registerStartForActivityResult
 import im.vector.app.core.platform.OnBackPressed
 import im.vector.app.core.platform.VectorBaseFragment
 import im.vector.app.core.platform.VectorMenuProvider
+import im.vector.app.core.utils.CheckWebViewPermissionsUseCase
 import im.vector.app.core.utils.openUrlInExternalBrowser
 import im.vector.app.databinding.FragmentRoomWidgetBinding
 import im.vector.app.features.webview.WebEventListener
@@ -65,7 +66,8 @@ data class WidgetArgs(
 ) : Parcelable
 
 class WidgetFragment @Inject constructor(
-        private val permissionUtils: WebviewPermissionUtils
+        private val permissionUtils: WebviewPermissionUtils,
+        private val checkWebViewPermissionsUseCase: CheckWebViewPermissionsUseCase,
 ) :
         VectorBaseFragment<FragmentRoomWidgetBinding>(),
         WebEventListener,
@@ -81,7 +83,7 @@ class WidgetFragment @Inject constructor(
 
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
-        views.widgetWebView.setupForWidget(requireActivity(), this)
+        views.widgetWebView.setupForWidget(requireActivity(), checkWebViewPermissionsUseCase, this)
         if (fragmentArgs.kind.isAdmin()) {
             viewModel.getPostAPIMediator().setWebView(views.widgetWebView)
         }
diff --git a/vector/src/main/java/im/vector/app/features/widgets/webview/WidgetWebView.kt b/vector/src/main/java/im/vector/app/features/widgets/webview/WidgetWebView.kt
index 2f3b449b1a..ac9930866f 100644
--- a/vector/src/main/java/im/vector/app/features/widgets/webview/WidgetWebView.kt
+++ b/vector/src/main/java/im/vector/app/features/widgets/webview/WidgetWebView.kt
@@ -24,13 +24,16 @@ import android.webkit.PermissionRequest
 import android.webkit.WebChromeClient
 import android.webkit.WebView
 import im.vector.app.R
-import im.vector.app.core.utils.checkWebViewPermissions
+import im.vector.app.core.utils.CheckWebViewPermissionsUseCase
 import im.vector.app.features.themes.ThemeUtils
 import im.vector.app.features.webview.VectorWebViewClient
 import im.vector.app.features.webview.WebEventListener
 
 @SuppressLint("NewApi")
-fun WebView.setupForWidget(activity: Activity, eventListener: WebEventListener) {
+fun WebView.setupForWidget(activity: Activity,
+                           checkWebViewPermissionsUseCase: CheckWebViewPermissionsUseCase,
+                           eventListener: WebEventListener,
+) {
     // xml value seems ignored
     setBackgroundColor(ThemeUtils.getColor(context, R.attr.colorSurface))
 
@@ -63,7 +66,7 @@ fun WebView.setupForWidget(activity: Activity, eventListener: WebEventListener)
     // Permission requests
     webChromeClient = object : WebChromeClient() {
         override fun onPermissionRequest(request: PermissionRequest) {
-            if (checkWebViewPermissions(activity, request)) {
+            if (checkWebViewPermissionsUseCase.execute(activity, request)) {
                 request.grant(request.resources)
             } else {
                 eventListener.onPermissionRequest(request)