diff --git a/dom/html/HTMLMediaElement.cpp b/dom/html/HTMLMediaElement.cpp index ffd643124f..5a5af2fe09 100644 --- a/dom/html/HTMLMediaElement.cpp +++ b/dom/html/HTMLMediaElement.cpp @@ -3734,6 +3734,9 @@ HTMLMediaElement::AfterSetAttr(int32_t aNameSpaceID, nsIAtom* aName, if (aNameSpaceID == kNameSpaceID_None) { if (aName == nsGkAtoms::src) { mSrcMediaSource = nullptr; + mSrcAttrTriggeringPrincipal = nsContentUtils::GetAttrTriggeringPrincipal( + this, aValue ? aValue->GetStringValue() : EmptyString(), + aMaybeScriptedPrincipal); if (aValue) { nsString srcStr = aValue->GetStringValue(); nsCOMPtr uri; diff --git a/dom/html/HTMLMediaElement.h b/dom/html/HTMLMediaElement.h index 9cdc376e82..5943c08419 100644 --- a/dom/html/HTMLMediaElement.h +++ b/dom/html/HTMLMediaElement.h @@ -410,10 +410,13 @@ public: MediaError* GetError() const; - // XPCOM GetSrc() is OK - void SetSrc(const nsAString& aSrc, ErrorResult& aRv) + void GetSrc(nsString& aSrc, nsIPrincipal&) { - SetHTMLAttr(nsGkAtoms::src, aSrc, aRv); + GetSrc(aSrc); // XPCOM + } + void SetSrc(const nsAString& aSrc, nsIPrincipal& aTriggeringPrincipal, ErrorResult& aRv) + { + SetHTMLAttr(nsGkAtoms::src, aSrc, aTriggeringPrincipal, aRv); } // XPCOM GetCurrentSrc() is OK @@ -1326,6 +1329,9 @@ protected: // set in the src attribute. RefPtr mSrcAttrStream; + // Holds the triggering principal for the src attribute. + nsCOMPtr mSrcAttrTriggeringPrincipal; + // Holds a reference to the DOM wrapper for the MediaStream that we're // actually playing. // At most one of mDecoder and mSrcStream can be non-null. diff --git a/dom/webidl/HTMLMediaElement.webidl b/dom/webidl/HTMLMediaElement.webidl index ad31f38cbc..8da82efdc4 100644 --- a/dom/webidl/HTMLMediaElement.webidl +++ b/dom/webidl/HTMLMediaElement.webidl @@ -17,7 +17,7 @@ interface HTMLMediaElement : HTMLElement { readonly attribute MediaError? error; // network state - [CEReactions, SetterThrows] + [CEReactions, NeedsSubjectPrincipal, SetterThrows] attribute DOMString src; readonly attribute DOMString currentSrc;