Bug 1339961 - Check for 'debugger' privilege when accessing HTMLMediaElement.mozMediaSourceObject, mozDebugReaderData, mozRequestDebugInfo(). r?smaug
MozReview-Commit-ID: 5Rhc0Ukn1W4
--- a/dom/html/HTMLMediaElement.cpp
+++ b/dom/html/HTMLMediaElement.cpp
@@ -7299,11 +7299,16 @@ HTMLMediaElement::AsyncRejectPendingPlay
TakePendingPlayPromises(),
aError);
OwnerDoc()->Dispatch("nsResolveOrRejectPendingPlayPromisesRunner",
TaskCategory::Other,
event.forget());
}
+bool HasDebuggerPrivilege(JSContext* aCx, JSObject* aObj)
+{
+ return nsContentUtils::CallerHasPermission(aCx,
+ NS_LITERAL_STRING("debugger"));
+ }
} // namespace dom
} // namespace mozilla
--- a/dom/html/HTMLMediaElement.h
+++ b/dom/html/HTMLMediaElement.h
@@ -1723,12 +1723,15 @@ private:
// A list of already-dispatched but not yet run
// nsResolveOrRejectPendingPlayPromisesRunners.
// Runners whose Run() method is called remove themselves from this list.
// We keep track of these because the load algorithm resolves/rejects all
// already-dispatched pending play promises.
nsTArray<nsResolveOrRejectPendingPlayPromisesRunner*> mPendingPlayPromisesRunners;
};
+// Check if the context is chrome or has the debugger permission
+bool HasDebuggerPrivilege(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 {
- [ChromeOnly]
+ [Func="HasDebuggerPrivilege"]
readonly attribute MediaSource? mozMediaSourceObject;
- [ChromeOnly]
+ [Func="HasDebuggerPrivilege"]
readonly attribute DOMString mozDebugReaderData;
- [ChromeOnly, NewObject]
+ [Func="HasDebuggerPrivilege", NewObject]
Promise<DOMString> mozRequestDebugInfo();
[Pref="media.test.dumpDebugInfo"]
void mozDumpDebugInfo();
attribute MediaStream? srcObject;
// TODO: remove prefixed version soon (1183495).
attribute MediaStream? mozSrcObject;