Bug 1182329 - Allow pages which have camera/microphone permission to autoplay audible media. r=jib
It seems reasonable to assume that when a page has been granted permission
to capture camera/microphone, the user intends it to play audible media.
MozReview-Commit-ID: 1RdsPK1vRPt
--- a/dom/media/AutoplayPolicy.cpp
+++ b/dom/media/AutoplayPolicy.cpp
@@ -5,16 +5,17 @@
* You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "AutoplayPolicy.h"
#include "mozilla/EventStateManager.h"
#include "mozilla/Preferences.h"
#include "mozilla/dom/HTMLMediaElement.h"
#include "nsIDocument.h"
+#include "MediaManager.h"
namespace mozilla {
namespace dom {
/* static */ bool
AutoplayPolicy::IsDocumentAllowedToPlay(nsIDocument* aDoc)
{
return aDoc ? aDoc->HasBeenUserActivated() : false;
@@ -22,16 +23,26 @@ AutoplayPolicy::IsDocumentAllowedToPlay(
/* static */ bool
AutoplayPolicy::IsMediaElementAllowedToPlay(NotNull<HTMLMediaElement*> aElement)
{
if (Preferences::GetBool("media.autoplay.enabled")) {
return true;
}
+ // Pages which have been granted permission to capture WebRTC camera or
+ // microphone are assumed to be trusted, and are allowed to autoplay.
+ MediaManager* manager = MediaManager::GetIfExists();
+ if (manager) {
+ nsCOMPtr<nsPIDOMWindowInner> window = aElement->OwnerDoc()->GetInnerWindow();
+ if (window && manager->IsActivelyCapturingOrHasAPermission(window->WindowID())) {
+ return true;
+ }
+ }
+
// TODO : this old way would be removed when user-gestures-needed becomes
// as a default option to block autoplay.
if (!Preferences::GetBool("media.autoplay.enabled.user-gestures-needed", false)) {
// If elelement is blessed, it would always be allowed to play().
return aElement->IsBlessed() ||
EventStateManager::IsHandlingUserInput();
}