Skip to content
This repository has been archived by the owner on Nov 1, 2022. It is now read-only.

Commit

Permalink
safely exposed autoplay rules to external apps
Browse files Browse the repository at this point in the history
  • Loading branch information
severinrudie committed Feb 20, 2020
1 parent 9cd7f01 commit b0a4c8c
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,31 @@ import mozilla.components.feature.sitepermissions.SitePermissionsRules.Action.BL
/**
* Indicate how site permissions must behave by permission category.
*/
data class SitePermissionsRules(
data class SitePermissionsRules internal constructor(
val camera: Action,
val location: Action,
val notification: Action,
val microphone: Action,
val autoplayAudible: Action,
val autoplayInaudible: Action
) {

constructor(
camera: Action,
location: Action,
notification: Action,
microphone: Action,
autoplayAudible: AutoplayAction,
autoplayInaudible: AutoplayAction
) : this(
camera = camera,
location = location,
notification = notification,
microphone = microphone,
autoplayAudible = autoplayAudible.toAction(),
autoplayInaudible = autoplayInaudible.toAction()
)

enum class Action {
ALLOWED, BLOCKED, ASK_TO_ALLOW;

Expand All @@ -30,6 +47,18 @@ data class SitePermissionsRules(
}
}

/**
* Autoplay requests will never prompt the user
*/
enum class AutoplayAction {
ALLOWED, BLOCKED;

fun toAction(): Action = when (this) {
ALLOWED -> Action.ALLOWED
BLOCKED -> Action.BLOCKED
}
}

internal fun getActionFrom(request: PermissionRequest): Action {
return if (request.containsVideoAndAudioSources()) {
getActionForCombinedPermission()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,12 +162,15 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler {
context = requireContext(),
sessionManager = components.sessionManager,
sessionId = sessionId,
fragmentManager = requireFragmentManager()
// , TODO
// sitePermissionsRules = SitePermissionsRules(
// autoplayAudible =
// autoplayInaudible =
// )
fragmentManager = requireFragmentManager(),
sitePermissionsRules = SitePermissionsRules(
autoplayAudible = SitePermissionsRules.AutoplayAction.ALLOWED,
autoplayInaudible = SitePermissionsRules.AutoplayAction.ALLOWED,
camera = SitePermissionsRules.Action.ASK_TO_ALLOW,
location = SitePermissionsRules.Action.ASK_TO_ALLOW,
notification = SitePermissionsRules.Action.ASK_TO_ALLOW,
microphone = SitePermissionsRules.Action.ASK_TO_ALLOW
)
) { permissions ->
requestPermissions(permissions, REQUEST_CODE_APP_PERMISSIONS)
},
Expand Down

0 comments on commit b0a4c8c

Please sign in to comment.