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;