From c5e74aaa77f9ae82ee1546a8e7b1c25f909ebeba Mon Sep 17 00:00:00 2001 From: Ehsan Akhgari Date: Sun, 3 Feb 2013 12:42:39 -0500 Subject: [PATCH] Bug 837416 - Part 1: Rename nsHTMLStyleElement to mozilla::dom::HTMLStyleElement; r=bzbarsky --HG-- rename : content/html/content/src/nsHTMLStyleElement.cpp => content/html/content/src/HTMLStyleElement.cpp rename : content/html/content/src/nsHTMLStyleElement.cpp => content/html/content/src/HTMLStyleElement.h --- content/html/content/src/HTMLStyleElement.cpp | 265 ++++++++++++++ content/html/content/src/HTMLStyleElement.h | 98 +++++ content/html/content/src/Makefile.in | 3 +- .../html/content/src/nsHTMLStyleElement.cpp | 340 ------------------ 4 files changed, 365 insertions(+), 341 deletions(-) create mode 100644 content/html/content/src/HTMLStyleElement.cpp create mode 100644 content/html/content/src/HTMLStyleElement.h delete mode 100644 content/html/content/src/nsHTMLStyleElement.cpp diff --git a/content/html/content/src/HTMLStyleElement.cpp b/content/html/content/src/HTMLStyleElement.cpp new file mode 100644 index 00000000000..b0c03622f21 --- /dev/null +++ b/content/html/content/src/HTMLStyleElement.cpp @@ -0,0 +1,265 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include "mozilla/dom/HTMLStyleElement.h" +#include "nsIDOMLinkStyle.h" +#include "nsIDOMEventTarget.h" +#include "nsGkAtoms.h" +#include "nsStyleConsts.h" +#include "nsIDOMStyleSheet.h" +#include "nsIStyleSheet.h" +#include "nsNetUtil.h" +#include "nsIDocument.h" +#include "nsUnicharUtils.h" +#include "nsThreadUtils.h" +#include "nsContentUtils.h" +#include "nsStubMutationObserver.h" + +NS_IMPL_NS_NEW_HTML_ELEMENT(Style) + +DOMCI_NODE_DATA(HTMLStyleElement, mozilla::dom::HTMLStyleElement) + +namespace mozilla { +namespace dom { + +HTMLStyleElement::HTMLStyleElement(already_AddRefed aNodeInfo) + : nsGenericHTMLElement(aNodeInfo) +{ + AddMutationObserver(this); +} + +HTMLStyleElement::~HTMLStyleElement() +{ +} + +NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(HTMLStyleElement, + nsGenericHTMLElement) + tmp->nsStyleLinkElement::Traverse(cb); +NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END +NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(HTMLStyleElement, + nsGenericHTMLElement) + tmp->nsStyleLinkElement::Unlink(); +NS_IMPL_CYCLE_COLLECTION_UNLINK_END + +NS_IMPL_ADDREF_INHERITED(HTMLStyleElement, Element) +NS_IMPL_RELEASE_INHERITED(HTMLStyleElement, Element) + + +// QueryInterface implementation for HTMLStyleElement +NS_INTERFACE_TABLE_HEAD_CYCLE_COLLECTION_INHERITED(HTMLStyleElement) + NS_HTML_CONTENT_INTERFACE_TABLE4(HTMLStyleElement, + nsIDOMHTMLStyleElement, + nsIDOMLinkStyle, + nsIStyleSheetLinkingElement, + nsIMutationObserver) + NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(HTMLStyleElement, + nsGenericHTMLElement) +NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLStyleElement) + + +NS_IMPL_ELEMENT_CLONE(HTMLStyleElement) + + +NS_IMETHODIMP +HTMLStyleElement::GetDisabled(bool* aDisabled) +{ + nsCOMPtr ss = do_QueryInterface(GetStyleSheet()); + if (!ss) { + *aDisabled = false; + return NS_OK; + } + + return ss->GetDisabled(aDisabled); +} + +NS_IMETHODIMP +HTMLStyleElement::SetDisabled(bool aDisabled) +{ + nsCOMPtr ss = do_QueryInterface(GetStyleSheet()); + if (!ss) { + return NS_OK; + } + + return ss->SetDisabled(aDisabled); +} + +NS_IMPL_STRING_ATTR(HTMLStyleElement, Media, media) +NS_IMPL_BOOL_ATTR(HTMLStyleElement, Scoped, scoped) +NS_IMPL_STRING_ATTR(HTMLStyleElement, Type, type) + +void +HTMLStyleElement::CharacterDataChanged(nsIDocument* aDocument, + nsIContent* aContent, + CharacterDataChangeInfo* aInfo) +{ + ContentChanged(aContent); +} + +void +HTMLStyleElement::ContentAppended(nsIDocument* aDocument, + nsIContent* aContainer, + nsIContent* aFirstNewContent, + int32_t aNewIndexInContainer) +{ + ContentChanged(aContainer); +} + +void +HTMLStyleElement::ContentInserted(nsIDocument* aDocument, + nsIContent* aContainer, + nsIContent* aChild, + int32_t aIndexInContainer) +{ + ContentChanged(aChild); +} + +void +HTMLStyleElement::ContentRemoved(nsIDocument* aDocument, + nsIContent* aContainer, + nsIContent* aChild, + int32_t aIndexInContainer, + nsIContent* aPreviousSibling) +{ + ContentChanged(aChild); +} + +void +HTMLStyleElement::ContentChanged(nsIContent* aContent) +{ + if (nsContentUtils::IsInSameAnonymousTree(this, aContent)) { + UpdateStyleSheetInternal(nullptr); + } +} + +nsresult +HTMLStyleElement::BindToTree(nsIDocument* aDocument, nsIContent* aParent, + nsIContent* aBindingParent, + bool aCompileEventHandlers) +{ + nsresult rv = nsGenericHTMLElement::BindToTree(aDocument, aParent, + aBindingParent, + aCompileEventHandlers); + NS_ENSURE_SUCCESS(rv, rv); + + void (HTMLStyleElement::*update)() = &HTMLStyleElement::UpdateStyleSheetInternal; + nsContentUtils::AddScriptRunner(NS_NewRunnableMethod(this, update)); + + return rv; +} + +void +HTMLStyleElement::UnbindFromTree(bool aDeep, bool aNullParent) +{ + nsCOMPtr oldDoc = GetCurrentDoc(); + + nsGenericHTMLElement::UnbindFromTree(aDeep, aNullParent); + UpdateStyleSheetInternal(oldDoc); +} + +nsresult +HTMLStyleElement::SetAttr(int32_t aNameSpaceID, nsIAtom* aName, + nsIAtom* aPrefix, const nsAString& aValue, + bool aNotify) +{ + nsresult rv = nsGenericHTMLElement::SetAttr(aNameSpaceID, aName, aPrefix, + aValue, aNotify); + if (NS_SUCCEEDED(rv) && aNameSpaceID == kNameSpaceID_None) { + if (aName == nsGkAtoms::title || + aName == nsGkAtoms::media || + aName == nsGkAtoms::type) { + UpdateStyleSheetInternal(nullptr, true); + } else if (aName == nsGkAtoms::scoped) { + UpdateStyleSheetScopedness(true); + } + } + + return rv; +} + +nsresult +HTMLStyleElement::UnsetAttr(int32_t aNameSpaceID, nsIAtom* aAttribute, + bool aNotify) +{ + nsresult rv = nsGenericHTMLElement::UnsetAttr(aNameSpaceID, aAttribute, + aNotify); + if (NS_SUCCEEDED(rv) && aNameSpaceID == kNameSpaceID_None) { + if (aAttribute == nsGkAtoms::title || + aAttribute == nsGkAtoms::media || + aAttribute == nsGkAtoms::type) { + UpdateStyleSheetInternal(nullptr, true); + } else if (aAttribute == nsGkAtoms::scoped) { + UpdateStyleSheetScopedness(false); + } + } + + return rv; +} + +void +HTMLStyleElement::GetInnerHTML(nsAString& aInnerHTML, ErrorResult& aError) +{ + nsContentUtils::GetNodeTextContent(this, false, aInnerHTML); +} + +void +HTMLStyleElement::SetInnerHTML(const nsAString& aInnerHTML, + ErrorResult& aError) +{ + SetEnableUpdates(false); + + aError = nsContentUtils::SetNodeTextContent(this, aInnerHTML, true); + + SetEnableUpdates(true); + + UpdateStyleSheetInternal(nullptr); +} + +already_AddRefed +HTMLStyleElement::GetStyleSheetURL(bool* aIsInline) +{ + *aIsInline = true; + return nullptr; +} + +void +HTMLStyleElement::GetStyleSheetInfo(nsAString& aTitle, + nsAString& aType, + nsAString& aMedia, + bool* aIsScoped, + bool* aIsAlternate) +{ + aTitle.Truncate(); + aType.Truncate(); + aMedia.Truncate(); + *aIsAlternate = false; + + nsAutoString title; + GetAttr(kNameSpaceID_None, nsGkAtoms::title, title); + title.CompressWhitespace(); + aTitle.Assign(title); + + GetAttr(kNameSpaceID_None, nsGkAtoms::media, aMedia); + // The HTML5 spec is formulated in terms of the CSSOM spec, which specifies + // that media queries should be ASCII lowercased during serialization. + nsContentUtils::ASCIIToLower(aMedia); + + GetAttr(kNameSpaceID_None, nsGkAtoms::type, aType); + + *aIsScoped = HasAttr(kNameSpaceID_None, nsGkAtoms::scoped); + + nsAutoString mimeType; + nsAutoString notUsed; + nsContentUtils::SplitMimeType(aType, mimeType, notUsed); + if (!mimeType.IsEmpty() && !mimeType.LowerCaseEqualsLiteral("text/css")) { + return; + } + + // If we get here we assume that we're loading a css file, so set the + // type to 'text/css' + aType.AssignLiteral("text/css"); +} + +} // namespace dom +} // namespace mozilla + diff --git a/content/html/content/src/HTMLStyleElement.h b/content/html/content/src/HTMLStyleElement.h new file mode 100644 index 00000000000..794f25d3142 --- /dev/null +++ b/content/html/content/src/HTMLStyleElement.h @@ -0,0 +1,98 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef mozilla_dom_HTMLStyleElement_h +#define mozilla_dom_HTMLStyleElement_h + +#include "nsIDOMHTMLStyleElement.h" +#include "nsGenericHTMLElement.h" +#include "nsStyleLinkElement.h" +#include "nsStubMutationObserver.h" + +class nsIDocument; + +namespace mozilla { +namespace dom { + +class HTMLStyleElement MOZ_FINAL : public nsGenericHTMLElement, + public nsIDOMHTMLStyleElement, + public nsStyleLinkElement, + public nsStubMutationObserver +{ +public: + HTMLStyleElement(already_AddRefed aNodeInfo); + virtual ~HTMLStyleElement(); + + // nsISupports + NS_DECL_ISUPPORTS_INHERITED + + // CC + NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(HTMLStyleElement, + nsGenericHTMLElement) + + // nsIDOMNode + NS_FORWARD_NSIDOMNODE_TO_NSINODE + + // nsIDOMElement + NS_FORWARD_NSIDOMELEMENT_TO_GENERIC + + // nsIDOMHTMLElement + NS_FORWARD_NSIDOMHTMLELEMENT_TO_GENERIC + + virtual void GetInnerHTML(nsAString& aInnerHTML, + mozilla::ErrorResult& aError) MOZ_OVERRIDE; + virtual void SetInnerHTML(const nsAString& aInnerHTML, + mozilla::ErrorResult& aError) MOZ_OVERRIDE; + + // nsIDOMHTMLStyleElement + NS_DECL_NSIDOMHTMLSTYLEELEMENT + + virtual nsresult BindToTree(nsIDocument* aDocument, nsIContent* aParent, + nsIContent* aBindingParent, + bool aCompileEventHandlers); + virtual void UnbindFromTree(bool aDeep = true, + bool aNullParent = true); + nsresult SetAttr(int32_t aNameSpaceID, nsIAtom* aName, + const nsAString& aValue, bool aNotify) + { + return SetAttr(aNameSpaceID, aName, nullptr, aValue, aNotify); + } + virtual nsresult SetAttr(int32_t aNameSpaceID, nsIAtom* aName, + nsIAtom* aPrefix, const nsAString& aValue, + bool aNotify); + virtual nsresult UnsetAttr(int32_t aNameSpaceID, nsIAtom* aAttribute, + bool aNotify); + + virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const; + + // nsIMutationObserver + NS_DECL_NSIMUTATIONOBSERVER_CHARACTERDATACHANGED + NS_DECL_NSIMUTATIONOBSERVER_CONTENTAPPENDED + NS_DECL_NSIMUTATIONOBSERVER_CONTENTINSERTED + NS_DECL_NSIMUTATIONOBSERVER_CONTENTREMOVED + + virtual nsXPCClassInfo* GetClassInfo(); + + virtual nsIDOMNode* AsDOMNode() { return this; } +protected: + already_AddRefed GetStyleSheetURL(bool* aIsInline); + void GetStyleSheetInfo(nsAString& aTitle, + nsAString& aType, + nsAString& aMedia, + bool* aIsScoped, + bool* aIsAlternate); + /** + * Common method to call from the various mutation observer methods. + * aContent is a content node that's either the one that changed or its + * parent; we should only respond to the change if aContent is non-anonymous. + */ + void ContentChanged(nsIContent* aContent); +}; + +} // namespace dom +} // namespace mozilla + +#endif + diff --git a/content/html/content/src/Makefile.in b/content/html/content/src/Makefile.in index 1ace73911d2..d9af032f895 100644 --- a/content/html/content/src/Makefile.in +++ b/content/html/content/src/Makefile.in @@ -45,6 +45,7 @@ EXPORTS_mozilla/dom = \ HTMLScriptElement.h \ HTMLSharedListElement.h \ HTMLSpanElement.h \ + HTMLStyleElement.h \ HTMLTableCaptionElement.h \ HTMLTableCellElement.h \ HTMLTableColElement.h \ @@ -107,7 +108,7 @@ CPPSRCS = \ nsHTMLSharedElement.cpp \ HTMLSpanElement.cpp \ HTMLSharedListElement.cpp \ - nsHTMLStyleElement.cpp \ + HTMLStyleElement.cpp \ HTMLTableElement.cpp \ HTMLTableCaptionElement.cpp \ HTMLTableCellElement.cpp \ diff --git a/content/html/content/src/nsHTMLStyleElement.cpp b/content/html/content/src/nsHTMLStyleElement.cpp deleted file mode 100644 index a420f6b725d..00000000000 --- a/content/html/content/src/nsHTMLStyleElement.cpp +++ /dev/null @@ -1,340 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#include "nsIDOMHTMLStyleElement.h" -#include "nsIDOMLinkStyle.h" -#include "nsIDOMEventTarget.h" -#include "nsGenericHTMLElement.h" -#include "nsGkAtoms.h" -#include "nsStyleConsts.h" -#include "nsIDOMStyleSheet.h" -#include "nsIStyleSheet.h" -#include "nsStyleLinkElement.h" -#include "nsNetUtil.h" -#include "nsIDocument.h" -#include "nsUnicharUtils.h" -#include "nsThreadUtils.h" -#include "nsContentUtils.h" -#include "nsStubMutationObserver.h" - -using namespace mozilla; -using namespace mozilla::dom; - -class nsHTMLStyleElement : public nsGenericHTMLElement, - public nsIDOMHTMLStyleElement, - public nsStyleLinkElement, - public nsStubMutationObserver -{ -public: - nsHTMLStyleElement(already_AddRefed aNodeInfo); - virtual ~nsHTMLStyleElement(); - - // nsISupports - NS_DECL_ISUPPORTS_INHERITED - - // CC - NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(nsHTMLStyleElement, - nsGenericHTMLElement) - - // nsIDOMNode - NS_FORWARD_NSIDOMNODE_TO_NSINODE - - // nsIDOMElement - NS_FORWARD_NSIDOMELEMENT_TO_GENERIC - - // nsIDOMHTMLElement - NS_FORWARD_NSIDOMHTMLELEMENT_TO_GENERIC - - virtual void GetInnerHTML(nsAString& aInnerHTML, - mozilla::ErrorResult& aError) MOZ_OVERRIDE; - virtual void SetInnerHTML(const nsAString& aInnerHTML, - mozilla::ErrorResult& aError) MOZ_OVERRIDE; - - // nsIDOMHTMLStyleElement - NS_DECL_NSIDOMHTMLSTYLEELEMENT - - virtual nsresult BindToTree(nsIDocument* aDocument, nsIContent* aParent, - nsIContent* aBindingParent, - bool aCompileEventHandlers); - virtual void UnbindFromTree(bool aDeep = true, - bool aNullParent = true); - nsresult SetAttr(int32_t aNameSpaceID, nsIAtom* aName, - const nsAString& aValue, bool aNotify) - { - return SetAttr(aNameSpaceID, aName, nullptr, aValue, aNotify); - } - virtual nsresult SetAttr(int32_t aNameSpaceID, nsIAtom* aName, - nsIAtom* aPrefix, const nsAString& aValue, - bool aNotify); - virtual nsresult UnsetAttr(int32_t aNameSpaceID, nsIAtom* aAttribute, - bool aNotify); - - virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const; - - // nsIMutationObserver - NS_DECL_NSIMUTATIONOBSERVER_CHARACTERDATACHANGED - NS_DECL_NSIMUTATIONOBSERVER_CONTENTAPPENDED - NS_DECL_NSIMUTATIONOBSERVER_CONTENTINSERTED - NS_DECL_NSIMUTATIONOBSERVER_CONTENTREMOVED - - virtual nsXPCClassInfo* GetClassInfo(); - - virtual nsIDOMNode* AsDOMNode() { return this; } -protected: - already_AddRefed GetStyleSheetURL(bool* aIsInline); - void GetStyleSheetInfo(nsAString& aTitle, - nsAString& aType, - nsAString& aMedia, - bool* aIsScoped, - bool* aIsAlternate); - /** - * Common method to call from the various mutation observer methods. - * aContent is a content node that's either the one that changed or its - * parent; we should only respond to the change if aContent is non-anonymous. - */ - void ContentChanged(nsIContent* aContent); -}; - - -NS_IMPL_NS_NEW_HTML_ELEMENT(Style) - - -nsHTMLStyleElement::nsHTMLStyleElement(already_AddRefed aNodeInfo) - : nsGenericHTMLElement(aNodeInfo) -{ - AddMutationObserver(this); -} - -nsHTMLStyleElement::~nsHTMLStyleElement() -{ -} - -NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(nsHTMLStyleElement, - nsGenericHTMLElement) - tmp->nsStyleLinkElement::Traverse(cb); -NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END -NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(nsHTMLStyleElement, - nsGenericHTMLElement) - tmp->nsStyleLinkElement::Unlink(); -NS_IMPL_CYCLE_COLLECTION_UNLINK_END - -NS_IMPL_ADDREF_INHERITED(nsHTMLStyleElement, Element) -NS_IMPL_RELEASE_INHERITED(nsHTMLStyleElement, Element) - - -DOMCI_NODE_DATA(HTMLStyleElement, nsHTMLStyleElement) - -// QueryInterface implementation for nsHTMLStyleElement -NS_INTERFACE_TABLE_HEAD_CYCLE_COLLECTION_INHERITED(nsHTMLStyleElement) - NS_HTML_CONTENT_INTERFACE_TABLE4(nsHTMLStyleElement, - nsIDOMHTMLStyleElement, - nsIDOMLinkStyle, - nsIStyleSheetLinkingElement, - nsIMutationObserver) - NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLStyleElement, - nsGenericHTMLElement) -NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLStyleElement) - - -NS_IMPL_ELEMENT_CLONE(nsHTMLStyleElement) - - -NS_IMETHODIMP -nsHTMLStyleElement::GetDisabled(bool* aDisabled) -{ - nsCOMPtr ss = do_QueryInterface(GetStyleSheet()); - if (!ss) { - *aDisabled = false; - return NS_OK; - } - - return ss->GetDisabled(aDisabled); -} - -NS_IMETHODIMP -nsHTMLStyleElement::SetDisabled(bool aDisabled) -{ - nsCOMPtr ss = do_QueryInterface(GetStyleSheet()); - if (!ss) { - return NS_OK; - } - - return ss->SetDisabled(aDisabled); -} - -NS_IMPL_STRING_ATTR(nsHTMLStyleElement, Media, media) -NS_IMPL_BOOL_ATTR(nsHTMLStyleElement, Scoped, scoped) -NS_IMPL_STRING_ATTR(nsHTMLStyleElement, Type, type) - -void -nsHTMLStyleElement::CharacterDataChanged(nsIDocument* aDocument, - nsIContent* aContent, - CharacterDataChangeInfo* aInfo) -{ - ContentChanged(aContent); -} - -void -nsHTMLStyleElement::ContentAppended(nsIDocument* aDocument, - nsIContent* aContainer, - nsIContent* aFirstNewContent, - int32_t aNewIndexInContainer) -{ - ContentChanged(aContainer); -} - -void -nsHTMLStyleElement::ContentInserted(nsIDocument* aDocument, - nsIContent* aContainer, - nsIContent* aChild, - int32_t aIndexInContainer) -{ - ContentChanged(aChild); -} - -void -nsHTMLStyleElement::ContentRemoved(nsIDocument* aDocument, - nsIContent* aContainer, - nsIContent* aChild, - int32_t aIndexInContainer, - nsIContent* aPreviousSibling) -{ - ContentChanged(aChild); -} - -void -nsHTMLStyleElement::ContentChanged(nsIContent* aContent) -{ - if (nsContentUtils::IsInSameAnonymousTree(this, aContent)) { - UpdateStyleSheetInternal(nullptr); - } -} - -nsresult -nsHTMLStyleElement::BindToTree(nsIDocument* aDocument, nsIContent* aParent, - nsIContent* aBindingParent, - bool aCompileEventHandlers) -{ - nsresult rv = nsGenericHTMLElement::BindToTree(aDocument, aParent, - aBindingParent, - aCompileEventHandlers); - NS_ENSURE_SUCCESS(rv, rv); - - void (nsHTMLStyleElement::*update)() = &nsHTMLStyleElement::UpdateStyleSheetInternal; - nsContentUtils::AddScriptRunner(NS_NewRunnableMethod(this, update)); - - return rv; -} - -void -nsHTMLStyleElement::UnbindFromTree(bool aDeep, bool aNullParent) -{ - nsCOMPtr oldDoc = GetCurrentDoc(); - - nsGenericHTMLElement::UnbindFromTree(aDeep, aNullParent); - UpdateStyleSheetInternal(oldDoc); -} - -nsresult -nsHTMLStyleElement::SetAttr(int32_t aNameSpaceID, nsIAtom* aName, - nsIAtom* aPrefix, const nsAString& aValue, - bool aNotify) -{ - nsresult rv = nsGenericHTMLElement::SetAttr(aNameSpaceID, aName, aPrefix, - aValue, aNotify); - if (NS_SUCCEEDED(rv) && aNameSpaceID == kNameSpaceID_None) { - if (aName == nsGkAtoms::title || - aName == nsGkAtoms::media || - aName == nsGkAtoms::type) { - UpdateStyleSheetInternal(nullptr, true); - } else if (aName == nsGkAtoms::scoped) { - UpdateStyleSheetScopedness(true); - } - } - - return rv; -} - -nsresult -nsHTMLStyleElement::UnsetAttr(int32_t aNameSpaceID, nsIAtom* aAttribute, - bool aNotify) -{ - nsresult rv = nsGenericHTMLElement::UnsetAttr(aNameSpaceID, aAttribute, - aNotify); - if (NS_SUCCEEDED(rv) && aNameSpaceID == kNameSpaceID_None) { - if (aAttribute == nsGkAtoms::title || - aAttribute == nsGkAtoms::media || - aAttribute == nsGkAtoms::type) { - UpdateStyleSheetInternal(nullptr, true); - } else if (aAttribute == nsGkAtoms::scoped) { - UpdateStyleSheetScopedness(false); - } - } - - return rv; -} - -void -nsHTMLStyleElement::GetInnerHTML(nsAString& aInnerHTML, ErrorResult& aError) -{ - nsContentUtils::GetNodeTextContent(this, false, aInnerHTML); -} - -void -nsHTMLStyleElement::SetInnerHTML(const nsAString& aInnerHTML, - ErrorResult& aError) -{ - SetEnableUpdates(false); - - aError = nsContentUtils::SetNodeTextContent(this, aInnerHTML, true); - - SetEnableUpdates(true); - - UpdateStyleSheetInternal(nullptr); -} - -already_AddRefed -nsHTMLStyleElement::GetStyleSheetURL(bool* aIsInline) -{ - *aIsInline = true; - return nullptr; -} - -void -nsHTMLStyleElement::GetStyleSheetInfo(nsAString& aTitle, - nsAString& aType, - nsAString& aMedia, - bool* aIsScoped, - bool* aIsAlternate) -{ - aTitle.Truncate(); - aType.Truncate(); - aMedia.Truncate(); - *aIsAlternate = false; - - nsAutoString title; - GetAttr(kNameSpaceID_None, nsGkAtoms::title, title); - title.CompressWhitespace(); - aTitle.Assign(title); - - GetAttr(kNameSpaceID_None, nsGkAtoms::media, aMedia); - // The HTML5 spec is formulated in terms of the CSSOM spec, which specifies - // that media queries should be ASCII lowercased during serialization. - nsContentUtils::ASCIIToLower(aMedia); - - GetAttr(kNameSpaceID_None, nsGkAtoms::type, aType); - - *aIsScoped = HasAttr(kNameSpaceID_None, nsGkAtoms::scoped); - - nsAutoString mimeType; - nsAutoString notUsed; - nsContentUtils::SplitMimeType(aType, mimeType, notUsed); - if (!mimeType.IsEmpty() && !mimeType.LowerCaseEqualsLiteral("text/css")) { - return; - } - - // If we get here we assume that we're loading a css file, so set the - // type to 'text/css' - aType.AssignLiteral("text/css"); -}