Bug 1383984 - Enable debugging HTMLMediaElement APIs with 'tabs' permission - r?jya
While "debugger" is not available yet, we can enable these debugging APIs for
extensions that have the "tabs" privilege, which includes the Media Panel
Devtools extension, so we/webdev will get better media-playback information.
MozReview-Commit-ID: I0MAZH9g0HU
--- a/dom/html/HTMLMediaElement.cpp
+++ b/dom/html/HTMLMediaElement.cpp
@@ -7542,20 +7542,22 @@ HTMLMediaElement::MarkAsTainted()
{
mHasSuspendTaint = true;
if (mDecoder) {
mDecoder->SetSuspendTaint(true);
}
}
-bool HasDebuggerPrivilege(JSContext* aCx, JSObject* aObj)
+bool
+HasDebuggerOrTabsPrivilege(JSContext* aCx, JSObject* aObj)
{
return nsContentUtils::CallerHasPermission(aCx,
- NS_LITERAL_STRING("debugger"));
+ NS_LITERAL_STRING("debugger")) ||
+ nsContentUtils::CallerHasPermission(aCx, NS_LITERAL_STRING("tabs"));
}
void
HTMLMediaElement::AsyncResolveSeekDOMPromiseIfExists()
{
MOZ_ASSERT(NS_IsMainThread());
if (mSeekDOMPromise) {
RefPtr<dom::Promise> promise = mSeekDOMPromise.forget();
--- a/dom/html/HTMLMediaElement.h
+++ b/dom/html/HTMLMediaElement.h
@@ -1795,15 +1795,16 @@ private:
nsTArray<nsResolveOrRejectPendingPlayPromisesRunner*> mPendingPlayPromisesRunners;
// A pending seek promise which is created at Seek() method call and is
// resolved/rejected at AsyncResolveSeekDOMPromiseIfExists()/
// AsyncRejectSeekDOMPromiseIfExists() methods.
RefPtr<dom::Promise> mSeekDOMPromise;
};
-// Check if the context is chrome or has the debugger permission
-bool HasDebuggerPrivilege(JSContext* aCx, JSObject* aObj);
+// Check if the context is chrome or has the debugger or tabs permission
+bool
+HasDebuggerOrTabsPrivilege(JSContext* aCx, JSObject* aObj);
} // namespace dom
} // namespace mozilla
#endif // mozilla_dom_HTMLMediaElement_h
--- a/dom/webidl/HTMLMediaElement.webidl
+++ b/dom/webidl/HTMLMediaElement.webidl
@@ -95,21 +95,21 @@ interface HTMLMediaElement : HTMLElement
readonly attribute TextTrackList? textTracks;
TextTrack addTextTrack(TextTrackKind kind,
optional DOMString label = "",
optional DOMString language = "");
};
// Mozilla extensions:
partial interface HTMLMediaElement {
- [Func="HasDebuggerPrivilege"]
+ [Func="HasDebuggerOrTabsPrivilege"]
readonly attribute MediaSource? mozMediaSourceObject;
- [Func="HasDebuggerPrivilege"]
+ [Func="HasDebuggerOrTabsPrivilege"]
readonly attribute DOMString mozDebugReaderData;
- [Func="HasDebuggerPrivilege", NewObject]
+ [Func="HasDebuggerOrTabsPrivilege", NewObject]
Promise<DOMString> mozRequestDebugInfo();
[Pref="media.test.dumpDebugInfo"]
void mozDumpDebugInfo();
attribute MediaStream? srcObject;
// TODO: remove prefixed version soon (1183495).
attribute MediaStream? mozSrcObject;