uint32_t HTMLIFrameElement::GetSandboxFlags() { const nsAttrValue* sandboxAttr = GetParsedAttr(nsGkAtoms::sandbox); // No sandbox attribute, no sandbox flags. if (!sandboxAttr) { return 0; } // Start off by setting all the restriction flags. uint32_t out = SANDBOX_ALL_FLAGS; // Macro for updating the flag according to the keywords #define SANDBOX_KEYWORD(string, atom, flags) \ if (sandboxAttr->Contains(nsGkAtoms::atom, eIgnoreCase)) { out &= ~(flags); } #include "IframeSandboxKeywordList.h" #undef SANDBOX_KEYWORD if (GetParsedAttr(nsGkAtoms::allowfullscreen) || GetParsedAttr(nsGkAtoms::mozallowfullscreen)) { out &= ~SANDBOXED_FULLSCREEN; } return out; }
nsresult HTMLFrameSetElement::GetRowSpec(int32_t *aNumValues, const nsFramesetSpec** aSpecs) { NS_PRECONDITION(aNumValues, "Must have a pointer to an integer here!"); NS_PRECONDITION(aSpecs, "Must have a pointer to an array of nsFramesetSpecs"); *aNumValues = 0; *aSpecs = nullptr; if (!mRowSpecs) { const nsAttrValue* value = GetParsedAttr(nsGkAtoms::rows); if (value && value->Type() == nsAttrValue::eString) { nsresult rv = ParseRowCol(value->GetStringValue(), mNumRows, getter_Transfers(mRowSpecs)); NS_ENSURE_SUCCESS(rv, rv); } if (!mRowSpecs) { // we may not have had an attr or had an empty attr mRowSpecs = new nsFramesetSpec[1]; if (!mRowSpecs) { mNumRows = 0; return NS_ERROR_OUT_OF_MEMORY; } mNumRows = 1; mRowSpecs[0].mUnit = eFramesetUnit_Relative; mRowSpecs[0].mValue = 1; } } *aSpecs = mRowSpecs; *aNumValues = mNumRows; return NS_OK; }
nsresult HTMLFrameSetElement::GetColSpec(int32_t *aNumValues, const nsFramesetSpec** aSpecs) { NS_PRECONDITION(aNumValues, "Must have a pointer to an integer here!"); NS_PRECONDITION(aSpecs, "Must have a pointer to an array of nsFramesetSpecs"); *aNumValues = 0; *aSpecs = nullptr; if (!mColSpecs) { const nsAttrValue* value = GetParsedAttr(nsGkAtoms::cols); if (value && value->Type() == nsAttrValue::eString) { nsresult rv = ParseRowCol(value->GetStringValue(), mNumCols, &mColSpecs); NS_ENSURE_SUCCESS(rv, rv); } if (!mColSpecs) { // we may not have had an attr or had an empty attr mColSpecs = MakeUnique<nsFramesetSpec[]>(1); mNumCols = 1; mColSpecs[0].mUnit = eFramesetUnit_Relative; mColSpecs[0].mValue = 1; } } *aSpecs = mColSpecs.get(); *aNumValues = mNumCols; return NS_OK; }
Maybe<nsStyleLinkElement::SheetInfo> SVGStyleElement::GetStyleSheetInfo() { if (!IsCSSMimeTypeAttribute(*this)) { return Nothing(); } nsAutoString title; nsAutoString media; GetTitleAndMediaForElement(*this, title, media); return Some(SheetInfo{ *OwnerDoc(), this, nullptr, // FIXME(bug 1459822): Why doesn't this need a principal, but // HTMLStyleElement does? nullptr, net::ReferrerPolicy::RP_Unset, // FIXME(bug 1459822): Why does this need a crossorigin attribute, but // HTMLStyleElement doesn't? AttrValueToCORSMode(GetParsedAttr(nsGkAtoms::crossorigin)), title, media, HasAlternateRel::No, IsInline::Yes, }); }
void HTMLTrackElement::CreateTextTrack() { nsString label, srcLang; GetSrclang(srcLang); GetLabel(label); TextTrackKind kind; if (const nsAttrValue* value = GetParsedAttr(nsGkAtoms::kind)) { kind = static_cast<TextTrackKind>(value->GetEnumValue()); } else { kind = TextTrackKind::Subtitles; } bool hasHadScriptObject = true; nsIScriptGlobalObject* scriptObject = OwnerDoc()->GetScriptHandlingObject(hasHadScriptObject); NS_ENSURE_TRUE_VOID(scriptObject || !hasHadScriptObject); nsCOMPtr<nsPIDOMWindow> window = do_QueryInterface(scriptObject); mTrack = new TextTrack(window, kind, label, srcLang, TextTrackMode::Disabled, TextTrackReadyState::NotLoaded, TextTrackSource::Track); mTrack->SetTrackElement(this); if (mMediaParent) { mMediaParent->AddTextTrack(mTrack); } }
HTMLTextAreaElement::GetRows() { const nsAttrValue* attr = GetParsedAttr(nsGkAtoms::rows); if (attr && attr->Type() == nsAttrValue::eInteger) { int32_t rows = attr->GetIntegerValue(); return (rows <= 0) ? DEFAULT_ROWS_TEXTAREA : rows; } return DEFAULT_ROWS_TEXTAREA; }
TextTrackKind HTMLTrackElement::Kind() const { const nsAttrValue* value = GetParsedAttr(nsGkAtoms::kind); if (!value) { return TextTrackKind::Subtitles; } return static_cast<TextTrackKind>(value->GetEnumValue()); }
uint32_t HTMLIFrameElement::GetSandboxFlags() { const nsAttrValue* sandboxAttr = GetParsedAttr(nsGkAtoms::sandbox); // No sandbox attribute, no sandbox flags. if (!sandboxAttr) { return SANDBOXED_NONE; } return nsContentUtils::ParseSandboxAttributeToFlags(sandboxAttr); }
HTMLTextAreaElement::GetCols() { const nsAttrValue* attr = GetParsedAttr(nsGkAtoms::cols); if (attr) { int32_t cols = attr->Type() == nsAttrValue::eInteger ? attr->GetIntegerValue() : 0; // XXX why a default of 1 char, why hide it return (cols <= 0) ? 1 : cols; } return DEFAULT_COLS; }
NS_IMETHODIMP nsDOMTokenList::Item(PRUint32 aIndex, nsAString& aResult) { const nsAttrValue* attr = GetParsedAttr(); if (!attr || aIndex >= static_cast<PRUint32>(attr->GetAtomCount())) { SetDOMStringToNull(aResult); return NS_OK; } attr->AtomAt(aIndex)->ToString(aResult); return NS_OK; }
NS_IMETHODIMP nsDOMTokenList::GetLength(PRUint32 *aLength) { const nsAttrValue* attr = GetParsedAttr(); if (!attr) { *aLength = 0; return NS_OK; } *aLength = attr->GetAtomCount(); return NS_OK; }
NS_IMETHODIMP nsDOMTokenList::Add(const nsAString& aToken) { nsresult rv = CheckToken(aToken); NS_ENSURE_SUCCESS(rv, rv); const nsAttrValue* attr = GetParsedAttr(); if (attr && attr->Contains(aToken)) { return NS_OK; } AddInternal(attr, aToken); return NS_OK; }
NS_IMETHODIMP nsDOMTokenList::Contains(const nsAString& aToken, bool* aResult) { nsresult rv = CheckToken(aToken); NS_ENSURE_SUCCESS(rv, rv); const nsAttrValue* attr = GetParsedAttr(); if (!attr) { *aResult = false; return NS_OK; } *aResult = attr->Contains(aToken); return NS_OK; }
NS_IMETHODIMP nsDOMTokenList::Toggle(const nsAString& aToken, bool* aResult) { nsresult rv = CheckToken(aToken); NS_ENSURE_SUCCESS(rv, rv); const nsAttrValue* attr = GetParsedAttr(); if (attr && attr->Contains(aToken)) { RemoveInternal(attr, aToken); *aResult = false; } else { AddInternal(attr, aToken); *aResult = true; } return NS_OK; }
void HTMLTrackElement::CreateTextTrack() { nsString label, srcLang; GetSrclang(srcLang); GetLabel(label); TextTrackKind kind; if (const nsAttrValue* value = GetParsedAttr(nsGkAtoms::kind)) { kind = static_cast<TextTrackKind>(value->GetEnumValue()); } else { kind = TextTrackKind::Subtitles; } mTrack = new TextTrack(OwnerDoc()->GetParentObject(), kind, label, srcLang); if (mMediaParent) { mMediaParent->AddTextTrack(mTrack); } }
uint32_t SVGIFrameElement::GetSandboxFlags() { const nsAttrValue* sandboxAttr = GetParsedAttr(nsGkAtoms::sandbox); return nsContentUtils::ParseSandboxAttributeToFlags(sandboxAttr); }
CORSMode SVGStyleElement::GetCORSMode() const { return AttrValueToCORSMode(GetParsedAttr(nsGkAtoms::crossorigin)); }
CORSMode HTMLImageElement::GetCORSMode() { return AttrValueToCORSMode(GetParsedAttr(nsGkAtoms::crossorigin)); }
CORSMode HTMLScriptElement::GetCORSMode() const { return AttrValueToCORSMode(GetParsedAttr(nsGkAtoms::crossorigin)); }
void HTMLTextAreaElement::GetAutocomplete(DOMString& aValue) { const nsAttrValue* attributeVal = GetParsedAttr(nsGkAtoms::autocomplete); mAutocompleteAttrState = nsContentUtils::SerializeAutocompleteAttribute( attributeVal, aValue, mAutocompleteAttrState); }