Bug 1339961 - Check for 'debugger' privilege when accessing HTMLMediaElement.mozMediaSourceObject, mozDebugReaderData, mozRequestDebugInfo(). r?smaug draft
authorkaro <kkoorts@mozilla.com>
Fri, 10 Feb 2017 08:54:12 +1300
changeset 484886 cda2f25e1ba4bad12f5a3bafdb64ee963d514505
parent 484881 593a9f29d45bbdbe63a0cacac0cc8ef180794c7f
child 545885 1869964ead7af798c223a167be8f3cd1bb1d5465
push id45586
push userbmo:kkoorts@mozilla.com
push dateWed, 15 Feb 2017 23:01:43 +0000
reviewerssmaug
bugs1339961
milestone54.0a1
Bug 1339961 - Check for 'debugger' privilege when accessing HTMLMediaElement.mozMediaSourceObject, mozDebugReaderData, mozRequestDebugInfo(). r?smaug MozReview-Commit-ID: 5Rhc0Ukn1W4
dom/html/HTMLMediaElement.cpp
dom/html/HTMLMediaElement.h
dom/webidl/HTMLMediaElement.webidl
--- 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;