diff --git a/dom/base/nsDOMClassInfo.cpp b/dom/base/nsDOMClassInfo.cpp index 1ff1305069e9..92b170b7ad05 100644 --- a/dom/base/nsDOMClassInfo.cpp +++ b/dom/base/nsDOMClassInfo.cpp @@ -69,10 +69,21 @@ #include "nsIDOMEventTarget.h" // CSS related includes +#include "nsCSSRules.h" #include "nsIDOMCSSRule.h" #include "nsMemory.h" // includes needed for the prototype chain interfaces +#include "nsIDOMCSSKeyframeRule.h" +#include "nsIDOMCSSKeyframesRule.h" +#include "nsIDOMCSSImportRule.h" +#include "nsIDOMCSSMediaRule.h" +#include "nsIDOMCSSFontFaceRule.h" +#include "nsIDOMCSSMozDocumentRule.h" +#include "nsIDOMCSSSupportsRule.h" +#include "nsIDOMCSSCounterStyleRule.h" +#include "nsIDOMCSSPageRule.h" +#include "nsIDOMCSSStyleRule.h" #include "nsIDOMXULCommandDispatcher.h" #include "nsIControllers.h" #ifdef MOZ_XUL @@ -178,6 +189,16 @@ static nsDOMClassInfoData sClassInfoData[] = { // Misc Core related classes + // CSS classes + NS_DEFINE_CLASSINFO_DATA(CSSStyleRule, nsDOMGenericSH, + DOM_DEFAULT_SCRIPTABLE_FLAGS) + NS_DEFINE_CLASSINFO_DATA(CSSImportRule, nsDOMGenericSH, + DOM_DEFAULT_SCRIPTABLE_FLAGS) + NS_DEFINE_CLASSINFO_DATA(CSSMediaRule, nsDOMGenericSH, + DOM_DEFAULT_SCRIPTABLE_FLAGS) + NS_DEFINE_CLASSINFO_DATA(CSSNameSpaceRule, nsDOMGenericSH, + DOM_DEFAULT_SCRIPTABLE_FLAGS) + // XUL classes #ifdef MOZ_XUL NS_DEFINE_CHROME_XBL_CLASSINFO_DATA(XULCommandDispatcher, nsDOMGenericSH, @@ -200,6 +221,15 @@ static nsDOMClassInfoData sClassInfoData[] = { DEFAULT_SCRIPTABLE_FLAGS) #endif + NS_DEFINE_CLASSINFO_DATA(CSSMozDocumentRule, nsDOMGenericSH, + DOM_DEFAULT_SCRIPTABLE_FLAGS) + + NS_DEFINE_CLASSINFO_DATA(CSSSupportsRule, nsDOMGenericSH, + DOM_DEFAULT_SCRIPTABLE_FLAGS) + + NS_DEFINE_CLASSINFO_DATA(CSSFontFaceRule, nsDOMGenericSH, + DOM_DEFAULT_SCRIPTABLE_FLAGS) + NS_DEFINE_CHROME_ONLY_CLASSINFO_DATA(ContentFrameMessageManager, nsMessageManagerSH, DOM_DEFAULT_SCRIPTABLE_FLAGS | @@ -216,6 +246,20 @@ static nsDOMClassInfoData sClassInfoData[] = { DOM_DEFAULT_SCRIPTABLE_FLAGS) + NS_DEFINE_CLASSINFO_DATA(CSSKeyframeRule, nsDOMGenericSH, + DOM_DEFAULT_SCRIPTABLE_FLAGS) + NS_DEFINE_CLASSINFO_DATA(CSSKeyframesRule, nsDOMGenericSH, + DOM_DEFAULT_SCRIPTABLE_FLAGS) + + NS_DEFINE_CLASSINFO_DATA(CSSCounterStyleRule, nsDOMGenericSH, + DOM_DEFAULT_SCRIPTABLE_FLAGS) + + NS_DEFINE_CLASSINFO_DATA(CSSPageRule, nsDOMGenericSH, + DOM_DEFAULT_SCRIPTABLE_FLAGS) + + NS_DEFINE_CLASSINFO_DATA(CSSFontFeatureValuesRule, nsDOMGenericSH, + DOM_DEFAULT_SCRIPTABLE_FLAGS) + NS_DEFINE_CHROME_XBL_CLASSINFO_DATA(XULControlElement, nsDOMGenericSH, DOM_DEFAULT_SCRIPTABLE_FLAGS) NS_DEFINE_CHROME_XBL_CLASSINFO_DATA(XULLabeledControlElement, nsDOMGenericSH, @@ -468,6 +512,22 @@ nsDOMClassInfo::Init() DOM_CLASSINFO_MAP_ENTRY(nsIDOMDOMConstructor) DOM_CLASSINFO_MAP_END + DOM_CLASSINFO_MAP_BEGIN(CSSStyleRule, nsIDOMCSSStyleRule) + DOM_CLASSINFO_MAP_ENTRY(nsIDOMCSSStyleRule) + DOM_CLASSINFO_MAP_END + + DOM_CLASSINFO_MAP_BEGIN(CSSImportRule, nsIDOMCSSImportRule) + DOM_CLASSINFO_MAP_ENTRY(nsIDOMCSSImportRule) + DOM_CLASSINFO_MAP_END + + DOM_CLASSINFO_MAP_BEGIN(CSSMediaRule, nsIDOMCSSMediaRule) + DOM_CLASSINFO_MAP_ENTRY(nsIDOMCSSMediaRule) + DOM_CLASSINFO_MAP_END + + DOM_CLASSINFO_MAP_BEGIN_NO_CLASS_IF(CSSNameSpaceRule, nsIDOMCSSRule) + DOM_CLASSINFO_MAP_ENTRY(nsIDOMCSSRule) + DOM_CLASSINFO_MAP_END + #ifdef MOZ_XUL DOM_CLASSINFO_MAP_BEGIN(XULCommandDispatcher, nsIDOMXULCommandDispatcher) DOM_CLASSINFO_MAP_ENTRY(nsIDOMXULCommandDispatcher) @@ -501,6 +561,18 @@ nsDOMClassInfo::Init() DOM_CLASSINFO_MAP_END #endif + DOM_CLASSINFO_MAP_BEGIN(CSSMozDocumentRule, nsIDOMCSSMozDocumentRule) + DOM_CLASSINFO_MAP_ENTRY(nsIDOMCSSMozDocumentRule) + DOM_CLASSINFO_MAP_END + + DOM_CLASSINFO_MAP_BEGIN(CSSSupportsRule, nsIDOMCSSSupportsRule) + DOM_CLASSINFO_MAP_ENTRY(nsIDOMCSSSupportsRule) + DOM_CLASSINFO_MAP_END + + DOM_CLASSINFO_MAP_BEGIN(CSSFontFaceRule, nsIDOMCSSFontFaceRule) + DOM_CLASSINFO_MAP_ENTRY(nsIDOMCSSFontFaceRule) + DOM_CLASSINFO_MAP_END + DOM_CLASSINFO_MAP_BEGIN_NO_CLASS_IF(ContentFrameMessageManager, nsISupports) DOM_CLASSINFO_MAP_ENTRY(nsIDOMEventTarget) DOM_CLASSINFO_MAP_ENTRY(nsIMessageListenerManager) @@ -531,6 +603,26 @@ nsDOMClassInfo::Init() DOM_CLASSINFO_MAP_ENTRY(nsIMessageSender) DOM_CLASSINFO_MAP_END + DOM_CLASSINFO_MAP_BEGIN(CSSKeyframeRule, nsIDOMCSSKeyframeRule) + DOM_CLASSINFO_MAP_ENTRY(nsIDOMCSSKeyframeRule) + DOM_CLASSINFO_MAP_END + + DOM_CLASSINFO_MAP_BEGIN(CSSKeyframesRule, nsIDOMCSSKeyframesRule) + DOM_CLASSINFO_MAP_ENTRY(nsIDOMCSSKeyframesRule) + DOM_CLASSINFO_MAP_END + + DOM_CLASSINFO_MAP_BEGIN(CSSCounterStyleRule, nsIDOMCSSCounterStyleRule) + DOM_CLASSINFO_MAP_ENTRY(nsIDOMCSSCounterStyleRule) + DOM_CLASSINFO_MAP_END + + DOM_CLASSINFO_MAP_BEGIN(CSSPageRule, nsIDOMCSSPageRule) + DOM_CLASSINFO_MAP_ENTRY(nsIDOMCSSPageRule) + DOM_CLASSINFO_MAP_END + + DOM_CLASSINFO_MAP_BEGIN(CSSFontFeatureValuesRule, nsIDOMCSSFontFeatureValuesRule) + DOM_CLASSINFO_MAP_ENTRY(nsIDOMCSSFontFeatureValuesRule) + DOM_CLASSINFO_MAP_END + DOM_CLASSINFO_MAP_BEGIN_NO_CLASS_IF(XULControlElement, nsIDOMXULControlElement) DOM_CLASSINFO_MAP_ENTRY(nsIDOMXULControlElement) DOM_CLASSINFO_MAP_END diff --git a/dom/base/nsDOMClassInfoID.h b/dom/base/nsDOMClassInfoID.h index 654cee2a0b86..8a71ae209086 100644 --- a/dom/base/nsDOMClassInfoID.h +++ b/dom/base/nsDOMClassInfoID.h @@ -19,6 +19,12 @@ enum nsDOMClassInfoID eDOMClassInfo_DOMPrototype_id, eDOMClassInfo_DOMConstructor_id, + // CSS classes + eDOMClassInfo_CSSStyleRule_id, + eDOMClassInfo_CSSImportRule_id, + eDOMClassInfo_CSSMediaRule_id, + eDOMClassInfo_CSSNameSpaceRule_id, + // XUL classes #ifdef MOZ_XUL eDOMClassInfo_XULCommandDispatcher_id, @@ -34,11 +40,27 @@ enum nsDOMClassInfoID eDOMClassInfo_XULTreeBuilder_id, #endif + eDOMClassInfo_CSSMozDocumentRule_id, + eDOMClassInfo_CSSSupportsRule_id, + + // @font-face in CSS + eDOMClassInfo_CSSFontFaceRule_id, + eDOMClassInfo_ContentFrameMessageManager_id, eDOMClassInfo_ContentProcessMessageManager_id, eDOMClassInfo_ChromeMessageBroadcaster_id, eDOMClassInfo_ChromeMessageSender_id, + eDOMClassInfo_CSSKeyframeRule_id, + eDOMClassInfo_CSSKeyframesRule_id, + + // @counter-style in CSS + eDOMClassInfo_CSSCounterStyleRule_id, + + eDOMClassInfo_CSSPageRule_id, + + eDOMClassInfo_CSSFontFeatureValuesRule_id, + eDOMClassInfo_XULControlElement_id, eDOMClassInfo_XULLabeledControlElement_id, eDOMClassInfo_XULButtonElement_id, diff --git a/dom/base/nsDocument.cpp b/dom/base/nsDocument.cpp index 20bef0c3bdac..5f3eb7d8670d 100644 --- a/dom/base/nsDocument.cpp +++ b/dom/base/nsDocument.cpp @@ -5180,7 +5180,7 @@ nsDocument::StyleRuleChanged(StyleSheet* aSheet, DO_STYLESHEET_NOTIFICATION(StyleRuleChangeEvent, "StyleRuleChanged", mRule, - aStyleRule); + aStyleRule ? aStyleRule->GetDOMRule() : nullptr); } } @@ -5194,7 +5194,8 @@ nsDocument::StyleRuleAdded(StyleSheet* aSheet, DO_STYLESHEET_NOTIFICATION(StyleRuleChangeEvent, "StyleRuleAdded", mRule, - aStyleRule); + aStyleRule ? aStyleRule->GetDOMRule() + : nullptr); } } @@ -5208,7 +5209,8 @@ nsDocument::StyleRuleRemoved(StyleSheet* aSheet, DO_STYLESHEET_NOTIFICATION(StyleRuleChangeEvent, "StyleRuleRemoved", mRule, - aStyleRule); + aStyleRule ? aStyleRule->GetDOMRule() + : nullptr); } } diff --git a/dom/base/nsWrapperCache.h b/dom/base/nsWrapperCache.h index 3681fec0640d..56cae89edb8f 100644 --- a/dom/base/nsWrapperCache.h +++ b/dom/base/nsWrapperCache.h @@ -272,9 +272,6 @@ protected: } private: - // Friend declarations for things that need to be able to call - // SetIsNotDOMBinding(). The goal is to get rid of all of these, and - // SetIsNotDOMBinding() too. friend class mozilla::dom::TabChildGlobal; friend class mozilla::dom::ProcessGlobal; friend class SandboxPrivate; diff --git a/dom/bindings/Bindings.conf b/dom/bindings/Bindings.conf index 6529f5a6ae48..a30617fdb40b 100644 --- a/dom/bindings/Bindings.conf +++ b/dom/bindings/Bindings.conf @@ -196,96 +196,23 @@ DOMInterfaces = { 'nativeType': 'nsDOMCSSDeclaration' }, -'CSSConditionRule': { - 'concrete': False, - 'nativeType': 'mozilla::css::ConditionRule', - 'headerFile': 'mozilla/css/GroupRule.h', -}, - -'CSSCounterStyleRule': { - 'nativeType': 'nsCSSCounterStyleRule', - 'headerFile': 'nsCSSRules.h', -}, - -'CSSFontFaceRule': { - 'nativeType': 'nsCSSFontFaceRule', - 'headerFile': 'nsCSSRules.h', -}, - -'CSSFontFeatureValuesRule': { - 'nativeType': 'nsCSSFontFeatureValuesRule', - 'headerFile': 'nsCSSRules.h', -}, - -'CSSGroupingRule': { - 'concrete': False, - 'nativeType': 'mozilla::css::GroupRule', -}, - -'CSSImportRule': { - 'nativeType': 'mozilla::css::ImportRule', -}, - -'CSSKeyframeRule': { - 'nativeType': 'nsCSSKeyframeRule', - 'headerFile': 'nsCSSRules.h', -}, - -'CSSKeyframesRule': { - 'nativeType': 'nsCSSKeyframesRule', - 'headerFile': 'nsCSSRules.h', -}, - 'CSSLexer': { 'wrapperCache': False }, -'CSSMediaRule': { - 'nativeType': 'mozilla::css::MediaRule', - 'headerFile': 'nsCSSRules.h', -}, - -'CSSMozDocumentRule': { - 'nativeType': 'mozilla::css::DocumentRule', - 'headerFile': 'nsCSSRules.h', -}, - -'CSSNamespaceRule': { - 'nativeType': 'mozilla::css::NameSpaceRule', -}, - -'CSSPageRule': { - 'nativeType': 'nsCSSPageRule', - 'headerFile': 'nsCSSRules.h', -}, - 'CSSPrimitiveValue': { 'nativeType': 'nsROCSSPrimitiveValue', }, -'CSSRule': { - 'concrete': False, - 'nativeType': 'mozilla::css::Rule' -}, - 'CSSStyleDeclaration': { 'nativeType': 'nsICSSDeclaration' }, -'CSSStyleRule': { - 'nativeType': 'mozilla::BindingStyleRule', -}, - 'CSSStyleSheet': { 'nativeType': 'mozilla::StyleSheet', 'binaryNames': { 'ownerRule': 'DOMOwnerRule' }, }, -'CSSSupportsRule': { - 'nativeType': 'mozilla::CSSSupportsRule', - 'headerFile': 'nsCSSRules.h', -}, - 'CSSValue': { 'concrete': False }, @@ -1733,6 +1660,7 @@ def addExternalIface(iface, nativeType=None, headerFile=None, addExternalIface('ApplicationCache', nativeType='nsIDOMOfflineResourceList') addExternalIface('Counter') +addExternalIface('CSSRule') addExternalIface('RTCDataChannel', nativeType='nsIDOMDataChannel') addExternalIface('HitRegionOptions', nativeType='nsISupports') addExternalIface('imgINotificationObserver', nativeType='imgINotificationObserver') diff --git a/dom/interfaces/css/nsIDOMCSSCounterStyleRule.idl b/dom/interfaces/css/nsIDOMCSSCounterStyleRule.idl index 412ddfffcc9d..0831b2238d87 100644 --- a/dom/interfaces/css/nsIDOMCSSCounterStyleRule.idl +++ b/dom/interfaces/css/nsIDOMCSSCounterStyleRule.idl @@ -4,10 +4,10 @@ * 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 "nsISupports.idl" +#include "nsIDOMCSSRule.idl" [scriptable, uuid(9b5e48ce-d84c-4e31-aff5-34e9f4141313)] -interface nsIDOMCSSCounterStyleRule : nsISupports +interface nsIDOMCSSCounterStyleRule : nsIDOMCSSRule { attribute DOMString name; attribute DOMString system; diff --git a/dom/interfaces/css/nsIDOMCSSFontFaceRule.idl b/dom/interfaces/css/nsIDOMCSSFontFaceRule.idl index 06a58bb834c0..18ca669f43f1 100644 --- a/dom/interfaces/css/nsIDOMCSSFontFaceRule.idl +++ b/dom/interfaces/css/nsIDOMCSSFontFaceRule.idl @@ -3,12 +3,10 @@ * 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 "nsISupports.idl" - -interface nsIDOMCSSStyleDeclaration; +#include "nsIDOMCSSRule.idl" [scriptable, uuid(db971017-fe0c-4529-972c-8217f2fee217)] -interface nsIDOMCSSFontFaceRule : nsISupports +interface nsIDOMCSSFontFaceRule : nsIDOMCSSRule { readonly attribute nsIDOMCSSStyleDeclaration style; }; diff --git a/dom/interfaces/css/nsIDOMCSSFontFeatureValuesRule.idl b/dom/interfaces/css/nsIDOMCSSFontFeatureValuesRule.idl index 1e782c07db6e..1b04dde86f5e 100644 --- a/dom/interfaces/css/nsIDOMCSSFontFeatureValuesRule.idl +++ b/dom/interfaces/css/nsIDOMCSSFontFeatureValuesRule.idl @@ -3,10 +3,10 @@ * 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 "nsISupports.idl" +#include "nsIDOMCSSRule.idl" [scriptable, uuid(a343d27f-1da6-4fc3-9355-d4ca434f958e)] -interface nsIDOMCSSFontFeatureValuesRule : nsISupports +interface nsIDOMCSSFontFeatureValuesRule : nsIDOMCSSRule { attribute DOMString fontFamily; // raises(DOMException) on setting diff --git a/dom/interfaces/css/nsIDOMCSSGroupingRule.idl b/dom/interfaces/css/nsIDOMCSSGroupingRule.idl index 593da61524c3..80f072d160cb 100644 --- a/dom/interfaces/css/nsIDOMCSSGroupingRule.idl +++ b/dom/interfaces/css/nsIDOMCSSGroupingRule.idl @@ -3,15 +3,13 @@ * 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 "nsISupports.idl" - -interface nsIDOMCSSRuleList; +#include "nsIDOMCSSRule.idl" /** * Interface for at-rules that have child rules in the CSS OM. */ [scriptable, uuid(a0e3324a-f911-4baf-9591-5322c76cbb0d)] -interface nsIDOMCSSGroupingRule : nsISupports +interface nsIDOMCSSGroupingRule : nsIDOMCSSRule { readonly attribute nsIDOMCSSRuleList cssRules; diff --git a/dom/interfaces/css/nsIDOMCSSImportRule.idl b/dom/interfaces/css/nsIDOMCSSImportRule.idl index fc96977d9188..0909d92212ba 100644 --- a/dom/interfaces/css/nsIDOMCSSImportRule.idl +++ b/dom/interfaces/css/nsIDOMCSSImportRule.idl @@ -3,13 +3,10 @@ * 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 "nsISupports.idl" - -interface nsIDOMMediaList; -interface nsIDOMCSSStyleSheet; +#include "nsIDOMCSSRule.idl" [scriptable, uuid(d3b2b914-01ef-4663-beda-a6475a26f491)] -interface nsIDOMCSSImportRule : nsISupports +interface nsIDOMCSSImportRule : nsIDOMCSSRule { readonly attribute DOMString href; readonly attribute nsIDOMMediaList media; diff --git a/dom/interfaces/css/nsIDOMCSSKeyframeRule.idl b/dom/interfaces/css/nsIDOMCSSKeyframeRule.idl index 0027be2d2919..46e7ffbb1004 100644 --- a/dom/interfaces/css/nsIDOMCSSKeyframeRule.idl +++ b/dom/interfaces/css/nsIDOMCSSKeyframeRule.idl @@ -3,12 +3,10 @@ * 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 "nsISupports.idl" - -interface nsIDOMCSSStyleDeclaration; +#include "nsIDOMCSSRule.idl" [scriptable, uuid(a281a8b4-eaa2-49a8-8b97-acc2814a57c9)] -interface nsIDOMCSSKeyframeRule : nsISupports +interface nsIDOMCSSKeyframeRule : nsIDOMCSSRule { attribute DOMString keyText; readonly attribute nsIDOMCSSStyleDeclaration style; diff --git a/dom/interfaces/css/nsIDOMCSSKeyframesRule.idl b/dom/interfaces/css/nsIDOMCSSKeyframesRule.idl index 0e2d3bc4f2dd..acbb657e47d6 100644 --- a/dom/interfaces/css/nsIDOMCSSKeyframesRule.idl +++ b/dom/interfaces/css/nsIDOMCSSKeyframesRule.idl @@ -3,13 +3,10 @@ * 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 "nsISupports.idl" - -interface nsIDOMCSSRuleList; -interface nsIDOMCSSKeyframeRule; +#include "nsIDOMCSSRule.idl" [scriptable, uuid(400f4b70-ad0a-4047-aba4-ee8019f6b907)] -interface nsIDOMCSSKeyframesRule : nsISupports +interface nsIDOMCSSKeyframesRule : nsIDOMCSSRule { attribute DOMString name; readonly attribute nsIDOMCSSRuleList cssRules; diff --git a/dom/interfaces/css/nsIDOMCSSMediaRule.idl b/dom/interfaces/css/nsIDOMCSSMediaRule.idl index e292e2485fc3..9be4ba143a0c 100644 --- a/dom/interfaces/css/nsIDOMCSSMediaRule.idl +++ b/dom/interfaces/css/nsIDOMCSSMediaRule.idl @@ -5,8 +5,6 @@ #include "nsIDOMCSSConditionRule.idl" -interface nsIDOMMediaList; - /** * Interface for @media rules in the CSS OM. */ diff --git a/dom/interfaces/css/nsIDOMCSSPageRule.idl b/dom/interfaces/css/nsIDOMCSSPageRule.idl index a7efb5044add..e586a0dbb3fc 100644 --- a/dom/interfaces/css/nsIDOMCSSPageRule.idl +++ b/dom/interfaces/css/nsIDOMCSSPageRule.idl @@ -3,12 +3,10 @@ * 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 "nsISupports.idl" - -interface nsIDOMCSSStyleDeclaration; +#include "nsIDOMCSSRule.idl" [scriptable, uuid(c119072b-7d2f-4aeb-a90d-e2d6b606c32a)] -interface nsIDOMCSSPageRule : nsISupports +interface nsIDOMCSSPageRule : nsIDOMCSSRule { //attribute DOMString selectorText; // raises(DOMException) on setting diff --git a/dom/interfaces/css/nsIDOMCSSStyleRule.idl b/dom/interfaces/css/nsIDOMCSSStyleRule.idl index 39b3efaf0cb3..d94d22d93e0d 100644 --- a/dom/interfaces/css/nsIDOMCSSStyleRule.idl +++ b/dom/interfaces/css/nsIDOMCSSStyleRule.idl @@ -3,12 +3,10 @@ * 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 "nsISupports.idl" - -interface nsIDOMCSSStyleDeclaration; +#include "nsIDOMCSSRule.idl" [scriptable, uuid(b5e9af48-a7c2-4f88-aae3-58307af4b5a5)] -interface nsIDOMCSSStyleRule : nsISupports +interface nsIDOMCSSStyleRule : nsIDOMCSSRule { attribute DOMString selectorText; // raises(DOMException) on setting diff --git a/dom/interfaces/css/nsIDOMCSSUnknownRule.idl b/dom/interfaces/css/nsIDOMCSSUnknownRule.idl index 87546d63b51b..6dfb5ec69a2e 100644 --- a/dom/interfaces/css/nsIDOMCSSUnknownRule.idl +++ b/dom/interfaces/css/nsIDOMCSSUnknownRule.idl @@ -3,9 +3,9 @@ * 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 "nsISupports.idl" +#include "nsIDOMCSSRule.idl" [scriptable, uuid(98f4c27b-fb35-4355-8fd9-546c4697d71a)] -interface nsIDOMCSSUnknownRule : nsISupports +interface nsIDOMCSSUnknownRule : nsIDOMCSSRule { }; diff --git a/dom/media/webaudio/AudioBuffer.h b/dom/media/webaudio/AudioBuffer.h index 4d6f468e58d6..35627d7a1cbf 100644 --- a/dom/media/webaudio/AudioBuffer.h +++ b/dom/media/webaudio/AudioBuffer.h @@ -15,7 +15,6 @@ #include "nsTArray.h" #include "js/TypeDecls.h" #include "mozilla/MemoryReporting.h" -#include "mozilla/dom/TypedArray.h" namespace mozilla { diff --git a/dom/tests/mochitest/general/test_interfaces.html b/dom/tests/mochitest/general/test_interfaces.html index 22115cd6c429..0d51a2e628d2 100644 --- a/dom/tests/mochitest/general/test_interfaces.html +++ b/dom/tests/mochitest/general/test_interfaces.html @@ -249,7 +249,7 @@ var interfaceNamesInGlobalScope = // IMPORTANT: Do not change this list without review from a DOM peer! "CSSMozDocumentRule", // IMPORTANT: Do not change this list without review from a DOM peer! - "CSSNamespaceRule", + "CSSNameSpaceRule", // IMPORTANT: Do not change this list without review from a DOM peer! "CSSPageRule", // IMPORTANT: Do not change this list without review from a DOM peer! diff --git a/dom/webidl/CSSConditionRule.webidl b/dom/webidl/CSSConditionRule.webidl deleted file mode 100644 index 24fae2343c73..000000000000 --- a/dom/webidl/CSSConditionRule.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 - * https://drafts.csswg.org/css-conditional/#the-cssconditionrule-interface - */ - -// https://drafts.csswg.org/css-conditional/#the-cssconditionrule-interface -interface CSSConditionRule : CSSGroupingRule { - [SetterThrows] - attribute DOMString conditionText; -}; diff --git a/dom/webidl/CSSCounterStyleRule.webidl b/dom/webidl/CSSCounterStyleRule.webidl deleted file mode 100644 index bb6f7e0e1b8d..000000000000 --- a/dom/webidl/CSSCounterStyleRule.webidl +++ /dev/null @@ -1,23 +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 - * https://drafts.csswg.org/css-counter-styles-3/#the-csscounterstylerule-interface - */ - -// https://drafts.csswg.org/css-counter-styles-3/#the-csscounterstylerule-interface -interface CSSCounterStyleRule : CSSRule { - attribute DOMString name; - attribute DOMString system; - attribute DOMString symbols; - attribute DOMString additiveSymbols; - attribute DOMString negative; - attribute DOMString prefix; - attribute DOMString suffix; - attribute DOMString range; - attribute DOMString pad; - attribute DOMString speakAs; - attribute DOMString fallback; -}; diff --git a/dom/webidl/CSSFontFaceRule.webidl b/dom/webidl/CSSFontFaceRule.webidl deleted file mode 100644 index 221dd26aec20..000000000000 --- a/dom/webidl/CSSFontFaceRule.webidl +++ /dev/null @@ -1,15 +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 - * https://drafts.csswg.org/css-fonts/#om-fontface - */ - -// https://drafts.csswg.org/css-fonts/#om-fontface -// But we implement a very old draft, apparently.... -// See bug 1058408 for implementing the current spec. -interface CSSFontFaceRule : CSSRule { - [SameObject] readonly attribute CSSStyleDeclaration style; -}; diff --git a/dom/webidl/CSSFontFeatureValuesRule.webidl b/dom/webidl/CSSFontFeatureValuesRule.webidl deleted file mode 100644 index 7532938141ea..000000000000 --- a/dom/webidl/CSSFontFeatureValuesRule.webidl +++ /dev/null @@ -1,29 +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 - * https://drafts.csswg.org/css-fonts/#om-fontfeaturevalues - */ - -// https://drafts.csswg.org/css-fonts/#om-fontfeaturevalues -// but we don't implement anything remotely resembling the spec. -interface CSSFontFeatureValuesRule : CSSRule { - [SetterThrows] - attribute DOMString fontFamily; - - // Not yet implemented - // readonly attribute CSSFontFeatureValuesMap annotation; - // readonly attribute CSSFontFeatureValuesMap ornaments; - // readonly attribute CSSFontFeatureValuesMap stylistic; - // readonly attribute CSSFontFeatureValuesMap swash; - // readonly attribute CSSFontFeatureValuesMap characterVariant; - // readonly attribute CSSFontFeatureValuesMap styleset; -}; - -partial interface CSSFontFeatureValuesRule { - // Gecko addition? - [SetterThrows] - attribute DOMString valueText; -}; diff --git a/dom/webidl/CSSGroupingRule.webidl b/dom/webidl/CSSGroupingRule.webidl deleted file mode 100644 index bc1023fe2006..000000000000 --- a/dom/webidl/CSSGroupingRule.webidl +++ /dev/null @@ -1,17 +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 - * https://drafts.csswg.org/cssom/#cssgroupingrule - */ - -// https://drafts.csswg.org/cssom/#cssgroupingrule -interface CSSGroupingRule : CSSRule { - [SameObject] readonly attribute CSSRuleList cssRules; - [Throws] - unsigned long insertRule(DOMString rule, unsigned long index); - [Throws] - void deleteRule(unsigned long index); -}; diff --git a/dom/webidl/CSSImportRule.webidl b/dom/webidl/CSSImportRule.webidl deleted file mode 100644 index 7d3f17c79483..000000000000 --- a/dom/webidl/CSSImportRule.webidl +++ /dev/null @@ -1,17 +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 - * https://drafts.csswg.org/cssom/#cssimportrule - */ - -// https://drafts.csswg.org/cssom/#cssimportrule -interface CSSImportRule : CSSRule { - readonly attribute DOMString href; - [SameObject, PutForwards=mediaText] readonly attribute MediaList media; - // Per spec, the .styleSheet is never null, but in our implementation it can - // be. See . - [SameObject] readonly attribute CSSStyleSheet? styleSheet; -}; diff --git a/dom/webidl/CSSKeyframeRule.webidl b/dom/webidl/CSSKeyframeRule.webidl deleted file mode 100644 index 25d8965f2a5d..000000000000 --- a/dom/webidl/CSSKeyframeRule.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 - * https://drafts.csswg.org/css-animations/#interface-csskeyframerule - */ - -// https://drafts.csswg.org/css-animations/#interface-csskeyframerule -interface CSSKeyframeRule : CSSRule { - attribute DOMString keyText; - readonly attribute CSSStyleDeclaration style; -}; diff --git a/dom/webidl/CSSKeyframesRule.webidl b/dom/webidl/CSSKeyframesRule.webidl deleted file mode 100644 index d0ea978d0384..000000000000 --- a/dom/webidl/CSSKeyframesRule.webidl +++ /dev/null @@ -1,18 +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 - * https://drafts.csswg.org/css-animations/#interface-csskeyframesrule - */ - -// https://drafts.csswg.org/css-animations/#interface-csskeyframesrule -interface CSSKeyframesRule : CSSRule { - attribute DOMString name; - readonly attribute CSSRuleList cssRules; - - void appendRule(DOMString rule); - void deleteRule(DOMString select); - CSSKeyframeRule? findRule(DOMString select); -}; diff --git a/dom/webidl/CSSMediaRule.webidl b/dom/webidl/CSSMediaRule.webidl deleted file mode 100644 index 841a1b6f6b0e..000000000000 --- a/dom/webidl/CSSMediaRule.webidl +++ /dev/null @@ -1,17 +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 - * https://drafts.csswg.org/cssom/#the-cssmediarule-interface - * https://drafts.csswg.org/css-conditional/#the-cssmediarule-interface - */ - -// https://drafts.csswg.org/cssom/#the-cssmediarule-interface and -// https://drafts.csswg.org/css-conditional/#the-cssmediarule-interface -// except they disagree with each other. We're taking the inheritance from -// css-conditional and the PutForwards behavior from cssom. -interface CSSMediaRule : CSSConditionRule { - [SameObject, PutForwards=mediaText] readonly attribute MediaList media; -}; diff --git a/dom/webidl/CSSMozDocumentRule.webidl b/dom/webidl/CSSMozDocumentRule.webidl deleted file mode 100644 index 27a22d52c73d..000000000000 --- a/dom/webidl/CSSMozDocumentRule.webidl +++ /dev/null @@ -1,10 +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/. - */ - -// This is a non-standard interface for @-moz-document rules -interface CSSMozDocumentRule : CSSConditionRule { - // XXX Add access to the URL list. -}; diff --git a/dom/webidl/CSSNamespaceRule.webidl b/dom/webidl/CSSNamespaceRule.webidl deleted file mode 100644 index 0051c904a72d..000000000000 --- a/dom/webidl/CSSNamespaceRule.webidl +++ /dev/null @@ -1,16 +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 - * https://drafts.csswg.org/cssom/#cssnamespacerule - */ - -// https://drafts.csswg.org/cssom/#cssnamespacerule -interface CSSNamespaceRule : CSSRule { - // Not implemented yet. . - // readonly attribute DOMString namespaceURI; - // readonly attribute DOMString prefix; -}; diff --git a/dom/webidl/CSSPageRule.webidl b/dom/webidl/CSSPageRule.webidl deleted file mode 100644 index 93e47ef02b9a..000000000000 --- a/dom/webidl/CSSPageRule.webidl +++ /dev/null @@ -1,17 +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 - * https://drafts.csswg.org/cssom/#the-csspagerule-interface - */ - -// https://drafts.csswg.org/cssom/#the-csspagerule-interface -// Per spec, this should inherit from CSSGroupingRule, but we don't -// implement this yet. -interface CSSPageRule : CSSRule { - // selectorText not implemented yet - // attribute DOMString selectorText; - [SameObject, PutForwards=cssText] readonly attribute CSSStyleDeclaration style; -}; diff --git a/dom/webidl/CSSRule.webidl b/dom/webidl/CSSRule.webidl deleted file mode 100644 index 6c4dac2e6280..000000000000 --- a/dom/webidl/CSSRule.webidl +++ /dev/null @@ -1,52 +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 - * https://drafts.csswg.org/cssom/#the-cssrule-interface - * https://drafts.csswg.org/css-animations/#interface-cssrule - * https://drafts.csswg.org/css-counter-styles-3/#extentions-to-cssrule-interface - * https://drafts.csswg.org/css-conditional-3/#extentions-to-cssrule-interface - * https://drafts.csswg.org/css-fonts-3/#om-fontfeaturevalues - */ - -// https://drafts.csswg.org/cssom/#the-cssrule-interface -interface CSSRule { - - const unsigned short STYLE_RULE = 1; - const unsigned short CHARSET_RULE = 2; // historical - const unsigned short IMPORT_RULE = 3; - const unsigned short MEDIA_RULE = 4; - const unsigned short FONT_FACE_RULE = 5; - const unsigned short PAGE_RULE = 6; - // FIXME: We don't support MARGIN_RULE yet. - // XXXbz Should we expose the constant anyway? - // const unsigned short MARGIN_RULE = 9; - const unsigned short NAMESPACE_RULE = 10; - readonly attribute unsigned short type; - attribute DOMString cssText; - readonly attribute CSSRule? parentRule; - readonly attribute CSSStyleSheet? parentStyleSheet; -}; - -// https://drafts.csswg.org/css-animations/#interface-cssrule -partial interface CSSRule { - const unsigned short KEYFRAMES_RULE = 7; - const unsigned short KEYFRAME_RULE = 8; -}; - -// https://drafts.csswg.org/css-counter-styles-3/#extentions-to-cssrule-interface -partial interface CSSRule { - const unsigned short COUNTER_STYLE_RULE = 11; -}; - -// https://drafts.csswg.org/css-conditional-3/#extentions-to-cssrule-interface -partial interface CSSRule { - const unsigned short SUPPORTS_RULE = 12; -}; - -// https://drafts.csswg.org/css-fonts-3/#om-fontfeaturevalues -partial interface CSSRule { - const unsigned short FONT_FEATURE_VALUES_RULE = 14; -}; diff --git a/dom/webidl/CSSStyleDeclaration.webidl b/dom/webidl/CSSStyleDeclaration.webidl index 0c95d6c9f5c3..d9b2511ded8c 100644 --- a/dom/webidl/CSSStyleDeclaration.webidl +++ b/dom/webidl/CSSStyleDeclaration.webidl @@ -7,6 +7,8 @@ * http://dev.w3.org/csswg/cssom/ */ +interface CSSRule; + interface CSSStyleDeclaration { [SetterThrows] attribute DOMString cssText; diff --git a/dom/webidl/CSSStyleRule.webidl b/dom/webidl/CSSStyleRule.webidl deleted file mode 100644 index 571bd6a57feb..000000000000 --- a/dom/webidl/CSSStyleRule.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 - * https://drafts.csswg.org/cssom/#the-cssstylerule-interface - */ - -// https://drafts.csswg.org/cssom/#the-cssstylerule-interface -interface CSSStyleRule : CSSRule { - attribute DOMString selectorText; - [SameObject, PutForwards=cssText] readonly attribute CSSStyleDeclaration style; -}; diff --git a/dom/webidl/CSSStyleSheet.webidl b/dom/webidl/CSSStyleSheet.webidl index f51b89cd184f..48fb89db1252 100644 --- a/dom/webidl/CSSStyleSheet.webidl +++ b/dom/webidl/CSSStyleSheet.webidl @@ -7,6 +7,8 @@ * http://dev.w3.org/csswg/cssom/ */ +interface CSSRule; + enum CSSStyleSheetParsingMode { "author", "user", diff --git a/dom/webidl/CSSSupportsRule.webidl b/dom/webidl/CSSSupportsRule.webidl deleted file mode 100644 index 0576e90ebd2b..000000000000 --- a/dom/webidl/CSSSupportsRule.webidl +++ /dev/null @@ -1,12 +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 - * https://drafts.csswg.org/css-conditional/#the-csssupportsrule-interface - */ - -// https://drafts.csswg.org/css-conditional/#the-csssupportsrule-interface -interface CSSSupportsRule : CSSConditionRule { -}; diff --git a/dom/webidl/LegacyQueryInterface.webidl b/dom/webidl/LegacyQueryInterface.webidl index a2f7b9dc6411..96048b03ca4b 100644 --- a/dom/webidl/LegacyQueryInterface.webidl +++ b/dom/webidl/LegacyQueryInterface.webidl @@ -24,10 +24,8 @@ BoxObject implements LegacyQueryInterface; CaretPosition implements LegacyQueryInterface; Comment implements LegacyQueryInterface; Crypto implements LegacyQueryInterface; -CSSMozDocumentRule implements LegacyQueryInterface; CSSPrimitiveValue implements LegacyQueryInterface; CSSStyleDeclaration implements LegacyQueryInterface; -CSSStyleRule implements LegacyQueryInterface; CSSValueList implements LegacyQueryInterface; DOMImplementation implements LegacyQueryInterface; DOMParser implements LegacyQueryInterface; diff --git a/dom/webidl/StyleRuleChangeEvent.webidl b/dom/webidl/StyleRuleChangeEvent.webidl index ef35bae6486c..0b783366ba59 100644 --- a/dom/webidl/StyleRuleChangeEvent.webidl +++ b/dom/webidl/StyleRuleChangeEvent.webidl @@ -3,6 +3,8 @@ * 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/. */ +interface CSSRule; + [ChromeOnly, Constructor(DOMString type, optional StyleRuleChangeEventInit eventInitDict)] interface StyleRuleChangeEvent : Event { diff --git a/dom/webidl/StyleSheet.webidl b/dom/webidl/StyleSheet.webidl index 26c2fbb999bd..71a8ccd8f470 100644 --- a/dom/webidl/StyleSheet.webidl +++ b/dom/webidl/StyleSheet.webidl @@ -7,6 +7,8 @@ * http://dev.w3.org/csswg/cssom/ */ +interface CSSRule; + interface StyleSheet { [Constant] readonly attribute DOMString type; diff --git a/dom/webidl/moz.build b/dom/webidl/moz.build index 856e4d6c20e7..4238276a6ab3 100644 --- a/dom/webidl/moz.build +++ b/dom/webidl/moz.build @@ -89,27 +89,12 @@ WEBIDL_FILES = [ 'CSPReport.webidl', 'CSS.webidl', 'CSSAnimation.webidl', - 'CSSConditionRule.webidl', - 'CSSCounterStyleRule.webidl', - 'CSSFontFaceRule.webidl', - 'CSSFontFeatureValuesRule.webidl', - 'CSSGroupingRule.webidl', - 'CSSImportRule.webidl', - 'CSSKeyframeRule.webidl', - 'CSSKeyframesRule.webidl', 'CSSLexer.webidl', - 'CSSMediaRule.webidl', - 'CSSMozDocumentRule.webidl', - 'CSSNamespaceRule.webidl', - 'CSSPageRule.webidl', 'CSSPrimitiveValue.webidl', 'CSSPseudoElement.webidl', - 'CSSRule.webidl', 'CSSRuleList.webidl', 'CSSStyleDeclaration.webidl', - 'CSSStyleRule.webidl', 'CSSStyleSheet.webidl', - 'CSSSupportsRule.webidl', 'CSSTransition.webidl', 'CSSValue.webidl', 'CSSValueList.webidl', diff --git a/js/xpconnect/tests/chrome/test_weakmaps.xul b/js/xpconnect/tests/chrome/test_weakmaps.xul index 9301b7b5d431..e741a41c6c38 100644 --- a/js/xpconnect/tests/chrome/test_weakmaps.xul +++ b/js/xpconnect/tests/chrome/test_weakmaps.xul @@ -214,8 +214,28 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=668855 make_live_map(); - // We're out of ideas for unpreservable natives, now that just about - // everything is on webidl, so just don't test those. + let unpreservable_native_key = function () { + // We only allow natives that support wrapper preservation to be used as weak + // map keys. We should be able to try to add unpreservable natives as keys without + // crashing (bug 711616), but we should throw an error (bug 761620). + + let dummy_test_map = new WeakMap; + + let rule_fail = false; + let got_rule = false; + try { + var rule = document.styleSheets[0].cssRules[0]; + got_rule = true; + dummy_test_map.set(rule, 1); + } catch (e) { + rule_fail = true; + } + ok(got_rule, "Got the CSS rule"); + ok(rule_fail, "Using a CSS rule as a weak map key should produce an exception because it can't be wrapper preserved."); + + } + + unpreservable_native_key(); /* set up for running precise GC/CC then checking the results */ diff --git a/js/xpconnect/tests/mochitest/file_crosscompartment_weakmap.html b/js/xpconnect/tests/mochitest/file_crosscompartment_weakmap.html index 127c479ebe0e..b25cdb2f90e1 100644 --- a/js/xpconnect/tests/mochitest/file_crosscompartment_weakmap.html +++ b/js/xpconnect/tests/mochitest/file_crosscompartment_weakmap.html @@ -1,6 +1,7 @@ + Test Cross-Compartment DOM WeakMaps diff --git a/js/xpconnect/tests/mochitest/test_crosscompartment_weakmap.html b/js/xpconnect/tests/mochitest/test_crosscompartment_weakmap.html index 54658d17bc6d..e50b1f1bd8ca 100644 --- a/js/xpconnect/tests/mochitest/test_crosscompartment_weakmap.html +++ b/js/xpconnect/tests/mochitest/test_crosscompartment_weakmap.html @@ -15,6 +15,14 @@ function setup() { var item = window.frames[0].document.querySelector("body"); my_map.set(item, "success_string"); + + var rule_fail = false; + try { + my_map.set(window.frames[0].document.styleSheets[0].cssRules[0], 1); + } catch (e) { + rule_fail = true; + } + ok(rule_fail, "Using rule as a weak map key across compartments should produce an exception because it can't be wrapper preserved."); } function runTest() { diff --git a/layout/inspector/inCSSValueSearch.cpp b/layout/inspector/inCSSValueSearch.cpp index 5897e1b54265..ecde0999381c 100644 --- a/layout/inspector/inCSSValueSearch.cpp +++ b/layout/inspector/inCSSValueSearch.cpp @@ -18,7 +18,6 @@ #include "nsIDOMCSSImportRule.h" #include "nsIDOMCSSMediaRule.h" #include "nsIDOMCSSSupportsRule.h" -#include "nsIDOMCSSRule.h" #include "nsIURI.h" #include "nsIDocument.h" #include "nsNetUtil.h" diff --git a/layout/inspector/inDOMUtils.cpp b/layout/inspector/inDOMUtils.cpp index 236136827ca4..5e400f8d2fe3 100644 --- a/layout/inspector/inDOMUtils.cpp +++ b/layout/inspector/inDOMUtils.cpp @@ -253,9 +253,13 @@ inDOMUtils::GetCSSStyleRules(nsIDOMElement *aElement, for (nsRuleNode* ruleNode : Reversed(ruleNodes)) { RefPtr decl = do_QueryObject(ruleNode->GetRule()); if (decl) { - css::Rule* owningRule = decl->GetOwningRule(); - if (owningRule) { - rules->AppendElement(owningRule, /*weak =*/ false); + RefPtr styleRule = + do_QueryObject(decl->GetOwningRule()); + if (styleRule) { + nsCOMPtr domRule = styleRule->GetDOMRule(); + if (domRule) { + rules->AppendElement(domRule, /*weak =*/ false); + } } } } diff --git a/layout/style/BindingStyleRule.cpp b/layout/style/BindingStyleRule.cpp deleted file mode 100644 index 9cdbc46cdd72..000000000000 --- a/layout/style/BindingStyleRule.cpp +++ /dev/null @@ -1,18 +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/BindingStyleRule.h" -#include "mozilla/dom/CSSStyleRuleBinding.h" - -namespace mozilla { - -/* virtual */ JSObject* -BindingStyleRule::WrapObject(JSContext* aCx, - JS::Handle aGivenProto) -{ - return dom::CSSStyleRuleBinding::Wrap(aCx, this, aGivenProto); -} - -} // namespace mozilla diff --git a/layout/style/BindingStyleRule.h b/layout/style/BindingStyleRule.h deleted file mode 100644 index d2656fd9039a..000000000000 --- a/layout/style/BindingStyleRule.h +++ /dev/null @@ -1,57 +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_BindingStyleRule_h__ -#define mozilla_BindingStyleRule_h__ - -#include "nscore.h" -#include "nsStringGlue.h" -#include "mozilla/css/Rule.h" - -/** - * Shared superclass for mozilla::css::StyleRule and mozilla::ServoStyleRule, - * for use from bindings code. - */ - -class nsICSSDeclaration; - -namespace mozilla { - -class BindingStyleRule : public css::Rule -{ -protected: - BindingStyleRule(uint32_t aLineNumber, uint32_t aColumnNumber) - : css::Rule(aLineNumber, aColumnNumber) - { - } - BindingStyleRule(const BindingStyleRule& aCopy) - : css::Rule(aCopy) - { - } - virtual ~BindingStyleRule() {} - -public: - // This is pure virtual because we have no members, and are an abstract class - // to start with. The fact that we have to have this declaration at all is - // kinda dumb. :( - virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) - const override MOZ_MUST_OVERRIDE = 0; - - // WebIDL API - // For GetSelectorText/SetSelectorText, we purposefully use a signature that - // matches the nsIDOMCSSStyleRule one for now, so subclasses can just - // implement both at once. The actual implementations must never return - // anything other than NS_OK; - NS_IMETHOD GetSelectorText(nsAString& aSelectorText) = 0; - NS_IMETHOD SetSelectorText(const nsAString& aSelectorText) = 0; - virtual nsICSSDeclaration* Style() = 0; - - virtual JSObject* WrapObject(JSContext* aCx, - JS::Handle aGivenProto) override; -}; - -} // namespace mozilla - -#endif // mozilla_BindingStyleRule_h__ diff --git a/layout/style/CSSRuleList.h b/layout/style/CSSRuleList.h index f1001fdb4b9f..f056d111520f 100644 --- a/layout/style/CSSRuleList.h +++ b/layout/style/CSSRuleList.h @@ -7,7 +7,6 @@ #define mozilla_dom_CSSRuleList_h #include "mozilla/StyleSheetInlines.h" -#include "mozilla/css/Rule.h" #include "nsIDOMCSSRule.h" #include "nsIDOMCSSRuleList.h" #include "nsWrapperCache.h" @@ -46,13 +45,13 @@ public: } // WebIDL API - css::Rule* Item(uint32_t aIndex) + nsIDOMCSSRule* Item(uint32_t aIndex) { bool unused; return IndexedGetter(aIndex, unused); } - virtual css::Rule* IndexedGetter(uint32_t aIndex, bool& aFound) = 0; + virtual nsIDOMCSSRule* IndexedGetter(uint32_t aIndex, bool& aFound) = 0; virtual uint32_t Length() = 0; protected: diff --git a/layout/style/CSSStyleSheet.cpp b/layout/style/CSSStyleSheet.cpp index a1a3db97c3b6..e8ec2b4c5ca4 100644 --- a/layout/style/CSSStyleSheet.cpp +++ b/layout/style/CSSStyleSheet.cpp @@ -61,7 +61,7 @@ public: virtual CSSStyleSheet* GetParentObject() override; - virtual css::Rule* + virtual nsIDOMCSSRule* IndexedGetter(uint32_t aIndex, bool& aFound) override; virtual uint32_t Length() override; @@ -101,7 +101,7 @@ CSSRuleListImpl::Length() return AssertedCast(mStyleSheet->StyleRuleCount()); } -css::Rule* +nsIDOMCSSRule* CSSRuleListImpl::IndexedGetter(uint32_t aIndex, bool& aFound) { aFound = false; @@ -112,7 +112,7 @@ CSSRuleListImpl::IndexedGetter(uint32_t aIndex, bool& aFound) css::Rule* rule = mStyleSheet->GetStyleRuleAt(aIndex); if (rule) { aFound = true; - return rule; + return rule->GetDOMRule(); } } @@ -508,7 +508,7 @@ CSSStyleSheet::TraverseInner(nsCycleCollectionTraversalCallback &cb) const nsCOMArray& rules = mInner->mOrderedRules; for (int32_t i = 0, count = rules.Count(); i < count; ++i) { NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mOrderedRules[i]"); - cb.NoteXPCOMChild(rules[i]); + cb.NoteXPCOMChild(rules[i]->GetExistingDOMRule()); } } @@ -865,10 +865,10 @@ CSSStyleSheet::RegisterNamespaceRule(css::Rule* aRule) return NS_OK; } -css::Rule* +nsIDOMCSSRule* CSSStyleSheet::GetDOMOwnerRule() const { - return mOwnerRule; + return mOwnerRule ? mOwnerRule->GetDOMRule() : nullptr; } CSSRuleList* @@ -1031,6 +1031,11 @@ CSSStyleSheet::DeleteRuleInternal(uint32_t aIndex, ErrorResult& aRv) RefPtr rule = mInner->mOrderedRules.ObjectAt(aIndex); if (rule) { mInner->mOrderedRules.RemoveObjectAt(aIndex); + if (mDocument && mDocument->StyleSheetChangeEventsEnabled()) { + // Force creation of the DOM rule, so that it can be put on the + // StyleRuleRemoved event object. + rule->GetDOMRule(); + } rule->SetStyleSheet(nullptr); DidDirty(); diff --git a/layout/style/CSSStyleSheet.h b/layout/style/CSSStyleSheet.h index a17f610520b7..4d2b52cbe645 100644 --- a/layout/style/CSSStyleSheet.h +++ b/layout/style/CSSStyleSheet.h @@ -194,7 +194,7 @@ public: // Can't be inline because we can't include ImportRule here. And can't be // called GetOwnerRule because that would be ambiguous with the ImportRule // version. - css::Rule* GetDOMOwnerRule() const final; + nsIDOMCSSRule* GetDOMOwnerRule() const final; void WillDirty(); void DidDirty(); diff --git a/layout/style/GroupRule.h b/layout/style/GroupRule.h index 339320e39087..868086fe8b32 100644 --- a/layout/style/GroupRule.h +++ b/layout/style/GroupRule.h @@ -12,7 +12,6 @@ #define mozilla_css_GroupRule_h__ #include "mozilla/Attributes.h" -#include "mozilla/ErrorResult.h" #include "mozilla/IncrementalClearCOMRuleArray.h" #include "mozilla/MemoryReporting.h" #include "mozilla/css/Rule.h" @@ -25,10 +24,6 @@ namespace mozilla { class StyleSheet; -namespace dom { -class CSSRuleList; -} // namespace dom - namespace css { class GroupRuleRuleList; @@ -43,9 +38,11 @@ protected: virtual ~GroupRule(); public: - NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(GroupRule, Rule) - NS_DECL_ISUPPORTS_INHERITED + NS_DECL_CYCLE_COLLECTION_CLASS(GroupRule) + NS_DECL_CYCLE_COLLECTING_ISUPPORTS + // implement part of Rule + DECL_STYLE_RULE_INHERIT_NO_DOMRULE #ifdef DEBUG virtual void List(FILE* out = stdout, int32_t aIndent = 0) const override; #endif @@ -83,15 +80,9 @@ public: return true; } - // WebIDL API - dom::CSSRuleList* CssRules(); - uint32_t InsertRule(const nsAString& aRule, uint32_t aIndex, - ErrorResult& aRv); - void DeleteRule(uint32_t aIndex, ErrorResult& aRv); - protected: // to help implement nsIDOMCSSRule - void AppendRulesToCssText(nsAString& aCssText) const; + void AppendRulesToCssText(nsAString& aCssText); // to implement common methods on nsIDOMCSSMediaRule and // nsIDOMCSSMozDocumentRule @@ -104,24 +95,6 @@ protected: RefPtr mRuleCollection; // lazily constructed }; -// Implementation of WebIDL CSSConditionRule. -class ConditionRule : public GroupRule -{ -protected: - ConditionRule(uint32_t aLineNumber, uint32_t aColumnNumber); - ConditionRule(const ConditionRule& aCopy); - virtual ~ConditionRule(); - -public: - - // GetConditionText signature matches nsIDOMCSSConditionRule, so subclasses - // can implement this easily. The implementations should never return - // anything other than NS_OK. - NS_IMETHOD GetConditionText(nsAString& aConditionText) = 0; - virtual void SetConditionText(const nsAString& aConditionText, - ErrorResult& aRv) = 0; -}; - } // namespace css } // namespace mozilla diff --git a/layout/style/ImportRule.h b/layout/style/ImportRule.h index 45949e67e8f2..a324bc4e71b5 100644 --- a/layout/style/ImportRule.h +++ b/layout/style/ImportRule.h @@ -20,7 +20,6 @@ class nsString; namespace mozilla { class CSSStyleSheet; -class StyleSheet; namespace css { @@ -35,8 +34,10 @@ private: ImportRule(const ImportRule& aCopy); ~ImportRule(); public: - NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(ImportRule, Rule) - NS_DECL_ISUPPORTS_INHERITED + NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(ImportRule, mozilla::css::Rule) + NS_DECL_CYCLE_COLLECTING_ISUPPORTS + + DECL_STYLE_RULE_INHERIT using Rule::GetStyleSheet; // unhide since nsIDOMCSSImportRule has its own GetStyleSheet @@ -45,26 +46,18 @@ public: virtual void List(FILE* out = stdout, int32_t aIndent = 0) const override; #endif virtual int32_t GetType() const override; - using Rule::GetType; virtual already_AddRefed Clone() const override; void SetSheet(CSSStyleSheet*); virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override; - virtual JSObject* WrapObject(JSContext* aCx, - JS::Handle aGivenProto) override; + // nsIDOMCSSRule interface + NS_DECL_NSIDOMCSSRULE // nsIDOMCSSImportRule interface NS_DECL_NSIDOMCSSIMPORTRULE - // WebIDL interface - uint16_t Type() const override; - void GetCssTextImpl(nsAString& aCssText) const override; - // The XPCOM GetHref is fine, since it never fails. - nsMediaList* Media() const { return mMedia; } - StyleSheet* GetStyleSheet() const; - private: nsString mURLSpec; RefPtr mMedia; diff --git a/layout/style/NameSpaceRule.h b/layout/style/NameSpaceRule.h index 92d3fd901b69..92d910cf5dc4 100644 --- a/layout/style/NameSpaceRule.h +++ b/layout/style/NameSpaceRule.h @@ -24,7 +24,8 @@ class nsIAtom; namespace mozilla { namespace css { -class NameSpaceRule final : public Rule +class NameSpaceRule final : public Rule, + public nsIDOMCSSRule { public: NameSpaceRule(nsIAtom* aPrefix, const nsString& aURLSpec, @@ -36,28 +37,25 @@ private: public: NS_DECLARE_STATIC_IID_ACCESSOR(NS_CSS_NAMESPACE_RULE_IMPL_CID) - NS_DECL_ISUPPORTS_INHERITED + NS_DECL_ISUPPORTS + // Rule methods + DECL_STYLE_RULE_INHERIT #ifdef DEBUG virtual void List(FILE* out = stdout, int32_t aIndent = 0) const override; #endif virtual int32_t GetType() const override; - using Rule::GetType; virtual already_AddRefed Clone() const override; nsIAtom* GetPrefix() const { return mPrefix; } void GetURLSpec(nsString& aURLSpec) const { aURLSpec = mURLSpec; } - // WebIDL interface - uint16_t Type() const override; - void GetCssTextImpl(nsAString& aCssText) const override; - virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override MOZ_MUST_OVERRIDE; - virtual JSObject* WrapObject(JSContext* aCx, - JS::Handle aGivenProto) override; + // nsIDOMCSSRule interface + NS_DECL_NSIDOMCSSRULE private: nsCOMPtr mPrefix; diff --git a/layout/style/Rule.h b/layout/style/Rule.h index 1d503fbffad7..c07ec1a3d3ed 100644 --- a/layout/style/Rule.h +++ b/layout/style/Rule.h @@ -12,7 +12,6 @@ #include "mozilla/MemoryReporting.h" #include "nsISupports.h" #include "nsIDOMCSSRule.h" -#include "nsWrapperCache.h" class nsIDocument; struct nsRuleData; @@ -23,9 +22,15 @@ namespace mozilla { namespace css { class GroupRule; -class Rule : public nsIDOMCSSRule - , public nsWrapperCache -{ +#define DECL_STYLE_RULE_INHERIT_NO_DOMRULE \ + /* nothing */ + +#define DECL_STYLE_RULE_INHERIT \ + DECL_STYLE_RULE_INHERIT_NO_DOMRULE \ + virtual nsIDOMCSSRule* GetDOMRule() override; \ + virtual nsIDOMCSSRule* GetExistingDOMRule() override; + +class Rule : public nsISupports { protected: Rule(uint32_t aLineNumber, uint32_t aColumnNumber) : mSheet(nullptr), @@ -47,12 +52,6 @@ protected: public: - NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Rule) - - // nsIDOMCSSRule interface - NS_DECL_NSIDOMCSSRULE - #ifdef DEBUG virtual void List(FILE* out = stdout, int32_t aIndent = 0) const = 0; #endif @@ -107,20 +106,23 @@ public: */ virtual already_AddRefed Clone() const = 0; + // Note that this returns null for inline style rules since they aren't + // supposed to have a DOM rule representation (and our code wouldn't work). + virtual nsIDOMCSSRule* GetDOMRule() = 0; + + // Like GetDOMRule(), but won't create one if we don't have one yet + virtual nsIDOMCSSRule* GetExistingDOMRule() = 0; + + // to implement methods on nsIDOMCSSRule + nsresult GetParentRule(nsIDOMCSSRule** aParentRule); + nsresult GetParentStyleSheet(nsIDOMCSSStyleSheet** aSheet); + Rule* GetCSSRule(); + // This is pure virtual because all of Rule's data members are non-owning and // thus measured elsewhere. virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const MOZ_MUST_OVERRIDE = 0; - // WebIDL interface, aka helpers for nsIDOMCSSRule implementation. - virtual uint16_t Type() const = 0; - virtual void GetCssTextImpl(nsAString& aCssText) const = 0; - // XPCOM GetCssText is OK, since it never throws. - // XPCOM SetCssText is OK, since it never throws. - Rule* GetParentRule() const; - StyleSheet* GetParentStyleSheet() const { return GetStyleSheet(); } - nsIDocument* GetParentObject() const { return GetDocument(); } - protected: // This is sometimes null (e.g., for style attributes). StyleSheet* mSheet; diff --git a/layout/style/ServoCSSRuleList.cpp b/layout/style/ServoCSSRuleList.cpp index 7f7c07a6b481..59e5ac82f2ff 100644 --- a/layout/style/ServoCSSRuleList.cpp +++ b/layout/style/ServoCSSRuleList.cpp @@ -47,7 +47,7 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(ServoCSSRuleList, dom::CSSRuleList) tmp->EnumerateInstantiatedRules([&](css::Rule* aRule) { NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mRules[i]"); - cb.NoteXPCOMChild(aRule); + cb.NoteXPCOMChild(aRule->GetExistingDOMRule()); }); NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END @@ -79,7 +79,7 @@ ServoCSSRuleList::GetRule(uint32_t aIndex) return CastToPtr(rule); } -css::Rule* +nsIDOMCSSRule* ServoCSSRuleList::IndexedGetter(uint32_t aIndex, bool& aFound) { if (aIndex >= mRules.Length()) { @@ -87,7 +87,10 @@ ServoCSSRuleList::IndexedGetter(uint32_t aIndex, bool& aFound) return nullptr; } aFound = true; - return GetRule(aIndex); + if (css::Rule* rule = GetRule(aIndex)) { + return rule->GetDOMRule(); + } + return nullptr; } template diff --git a/layout/style/ServoCSSRuleList.h b/layout/style/ServoCSSRuleList.h index fcc18190e2e7..56a8583c4fcf 100644 --- a/layout/style/ServoCSSRuleList.h +++ b/layout/style/ServoCSSRuleList.h @@ -30,7 +30,7 @@ public: ServoStyleSheet* GetParentObject() final { return mStyleSheet; } - css::Rule* IndexedGetter(uint32_t aIndex, bool& aFound) final; + nsIDOMCSSRule* IndexedGetter(uint32_t aIndex, bool& aFound) final; uint32_t Length() final { return mRules.Length(); } void DropReference(); diff --git a/layout/style/ServoStyleRule.cpp b/layout/style/ServoStyleRule.cpp index 2d5160922281..66a97d9abe06 100644 --- a/layout/style/ServoStyleRule.cpp +++ b/layout/style/ServoStyleRule.cpp @@ -11,8 +11,8 @@ #include "mozilla/DeclarationBlockInlines.h" #include "mozilla/ServoBindings.h" #include "mozilla/ServoDeclarationBlock.h" -#include "mozilla/dom/CSSStyleRuleBinding.h" +#include "nsDOMClassInfoID.h" #include "mozAutoDocUpdate.h" namespace mozilla { @@ -100,37 +100,40 @@ ServoStyleRuleDeclaration::GetCSSParsingEnvironment( // -- ServoStyleRule -------------------------------------------------- ServoStyleRule::ServoStyleRule(already_AddRefed aRawRule) - : BindingStyleRule(0, 0) + : css::Rule(0, 0) , mRawRule(aRawRule) , mDecls(Servo_StyleRule_GetStyle(mRawRule).Consume()) { } // QueryInterface implementation for ServoStyleRule -NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(ServoStyleRule) +NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(ServoStyleRule) NS_INTERFACE_MAP_ENTRY(nsIDOMCSSStyleRule) -NS_INTERFACE_MAP_END_INHERITING(css::Rule) + NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule) + NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, css::Rule) + NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSStyleRule) +NS_INTERFACE_MAP_END -NS_IMPL_ADDREF_INHERITED(ServoStyleRule, css::Rule) -NS_IMPL_RELEASE_INHERITED(ServoStyleRule, css::Rule) +NS_IMPL_CYCLE_COLLECTING_ADDREF(ServoStyleRule) +NS_IMPL_CYCLE_COLLECTING_RELEASE(ServoStyleRule) NS_IMPL_CYCLE_COLLECTION_CLASS(ServoStyleRule) -NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED(ServoStyleRule, css::Rule) +NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(ServoStyleRule) // Trace the wrapper for our declaration. This just expands out // NS_IMPL_CYCLE_COLLECTION_TRACE_PRESERVED_WRAPPER which we can't use // directly because the wrapper is on the declaration, not on us. tmp->mDecls.TraceWrapper(aCallbacks, aClosure); NS_IMPL_CYCLE_COLLECTION_TRACE_END -NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(ServoStyleRule, css::Rule) +NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(ServoStyleRule) // Unlink the wrapper for our declaraton. This just expands out // NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER which we can't use // directly because the wrapper is on the declaration, not on us. tmp->mDecls.ReleaseWrapper(static_cast(p)); NS_IMPL_CYCLE_COLLECTION_UNLINK_END -NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(ServoStyleRule, css::Rule) +NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(ServoStyleRule) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END already_AddRefed @@ -165,22 +168,43 @@ ServoStyleRule::List(FILE* out, int32_t aIndent) const /* CSSRule implementation */ -uint16_t -ServoStyleRule::Type() const +NS_IMETHODIMP +ServoStyleRule::GetType(uint16_t* aType) { - return nsIDOMCSSRule::STYLE_RULE; + *aType = nsIDOMCSSRule::STYLE_RULE; + return NS_OK; } -void -ServoStyleRule::GetCssTextImpl(nsAString& aCssText) const +NS_IMETHODIMP +ServoStyleRule::GetCssText(nsAString& aCssText) { Servo_StyleRule_GetCssText(mRawRule, &aCssText); + return NS_OK; } -nsICSSDeclaration* -ServoStyleRule::Style() +NS_IMETHODIMP +ServoStyleRule::SetCssText(const nsAString& aCssText) { - return &mDecls; + return NS_OK; +} + +NS_IMETHODIMP +ServoStyleRule::GetParentStyleSheet(nsIDOMCSSStyleSheet** aSheet) +{ + return css::Rule::GetParentStyleSheet(aSheet); +} + +NS_IMETHODIMP +ServoStyleRule::GetParentRule(nsIDOMCSSRule** aParentRule) +{ + *aParentRule = nullptr; + return NS_ERROR_NOT_IMPLEMENTED; +} + +css::Rule* +ServoStyleRule::GetCSSRule() +{ + return this; } /* CSSStyleRule implementation */ diff --git a/layout/style/ServoStyleRule.h b/layout/style/ServoStyleRule.h index 5b1511300fd4..f6296a032405 100644 --- a/layout/style/ServoStyleRule.h +++ b/layout/style/ServoStyleRule.h @@ -9,7 +9,7 @@ #ifndef mozilla_ServoStyleRule_h #define mozilla_ServoStyleRule_h -#include "mozilla/BindingStyleRule.h" +#include "mozilla/css/Rule.h" #include "mozilla/ServoBindingTypes.h" #include "nsIDOMCSSStyleRule.h" @@ -47,28 +47,25 @@ private: RefPtr mDecls; }; -class ServoStyleRule final : public BindingStyleRule +class ServoStyleRule final : public css::Rule , public nsIDOMCSSStyleRule { public: explicit ServoStyleRule(already_AddRefed aRawRule); - NS_DECL_ISUPPORTS_INHERITED - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(ServoStyleRule, + NS_DECL_CYCLE_COLLECTING_ISUPPORTS + NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(ServoStyleRule, css::Rule) + NS_DECL_NSIDOMCSSRULE NS_DECL_NSIDOMCSSSTYLERULE - // WebIDL interface - uint16_t Type() const override; - void GetCssTextImpl(nsAString& aCssText) const override; - virtual nsICSSDeclaration* Style() override; - RawServoStyleRule* Raw() const { return mRawRule; } // Methods of mozilla::css::Rule int32_t GetType() const final { return css::Rule::STYLE_RULE; } - using Rule::GetType; already_AddRefed Clone() const final; + nsIDOMCSSRule* GetDOMRule() final { return this; } + nsIDOMCSSRule* GetExistingDOMRule() final { return this; } size_t SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const final; #ifdef DEBUG void List(FILE* out = stdout, int32_t aIndent = 0) const final; diff --git a/layout/style/ServoStyleSheet.cpp b/layout/style/ServoStyleSheet.cpp index 61b270e372d1..7a96485d4b08 100644 --- a/layout/style/ServoStyleSheet.cpp +++ b/layout/style/ServoStyleSheet.cpp @@ -145,10 +145,9 @@ ServoStyleSheet::List(FILE* aOut, int32_t aIndex) const } #endif -css::Rule* +nsIDOMCSSRule* ServoStyleSheet::GetDOMOwnerRule() const { - NS_ERROR("stylo: Don't know how to get DOM owner rule for ServoStyleSheet"); return nullptr; } diff --git a/layout/style/ServoStyleSheet.h b/layout/style/ServoStyleSheet.h index ed2bf23b0214..7d82bdcc25f2 100644 --- a/layout/style/ServoStyleSheet.h +++ b/layout/style/ServoStyleSheet.h @@ -20,7 +20,6 @@ class ServoCSSRuleList; namespace css { class Loader; -class Rule; } /** @@ -74,7 +73,7 @@ public: // Can't be inline because we can't include ImportRule here. And can't be // called GetOwnerRule because that would be ambiguous with the ImportRule // version. - css::Rule* GetDOMOwnerRule() const final; + nsIDOMCSSRule* GetDOMOwnerRule() const final; void WillDirty() {} void DidDirty() {} diff --git a/layout/style/StyleRule.cpp b/layout/style/StyleRule.cpp index a22f46ede321..7d63388159b8 100644 --- a/layout/style/StyleRule.cpp +++ b/layout/style/StyleRule.cpp @@ -16,17 +16,18 @@ #include "mozilla/MemoryReporting.h" #include "mozilla/css/GroupRule.h" #include "mozilla/css/Declaration.h" -#include "mozilla/dom/CSSStyleRuleBinding.h" #include "nsIDocument.h" #include "nsIAtom.h" #include "nsString.h" #include "nsStyleUtil.h" +#include "nsICSSStyleRuleDOMWrapper.h" #include "nsDOMCSSDeclaration.h" #include "nsNameSpaceManager.h" #include "nsXMLNameSpaceMap.h" #include "nsCSSPseudoClasses.h" #include "nsCSSAnonBoxes.h" #include "nsTArray.h" +#include "nsDOMClassInfoID.h" #include "nsContentUtils.h" #include "nsError.h" #include "mozAutoDocUpdate.h" @@ -1046,26 +1047,30 @@ nsCSSSelectorList::SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) cons // -------------------------------------------------------- +namespace mozilla { +namespace css { +class DOMCSSStyleRule; +} // namespace css +} // namespace mozilla + class DOMCSSDeclarationImpl : public nsDOMCSSDeclaration { protected: - // Needs to be protected so we can use NS_IMPL_ADDREF_USING_AGGREGATOR. virtual ~DOMCSSDeclarationImpl(void); - // But we need to allow UniquePtr to delete us. - friend class mozilla::DefaultDelete; - public: explicit DOMCSSDeclarationImpl(css::StyleRule *aRule); NS_IMETHOD GetParentRule(nsIDOMCSSRule **aParent) override; + void DropReference(void); virtual DeclarationBlock* GetCSSDeclaration(Operation aOperation) override; virtual nsresult SetCSSDeclaration(DeclarationBlock* aDecl) override; virtual void GetCSSParsingEnvironment(CSSParsingEnvironment& aCSSParseEnv) override; virtual nsIDocument* DocToUpdate() override; - // Override |AddRef| and |Release| for being owned by StyleRule. Also, we - // need to forward QI for cycle collection things to StyleRule. + // Override |AddRef| and |Release| for being a member of + // |DOMCSSStyleRule|. Also, we need to forward QI for cycle + // collection things to DOMCSSStyleRule. NS_DECL_ISUPPORTS_INHERITED virtual nsINode *GetParentObject() override @@ -1073,12 +1078,55 @@ public: return mRule ? mRule->GetDocument() : nullptr; } + friend class css::DOMCSSStyleRule; + protected: - // This reference is not reference-counted. The rule object owns us and we go - // away when it does. + // This reference is not reference-counted. The rule object tells us + // when it's about to go away. css::StyleRule *mRule; + + inline css::DOMCSSStyleRule* DomRule(); + +private: + // NOT TO BE IMPLEMENTED + // This object cannot be allocated on its own. It must be a member of + // DOMCSSStyleRule. + void* operator new(size_t size) CPP_THROW_NEW; }; +namespace mozilla { +namespace css { + +class DOMCSSStyleRule : public nsICSSStyleRuleDOMWrapper +{ +public: + explicit DOMCSSStyleRule(StyleRule *aRule); + + NS_DECL_CYCLE_COLLECTING_ISUPPORTS + NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(DOMCSSStyleRule) + NS_DECL_NSIDOMCSSRULE + NS_DECL_NSIDOMCSSSTYLERULE + + // nsICSSStyleRuleDOMWrapper + NS_IMETHOD GetCSSStyleRule(StyleRule **aResult) override; + + DOMCSSDeclarationImpl* DOMDeclaration() { return &mDOMDeclaration; } + + friend class ::DOMCSSDeclarationImpl; + +protected: + virtual ~DOMCSSStyleRule(); + + DOMCSSDeclarationImpl mDOMDeclaration; + + StyleRule* Rule() { + return mDOMDeclaration.mRule; + } +}; + +} // namespace css +} // namespace mozilla + DOMCSSDeclarationImpl::DOMCSSDeclarationImpl(css::StyleRule *aRule) : mRule(aRule) { @@ -1086,32 +1134,50 @@ DOMCSSDeclarationImpl::DOMCSSDeclarationImpl(css::StyleRule *aRule) DOMCSSDeclarationImpl::~DOMCSSDeclarationImpl(void) { + NS_ASSERTION(!mRule, "DropReference not called."); } -NS_IMPL_ADDREF_USING_AGGREGATOR(DOMCSSDeclarationImpl, mRule) -NS_IMPL_RELEASE_USING_AGGREGATOR(DOMCSSDeclarationImpl, mRule) +inline css::DOMCSSStyleRule* DOMCSSDeclarationImpl::DomRule() +{ + return reinterpret_cast + (reinterpret_cast(this) - + offsetof(css::DOMCSSStyleRule, mDOMDeclaration)); +} + +NS_IMPL_ADDREF_USING_AGGREGATOR(DOMCSSDeclarationImpl, DomRule()) +NS_IMPL_RELEASE_USING_AGGREGATOR(DOMCSSDeclarationImpl, DomRule()) NS_INTERFACE_MAP_BEGIN(DOMCSSDeclarationImpl) NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY - // We forward the cycle collection interfaces to mRule, which is - // never null. + // We forward the cycle collection interfaces to DomRule(), which is + // never null (in fact, we're part of that object!) if (aIID.Equals(NS_GET_IID(nsCycleCollectionISupports)) || aIID.Equals(NS_GET_IID(nsXPCOMCycleCollectionParticipant))) { - return mRule->QueryInterface(aIID, aInstancePtr); + return DomRule()->QueryInterface(aIID, aInstancePtr); } else NS_IMPL_QUERY_TAIL_INHERITING(nsDOMCSSDeclaration) +void +DOMCSSDeclarationImpl::DropReference(void) +{ + mRule = nullptr; +} + DeclarationBlock* DOMCSSDeclarationImpl::GetCSSDeclaration(Operation aOperation) { - if (aOperation != eOperation_Read) { - RefPtr sheet = mRule->GetStyleSheet(); - if (sheet) { - sheet->WillDirty(); + if (mRule) { + if (aOperation != eOperation_Read) { + RefPtr sheet = mRule->GetStyleSheet(); + if (sheet) { + sheet->WillDirty(); + } } + return mRule->GetDeclaration(); + } else { + return nullptr; } - return mRule->GetDeclaration(); } void @@ -1125,7 +1191,12 @@ DOMCSSDeclarationImpl::GetParentRule(nsIDOMCSSRule **aParent) { NS_ENSURE_ARG_POINTER(aParent); - NS_IF_ADDREF(*aParent = mRule); + if (!mRule) { + *aParent = nullptr; + return NS_OK; + } + + NS_IF_ADDREF(*aParent = mRule->GetDOMRule()); return NS_OK; } @@ -1161,46 +1232,151 @@ DOMCSSDeclarationImpl::DocToUpdate() return nullptr; } +namespace mozilla { +namespace css { + +DOMCSSStyleRule::DOMCSSStyleRule(StyleRule* aRule) + : mDOMDeclaration(aRule) +{ +} + +DOMCSSStyleRule::~DOMCSSStyleRule() +{ +} + +NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(DOMCSSStyleRule) + NS_INTERFACE_MAP_ENTRY(nsICSSStyleRuleDOMWrapper) + NS_INTERFACE_MAP_ENTRY(nsIDOMCSSStyleRule) + NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule) + NS_INTERFACE_MAP_ENTRY(nsISupports) + NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSStyleRule) +NS_INTERFACE_MAP_END + +NS_IMPL_CYCLE_COLLECTING_ADDREF(DOMCSSStyleRule) +NS_IMPL_CYCLE_COLLECTING_RELEASE(DOMCSSStyleRule) + +NS_IMPL_CYCLE_COLLECTION_CLASS(DOMCSSStyleRule) + +NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(DOMCSSStyleRule) + // Trace the wrapper for our declaration. This just expands out + // NS_IMPL_CYCLE_COLLECTION_TRACE_PRESERVED_WRAPPER which we can't use + // directly because the wrapper is on the declaration, not on us. + tmp->DOMDeclaration()->TraceWrapper(aCallbacks, aClosure); +NS_IMPL_CYCLE_COLLECTION_TRACE_END + +NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(DOMCSSStyleRule) + // Unlink the wrapper for our declaraton. This just expands out + // NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER which we can't use + // directly because the wrapper is on the declaration, not on us. + tmp->DOMDeclaration()->ReleaseWrapper(static_cast(p)); +NS_IMPL_CYCLE_COLLECTION_UNLINK_END + +NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(DOMCSSStyleRule) +NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END + +NS_IMETHODIMP +DOMCSSStyleRule::GetType(uint16_t* aType) +{ + *aType = nsIDOMCSSRule::STYLE_RULE; + + return NS_OK; +} + +NS_IMETHODIMP +DOMCSSStyleRule::GetCssText(nsAString& aCssText) +{ + if (!Rule()) { + aCssText.Truncate(); + } else { + Rule()->GetCssText(aCssText); + } + return NS_OK; +} + +NS_IMETHODIMP +DOMCSSStyleRule::SetCssText(const nsAString& aCssText) +{ + if (Rule()) { + Rule()->SetCssText(aCssText); + } + return NS_OK; +} + +NS_IMETHODIMP +DOMCSSStyleRule::GetParentStyleSheet(nsIDOMCSSStyleSheet** aSheet) +{ + if (!Rule()) { + *aSheet = nullptr; + return NS_OK; + } + return Rule()->GetParentStyleSheet(aSheet); +} + +NS_IMETHODIMP +DOMCSSStyleRule::GetParentRule(nsIDOMCSSRule** aParentRule) +{ + if (!Rule()) { + *aParentRule = nullptr; + return NS_OK; + } + return Rule()->GetParentRule(aParentRule); +} + +css::Rule* +DOMCSSStyleRule::GetCSSRule() +{ + return Rule(); +} + +NS_IMETHODIMP +DOMCSSStyleRule::GetSelectorText(nsAString& aSelectorText) +{ + if (!Rule()) { + aSelectorText.Truncate(); + } else { + Rule()->GetSelectorText(aSelectorText); + } + return NS_OK; +} + +NS_IMETHODIMP +DOMCSSStyleRule::SetSelectorText(const nsAString& aSelectorText) +{ + if (Rule()) { + Rule()->SetSelectorText(aSelectorText); + } + return NS_OK; +} + +NS_IMETHODIMP +DOMCSSStyleRule::GetStyle(nsIDOMCSSStyleDeclaration** aStyle) +{ + *aStyle = &mDOMDeclaration; + NS_ADDREF(*aStyle); + return NS_OK; +} + +NS_IMETHODIMP +DOMCSSStyleRule::GetCSSStyleRule(StyleRule **aResult) +{ + *aResult = Rule(); + NS_IF_ADDREF(*aResult); + return NS_OK; +} + +} // namespace css +} // namespace mozilla + // -- StyleRule ------------------------------------ namespace mozilla { namespace css { -uint16_t -StyleRule::Type() const -{ - return nsIDOMCSSRule::STYLE_RULE; -} - -NS_IMETHODIMP -StyleRule::GetStyle(nsIDOMCSSStyleDeclaration** aStyle) -{ - NS_ADDREF(*aStyle = Style()); - return NS_OK; -} - -nsICSSDeclaration* -StyleRule::Style() -{ - if (!mDOMDeclaration) { - mDOMDeclaration.reset(new DOMCSSDeclarationImpl(this)); - } - return mDOMDeclaration.get(); -} - -NS_IMETHODIMP -StyleRule::GetCSSStyleRule(StyleRule **aResult) -{ - *aResult = this; - NS_ADDREF(*aResult); - return NS_OK; -} - StyleRule::StyleRule(nsCSSSelectorList* aSelector, Declaration* aDeclaration, uint32_t aLineNumber, uint32_t aColumnNumber) - : BindingStyleRule(aLineNumber, aColumnNumber), + : Rule(aLineNumber, aColumnNumber), mSelector(aSelector), mDeclaration(aDeclaration) { @@ -1211,7 +1387,7 @@ StyleRule::StyleRule(nsCSSSelectorList* aSelector, // for |Clone| StyleRule::StyleRule(const StyleRule& aCopy) - : BindingStyleRule(aCopy), + : Rule(aCopy), mSelector(aCopy.mSelector ? aCopy.mSelector->Clone() : nullptr), mDeclaration(new Declaration(*aCopy.mDeclaration)) { @@ -1222,54 +1398,28 @@ StyleRule::StyleRule(const StyleRule& aCopy) StyleRule::~StyleRule() { delete mSelector; - DropReferences(); -} + if (mDOMRule) { + mDOMRule->DOMDeclaration()->DropReference(); + } -void -StyleRule::DropReferences() -{ if (mDeclaration) { mDeclaration->SetOwningRule(nullptr); - mDeclaration = nullptr; } } // QueryInterface implementation for StyleRule -NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(StyleRule) +NS_INTERFACE_MAP_BEGIN(StyleRule) if (aIID.Equals(NS_GET_IID(mozilla::css::StyleRule))) { *aInstancePtr = this; NS_ADDREF_THIS(); return NS_OK; } else - NS_INTERFACE_MAP_ENTRY(nsICSSStyleRuleDOMWrapper) - NS_INTERFACE_MAP_ENTRY(nsIDOMCSSStyleRule) -NS_INTERFACE_MAP_END_INHERITING(Rule) + NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, mozilla::css::Rule) +NS_INTERFACE_MAP_END -NS_IMPL_ADDREF_INHERITED(StyleRule, Rule) -NS_IMPL_RELEASE_INHERITED(StyleRule, Rule) - -NS_IMPL_CYCLE_COLLECTION_CLASS(StyleRule) -NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED(StyleRule, Rule) - // Trace the wrapper for our declaration. This just expands out - // NS_IMPL_CYCLE_COLLECTION_TRACE_PRESERVED_WRAPPER which we can't use - // directly because the wrapper is on the declaration, not on us. - if (tmp->mDOMDeclaration) { - tmp->mDOMDeclaration->TraceWrapper(aCallbacks, aClosure); - } -NS_IMPL_CYCLE_COLLECTION_TRACE_END -NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(StyleRule, Rule) - // Unlink the wrapper for our declaraton. This just expands out - // NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER which we can't use - // directly because the wrapper is on the declaration, not on us. - if (tmp->mDOMDeclaration) { - tmp->mDOMDeclaration->ReleaseWrapper(static_cast(p)); - } - tmp->DropReferences(); -NS_IMPL_CYCLE_COLLECTION_UNLINK_END -NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(StyleRule, Rule) - NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mDeclaration) -NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END +NS_IMPL_ADDREF(StyleRule) +NS_IMPL_RELEASE(StyleRule) /* virtual */ int32_t StyleRule::GetType() const @@ -1284,6 +1434,27 @@ StyleRule::Clone() const return clone.forget(); } +/* virtual */ nsIDOMCSSRule* +StyleRule::GetDOMRule() +{ + if (!mDOMRule) { + if (!GetStyleSheet()) { + // Inline style rules aren't supposed to have a DOM rule object, only + // a declaration. But if we do have one already, from a style sheet + // rule that used to be in a document, we still want to return it. + return nullptr; + } + mDOMRule = new DOMCSSStyleRule(this); + } + return mDOMRule; +} + +/* virtual */ nsIDOMCSSRule* +StyleRule::GetExistingDOMRule() +{ + return mDOMRule; +} + void StyleRule::SetDeclaration(Declaration* aDecl) { @@ -1339,7 +1510,7 @@ StyleRule::List(FILE* out, int32_t aIndent) const #endif void -StyleRule::GetCssTextImpl(nsAString& aCssText) const +StyleRule::GetCssText(nsAString& aCssText) { if (mSelector) { mSelector->ToString(aCssText, GetStyleSheet()); @@ -1357,23 +1528,27 @@ StyleRule::GetCssTextImpl(nsAString& aCssText) const aCssText.Append(char16_t('}')); } -NS_IMETHODIMP +void +StyleRule::SetCssText(const nsAString& aCssText) +{ + // XXX TBI - need to re-parse rule & declaration +} + +void StyleRule::GetSelectorText(nsAString& aSelectorText) { if (mSelector) mSelector->ToString(aSelectorText, GetStyleSheet()); else aSelectorText.Truncate(); - return NS_OK; } -NS_IMETHODIMP +void StyleRule::SetSelectorText(const nsAString& aSelectorText) { // XXX TBI - get a parser and re-parse the selectors, // XXX then need to re-compute the cascade // XXX and dirty sheet - return NS_OK; } /* virtual */ size_t @@ -1390,5 +1565,6 @@ StyleRule::SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const return n; } + } // namespace css } // namespace mozilla diff --git a/layout/style/StyleRule.h b/layout/style/StyleRule.h index f0d6c8ae814e..2b079d30f1f9 100644 --- a/layout/style/StyleRule.h +++ b/layout/style/StyleRule.h @@ -13,14 +13,12 @@ #include "mozilla/Attributes.h" #include "mozilla/MemoryReporting.h" -#include "mozilla/UniquePtr.h" -#include "mozilla/BindingStyleRule.h" +#include "mozilla/css/Rule.h" #include "nsString.h" #include "nsCOMPtr.h" #include "nsCSSPseudoElements.h" #include "nsIStyleRule.h" -#include "nsICSSStyleRuleDOMWrapper.h" class nsIAtom; struct nsCSSSelectorList; @@ -304,15 +302,13 @@ private: { 0x464bab7a, 0x2fce, 0x4f30, \ { 0xab, 0x44, 0xb7, 0xa5, 0xf3, 0xaa, 0xe5, 0x7d } } -class DOMCSSDeclarationImpl; - namespace mozilla { namespace css { class Declaration; +class DOMCSSStyleRule; -class StyleRule final : public BindingStyleRule - , public nsICSSStyleRuleDOMWrapper +class StyleRule final : public Rule { public: StyleRule(nsCSSSelectorList* aSelector, @@ -324,17 +320,7 @@ private: public: NS_DECLARE_STATIC_IID_ACCESSOR(NS_CSS_STYLE_RULE_IMPL_CID) - NS_DECL_ISUPPORTS_INHERITED - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(StyleRule, Rule) - NS_DECL_NSIDOMCSSSTYLERULE - - // nsICSSStyleRuleDOMWrapper - NS_IMETHOD GetCSSStyleRule(StyleRule **aResult) override; - - // WebIDL interface - uint16_t Type() const override; - void GetCssTextImpl(nsAString& aCssText) const override; - virtual nsICSSDeclaration* Style() override; + NS_DECL_ISUPPORTS // null for style attribute nsCSSSelectorList* Selector() { return mSelector; } @@ -343,8 +329,13 @@ public: void SetDeclaration(Declaration* aDecl); + // hooks for DOM rule + void GetCssText(nsAString& aCssText); + void SetCssText(const nsAString& aCssText); + void GetSelectorText(nsAString& aSelectorText); + void SetSelectorText(const nsAString& aSelectorText); + virtual int32_t GetType() const override; - using Rule::GetType; CSSStyleSheet* GetStyleSheet() const { @@ -354,6 +345,10 @@ public: virtual already_AddRefed Clone() const override; + virtual nsIDOMCSSRule* GetDOMRule() override; + + virtual nsIDOMCSSRule* GetExistingDOMRule() override; + #ifdef DEBUG virtual void List(FILE* out = stdout, int32_t aIndent = 0) const override; #endif @@ -363,16 +358,10 @@ public: private: ~StyleRule(); - // Drop our references to mDeclaration and mRule, and let them know we're - // doing that. - void DropReferences(); - private: nsCSSSelectorList* mSelector; // null for style attribute RefPtr mDeclaration; - - // We own it, and it aggregates its refcount with us. - UniquePtr mDOMDeclaration; + RefPtr mDOMRule; private: StyleRule& operator=(const StyleRule& aCopy) = delete; diff --git a/layout/style/StyleSheet.h b/layout/style/StyleSheet.h index d231caf20c2b..b12200c75fd5 100644 --- a/layout/style/StyleSheet.h +++ b/layout/style/StyleSheet.h @@ -33,10 +33,6 @@ class CSSRuleList; class SRIMetadata; } // namespace dom -namespace css { -class Rule; -} - /** * Superclass for data common to CSSStyleSheet and ServoStyleSheet. */ @@ -152,7 +148,7 @@ public: // The XPCOM SetDisabled is fine for WebIDL. // WebIDL CSSStyleSheet API - virtual css::Rule* GetDOMOwnerRule() const = 0; + virtual nsIDOMCSSRule* GetDOMOwnerRule() const = 0; dom::CSSRuleList* GetCssRules(nsIPrincipal& aSubjectPrincipal, ErrorResult& aRv); uint32_t InsertRule(const nsAString& aRule, uint32_t aIndex, diff --git a/layout/style/moz.build b/layout/style/moz.build index 482496a9173f..27854fc1204f 100644 --- a/layout/style/moz.build +++ b/layout/style/moz.build @@ -81,7 +81,6 @@ EXPORTS += [ EXPORTS.mozilla += [ 'AnimationCollection.h', - 'BindingStyleRule.h', 'CSSEnabledState.h', 'CSSStyleSheet.h', 'CSSVariableDeclarations.h', @@ -217,18 +216,10 @@ UNIFIED_SOURCES += [ 'SVGAttrAnimationRuleProcessor.cpp', ] -# - BindingStyleRule.cpp doesn't _really_ needs to be built separately, -# except insofar as it shifts unified build boundaries, causing -# Unified_cpp_layout_style4.cpp to include nsStyleCoord.cpp, which -# includes, via nsStyleCoord.h, , which ends up including -# , which fails in much the way described in -# . -# - nsCSSRuleProcessor.cpp needs to be built separately because it uses -# plarena.h. -# - nsLayoutStylesheetCache.cpp needs to be built separately because it uses +# nsCSSRuleProcessor.cpp needs to be built separately because it uses plarena.h. +# nsLayoutStylesheetCache.cpp needs to be built separately because it uses # nsExceptionHandler.h, which includes windows.h. SOURCES += [ - 'BindingStyleRule.cpp', 'nsCSSRuleProcessor.cpp', 'nsLayoutStylesheetCache.cpp', ] diff --git a/layout/style/nsCSSRules.cpp b/layout/style/nsCSSRules.cpp index 1af9664e10b1..cdf331b24074 100644 --- a/layout/style/nsCSSRules.cpp +++ b/layout/style/nsCSSRules.cpp @@ -33,17 +33,6 @@ #include "nsCSSParser.h" #include "nsDOMClassInfoID.h" #include "mozilla/dom/CSSStyleDeclarationBinding.h" -#include "mozilla/dom/CSSNamespaceRuleBinding.h" -#include "mozilla/dom/CSSImportRuleBinding.h" -#include "mozilla/dom/CSSMediaRuleBinding.h" -#include "mozilla/dom/CSSSupportsRuleBinding.h" -#include "mozilla/dom/CSSMozDocumentRuleBinding.h" -#include "mozilla/dom/CSSPageRuleBinding.h" -#include "mozilla/dom/CSSFontFaceRuleBinding.h" -#include "mozilla/dom/CSSFontFeatureValuesRuleBinding.h" -#include "mozilla/dom/CSSKeyframeRuleBinding.h" -#include "mozilla/dom/CSSKeyframesRuleBinding.h" -#include "mozilla/dom/CSSCounterStyleRuleBinding.h" #include "StyleRule.h" #include "nsFont.h" #include "nsIURI.h" @@ -52,22 +41,20 @@ using namespace mozilla; using namespace mozilla::dom; +#define IMPL_STYLE_RULE_INHERIT_GET_DOM_RULE_WEAK(class_, super_) \ + /* virtual */ nsIDOMCSSRule* class_::GetDOMRule() \ + { return this; } \ + /* virtual */ nsIDOMCSSRule* class_::GetExistingDOMRule() \ + { return this; } + +#define IMPL_STYLE_RULE_INHERIT(class_, super_) \ +IMPL_STYLE_RULE_INHERIT_GET_DOM_RULE_WEAK(class_, super_) + // base class for all rule types in a CSS style sheet namespace mozilla { namespace css { -NS_IMPL_CYCLE_COLLECTING_ADDREF(Rule) -NS_IMPL_CYCLE_COLLECTING_RELEASE(Rule) - -NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(Rule) - NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY - NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule) - NS_INTERFACE_MAP_ENTRY(nsISupports) -NS_INTERFACE_MAP_END - -NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_0(Rule) - /* virtual */ void Rule::SetStyleSheet(StyleSheet* aSheet) { @@ -77,14 +64,18 @@ Rule::SetStyleSheet(StyleSheet* aSheet) mSheet = aSheet; } -NS_IMETHODIMP +nsresult Rule::GetParentRule(nsIDOMCSSRule** aParentRule) { - NS_IF_ADDREF(*aParentRule = mParentRule); + if (mParentRule) { + NS_IF_ADDREF(*aParentRule = mParentRule->GetDOMRule()); + } else { + *aParentRule = nullptr; + } return NS_OK; } -NS_IMETHODIMP +nsresult Rule::GetParentStyleSheet(nsIDOMCSSStyleSheet** aSheet) { NS_ENSURE_ARG_POINTER(aSheet); @@ -93,40 +84,12 @@ Rule::GetParentStyleSheet(nsIDOMCSSStyleSheet** aSheet) return NS_OK; } -/* virtual */ css::Rule* +css::Rule* Rule::GetCSSRule() { return this; } -NS_IMETHODIMP -Rule::GetType(uint16_t* aType) -{ - *aType = Type(); - return NS_OK; -} - -NS_IMETHODIMP -Rule::SetCssText(const nsAString& aCssText) -{ - // We used to throw for some rule types, but not all. Specifically, we did - // not throw for StyleRule. Let's just always not throw. - return NS_OK; -} - -NS_IMETHODIMP -Rule::GetCssText(nsAString& aCssText) -{ - GetCssTextImpl(aCssText); - return NS_OK; -} - -Rule* -Rule::GetParentRule() const -{ - return mParentRule; -} - // ------------------------------- // Style Rule List for group rules // @@ -138,7 +101,7 @@ public: virtual CSSStyleSheet* GetParentObject() override; - virtual Rule* + virtual nsIDOMCSSRule* IndexedGetter(uint32_t aIndex, bool& aFound) override; virtual uint32_t Length() override; @@ -183,7 +146,7 @@ GroupRuleRuleList::Length() return AssertedCast(mGroupRule->StyleRuleCount()); } -Rule* +nsIDOMCSSRule* GroupRuleRuleList::IndexedGetter(uint32_t aIndex, bool& aFound) { aFound = false; @@ -192,7 +155,7 @@ GroupRuleRuleList::IndexedGetter(uint32_t aIndex, bool& aFound) RefPtr rule = mGroupRule->GetStyleRuleAt(aIndex); if (rule) { aFound = true; - return rule; + return rule->GetDOMRule(); } } @@ -209,7 +172,6 @@ ImportRule::ImportRule(nsMediaList* aMedia, const nsString& aURLSpec, , mURLSpec(aURLSpec) , mMedia(aMedia) { - MOZ_ASSERT(aMedia); // XXXbz This is really silly.... the mMedia here will be replaced // with itself if we manage to load a sheet. Which should really // never fail nowadays, in sane cases. @@ -237,15 +199,20 @@ ImportRule::~ImportRule() } } -NS_IMPL_ADDREF_INHERITED(ImportRule, Rule) -NS_IMPL_RELEASE_INHERITED(ImportRule, Rule) +NS_IMPL_CYCLE_COLLECTING_ADDREF(ImportRule) +NS_IMPL_CYCLE_COLLECTING_RELEASE(ImportRule) -NS_IMPL_CYCLE_COLLECTION_INHERITED(ImportRule, Rule, mMedia, mChildSheet) +NS_IMPL_CYCLE_COLLECTION(ImportRule, mMedia, mChildSheet) // QueryInterface implementation for ImportRule -NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(ImportRule) +NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(ImportRule) + NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule) NS_INTERFACE_MAP_ENTRY(nsIDOMCSSImportRule) -NS_INTERFACE_MAP_END_INHERITING(Rule) + NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, mozilla::css::Rule) + NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSImportRule) +NS_INTERFACE_MAP_END + +IMPL_STYLE_RULE_INHERIT(ImportRule, Rule) #ifdef DEBUG /* virtual */ void @@ -295,14 +262,16 @@ ImportRule::SetSheet(CSSStyleSheet* aSheet) mMedia = mChildSheet->Media(); } -uint16_t -ImportRule::Type() const +NS_IMETHODIMP +ImportRule::GetType(uint16_t* aType) { - return nsIDOMCSSRule::IMPORT_RULE; + NS_ENSURE_ARG_POINTER(aType); + *aType = nsIDOMCSSRule::IMPORT_RULE; + return NS_OK; } -void -ImportRule::GetCssTextImpl(nsAString& aCssText) const +NS_IMETHODIMP +ImportRule::GetCssText(nsAString& aCssText) { aCssText.AssignLiteral("@import url("); nsStyleUtil::AppendEscapedCSSString(mURLSpec, aCssText); @@ -316,12 +285,31 @@ ImportRule::GetCssTextImpl(nsAString& aCssText) const } } aCssText.Append(';'); + return NS_OK; } -StyleSheet* -ImportRule::GetStyleSheet() const +NS_IMETHODIMP +ImportRule::SetCssText(const nsAString& aCssText) { - return mChildSheet; + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +ImportRule::GetParentStyleSheet(nsIDOMCSSStyleSheet** aSheet) +{ + return Rule::GetParentStyleSheet(aSheet); +} + +NS_IMETHODIMP +ImportRule::GetParentRule(nsIDOMCSSRule** aParentRule) +{ + return Rule::GetParentRule(aParentRule); +} + +css::Rule* +ImportRule::GetCSSRule() +{ + return Rule::GetCSSRule(); } NS_IMETHODIMP @@ -336,7 +324,7 @@ ImportRule::GetMedia(nsIDOMMediaList * *aMedia) { NS_ENSURE_ARG_POINTER(aMedia); - NS_ADDREF(*aMedia = mMedia); + NS_IF_ADDREF(*aMedia = mMedia); return NS_OK; } @@ -363,13 +351,6 @@ ImportRule::SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const // - mChildSheet, because it is measured via CSSStyleSheetInner::mSheets } -/* virtual */ JSObject* -ImportRule::WrapObject(JSContext* aCx, - JS::Handle aGivenProto) -{ - return CSSImportRuleBinding::Wrap(aCx, this, aGivenProto); -} - GroupRule::GroupRule(uint32_t aLineNumber, uint32_t aColumnNumber) : Rule(aLineNumber, aColumnNumber) { @@ -399,11 +380,11 @@ GroupRule::~GroupRule() } } -NS_IMPL_ADDREF_INHERITED(GroupRule, Rule) -NS_IMPL_RELEASE_INHERITED(GroupRule, Rule) +NS_IMPL_CYCLE_COLLECTING_ADDREF(GroupRule) +NS_IMPL_CYCLE_COLLECTING_RELEASE(GroupRule) -NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(GroupRule) -NS_INTERFACE_MAP_END_INHERITING(Rule) +NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(GroupRule) +NS_INTERFACE_MAP_END static bool SetStyleSheetReference(Rule* aRule, void* aSheet) @@ -414,7 +395,7 @@ SetStyleSheetReference(Rule* aRule, void* aSheet) NS_IMPL_CYCLE_COLLECTION_CLASS(GroupRule) -NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(GroupRule, Rule) +NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(GroupRule) tmp->mRules.EnumerateForwards(SetParentRuleReference, nullptr); // If tmp does not have a stylesheet, neither do its descendants. In that // case, don't try to null out their stylesheet, to avoid O(N^2) behavior in @@ -432,11 +413,11 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(GroupRule, Rule) } NS_IMPL_CYCLE_COLLECTION_UNLINK_END -NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(GroupRule, Rule) +NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(GroupRule) const nsCOMArray& rules = tmp->mRules; for (int32_t i = 0, count = rules.Count(); i < count; ++i) { NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mRules[i]"); - cb.NoteXPCOMChild(rules[i]); + cb.NoteXPCOMChild(rules[i]->GetExistingDOMRule()); } NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mRuleCollection) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END @@ -518,18 +499,21 @@ GroupRule::InsertStyleRuleAt(uint32_t aIndex, Rule* aRule) } void -GroupRule::AppendRulesToCssText(nsAString& aCssText) const +GroupRule::AppendRulesToCssText(nsAString& aCssText) { aCssText.AppendLiteral(" {\n"); // get all the rules for (int32_t index = 0, count = mRules.Count(); index < count; ++index) { Rule* rule = mRules.ObjectAt(index); - nsAutoString cssText; - rule->GetCssText(cssText); - aCssText.AppendLiteral(" "); - aCssText.Append(cssText); - aCssText.Append('\n'); + nsIDOMCSSRule* domRule = rule->GetDOMRule(); + if (domRule) { + nsAutoString cssText; + domRule->GetCssText(cssText); + aCssText.AppendLiteral(" "); + aCssText.Append(cssText); + aCssText.Append('\n'); + } } aCssText.Append('}'); @@ -538,85 +522,43 @@ GroupRule::AppendRulesToCssText(nsAString& aCssText) const // nsIDOMCSSMediaRule or nsIDOMCSSMozDocumentRule methods nsresult GroupRule::GetCssRules(nsIDOMCSSRuleList* *aRuleList) -{ - NS_ADDREF(*aRuleList = CssRules()); - return NS_OK; -} - -CSSRuleList* -GroupRule::CssRules() { if (!mRuleCollection) { mRuleCollection = new css::GroupRuleRuleList(this); } - return mRuleCollection; + NS_ADDREF(*aRuleList = mRuleCollection); + return NS_OK; } nsresult GroupRule::InsertRule(const nsAString & aRule, uint32_t aIndex, uint32_t* _retval) -{ - ErrorResult rv; - *_retval = InsertRule(aRule, aIndex, rv); - return rv.StealNSResult(); -} - -uint32_t -GroupRule::InsertRule(const nsAString& aRule, uint32_t aIndex, ErrorResult& aRv) { StyleSheet* sheet = GetStyleSheet(); - if (NS_WARN_IF(!sheet)) { - aRv.Throw(NS_ERROR_FAILURE); - return 0; - } - - if (aIndex > uint32_t(mRules.Count())) { - aRv.Throw(NS_ERROR_DOM_INDEX_SIZE_ERR); - return 0; - } + NS_ENSURE_TRUE(sheet, NS_ERROR_FAILURE); + + if (aIndex > uint32_t(mRules.Count())) + return NS_ERROR_DOM_INDEX_SIZE_ERR; NS_ASSERTION(uint32_t(mRules.Count()) <= INT32_MAX, "Too many style rules!"); - uint32_t retval; - nsresult rv = - sheet->AsGecko()->InsertRuleIntoGroup(aRule, this, aIndex, &retval); - if (NS_FAILED(rv)) { - aRv.Throw(rv); - return 0; - } - return retval; + return sheet->AsGecko()->InsertRuleIntoGroup(aRule, this, aIndex, _retval); } nsresult GroupRule::DeleteRule(uint32_t aIndex) -{ - ErrorResult rv; - DeleteRule(aIndex, rv); - return rv.StealNSResult(); -} - -void -GroupRule::DeleteRule(uint32_t aIndex, ErrorResult& aRv) { StyleSheet* sheet = GetStyleSheet(); - if (NS_WARN_IF(!sheet)) { - aRv.Throw(NS_ERROR_FAILURE); - return; - } + NS_ENSURE_TRUE(sheet, NS_ERROR_FAILURE); - if (aIndex >= uint32_t(mRules.Count())) { - aRv.Throw(NS_ERROR_DOM_INDEX_SIZE_ERR); - return; - } + if (aIndex >= uint32_t(mRules.Count())) + return NS_ERROR_DOM_INDEX_SIZE_ERR; NS_ASSERTION(uint32_t(mRules.Count()) <= INT32_MAX, "Too many style rules!"); - nsresult rv = sheet->AsGecko()->DeleteRuleFromGroup(this, aIndex); - if (NS_FAILED(rv)) { - aRv.Throw(rv); - } + return sheet->AsGecko()->DeleteRuleFromGroup(this, aIndex); } /* virtual */ size_t @@ -633,30 +575,17 @@ GroupRule::SizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const return n; } -ConditionRule::ConditionRule(uint32_t aLineNumber, uint32_t aColumnNumber) - : GroupRule(aLineNumber, aColumnNumber) -{ -} - -ConditionRule::ConditionRule(const ConditionRule& aCopy) - : GroupRule(aCopy) -{ -} - -ConditionRule::~ConditionRule() -{ -} // ------------------------------------------- // nsICSSMediaRule // MediaRule::MediaRule(uint32_t aLineNumber, uint32_t aColumnNumber) - : ConditionRule(aLineNumber, aColumnNumber) + : GroupRule(aLineNumber, aColumnNumber) { } MediaRule::MediaRule(const MediaRule& aCopy) - : ConditionRule(aCopy) + : GroupRule(aCopy) { if (aCopy.mMedia) { mMedia = aCopy.mMedia->Clone(); @@ -672,18 +601,18 @@ MediaRule::~MediaRule() } } -NS_IMPL_ADDREF_INHERITED(MediaRule, ConditionRule) -NS_IMPL_RELEASE_INHERITED(MediaRule, ConditionRule) +NS_IMPL_ADDREF_INHERITED(MediaRule, GroupRule) +NS_IMPL_RELEASE_INHERITED(MediaRule, GroupRule) // QueryInterface implementation for MediaRule -NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(MediaRule) +NS_INTERFACE_MAP_BEGIN(MediaRule) + NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule) NS_INTERFACE_MAP_ENTRY(nsIDOMCSSGroupingRule) NS_INTERFACE_MAP_ENTRY(nsIDOMCSSConditionRule) NS_INTERFACE_MAP_ENTRY(nsIDOMCSSMediaRule) -NS_INTERFACE_MAP_END_INHERITING(ConditionRule) - -NS_IMPL_CYCLE_COLLECTION_INHERITED(MediaRule, ConditionRule, - mMedia) + NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, mozilla::css::Rule) + NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSMediaRule) +NS_INTERFACE_MAP_END_INHERITING(GroupRule) /* virtual */ void MediaRule::SetStyleSheet(StyleSheet* aSheet) @@ -748,26 +677,45 @@ MediaRule::SetMedia(nsMediaList* aMedia) return NS_OK; } -uint16_t -MediaRule::Type() const +// nsIDOMCSSRule methods +NS_IMETHODIMP +MediaRule::GetType(uint16_t* aType) { - return nsIDOMCSSRule::MEDIA_RULE; + *aType = nsIDOMCSSRule::MEDIA_RULE; + return NS_OK; } -nsMediaList* -MediaRule::Media() const -{ - // In practice, if we end up being parsed at all, we have non-null mMedia. So - // it's OK to claim we don't return null here. - return mMedia; -} - -void -MediaRule::GetCssTextImpl(nsAString& aCssText) const +NS_IMETHODIMP +MediaRule::GetCssText(nsAString& aCssText) { aCssText.AssignLiteral("@media "); AppendConditionText(aCssText); GroupRule::AppendRulesToCssText(aCssText); + return NS_OK; +} + +NS_IMETHODIMP +MediaRule::SetCssText(const nsAString& aCssText) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +MediaRule::GetParentStyleSheet(nsIDOMCSSStyleSheet** aSheet) +{ + return GroupRule::GetParentStyleSheet(aSheet); +} + +NS_IMETHODIMP +MediaRule::GetParentRule(nsIDOMCSSRule** aParentRule) +{ + return GroupRule::GetParentRule(aParentRule); +} + +css::Rule* +MediaRule::GetCSSRule() +{ + return Rule::GetCSSRule(); } // nsIDOMCSSGroupingRule methods @@ -800,15 +748,6 @@ MediaRule::GetConditionText(nsAString& aConditionText) NS_IMETHODIMP MediaRule::SetConditionText(const nsAString& aConditionText) -{ - ErrorResult rv; - SetConditionText(aConditionText, rv); - return rv.StealNSResult(); -} - -void -MediaRule::SetConditionText(const nsAString& aConditionText, - ErrorResult& aRv) { if (!mMedia) { RefPtr media = new nsMediaList(); @@ -816,16 +755,11 @@ MediaRule::SetConditionText(const nsAString& aConditionText, nsresult rv = media->SetMediaText(aConditionText); if (NS_SUCCEEDED(rv)) { mMedia = media; - } else { - aRv.Throw(rv); } - return; + return rv; } - nsresult rv = mMedia->SetMediaText(aConditionText); - if (NS_FAILED(rv)) { - aRv.Throw(rv); - } + return mMedia->SetMediaText(aConditionText); } // nsIDOMCSSMediaRule methods @@ -861,15 +795,8 @@ MediaRule::SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const return n; } -/* virtual */ JSObject* -MediaRule::WrapObject(JSContext* aCx, - JS::Handle aGivenProto) -{ - return CSSMediaRuleBinding::Wrap(aCx, this, aGivenProto); -} - void -MediaRule::AppendConditionText(nsAString& aOutput) const +MediaRule::AppendConditionText(nsAString& aOutput) { if (mMedia) { nsAutoString mediaText; @@ -879,12 +806,12 @@ MediaRule::AppendConditionText(nsAString& aOutput) const } DocumentRule::DocumentRule(uint32_t aLineNumber, uint32_t aColumnNumber) - : ConditionRule(aLineNumber, aColumnNumber) + : GroupRule(aLineNumber, aColumnNumber) { } DocumentRule::DocumentRule(const DocumentRule& aCopy) - : ConditionRule(aCopy) + : GroupRule(aCopy) , mURLs(new URL(*aCopy.mURLs)) { } @@ -893,15 +820,18 @@ DocumentRule::~DocumentRule() { } -NS_IMPL_ADDREF_INHERITED(DocumentRule, ConditionRule) -NS_IMPL_RELEASE_INHERITED(DocumentRule, ConditionRule) +NS_IMPL_ADDREF_INHERITED(DocumentRule, GroupRule) +NS_IMPL_RELEASE_INHERITED(DocumentRule, GroupRule) // QueryInterface implementation for DocumentRule NS_INTERFACE_MAP_BEGIN(DocumentRule) + NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule) NS_INTERFACE_MAP_ENTRY(nsIDOMCSSGroupingRule) NS_INTERFACE_MAP_ENTRY(nsIDOMCSSConditionRule) NS_INTERFACE_MAP_ENTRY(nsIDOMCSSMozDocumentRule) -NS_INTERFACE_MAP_END_INHERITING(ConditionRule) + NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, mozilla::css::Rule) + NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSMozDocumentRule) +NS_INTERFACE_MAP_END_INHERITING(GroupRule) #ifdef DEBUG /* virtual */ void @@ -956,19 +886,46 @@ DocumentRule::Clone() const return clone.forget(); } -uint16_t -DocumentRule::Type() const +// nsIDOMCSSRule methods +NS_IMETHODIMP +DocumentRule::GetType(uint16_t* aType) { // XXX What should really happen here? - return nsIDOMCSSRule::UNKNOWN_RULE; + *aType = nsIDOMCSSRule::UNKNOWN_RULE; + return NS_OK; } -void -DocumentRule::GetCssTextImpl(nsAString& aCssText) const +NS_IMETHODIMP +DocumentRule::GetCssText(nsAString& aCssText) { aCssText.AssignLiteral("@-moz-document "); AppendConditionText(aCssText); GroupRule::AppendRulesToCssText(aCssText); + return NS_OK; +} + +NS_IMETHODIMP +DocumentRule::SetCssText(const nsAString& aCssText) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +DocumentRule::GetParentStyleSheet(nsIDOMCSSStyleSheet** aSheet) +{ + return GroupRule::GetParentStyleSheet(aSheet); +} + +NS_IMETHODIMP +DocumentRule::GetParentRule(nsIDOMCSSRule** aParentRule) +{ + return GroupRule::GetParentRule(aParentRule); +} + +css::Rule* +DocumentRule::GetCSSRule() +{ + return Rule::GetCSSRule(); } // nsIDOMCSSGroupingRule methods @@ -1005,13 +962,6 @@ DocumentRule::SetConditionText(const nsAString& aConditionText) return NS_ERROR_NOT_IMPLEMENTED; } -void -DocumentRule::SetConditionText(const nsAString& aConditionText, - ErrorResult& aRv) -{ - aRv.Throw(NS_ERROR_NOT_IMPLEMENTED); -} - // GroupRule interface /* virtual */ bool DocumentRule::UseForPresentation(nsPresContext* aPresContext, @@ -1087,15 +1037,8 @@ DocumentRule::SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const return n; } -/* virtual */ JSObject* -DocumentRule::WrapObject(JSContext* aCx, - JS::Handle aGivenProto) -{ - return CSSMozDocumentRuleBinding::Wrap(aCx, this, aGivenProto); -} - void -DocumentRule::AppendConditionText(nsAString& aCssText) const +DocumentRule::AppendConditionText(nsAString& aCssText) { for (URL *url = mURLs; url; url = url->next) { switch (url->func) { @@ -1142,8 +1085,8 @@ NameSpaceRule::~NameSpaceRule() { } -NS_IMPL_ADDREF_INHERITED(NameSpaceRule, Rule) -NS_IMPL_RELEASE_INHERITED(NameSpaceRule, Rule) +NS_IMPL_ADDREF(NameSpaceRule) +NS_IMPL_RELEASE(NameSpaceRule) // QueryInterface implementation for NameSpaceRule NS_INTERFACE_MAP_BEGIN(NameSpaceRule) @@ -1153,7 +1096,12 @@ NS_INTERFACE_MAP_BEGIN(NameSpaceRule) return NS_OK; } else -NS_INTERFACE_MAP_END_INHERITING(Rule) + NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule) + NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, mozilla::css::Rule) + NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSNameSpaceRule) +NS_INTERFACE_MAP_END + +IMPL_STYLE_RULE_INHERIT(NameSpaceRule, Rule) #ifdef DEBUG /* virtual */ void @@ -1194,14 +1142,15 @@ NameSpaceRule::Clone() const return clone.forget(); } -uint16_t -NameSpaceRule::Type() const +NS_IMETHODIMP +NameSpaceRule::GetType(uint16_t* aType) { - return nsIDOMCSSRule::NAMESPACE_RULE; + *aType = nsIDOMCSSRule::NAMESPACE_RULE; + return NS_OK; } -void -NameSpaceRule::GetCssTextImpl(nsAString& aCssText) const +NS_IMETHODIMP +NameSpaceRule::GetCssText(nsAString& aCssText) { aCssText.AssignLiteral("@namespace "); if (mPrefix) { @@ -1210,6 +1159,31 @@ NameSpaceRule::GetCssTextImpl(nsAString& aCssText) const aCssText.AppendLiteral("url("); nsStyleUtil::AppendEscapedCSSString(mURLSpec, aCssText); aCssText.AppendLiteral(");"); + return NS_OK; +} + +NS_IMETHODIMP +NameSpaceRule::SetCssText(const nsAString& aCssText) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +NameSpaceRule::GetParentStyleSheet(nsIDOMCSSStyleSheet** aSheet) +{ + return Rule::GetParentStyleSheet(aSheet); +} + +NS_IMETHODIMP +NameSpaceRule::GetParentRule(nsIDOMCSSRule** aParentRule) +{ + return Rule::GetParentRule(aParentRule); +} + +css::Rule* +NameSpaceRule::GetCSSRule() +{ + return Rule::GetCSSRule(); } /* virtual */ size_t @@ -1223,12 +1197,6 @@ NameSpaceRule::SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const // - mURLSpec } -/* virtual */ JSObject* -NameSpaceRule::WrapObject(JSContext* aCx, - JS::Handle aGivenProto) -{ - return CSSNamespaceRuleBinding::Wrap(aCx, this, aGivenProto); -} } // namespace css } // namespace mozilla @@ -1360,13 +1328,6 @@ nsCSSFontFaceStyleDecl::GetPropertyValue(nsCSSFontDesc aFontDescID, NS_IMETHODIMP nsCSSFontFaceStyleDecl::GetCssText(nsAString & aCssText) -{ - GetCssTextImpl(aCssText); - return NS_OK; -} - -void -nsCSSFontFaceStyleDecl::GetCssTextImpl(nsAString& aCssText) const { nsAutoString descStr; @@ -1385,6 +1346,7 @@ nsCSSFontFaceStyleDecl::GetCssTextImpl(nsAString& aCssText) const aCssText.AppendLiteral(";\n"); } } + return NS_OK; } NS_IMETHODIMP @@ -1501,7 +1463,7 @@ nsCSSFontFaceStyleDecl::IndexedGetter(uint32_t index, bool& aFound, nsAString & NS_IMETHODIMP nsCSSFontFaceStyleDecl::GetParentRule(nsIDOMCSSRule** aParentRule) { - NS_IF_ADDREF(*aParentRule = ContainingRule()); + NS_IF_ADDREF(*aParentRule = ContainingRule()->GetDOMRule()); return NS_OK; } @@ -1545,35 +1507,37 @@ nsCSSFontFaceRule::Clone() const return clone.forget(); } -NS_IMPL_ADDREF_INHERITED(nsCSSFontFaceRule, mozilla::css::Rule) -NS_IMPL_RELEASE_INHERITED(nsCSSFontFaceRule, mozilla::css::Rule) +NS_IMPL_CYCLE_COLLECTING_ADDREF(nsCSSFontFaceRule) +NS_IMPL_CYCLE_COLLECTING_RELEASE(nsCSSFontFaceRule) NS_IMPL_CYCLE_COLLECTION_CLASS(nsCSSFontFaceRule) -NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED(nsCSSFontFaceRule, - mozilla::css::Rule) +NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(nsCSSFontFaceRule) // Trace the wrapper for our declaration. This just expands out // NS_IMPL_CYCLE_COLLECTION_TRACE_PRESERVED_WRAPPER which we can't use // directly because the wrapper is on the declaration, not on us. tmp->mDecl.TraceWrapper(aCallbacks, aClosure); NS_IMPL_CYCLE_COLLECTION_TRACE_END -NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(nsCSSFontFaceRule, - mozilla::css::Rule) +NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsCSSFontFaceRule) // Unlink the wrapper for our declaraton. This just expands out // NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER which we can't use // directly because the wrapper is on the declaration, not on us. tmp->mDecl.ReleaseWrapper(static_cast(p)); NS_IMPL_CYCLE_COLLECTION_UNLINK_END -NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(nsCSSFontFaceRule, - mozilla::css::Rule) +NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsCSSFontFaceRule) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END // QueryInterface implementation for nsCSSFontFaceRule -NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(nsCSSFontFaceRule) +NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsCSSFontFaceRule) NS_INTERFACE_MAP_ENTRY(nsIDOMCSSFontFaceRule) -NS_INTERFACE_MAP_END_INHERITING(Rule) + NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule) + NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, mozilla::css::Rule) + NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSFontFaceRule) +NS_INTERFACE_MAP_END + +IMPL_STYLE_RULE_INHERIT(nsCSSFontFaceRule, Rule) #ifdef DEBUG void @@ -1611,27 +1575,47 @@ nsCSSFontFaceRule::GetType() const return Rule::FONT_FACE_RULE; } -uint16_t -nsCSSFontFaceRule::Type() const +NS_IMETHODIMP +nsCSSFontFaceRule::GetType(uint16_t* aType) { - return nsIDOMCSSRule::FONT_FACE_RULE; + *aType = nsIDOMCSSRule::FONT_FACE_RULE; + return NS_OK; } -void -nsCSSFontFaceRule::GetCssTextImpl(nsAString& aCssText) const +NS_IMETHODIMP +nsCSSFontFaceRule::GetCssText(nsAString& aCssText) { nsAutoString propText; - mDecl.GetCssTextImpl(propText); + mDecl.GetCssText(propText); aCssText.AssignLiteral("@font-face {\n"); aCssText.Append(propText); aCssText.Append('}'); + return NS_OK; } -nsICSSDeclaration* -nsCSSFontFaceRule::Style() +NS_IMETHODIMP +nsCSSFontFaceRule::SetCssText(const nsAString& aCssText) { - return &mDecl; + return NS_ERROR_NOT_IMPLEMENTED; // bug 443978 +} + +NS_IMETHODIMP +nsCSSFontFaceRule::GetParentStyleSheet(nsIDOMCSSStyleSheet** aSheet) +{ + return Rule::GetParentStyleSheet(aSheet); +} + +NS_IMETHODIMP +nsCSSFontFaceRule::GetParentRule(nsIDOMCSSRule** aParentRule) +{ + return Rule::GetParentRule(aParentRule); +} + +css::Rule* +nsCSSFontFaceRule::GetCSSRule() +{ + return Rule::GetCSSRule(); } NS_IMETHODIMP @@ -1674,12 +1658,6 @@ nsCSSFontFaceRule::SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const // - mDecl } -/* virtual */ JSObject* -nsCSSFontFaceRule::WrapObject(JSContext* aCx, - JS::Handle aGivenProto) -{ - return CSSFontFaceRuleBinding::Wrap(aCx, this, aGivenProto); -} // ----------------------------------- // nsCSSFontFeatureValuesRule @@ -1692,13 +1670,18 @@ nsCSSFontFeatureValuesRule::Clone() const return clone.forget(); } -NS_IMPL_ADDREF_INHERITED(nsCSSFontFeatureValuesRule, mozilla::css::Rule) -NS_IMPL_RELEASE_INHERITED(nsCSSFontFeatureValuesRule, mozilla::css::Rule) +NS_IMPL_ADDREF(nsCSSFontFeatureValuesRule) +NS_IMPL_RELEASE(nsCSSFontFeatureValuesRule) // QueryInterface implementation for nsCSSFontFeatureValuesRule NS_INTERFACE_MAP_BEGIN(nsCSSFontFeatureValuesRule) NS_INTERFACE_MAP_ENTRY(nsIDOMCSSFontFeatureValuesRule) -NS_INTERFACE_MAP_END_INHERITING(mozilla::css::Rule) + NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule) + NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, mozilla::css::Rule) + NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSFontFeatureValuesRule) +NS_INTERFACE_MAP_END + +IMPL_STYLE_RULE_INHERIT(nsCSSFontFeatureValuesRule, Rule) static void FeatureValuesToString( @@ -1788,30 +1771,43 @@ nsCSSFontFeatureValuesRule::GetType() const return Rule::FONT_FEATURE_VALUES_RULE; } -uint16_t -nsCSSFontFeatureValuesRule::Type() const +NS_IMETHODIMP +nsCSSFontFeatureValuesRule::GetType(uint16_t* aType) { - return nsIDOMCSSRule::FONT_FEATURE_VALUES_RULE; + *aType = nsIDOMCSSRule::FONT_FEATURE_VALUES_RULE; + return NS_OK; } -void -nsCSSFontFeatureValuesRule::GetCssTextImpl(nsAString& aCssText) const +NS_IMETHODIMP +nsCSSFontFeatureValuesRule::GetCssText(nsAString& aCssText) { FontFeatureValuesRuleToString(mFamilyList, mFeatureValues, aCssText); + return NS_OK; } -void -nsCSSFontFeatureValuesRule::SetFontFamily(const nsAString& aFamily, - ErrorResult& aRv) +NS_IMETHODIMP +nsCSSFontFeatureValuesRule::SetCssText(const nsAString& aCssText) { - aRv.Throw(NS_ERROR_NOT_IMPLEMENTED); + // FIXME: implement??? + return NS_ERROR_NOT_IMPLEMENTED; } -void -nsCSSFontFeatureValuesRule::SetValueText(const nsAString& aFamily, - ErrorResult& aRv) +NS_IMETHODIMP +nsCSSFontFeatureValuesRule::GetParentStyleSheet(nsIDOMCSSStyleSheet** aSheet) { - aRv.Throw(NS_ERROR_NOT_IMPLEMENTED); + return Rule::GetParentStyleSheet(aSheet); +} + +NS_IMETHODIMP +nsCSSFontFeatureValuesRule::GetParentRule(nsIDOMCSSRule** aParentRule) +{ + return Rule::GetParentRule(aParentRule); +} + +css::Rule* +nsCSSFontFeatureValuesRule::GetCSSRule() +{ + return Rule::GetCSSRule(); } NS_IMETHODIMP @@ -1902,13 +1898,6 @@ nsCSSFontFeatureValuesRule::SizeOfIncludingThis( return aMallocSizeOf(this); } -/* virtual */ JSObject* -nsCSSFontFeatureValuesRule::WrapObject(JSContext* aCx, - JS::Handle aGivenProto) -{ - return CSSFontFeatureValuesRuleBinding::Wrap(aCx, this, aGivenProto); -} - // ------------------------------------------- // nsCSSKeyframeStyleDeclaration // @@ -2005,27 +1994,30 @@ nsCSSKeyframeRule::Clone() const return clone.forget(); } -NS_IMPL_ADDREF_INHERITED(nsCSSKeyframeRule, mozilla::css::Rule) -NS_IMPL_RELEASE_INHERITED(nsCSSKeyframeRule, mozilla::css::Rule) +NS_IMPL_CYCLE_COLLECTING_ADDREF(nsCSSKeyframeRule) +NS_IMPL_CYCLE_COLLECTING_RELEASE(nsCSSKeyframeRule) NS_IMPL_CYCLE_COLLECTION_CLASS(nsCSSKeyframeRule) -NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(nsCSSKeyframeRule, - mozilla::css::Rule) +NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsCSSKeyframeRule) if (tmp->mDOMDeclaration) { tmp->mDOMDeclaration->DropReference(); tmp->mDOMDeclaration = nullptr; } NS_IMPL_CYCLE_COLLECTION_UNLINK_END -NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(nsCSSKeyframeRule, - mozilla::css::Rule) +NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsCSSKeyframeRule) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mDOMDeclaration) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END // QueryInterface implementation for nsCSSKeyframeRule -NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(nsCSSKeyframeRule) +NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsCSSKeyframeRule) NS_INTERFACE_MAP_ENTRY(nsIDOMCSSKeyframeRule) -NS_INTERFACE_MAP_END_INHERITING(mozilla::css::Rule) + NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule) + NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, mozilla::css::Rule) + NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSKeyframeRule) +NS_INTERFACE_MAP_END + +IMPL_STYLE_RULE_INHERIT_GET_DOM_RULE_WEAK(nsCSSKeyframeRule, Rule) #ifdef DEBUG void @@ -2053,14 +2045,15 @@ nsCSSKeyframeRule::GetType() const return Rule::KEYFRAME_RULE; } -uint16_t -nsCSSKeyframeRule::Type() const +NS_IMETHODIMP +nsCSSKeyframeRule::GetType(uint16_t* aType) { - return nsIDOMCSSRule::KEYFRAME_RULE; + *aType = nsIDOMCSSRule::KEYFRAME_RULE; + return NS_OK; } -void -nsCSSKeyframeRule::GetCssTextImpl(nsAString& aCssText) const +NS_IMETHODIMP +nsCSSKeyframeRule::GetCssText(nsAString& aCssText) { DoGetKeyText(aCssText); aCssText.AppendLiteral(" { "); @@ -2068,6 +2061,32 @@ nsCSSKeyframeRule::GetCssTextImpl(nsAString& aCssText) const mDeclaration->ToString(tmp); aCssText.Append(tmp); aCssText.AppendLiteral(" }"); + return NS_OK; +} + +NS_IMETHODIMP +nsCSSKeyframeRule::SetCssText(const nsAString& aCssText) +{ + // FIXME: implement??? + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +nsCSSKeyframeRule::GetParentStyleSheet(nsIDOMCSSStyleSheet** aSheet) +{ + return Rule::GetParentStyleSheet(aSheet); +} + +NS_IMETHODIMP +nsCSSKeyframeRule::GetParentRule(nsIDOMCSSRule** aParentRule) +{ + return Rule::GetParentRule(aParentRule); +} + +css::Rule* +nsCSSKeyframeRule::GetCSSRule() +{ + return Rule::GetCSSRule(); } NS_IMETHODIMP @@ -2122,18 +2141,12 @@ nsCSSKeyframeRule::SetKeyText(const nsAString& aKeyText) NS_IMETHODIMP nsCSSKeyframeRule::GetStyle(nsIDOMCSSStyleDeclaration** aStyle) -{ - NS_ADDREF(*aStyle = Style()); - return NS_OK; -} - -nsICSSDeclaration* -nsCSSKeyframeRule::Style() { if (!mDOMDeclaration) { mDOMDeclaration = new nsCSSKeyframeStyleDeclaration(this); } - return mDOMDeclaration; + NS_ADDREF(*aStyle = mDOMDeclaration); + return NS_OK; } void @@ -2171,12 +2184,6 @@ nsCSSKeyframeRule::SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const // - mDOMDeclaration } -/* virtual */ JSObject* -nsCSSKeyframeRule::WrapObject(JSContext* aCx, - JS::Handle aGivenProto) -{ - return CSSKeyframeRuleBinding::Wrap(aCx, this, aGivenProto); -} // ------------------------------------------- // nsCSSKeyframesRule @@ -2207,7 +2214,10 @@ NS_IMPL_RELEASE_INHERITED(nsCSSKeyframesRule, css::GroupRule) // QueryInterface implementation for nsCSSKeyframesRule NS_INTERFACE_MAP_BEGIN(nsCSSKeyframesRule) + NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule) NS_INTERFACE_MAP_ENTRY(nsIDOMCSSKeyframesRule) + NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, mozilla::css::Rule) + NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSKeyframesRule) NS_INTERFACE_MAP_END_INHERITING(GroupRule) #ifdef DEBUG @@ -2234,14 +2244,15 @@ nsCSSKeyframesRule::GetType() const return Rule::KEYFRAMES_RULE; } -uint16_t -nsCSSKeyframesRule::Type() const +NS_IMETHODIMP +nsCSSKeyframesRule::GetType(uint16_t* aType) { - return nsIDOMCSSRule::KEYFRAMES_RULE; + *aType = nsIDOMCSSRule::KEYFRAMES_RULE; + return NS_OK; } -void -nsCSSKeyframesRule::GetCssTextImpl(nsAString& aCssText) const +NS_IMETHODIMP +nsCSSKeyframesRule::GetCssText(nsAString& aCssText) { aCssText.AssignLiteral("@keyframes "); aCssText.Append(mName); @@ -2253,6 +2264,32 @@ nsCSSKeyframesRule::GetCssTextImpl(nsAString& aCssText) const aCssText.Append('\n'); } aCssText.Append('}'); + return NS_OK; +} + +NS_IMETHODIMP +nsCSSKeyframesRule::SetCssText(const nsAString& aCssText) +{ + // FIXME: implement??? + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +nsCSSKeyframesRule::GetParentStyleSheet(nsIDOMCSSStyleSheet** aSheet) +{ + return GroupRule::GetParentStyleSheet(aSheet); +} + +NS_IMETHODIMP +nsCSSKeyframesRule::GetParentRule(nsIDOMCSSRule** aParentRule) +{ + return GroupRule::GetParentRule(aParentRule); +} + +css::Rule* +nsCSSKeyframesRule::GetCSSRule() +{ + return GroupRule::GetCSSRule(); } NS_IMETHODIMP @@ -2367,19 +2404,14 @@ nsCSSKeyframesRule::DeleteRule(const nsAString& aKey) NS_IMETHODIMP nsCSSKeyframesRule::FindRule(const nsAString& aKey, nsIDOMCSSKeyframeRule** aResult) -{ - NS_IF_ADDREF(*aResult = FindRule(aKey)); - return NS_OK; -} - -nsCSSKeyframeRule* -nsCSSKeyframesRule::FindRule(const nsAString& aKey) { uint32_t index = FindRuleIndexForKey(aKey); if (index == RULE_NOT_FOUND) { - return nullptr; + *aResult = nullptr; + } else { + NS_ADDREF(*aResult = static_cast(mRules[index])); } - return static_cast(mRules[index]); + return NS_OK; } // GroupRule interface @@ -2404,13 +2436,6 @@ nsCSSKeyframesRule::SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const return n; } -/* virtual */ JSObject* -nsCSSKeyframesRule::WrapObject(JSContext* aCx, - JS::Handle aGivenProto) -{ - return CSSKeyframesRuleBinding::Wrap(aCx, this, aGivenProto); -} - // ------------------------------------------- // nsCSSPageStyleDeclaration // @@ -2506,27 +2531,30 @@ nsCSSPageRule::Clone() const return clone.forget(); } -NS_IMPL_ADDREF_INHERITED(nsCSSPageRule, mozilla::css::Rule) -NS_IMPL_RELEASE_INHERITED(nsCSSPageRule, mozilla::css::Rule) +NS_IMPL_CYCLE_COLLECTING_ADDREF(nsCSSPageRule) +NS_IMPL_CYCLE_COLLECTING_RELEASE(nsCSSPageRule) NS_IMPL_CYCLE_COLLECTION_CLASS(nsCSSPageRule) -NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(nsCSSPageRule, - mozilla::css::Rule) +NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsCSSPageRule) if (tmp->mDOMDeclaration) { tmp->mDOMDeclaration->DropReference(); tmp->mDOMDeclaration = nullptr; } NS_IMPL_CYCLE_COLLECTION_UNLINK_END -NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(nsCSSPageRule, - mozilla::css::Rule) +NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsCSSPageRule) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mDOMDeclaration) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END // QueryInterface implementation for nsCSSPageRule -NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(nsCSSPageRule) +NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsCSSPageRule) NS_INTERFACE_MAP_ENTRY(nsIDOMCSSPageRule) -NS_INTERFACE_MAP_END_INHERITING(mozilla::css::Rule) + NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule) + NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, mozilla::css::Rule) + NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSPageRule) +NS_INTERFACE_MAP_END + +IMPL_STYLE_RULE_INHERIT_GET_DOM_RULE_WEAK(nsCSSPageRule, Rule) #ifdef DEBUG void @@ -2552,36 +2580,57 @@ nsCSSPageRule::GetType() const return Rule::PAGE_RULE; } -uint16_t -nsCSSPageRule::Type() const +NS_IMETHODIMP +nsCSSPageRule::GetType(uint16_t* aType) { - return nsIDOMCSSRule::PAGE_RULE; + *aType = nsIDOMCSSRule::PAGE_RULE; + return NS_OK; } -void -nsCSSPageRule::GetCssTextImpl(nsAString& aCssText) const +NS_IMETHODIMP +nsCSSPageRule::GetCssText(nsAString& aCssText) { aCssText.AppendLiteral("@page { "); nsAutoString tmp; mDeclaration->ToString(tmp); aCssText.Append(tmp); aCssText.AppendLiteral(" }"); + return NS_OK; +} + +NS_IMETHODIMP +nsCSSPageRule::SetCssText(const nsAString& aCssText) +{ + // FIXME: implement??? + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +nsCSSPageRule::GetParentStyleSheet(nsIDOMCSSStyleSheet** aSheet) +{ + return Rule::GetParentStyleSheet(aSheet); +} + +NS_IMETHODIMP +nsCSSPageRule::GetParentRule(nsIDOMCSSRule** aParentRule) +{ + return Rule::GetParentRule(aParentRule); +} + +css::Rule* +nsCSSPageRule::GetCSSRule() +{ + return Rule::GetCSSRule(); } NS_IMETHODIMP nsCSSPageRule::GetStyle(nsIDOMCSSStyleDeclaration** aStyle) -{ - NS_ADDREF(*aStyle = Style()); - return NS_OK; -} - -nsICSSDeclaration* -nsCSSPageRule::Style() { if (!mDOMDeclaration) { mDOMDeclaration = new nsCSSPageStyleDeclaration(this); } - return mDOMDeclaration; + NS_ADDREF(*aStyle = mDOMDeclaration); + return NS_OK; } void @@ -2604,19 +2653,12 @@ nsCSSPageRule::SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const return aMallocSizeOf(this); } -/* virtual */ JSObject* -nsCSSPageRule::WrapObject(JSContext* aCx, - JS::Handle aGivenProto) -{ - return CSSPageRuleBinding::Wrap(aCx, this, aGivenProto); -} - namespace mozilla { CSSSupportsRule::CSSSupportsRule(bool aConditionMet, const nsString& aCondition, uint32_t aLineNumber, uint32_t aColumnNumber) - : css::ConditionRule(aLineNumber, aColumnNumber) + : css::GroupRule(aLineNumber, aColumnNumber) , mUseGroup(aConditionMet) , mCondition(aCondition) { @@ -2627,7 +2669,7 @@ CSSSupportsRule::~CSSSupportsRule() } CSSSupportsRule::CSSSupportsRule(const CSSSupportsRule& aCopy) - : css::ConditionRule(aCopy), + : css::GroupRule(aCopy), mUseGroup(aCopy.mUseGroup), mCondition(aCopy.mCondition) { @@ -2671,28 +2713,58 @@ CSSSupportsRule::UseForPresentation(nsPresContext* aPresContext, return mUseGroup; } -NS_IMPL_ADDREF_INHERITED(CSSSupportsRule, css::ConditionRule) -NS_IMPL_RELEASE_INHERITED(CSSSupportsRule, css::ConditionRule) +NS_IMPL_ADDREF_INHERITED(CSSSupportsRule, css::GroupRule) +NS_IMPL_RELEASE_INHERITED(CSSSupportsRule, css::GroupRule) // QueryInterface implementation for CSSSupportsRule NS_INTERFACE_MAP_BEGIN(CSSSupportsRule) + NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule) NS_INTERFACE_MAP_ENTRY(nsIDOMCSSGroupingRule) NS_INTERFACE_MAP_ENTRY(nsIDOMCSSConditionRule) NS_INTERFACE_MAP_ENTRY(nsIDOMCSSSupportsRule) -NS_INTERFACE_MAP_END_INHERITING(ConditionRule) + NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, mozilla::css::Rule) + NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSSupportsRule) +NS_INTERFACE_MAP_END_INHERITING(GroupRule) -uint16_t -CSSSupportsRule::Type() const +// nsIDOMCSSRule methods +NS_IMETHODIMP +CSSSupportsRule::GetType(uint16_t* aType) { - return nsIDOMCSSRule::SUPPORTS_RULE; + *aType = nsIDOMCSSRule::SUPPORTS_RULE; + return NS_OK; } -void -CSSSupportsRule::GetCssTextImpl(nsAString& aCssText) const +NS_IMETHODIMP +CSSSupportsRule::GetCssText(nsAString& aCssText) { aCssText.AssignLiteral("@supports "); aCssText.Append(mCondition); css::GroupRule::AppendRulesToCssText(aCssText); + return NS_OK; +} + +NS_IMETHODIMP +CSSSupportsRule::SetCssText(const nsAString& aCssText) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +CSSSupportsRule::GetParentStyleSheet(nsIDOMCSSStyleSheet** aSheet) +{ + return css::GroupRule::GetParentStyleSheet(aSheet); +} + +NS_IMETHODIMP +CSSSupportsRule::GetParentRule(nsIDOMCSSRule** aParentRule) +{ + return css::GroupRule::GetParentRule(aParentRule); +} + +css::Rule* +CSSSupportsRule::GetCSSRule() +{ + return css::GroupRule::GetCSSRule(); } // nsIDOMCSSGroupingRule methods @@ -2728,13 +2800,6 @@ CSSSupportsRule::SetConditionText(const nsAString& aConditionText) return NS_ERROR_NOT_IMPLEMENTED; } -void -CSSSupportsRule::SetConditionText(const nsAString& aConditionText, - ErrorResult& aRv) -{ - aRv.Throw(NS_ERROR_NOT_IMPLEMENTED); -} - /* virtual */ size_t CSSSupportsRule::SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const { @@ -2744,13 +2809,6 @@ CSSSupportsRule::SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const return n; } -/* virtual */ JSObject* -CSSSupportsRule::WrapObject(JSContext* aCx, - JS::Handle aGivenProto) -{ - return CSSSupportsRuleBinding::Wrap(aCx, this, aGivenProto); -} - } // namespace mozilla // ------------------------------------------- @@ -2785,13 +2843,18 @@ nsCSSCounterStyleRule::kGetters[] = { #undef CSS_COUNTER_DESC }; -NS_IMPL_ADDREF_INHERITED(nsCSSCounterStyleRule, mozilla::css::Rule) -NS_IMPL_RELEASE_INHERITED(nsCSSCounterStyleRule, mozilla::css::Rule) +NS_IMPL_ADDREF(nsCSSCounterStyleRule) +NS_IMPL_RELEASE(nsCSSCounterStyleRule) // QueryInterface implementation for nsCSSCounterStyleRule NS_INTERFACE_MAP_BEGIN(nsCSSCounterStyleRule) + NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule) NS_INTERFACE_MAP_ENTRY(nsIDOMCSSCounterStyleRule) -NS_INTERFACE_MAP_END_INHERITING(mozilla::css::Rule) + NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, mozilla::css::Rule) + NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSCounterStyleRule) +NS_INTERFACE_MAP_END + +IMPL_STYLE_RULE_INHERIT(nsCSSCounterStyleRule, css::Rule) #ifdef DEBUG void @@ -2818,14 +2881,16 @@ nsCSSCounterStyleRule::GetType() const return Rule::COUNTER_STYLE_RULE; } -uint16_t -nsCSSCounterStyleRule::Type() const +// nsIDOMCSSRule methods +NS_IMETHODIMP +nsCSSCounterStyleRule::GetType(uint16_t* aType) { - return nsIDOMCSSRule::COUNTER_STYLE_RULE; + *aType = nsIDOMCSSRule::COUNTER_STYLE_RULE; + return NS_OK; } -void -nsCSSCounterStyleRule::GetCssTextImpl(nsAString& aCssText) const +NS_IMETHODIMP +nsCSSCounterStyleRule::GetCssText(nsAString& aCssText) { aCssText.AssignLiteral(u"@counter-style "); nsStyleUtil::AppendEscapedCSSIdent(mName, aCssText); @@ -2835,10 +2900,7 @@ nsCSSCounterStyleRule::GetCssTextImpl(nsAString& aCssText) const id = nsCSSCounterDesc(id + 1)) { if (mValues[id].GetUnit() != eCSSUnit_Null) { nsAutoString tmp; - // This is annoying. We want to be a const method, but kGetters stores - // XPCOM method pointers, which aren't const methods. The thing is, - // none of those mutate "this". So it's OK to cast away const here. - (const_cast(this)->*kGetters[id])(tmp); + (this->*kGetters[id])(tmp); aCssText.AppendLiteral(u" "); AppendASCIItoUTF16(nsCSSProps::GetStringValue(id), aCssText); aCssText.AppendLiteral(u": "); @@ -2847,6 +2909,32 @@ nsCSSCounterStyleRule::GetCssTextImpl(nsAString& aCssText) const } } aCssText.AppendLiteral(u"}"); + return NS_OK; +} + +NS_IMETHODIMP +nsCSSCounterStyleRule::SetCssText(const nsAString& aCssText) +{ + // FIXME: implement??? + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +nsCSSCounterStyleRule::GetParentStyleSheet(nsIDOMCSSStyleSheet** aSheet) +{ + return Rule::GetParentStyleSheet(aSheet); +} + +NS_IMETHODIMP +nsCSSCounterStyleRule::GetParentRule(nsIDOMCSSRule** aParentRule) +{ + return Rule::GetParentRule(aParentRule); +} + +css::Rule* +nsCSSCounterStyleRule::GetCSSRule() +{ + return Rule::GetCSSRule(); } // nsIDOMCSSCounterStyleRule methods @@ -3181,10 +3269,3 @@ nsCSSCounterStyleRule::SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const { return aMallocSizeOf(this); } - -/* virtual */ JSObject* -nsCSSCounterStyleRule::WrapObject(JSContext* aCx, - JS::Handle aGivenProto) -{ - return CSSCounterStyleRuleBinding::Wrap(aCx, this, aGivenProto); -} diff --git a/layout/style/nsCSSRules.h b/layout/style/nsCSSRules.h index e82c6661feb8..1656b713176f 100644 --- a/layout/style/nsCSSRules.h +++ b/layout/style/nsCSSRules.h @@ -43,7 +43,7 @@ class ErrorResult; namespace css { -class MediaRule final : public ConditionRule, +class MediaRule final : public GroupRule, public nsIDOMCSSMediaRule { public: @@ -53,7 +53,6 @@ private: ~MediaRule(); public: - NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(MediaRule, ConditionRule) NS_DECL_ISUPPORTS_INHERITED // Rule methods @@ -67,8 +66,18 @@ public: return sheet ? sheet->AsGecko() : nullptr; } virtual int32_t GetType() const override; - using Rule::GetType; virtual already_AddRefed Clone() const override; + virtual nsIDOMCSSRule* GetDOMRule() override + { + return this; + } + virtual nsIDOMCSSRule* GetExistingDOMRule() override + { + return this; + } + + // nsIDOMCSSRule interface + NS_DECL_NSIDOMCSSRULE // nsIDOMCSSGroupingRule interface NS_DECL_NSIDOMCSSGROUPINGRULE @@ -85,28 +94,17 @@ public: // @media rule methods nsresult SetMedia(nsMediaList* aMedia); - - // WebIDL interface - uint16_t Type() const override; - void GetCssTextImpl(nsAString& aCssText) const override; - // Our XPCOM GetConditionText is OK - virtual void SetConditionText(const nsAString& aConditionText, - ErrorResult& aRv) override; - nsMediaList* Media() const; virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override MOZ_MUST_OVERRIDE; - virtual JSObject* WrapObject(JSContext* aCx, - JS::Handle aGivenProto) override; - protected: - void AppendConditionText(nsAString& aOutput) const; + void AppendConditionText(nsAString& aOutput); RefPtr mMedia; }; -class DocumentRule final : public ConditionRule, +class DocumentRule final : public GroupRule, public nsIDOMCSSMozDocumentRule { public: @@ -123,8 +121,18 @@ public: virtual void List(FILE* out = stdout, int32_t aIndent = 0) const override; #endif virtual int32_t GetType() const override; - using Rule::GetType; virtual already_AddRefed Clone() const override; + virtual nsIDOMCSSRule* GetDOMRule() override + { + return this; + } + virtual nsIDOMCSSRule* GetExistingDOMRule() override + { + return this; + } + + // nsIDOMCSSRule interface + NS_DECL_NSIDOMCSSRULE // nsIDOMCSSGroupingRule interface NS_DECL_NSIDOMCSSGROUPINGRULE @@ -165,21 +173,11 @@ public: void SetURLs(URL *aURLs) { mURLs = aURLs; } - // WebIDL interface - uint16_t Type() const override; - void GetCssTextImpl(nsAString& aCssText) const override; - // Our XPCOM GetConditionText is OK - virtual void SetConditionText(const nsAString& aConditionText, - ErrorResult& aRv) override; - virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override MOZ_MUST_OVERRIDE; - virtual JSObject* WrapObject(JSContext* aCx, - JS::Handle aGivenProto) override; - protected: - void AppendConditionText(nsAString& aOutput) const; + void AppendConditionText(nsAString& aOutput); nsAutoPtr mURLs; // linked list of |struct URL| above. }; @@ -232,9 +230,6 @@ protected: mozilla::CSSFontFaceDescriptors mDescriptors; - // The actual implementation of GetCssText, so we can make it const. - void GetCssTextImpl(nsAString& aCssText) const; - private: // NOT TO BE IMPLEMENTED // This object cannot be allocated on its own, only as part of @@ -247,43 +242,35 @@ class nsCSSFontFaceRule final : public mozilla::css::Rule, { public: nsCSSFontFaceRule(uint32_t aLineNumber, uint32_t aColumnNumber) - : mozilla::css::Rule(aLineNumber, aColumnNumber) - { - } + : mozilla::css::Rule(aLineNumber, aColumnNumber) {} nsCSSFontFaceRule(const nsCSSFontFaceRule& aCopy) // copy everything except our reference count - : mozilla::css::Rule(aCopy), mDecl(aCopy.mDecl) - { - } + : mozilla::css::Rule(aCopy), mDecl(aCopy.mDecl) {} - NS_DECL_ISUPPORTS_INHERITED - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(nsCSSFontFaceRule, + NS_DECL_CYCLE_COLLECTING_ISUPPORTS + NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(nsCSSFontFaceRule, mozilla::css::Rule) + // Rule methods + DECL_STYLE_RULE_INHERIT #ifdef DEBUG virtual void List(FILE* out = stdout, int32_t aIndent = 0) const override; #endif virtual int32_t GetType() const override; - using Rule::GetType; virtual already_AddRefed Clone() const override; + // nsIDOMCSSRule interface + NS_DECL_NSIDOMCSSRULE + // nsIDOMCSSFontFaceRule interface NS_DECL_NSIDOMCSSFONTFACERULE void SetDesc(nsCSSFontDesc aDescID, nsCSSValue const & aValue); void GetDesc(nsCSSFontDesc aDescID, nsCSSValue & aValue); - // WebIDL interface - uint16_t Type() const override; - void GetCssTextImpl(nsAString& aCssText) const override; - nsICSSDeclaration* Style(); - virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override; - virtual JSObject* WrapObject(JSContext* aCx, - JS::Handle aGivenProto) override; - void GetDescriptors(mozilla::CSSFontFaceDescriptors& aDescriptors) const { aDescriptors = mDecl.mDescriptors; } @@ -320,38 +307,30 @@ class nsCSSFontFeatureValuesRule final : public mozilla::css::Rule, { public: nsCSSFontFeatureValuesRule(uint32_t aLineNumber, uint32_t aColumnNumber) - : mozilla::css::Rule(aLineNumber, aColumnNumber) - { - } + : mozilla::css::Rule(aLineNumber, aColumnNumber) {} nsCSSFontFeatureValuesRule(const nsCSSFontFeatureValuesRule& aCopy) // copy everything except our reference count : mozilla::css::Rule(aCopy), mFamilyList(aCopy.mFamilyList), - mFeatureValues(aCopy.mFeatureValues) - { - } + mFeatureValues(aCopy.mFeatureValues) {} - NS_DECL_ISUPPORTS_INHERITED + NS_DECL_ISUPPORTS + // Rule methods + DECL_STYLE_RULE_INHERIT #ifdef DEBUG virtual void List(FILE* out = stdout, int32_t aIndent = 0) const override; #endif virtual int32_t GetType() const override; - using Rule::GetType; virtual already_AddRefed Clone() const override; + // nsIDOMCSSRule interface + NS_DECL_NSIDOMCSSRULE + // nsIDOMCSSFontFaceRule interface NS_DECL_NSIDOMCSSFONTFEATUREVALUESRULE - // WebIDL interface - uint16_t Type() const override; - void GetCssTextImpl(nsAString& aCssText) const override; - // The XPCOM GetFontFamily is fine - void SetFontFamily(const nsAString& aFamily, mozilla::ErrorResult& aRv); - // The XPCOM GetValueText is fine - void SetValueText(const nsAString& aFamily, mozilla::ErrorResult& aRv); - const mozilla::FontFamilyList& GetFamilyList() { return mFamilyList; } void SetFamilyList(const mozilla::FontFamilyList& aFamilyList); @@ -365,9 +344,6 @@ public: virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override; - virtual JSObject* WrapObject(JSContext* aCx, - JS::Handle aGivenProto) override; - protected: ~nsCSSFontFeatureValuesRule() {} @@ -421,26 +397,23 @@ private: nsCSSKeyframeRule(const nsCSSKeyframeRule& aCopy); ~nsCSSKeyframeRule(); public: - NS_DECL_ISUPPORTS_INHERITED - NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(nsCSSKeyframeRule, mozilla::css::Rule) + NS_DECL_CYCLE_COLLECTING_ISUPPORTS + NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsCSSKeyframeRule, mozilla::css::Rule) + // Rule methods + DECL_STYLE_RULE_INHERIT #ifdef DEBUG virtual void List(FILE* out = stdout, int32_t aIndent = 0) const override; #endif virtual int32_t GetType() const override; - using Rule::GetType; virtual already_AddRefed Clone() const override; + // nsIDOMCSSRule interface + NS_DECL_NSIDOMCSSRULE + // nsIDOMCSSKeyframeRule interface NS_DECL_NSIDOMCSSKEYFRAMERULE - // WebIDL interface - uint16_t Type() const override; - void GetCssTextImpl(nsAString& aCssText) const override; - // The XPCOM GetKeyText is fine. - // The XPCOM SetKeyText is fine. - nsICSSDeclaration* Style(); - const nsTArray& GetKeys() const { return mKeys; } mozilla::css::Declaration* Declaration() { return mDeclaration; } @@ -448,9 +421,6 @@ public: virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override; - virtual JSObject* WrapObject(JSContext* aCx, - JS::Handle aGivenProto) override; - void DoGetKeyText(nsAString &aKeyText) const; private: @@ -481,22 +451,22 @@ public: virtual void List(FILE* out = stdout, int32_t aIndent = 0) const override; #endif virtual int32_t GetType() const override; - using Rule::GetType; virtual already_AddRefed Clone() const override; + virtual nsIDOMCSSRule* GetDOMRule() override + { + return this; + } + virtual nsIDOMCSSRule* GetExistingDOMRule() override + { + return this; + } + + // nsIDOMCSSRule interface + NS_DECL_NSIDOMCSSRULE // nsIDOMCSSKeyframesRule interface NS_DECL_NSIDOMCSSKEYFRAMESRULE - // WebIDL interface - uint16_t Type() const override; - void GetCssTextImpl(nsAString& aCssText) const override; - // The XPCOM GetName is OK - // The XPCOM SetName is OK - using mozilla::css::GroupRule::CssRules; - // The XPCOM appendRule is OK, since it never throws - // The XPCOM deleteRule is OK, since it never throws - nsCSSKeyframeRule* FindRule(const nsAString& aKey); - // rest of GroupRule virtual bool UseForPresentation(nsPresContext* aPresContext, nsMediaQueryResultCacheKey& aKey) override; @@ -505,9 +475,6 @@ public: virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override; - virtual JSObject* WrapObject(JSContext* aCx, - JS::Handle aGivenProto) override; - private: uint32_t FindRuleIndexForKey(const nsAString& aKey); @@ -557,33 +524,28 @@ private: nsCSSPageRule(const nsCSSPageRule& aCopy); ~nsCSSPageRule(); public: - NS_DECL_ISUPPORTS_INHERITED - NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(nsCSSPageRule, mozilla::css::Rule) + NS_DECL_CYCLE_COLLECTING_ISUPPORTS + NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsCSSPageRule, nsIDOMCSSPageRule) + // Rule methods + DECL_STYLE_RULE_INHERIT #ifdef DEBUG virtual void List(FILE* out = stdout, int32_t aIndent = 0) const override; #endif virtual int32_t GetType() const override; - using Rule::GetType; virtual already_AddRefed Clone() const override; + // nsIDOMCSSRule interface + NS_DECL_NSIDOMCSSRULE + // nsIDOMCSSPageRule interface NS_DECL_NSIDOMCSSPAGERULE - // WebIDL interface - uint16_t Type() const override; - void GetCssTextImpl(nsAString& aCssText) const override; - nsICSSDeclaration* Style(); - mozilla::css::Declaration* Declaration() { return mDeclaration; } void ChangeDeclaration(mozilla::css::Declaration* aDeclaration); virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override; - - virtual JSObject* WrapObject(JSContext* aCx, - JS::Handle aGivenProto) override; - private: RefPtr mDeclaration; // lazily created when needed: @@ -592,8 +554,8 @@ private: namespace mozilla { -class CSSSupportsRule final : public css::ConditionRule, - public nsIDOMCSSSupportsRule +class CSSSupportsRule : public css::GroupRule, + public nsIDOMCSSSupportsRule { public: CSSSupportsRule(bool aConditionMet, const nsString& aCondition, @@ -605,13 +567,23 @@ public: virtual void List(FILE* out = stdout, int32_t aIndent = 0) const override; #endif virtual int32_t GetType() const override; - using Rule::GetType; virtual already_AddRefed Clone() const override; virtual bool UseForPresentation(nsPresContext* aPresContext, nsMediaQueryResultCacheKey& aKey) override; + virtual nsIDOMCSSRule* GetDOMRule() override + { + return this; + } + virtual nsIDOMCSSRule* GetExistingDOMRule() override + { + return this; + } NS_DECL_ISUPPORTS_INHERITED + // nsIDOMCSSRule interface + NS_DECL_NSIDOMCSSRULE + // nsIDOMCSSGroupingRule interface NS_DECL_NSIDOMCSSGROUPINGRULE @@ -621,18 +593,8 @@ public: // nsIDOMCSSSupportsRule interface NS_DECL_NSIDOMCSSSUPPORTSRULE - // WebIDL interface - uint16_t Type() const override; - void GetCssTextImpl(nsAString& aCssText) const override; - // Our XPCOM GetConditionText is OK - virtual void SetConditionText(const nsAString& aConditionText, - ErrorResult& aRv) override; - virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override; - virtual JSObject* WrapObject(JSContext* aCx, - JS::Handle aGivenProto) override; - protected: virtual ~CSSSupportsRule(); @@ -659,44 +621,22 @@ private: ~nsCSSCounterStyleRule(); public: - NS_DECL_ISUPPORTS_INHERITED + NS_DECL_ISUPPORTS + // Rule methods + DECL_STYLE_RULE_INHERIT #ifdef DEBUG virtual void List(FILE* out = stdout, int32_t aIndent = 0) const override; #endif virtual int32_t GetType() const override; - using Rule::GetType; virtual already_AddRefed Clone() const override; + // nsIDOMCSSRule interface + NS_DECL_NSIDOMCSSRULE + // nsIDOMCSSCounterStyleRule NS_DECL_NSIDOMCSSCOUNTERSTYLERULE - // WebIDL interface - uint16_t Type() const override; - void GetCssTextImpl(nsAString& aCssText) const override; - // The XPCOM GetName is OK - // The XPCOM SetName is OK - // The XPCOM GetSystem is OK - // The XPCOM SetSystem is OK - // The XPCOM GetSymbols is OK - // The XPCOM SetSymbols is OK - // The XPCOM GetAdditiveSymbols is OK - // The XPCOM SetAdditiveSymbols is OK - // The XPCOM GetNegative is OK - // The XPCOM SetNegative is OK - // The XPCOM GetPrefix is OK - // The XPCOM SetPrefix is OK - // The XPCOM GetSuffix is OK - // The XPCOM SetSuffix is OK - // The XPCOM GetRange is OK - // The XPCOM SetRange is OK - // The XPCOM GetPad is OK - // The XPCOM SetPad is OK - // The XPCOM GetSpeakAs is OK - // The XPCOM SetSpeakAs is OK - // The XPCOM GetFallback is OK - // The XPCOM SetFallback is OK - // This function is only used to check whether a non-empty value, which has // been accepted by parser, is valid for the given system and descriptor. static bool CheckDescValue(int32_t aSystem, @@ -721,9 +661,6 @@ public: virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override; - virtual JSObject* WrapObject(JSContext* aCx, - JS::Handle aGivenProto) override; - private: typedef NS_STDCALL_FUNCPROTO(nsresult, Getter, nsCSSCounterStyleRule, GetSymbols, (nsAString&)); diff --git a/layout/style/nsICSSStyleRuleDOMWrapper.h b/layout/style/nsICSSStyleRuleDOMWrapper.h index f2a3b6ccc92d..038cca0868bb 100644 --- a/layout/style/nsICSSStyleRuleDOMWrapper.h +++ b/layout/style/nsICSSStyleRuleDOMWrapper.h @@ -18,11 +18,6 @@ #define NS_ICSS_STYLE_RULE_DOM_WRAPPER_IID \ {0xcee1bbb6, 0x0a32, 0x4cf3, {0x8d, 0x42, 0xba, 0x39, 0x38, 0xe9, 0xec, 0xaa}} -namespace mozilla { -namespace css { -class StyleRule; -} // namespace css -} // namespace mozilla class nsICSSStyleRuleDOMWrapper : public nsIDOMCSSStyleRule { public: