diff --git a/dom/html/HTMLSourceElement.cpp b/dom/html/HTMLSourceElement.cpp index df8cf9dda8..afe481dfd7 100644 --- a/dom/html/HTMLSourceElement.cpp +++ b/dom/html/HTMLSourceElement.cpp @@ -133,6 +133,9 @@ HTMLSourceElement::AfterSetAttr(int32_t aNameSpaceID, nsIAtom* aName, } else if (aNameSpaceID == kNameSpaceID_None && aName == nsGkAtoms::media) { UpdateMediaList(aValue); } else if (aNameSpaceID == kNameSpaceID_None && aName == nsGkAtoms::src) { + mSrcTriggeringPrincipal = nsContentUtils::GetAttrTriggeringPrincipal( + this, aValue ? aValue->GetStringValue() : EmptyString(), + aMaybeScriptedPrincipal); mSrcMediaSource = nullptr; if (aValue) { nsString srcStr = aValue->GetStringValue(); diff --git a/dom/html/HTMLSourceElement.h b/dom/html/HTMLSourceElement.h index 7312c91e33..aeaf884c81 100644 --- a/dom/html/HTMLSourceElement.h +++ b/dom/html/HTMLSourceElement.h @@ -56,13 +56,17 @@ public: MediaSource* GetSrcMediaSource() { return mSrcMediaSource; }; // WebIDL - void GetSrc(nsString& aSrc) + void GetSrc(nsString& aSrc, nsIPrincipal&) { GetURIAttr(nsGkAtoms::src, nullptr, aSrc); } - void SetSrc(const nsAString& aSrc, mozilla::ErrorResult& rv) + void SetSrc(const nsAString& aSrc, nsIPrincipal& aTriggeringPrincipal, mozilla::ErrorResult& rv) { - SetHTMLAttr(nsGkAtoms::src, aSrc, rv); + SetHTMLAttr(nsGkAtoms::src, aSrc, aTriggeringPrincipal, rv); + } + nsIPrincipal* GetSrcTriggeringPrincipal() const + { + return mSrcTriggeringPrincipal; } void GetType(DOMString& aType) @@ -117,6 +121,9 @@ private: RefPtr mMediaList; RefPtr mSrcMediaSource; + // The triggering principal for the src attribute. + nsCOMPtr mSrcTriggeringPrincipal; + // Generates a new nsMediaList using the given input void UpdateMediaList(const nsAttrValue* aValue); }; diff --git a/dom/webidl/HTMLSourceElement.webidl b/dom/webidl/HTMLSourceElement.webidl index 55f25e469c..78570b8579 100644 --- a/dom/webidl/HTMLSourceElement.webidl +++ b/dom/webidl/HTMLSourceElement.webidl @@ -13,7 +13,7 @@ [HTMLConstructor] interface HTMLSourceElement : HTMLElement { - [CEReactions, SetterThrows] + [CEReactions, NeedsSubjectPrincipal, SetterThrows] attribute DOMString src; [CEReactions, SetterThrows] attribute DOMString type;