diff --git a/content/base/src/nsStyleLinkElement.h b/content/base/src/nsStyleLinkElement.h index c9fe3ba1b32c..bf6fab086af8 100644 --- a/content/base/src/nsStyleLinkElement.h +++ b/content/base/src/nsStyleLinkElement.h @@ -41,8 +41,6 @@ public: // nsIDOMLinkStyle NS_DECL_NSIDOMLINKSTYLE - nsIStyleSheet* GetSheet() { return mStyleSheet; } - // nsIStyleSheetLinkingElement NS_IMETHOD SetStyleSheet(nsIStyleSheet* aStyleSheet); NS_IMETHOD GetStyleSheet(nsIStyleSheet*& aStyleSheet); @@ -80,6 +78,8 @@ protected: bool* aIsScoped, bool* aIsAlternate) = 0; + nsIStyleSheet* GetStyleSheet() { return mStyleSheet; } + virtual mozilla::CORSMode GetCORSMode() const { // Default to no CORS diff --git a/content/html/content/src/HTMLStyleElement.cpp b/content/html/content/src/HTMLStyleElement.cpp deleted file mode 100644 index eb3f12c9bcef..000000000000 --- a/content/html/content/src/HTMLStyleElement.cpp +++ /dev/null @@ -1,296 +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 "mozilla/dom/HTMLStyleElement.h" -#include "mozilla/dom/HTMLStyleElementBinding.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); - SetIsDOMBinding(); -} - -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) -{ - NS_ENSURE_ARG_POINTER(aDisabled); - - *aDisabled = Disabled(); - return NS_OK; -} - -bool -HTMLStyleElement::Disabled() -{ - nsCOMPtr ss = do_QueryInterface(GetSheet()); - if (!ss) { - return false; - } - - bool disabled = false; - ss->GetDisabled(&disabled); - - return disabled; -} - -NS_IMETHODIMP -HTMLStyleElement::SetDisabled(bool aDisabled) -{ - ErrorResult error; - SetDisabled(aDisabled, error); - return error.ErrorCode(); -} - -void -HTMLStyleElement::SetDisabled(bool aDisabled, ErrorResult& aError) -{ - nsCOMPtr ss = do_QueryInterface(GetSheet()); - if (!ss) { - return; - } - - nsresult result = ss->SetDisabled(aDisabled); - if (NS_FAILED(result)) { - aError.Throw(result); - } -} - -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"); -} - -JSObject* -HTMLStyleElement::WrapNode(JSContext *aCx, JSObject *aScope, - bool *aTriedToWrap) -{ - return HTMLStyleElementBinding::Wrap(aCx, aScope, this, aTriedToWrap); -} - -} // namespace dom -} // namespace mozilla - diff --git a/content/html/content/src/HTMLStyleElement.h b/content/html/content/src/HTMLStyleElement.h deleted file mode 100644 index 44090f3a3048..000000000000 --- a/content/html/content/src/HTMLStyleElement.h +++ /dev/null @@ -1,120 +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/. */ - -#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 - - bool Disabled(); - void SetDisabled(bool aDisabled, ErrorResult& aError); - void SetMedia(const nsAString& aMedia, ErrorResult& aError) - { - SetHTMLAttr(nsGkAtoms::media, aMedia, aError); - } - void SetType(const nsAString& aType, ErrorResult& aError) - { - SetHTMLAttr(nsGkAtoms::type, aType, aError); - } - bool Scoped() - { - return GetBoolAttr(nsGkAtoms::scoped); - } - void SetScoped(bool aScoped, ErrorResult& aError) - { - SetHTMLBoolAttr(nsGkAtoms::scoped, aScoped, aError); - } - - virtual JSObject* WrapNode(JSContext *aCx, JSObject *aScope, - bool *aTriedToWrap); - - 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 d9af032f895b..1ace73911d27 100644 --- a/content/html/content/src/Makefile.in +++ b/content/html/content/src/Makefile.in @@ -45,7 +45,6 @@ EXPORTS_mozilla/dom = \ HTMLScriptElement.h \ HTMLSharedListElement.h \ HTMLSpanElement.h \ - HTMLStyleElement.h \ HTMLTableCaptionElement.h \ HTMLTableCellElement.h \ HTMLTableColElement.h \ @@ -108,7 +107,7 @@ CPPSRCS = \ nsHTMLSharedElement.cpp \ HTMLSpanElement.cpp \ HTMLSharedListElement.cpp \ - HTMLStyleElement.cpp \ + nsHTMLStyleElement.cpp \ HTMLTableElement.cpp \ HTMLTableCaptionElement.cpp \ HTMLTableCellElement.cpp \ diff --git a/content/html/content/src/nsHTMLLinkElement.cpp b/content/html/content/src/nsHTMLLinkElement.cpp index 9ab72f07a216..54f1a8f5c6bc 100644 --- a/content/html/content/src/nsHTMLLinkElement.cpp +++ b/content/html/content/src/nsHTMLLinkElement.cpp @@ -159,7 +159,7 @@ NS_IMPL_ELEMENT_CLONE(nsHTMLLinkElement) NS_IMETHODIMP nsHTMLLinkElement::GetDisabled(bool* aDisabled) { - nsCOMPtr ss = do_QueryInterface(GetSheet()); + nsCOMPtr ss = do_QueryInterface(GetStyleSheet()); nsresult result = NS_OK; if (ss) { @@ -174,7 +174,7 @@ nsHTMLLinkElement::GetDisabled(bool* aDisabled) NS_IMETHODIMP nsHTMLLinkElement::SetDisabled(bool aDisabled) { - nsCOMPtr ss = do_QueryInterface(GetSheet()); + nsCOMPtr ss = do_QueryInterface(GetStyleSheet()); nsresult result = NS_OK; if (ss) { @@ -332,7 +332,7 @@ nsHTMLLinkElement::SetAttr(int32_t aNameSpaceID, nsIAtom* aName, aName == nsGkAtoms::media || aName == nsGkAtoms::type)) { bool dropSheet = false; - if (aName == nsGkAtoms::rel && GetSheet()) { + if (aName == nsGkAtoms::rel && GetStyleSheet()) { uint32_t linkTypes = nsStyleLinkElement::ParseLinkTypes(aValue); dropSheet = !(linkTypes & STYLESHEET); } diff --git a/content/html/content/src/nsHTMLStyleElement.cpp b/content/html/content/src/nsHTMLStyleElement.cpp new file mode 100644 index 000000000000..a420f6b725d8 --- /dev/null +++ b/content/html/content/src/nsHTMLStyleElement.cpp @@ -0,0 +1,340 @@ +/* -*- 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"); +} diff --git a/content/xml/content/src/XMLStylesheetProcessingInstruction.h b/content/xml/content/src/XMLStylesheetProcessingInstruction.h index 54dc327e24ed..58a520088af8 100644 --- a/content/xml/content/src/XMLStylesheetProcessingInstruction.h +++ b/content/xml/content/src/XMLStylesheetProcessingInstruction.h @@ -33,6 +33,12 @@ public: NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(XMLStylesheetProcessingInstruction, ProcessingInstruction) + using nsStyleLinkElement::GetSheet; + nsIStyleSheet* GetSheet() + { + return GetStyleSheet(); + } + // nsIDOMNode virtual void SetNodeValueInternal(const nsAString& aNodeValue, mozilla::ErrorResult& aError); diff --git a/dom/bindings/Bindings.conf b/dom/bindings/Bindings.conf index bbad212b3201..cb2bbee843f4 100644 --- a/dom/bindings/Bindings.conf +++ b/dom/bindings/Bindings.conf @@ -475,13 +475,6 @@ DOMInterfaces = { ] }, -'HTMLStyleElement': { - 'hasInstanceInterface': 'nsIDOMHTMLStyleElement', - 'resultNotAddRefed': [ - 'sheet' - ] -}, - 'HTMLUListElement': { 'headerFile' : 'mozilla/dom/HTMLSharedListElement.h' }, diff --git a/dom/webidl/HTMLStyleElement.webidl b/dom/webidl/HTMLStyleElement.webidl deleted file mode 100644 index 29361ca51746..000000000000 --- a/dom/webidl/HTMLStyleElement.webidl +++ /dev/null @@ -1,22 +0,0 @@ -/* -*- Mode: IDL; 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/. - * - * The origin of this IDL file is - * http://www.whatwg.org/specs/web-apps/current-work/#the-style-element - * http://www.whatwg.org/specs/web-apps/current-work/#other-elements,-attributes-and-apis - */ - -interface HTMLStyleElement : HTMLElement { - [SetterThrows] - attribute boolean disabled; - [SetterThrows] - attribute DOMString media; - [SetterThrows] - attribute DOMString type; - [SetterThrows] - attribute boolean scoped; -}; -HTMLStyleElement implements LinkStyle; - diff --git a/dom/webidl/LinkStyle.webidl b/dom/webidl/LinkStyle.webidl deleted file mode 100644 index db0bc031adde..000000000000 --- a/dom/webidl/LinkStyle.webidl +++ /dev/null @@ -1,14 +0,0 @@ -/* -*- Mode: IDL; 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/. - * - * The origin of this IDL file is - * http://dev.w3.org/csswg/cssom/#the-linkstyle-interface - */ - -[NoInterfaceObject] -interface LinkStyle { - readonly attribute StyleSheet? sheet; -}; - diff --git a/dom/webidl/WebIDL.mk b/dom/webidl/WebIDL.mk index e6b09d0f2923..e40ee9850dba 100644 --- a/dom/webidl/WebIDL.mk +++ b/dom/webidl/WebIDL.mk @@ -76,7 +76,6 @@ webidl_files = \ HTMLPropertiesCollection.webidl \ HTMLScriptElement.webidl \ HTMLSpanElement.webidl \ - HTMLStyleElement.webidl \ HTMLTableCaptionElement.webidl \ HTMLTableCellElement.webidl \ HTMLTableColElement.webidl \ @@ -86,7 +85,6 @@ webidl_files = \ HTMLTitleElement.webidl \ HTMLUListElement.webidl \ ImageData.webidl \ - LinkStyle.webidl \ Location.webidl \ MutationObserver.webidl \ Node.webidl \