Merge remote-tracking branch 'origin/tracking' into custom

This commit is contained in:
roytam1 2024-04-08 11:13:25 +08:00
commit 4f792793c2
64 changed files with 1429 additions and 1119 deletions

View file

@ -67,21 +67,10 @@
#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
@ -188,16 +177,6 @@ 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,
@ -220,15 +199,6 @@ 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<nsEventTargetSH>,
DOM_DEFAULT_SCRIPTABLE_FLAGS |
@ -244,21 +214,6 @@ static nsDOMClassInfoData sClassInfoData[] = {
NS_DEFINE_CHROME_ONLY_CLASSINFO_DATA(ChromeMessageSender, nsDOMGenericSH,
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,
@ -511,22 +466,6 @@ 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)
@ -560,18 +499,6 @@ 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)
@ -603,26 +530,6 @@ 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

View file

@ -7,12 +7,6 @@
DOMCI_CLASS(DOMPrototype)
DOMCI_CLASS(DOMConstructor)
// CSS classes
DOMCI_CLASS(CSSStyleRule)
DOMCI_CLASS(CSSImportRule)
DOMCI_CLASS(CSSMediaRule)
DOMCI_CLASS(CSSNameSpaceRule)
// XUL classes
#ifdef MOZ_XUL
DOMCI_CLASS(XULCommandDispatcher)
@ -28,27 +22,11 @@ DOMCI_CLASS(XULTemplateBuilder)
DOMCI_CLASS(XULTreeBuilder)
#endif
DOMCI_CLASS(CSSMozDocumentRule)
DOMCI_CLASS(CSSSupportsRule)
// @font-face in CSS
DOMCI_CLASS(CSSFontFaceRule)
DOMCI_CLASS(ContentFrameMessageManager)
DOMCI_CLASS(ContentProcessMessageManager)
DOMCI_CLASS(ChromeMessageBroadcaster)
DOMCI_CLASS(ChromeMessageSender)
DOMCI_CLASS(CSSKeyframeRule)
DOMCI_CLASS(CSSKeyframesRule)
// @counter-style in CSS
DOMCI_CLASS(CSSCounterStyleRule)
DOMCI_CLASS(CSSPageRule)
DOMCI_CLASS(CSSFontFeatureValuesRule)
DOMCI_CLASS(XULControlElement)
DOMCI_CLASS(XULLabeledControlElement)
DOMCI_CLASS(XULButtonElement)

View file

@ -4940,7 +4940,7 @@ nsDocument::StyleRuleChanged(StyleSheet* aSheet,
DO_STYLESHEET_NOTIFICATION(StyleRuleChangeEvent,
"StyleRuleChanged",
mRule,
aStyleRule ? aStyleRule->GetDOMRule() : nullptr);
aStyleRule);
}
}
@ -4954,8 +4954,7 @@ nsDocument::StyleRuleAdded(StyleSheet* aSheet,
DO_STYLESHEET_NOTIFICATION(StyleRuleChangeEvent,
"StyleRuleAdded",
mRule,
aStyleRule ? aStyleRule->GetDOMRule()
: nullptr);
aStyleRule);
}
}
@ -4969,8 +4968,7 @@ nsDocument::StyleRuleRemoved(StyleSheet* aSheet,
DO_STYLESHEET_NOTIFICATION(StyleRuleChangeEvent,
"StyleRuleRemoved",
mRule,
aStyleRule ? aStyleRule->GetDOMRule()
: nullptr);
aStyleRule);
}
}

View file

@ -19,6 +19,7 @@ class TabChildGlobal;
class ProcessGlobal;
} // namespace dom
} // namespace mozilla
class SandboxPrivate;
class nsInProcessTabChildGlobal;
class nsWindowRoot;
@ -144,7 +145,7 @@ public:
}
}
bool PreservingWrapper()
bool PreservingWrapper() const
{
return HasWrapperFlag(WRAPPER_BIT_PRESERVED);
}
@ -163,7 +164,7 @@ public:
/**
* Returns true if the object has a non-gray wrapper.
*/
bool IsBlack();
bool IsBlack() const;
/**
* Returns true if the object has a black wrapper,
@ -271,11 +272,15 @@ 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;
friend class nsInProcessTabChildGlobal;
friend class nsWindowRoot;
void SetIsNotDOMBinding()
{
MOZ_ASSERT(!mWrapper && !(GetWrapperFlags() & ~WRAPPER_IS_NOT_DOM_BINDING),

View file

@ -21,7 +21,7 @@ nsWrapperCache::GetWrapper() const
}
inline bool
nsWrapperCache::IsBlack()
nsWrapperCache::IsBlack() const
{
JSObject* o = GetWrapperPreserveColor();
return o && !JS::ObjectIsMarkedGray(o);

View file

@ -197,23 +197,96 @@ 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
},
@ -1689,7 +1762,6 @@ 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')

View file

@ -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 "nsIDOMCSSRule.idl"
#include "nsISupports.idl"
[scriptable, uuid(9b5e48ce-d84c-4e31-aff5-34e9f4141313)]
interface nsIDOMCSSCounterStyleRule : nsIDOMCSSRule
interface nsIDOMCSSCounterStyleRule : nsISupports
{
attribute DOMString name;
attribute DOMString system;

View file

@ -3,10 +3,12 @@
* 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 "nsIDOMCSSRule.idl"
#include "nsISupports.idl"
interface nsIDOMCSSStyleDeclaration;
[scriptable, uuid(db971017-fe0c-4529-972c-8217f2fee217)]
interface nsIDOMCSSFontFaceRule : nsIDOMCSSRule
interface nsIDOMCSSFontFaceRule : nsISupports
{
readonly attribute nsIDOMCSSStyleDeclaration style;
};

View file

@ -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 "nsIDOMCSSRule.idl"
#include "nsISupports.idl"
[scriptable, uuid(a343d27f-1da6-4fc3-9355-d4ca434f958e)]
interface nsIDOMCSSFontFeatureValuesRule : nsIDOMCSSRule
interface nsIDOMCSSFontFeatureValuesRule : nsISupports
{
attribute DOMString fontFamily;
// raises(DOMException) on setting

View file

@ -3,13 +3,15 @@
* 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 "nsIDOMCSSRule.idl"
#include "nsISupports.idl"
interface nsIDOMCSSRuleList;
/**
* Interface for at-rules that have child rules in the CSS OM.
*/
[scriptable, uuid(a0e3324a-f911-4baf-9591-5322c76cbb0d)]
interface nsIDOMCSSGroupingRule : nsIDOMCSSRule
interface nsIDOMCSSGroupingRule : nsISupports
{
readonly attribute nsIDOMCSSRuleList cssRules;

View file

@ -3,10 +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 "nsIDOMCSSRule.idl"
#include "nsISupports.idl"
interface nsIDOMMediaList;
interface nsIDOMCSSStyleSheet;
[scriptable, uuid(d3b2b914-01ef-4663-beda-a6475a26f491)]
interface nsIDOMCSSImportRule : nsIDOMCSSRule
interface nsIDOMCSSImportRule : nsISupports
{
readonly attribute DOMString href;
readonly attribute nsIDOMMediaList media;

View file

@ -3,10 +3,12 @@
* 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 "nsIDOMCSSRule.idl"
#include "nsISupports.idl"
interface nsIDOMCSSStyleDeclaration;
[scriptable, uuid(a281a8b4-eaa2-49a8-8b97-acc2814a57c9)]
interface nsIDOMCSSKeyframeRule : nsIDOMCSSRule
interface nsIDOMCSSKeyframeRule : nsISupports
{
attribute DOMString keyText;
readonly attribute nsIDOMCSSStyleDeclaration style;

View file

@ -3,10 +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 "nsIDOMCSSRule.idl"
#include "nsISupports.idl"
interface nsIDOMCSSRuleList;
interface nsIDOMCSSKeyframeRule;
[scriptable, uuid(400f4b70-ad0a-4047-aba4-ee8019f6b907)]
interface nsIDOMCSSKeyframesRule : nsIDOMCSSRule
interface nsIDOMCSSKeyframesRule : nsISupports
{
attribute DOMString name;
readonly attribute nsIDOMCSSRuleList cssRules;

View file

@ -5,6 +5,8 @@
#include "nsIDOMCSSConditionRule.idl"
interface nsIDOMMediaList;
/**
* Interface for @media rules in the CSS OM.
*/

View file

@ -3,10 +3,12 @@
* 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 "nsIDOMCSSRule.idl"
#include "nsISupports.idl"
interface nsIDOMCSSStyleDeclaration;
[scriptable, uuid(c119072b-7d2f-4aeb-a90d-e2d6b606c32a)]
interface nsIDOMCSSPageRule : nsIDOMCSSRule
interface nsIDOMCSSPageRule : nsISupports
{
//attribute DOMString selectorText;
// raises(DOMException) on setting

View file

@ -3,10 +3,12 @@
* 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 "nsIDOMCSSRule.idl"
#include "nsISupports.idl"
interface nsIDOMCSSStyleDeclaration;
[scriptable, uuid(b5e9af48-a7c2-4f88-aae3-58307af4b5a5)]
interface nsIDOMCSSStyleRule : nsIDOMCSSRule
interface nsIDOMCSSStyleRule : nsISupports
{
attribute DOMString selectorText;
// raises(DOMException) on setting

View file

@ -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 "nsIDOMCSSRule.idl"
#include "nsISupports.idl"
[scriptable, uuid(98f4c27b-fb35-4355-8fd9-546c4697d71a)]
interface nsIDOMCSSUnknownRule : nsIDOMCSSRule
interface nsIDOMCSSUnknownRule : nsISupports
{
};

View file

@ -15,6 +15,7 @@
#include "AudioContext.h"
#include "js/TypeDecls.h"
#include "mozilla/MemoryReporting.h"
#include "mozilla/dom/TypedArray.h"
namespace mozilla {

View file

@ -244,7 +244,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!

View file

@ -55,6 +55,14 @@ public:
Constructor(const GlobalObject& aGlobal, const nsAString& aURL,
const Optional<nsAString>& aBase, ErrorResult& aRv);
// Helper for window.URL constructor
static already_AddRefed<URL>
WebkitURL(const GlobalObject& aGlobal, const nsAString& aURL,
const Optional<nsAString>& aBase, ErrorResult& aRv)
{
return Constructor(aGlobal, aURL, aBase, aRv);
}
// Helper for Fetch API
static already_AddRefed<URL>
WorkerConstructor(const GlobalObject& aGlobal, const nsAString& aURL,

View file

@ -0,0 +1,14 @@
/* -*- 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;
};

View file

@ -0,0 +1,23 @@
/* -*- 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;
};

View file

@ -0,0 +1,15 @@
/* -*- 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;
};

View file

@ -0,0 +1,29 @@
/* -*- 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;
};

View file

@ -0,0 +1,17 @@
/* -*- 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);
};

View file

@ -0,0 +1,17 @@
/* -*- 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 <https://bugzilla.mozilla.org/show_bug.cgi?id=1326509>.
[SameObject] readonly attribute CSSStyleSheet? styleSheet;
};

View file

@ -0,0 +1,14 @@
/* -*- 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;
};

View file

@ -0,0 +1,18 @@
/* -*- 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);
};

View file

@ -0,0 +1,17 @@
/* -*- 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;
};

View file

@ -0,0 +1,10 @@
/* -*- 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.
};

View file

@ -0,0 +1,16 @@
/* -*- 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. <See
// https://bugzilla.mozilla.org/show_bug.cgi?id=1326514>.
// readonly attribute DOMString namespaceURI;
// readonly attribute DOMString prefix;
};

View file

@ -0,0 +1,17 @@
/* -*- 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;
};

52
dom/webidl/CSSRule.webidl Normal file
View file

@ -0,0 +1,52 @@
/* -*- 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;
};

View file

@ -7,8 +7,6 @@
* http://dev.w3.org/csswg/cssom/
*/
interface CSSRule;
interface CSSStyleDeclaration {
[CEReactions, SetterThrows]
attribute DOMString cssText;

View file

@ -0,0 +1,14 @@
/* -*- 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;
};

View file

@ -7,8 +7,6 @@
* http://dev.w3.org/csswg/cssom/
*/
interface CSSRule;
enum CSSStyleSheetParsingMode {
"author",
"user",

View file

@ -0,0 +1,12 @@
/* -*- 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 {
};

View file

@ -24,8 +24,10 @@ 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;

View file

@ -3,8 +3,6 @@
* 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
{

View file

@ -7,8 +7,6 @@
* http://dev.w3.org/csswg/cssom/
*/
interface CSSRule;
interface StyleSheet {
[Constant]
readonly attribute DOMString type;

View file

@ -15,6 +15,7 @@
// [Constructor(DOMString url, optional (URL or DOMString) base = "about:blank")]
[Constructor(DOMString url, URL base),
Constructor(DOMString url, optional DOMString base),
NamedConstructor=webkitURL(DOMString url, optional DOMString base),
Exposed=(Window,Worker,WorkerDebugger)]
interface URL {
// Bug 824857: no support for stringifier attributes yet.

View file

@ -90,12 +90,27 @@ 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',

View file

@ -214,28 +214,8 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=668855
make_live_map();
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();
// We're out of ideas for unpreservable natives, now that just about
// everything is on webidl, so just don't test those.
/* set up for running precise GC/CC then checking the results */

View file

@ -1,7 +1,6 @@
<!DOCTYPE HTML>
<html>
<head>
<link rel="stylesheet" href="data:text/css,div {}">
<title>Test Cross-Compartment DOM WeakMaps</title>
</head>
<body>

View file

@ -15,14 +15,6 @@ 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() {

View file

@ -18,6 +18,7 @@
#include "nsIDOMCSSImportRule.h"
#include "nsIDOMCSSMediaRule.h"
#include "nsIDOMCSSSupportsRule.h"
#include "nsIDOMCSSRule.h"
#include "nsIURI.h"
#include "nsIDocument.h"
#include "nsNetUtil.h"

View file

@ -248,13 +248,9 @@ inDOMUtils::GetCSSStyleRules(nsIDOMElement *aElement,
for (nsRuleNode* ruleNode : Reversed(ruleNodes)) {
RefPtr<Declaration> decl = do_QueryObject(ruleNode->GetRule());
if (decl) {
RefPtr<mozilla::css::StyleRule> styleRule =
do_QueryObject(decl->GetOwningRule());
if (styleRule) {
nsCOMPtr<nsIDOMCSSRule> domRule = styleRule->GetDOMRule();
if (domRule) {
rules->AppendElement(domRule, /*weak =*/ false);
}
css::Rule* owningRule = decl->GetOwningRule();
if (owningRule) {
rules->AppendElement(owningRule, /*weak =*/ false);
}
}
}

View file

@ -0,0 +1,18 @@
/* -*- 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<JSObject*> aGivenProto)
{
return dom::CSSStyleRuleBinding::Wrap(aCx, this, aGivenProto);
}
} // namespace mozilla

View file

@ -0,0 +1,60 @@
/* -*- 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"
/**
* Superclass for mozilla::css::StyleRule, 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;
// Likewise for this one. We have to override our superclass, but don't
// really need to do anything in this method.
virtual bool IsCCLeaf() 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<JSObject*> aGivenProto) override;
};
} // namespace mozilla
#endif // mozilla_BindingStyleRule_h__

View file

@ -7,6 +7,7 @@
#define mozilla_dom_CSSRuleList_h
#include "mozilla/StyleSheetInlines.h"
#include "mozilla/css/Rule.h"
#include "nsIDOMCSSRule.h"
#include "nsIDOMCSSRuleList.h"
#include "nsWrapperCache.h"
@ -45,13 +46,13 @@ public:
}
// WebIDL API
nsIDOMCSSRule* Item(uint32_t aIndex)
css::Rule* Item(uint32_t aIndex)
{
bool unused;
return IndexedGetter(aIndex, unused);
}
virtual nsIDOMCSSRule* IndexedGetter(uint32_t aIndex, bool& aFound) = 0;
virtual css::Rule* IndexedGetter(uint32_t aIndex, bool& aFound) = 0;
virtual uint32_t Length() = 0;
protected:

View file

@ -61,7 +61,7 @@ public:
virtual CSSStyleSheet* GetParentObject() override;
virtual nsIDOMCSSRule*
virtual css::Rule*
IndexedGetter(uint32_t aIndex, bool& aFound) override;
virtual uint32_t
Length() override;
@ -101,7 +101,7 @@ CSSRuleListImpl::Length()
return AssertedCast<uint32_t>(mStyleSheet->StyleRuleCount());
}
nsIDOMCSSRule*
css::Rule*
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->GetDOMRule();
return rule;
}
}
@ -1238,8 +1238,10 @@ CSSStyleSheet::TraverseInner(nsCycleCollectionTraversalCallback &cb)
const nsCOMArray<css::Rule>& 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]->GetExistingDOMRule());
if (!rules[i]->IsCCLeaf()) {
NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mOrderedRules[i]");
cb.NoteXPCOMChild(rules[i]);
}
}
}
@ -1646,10 +1648,10 @@ CSSStyleSheet::Media()
return mMedia;
}
nsIDOMCSSRule*
css::Rule*
CSSStyleSheet::GetDOMOwnerRule() const
{
return mOwnerRule ? mOwnerRule->GetDOMRule() : nullptr;
return mOwnerRule;
}
CSSRuleList*
@ -1812,11 +1814,6 @@ CSSStyleSheet::DeleteRuleInternal(uint32_t aIndex, ErrorResult& aRv)
RefPtr<css::Rule> 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();

View file

@ -212,7 +212,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.
nsIDOMCSSRule* GetDOMOwnerRule() const final;
css::Rule* GetDOMOwnerRule() const final;
void WillDirty();
void DidDirty();

View file

@ -96,6 +96,8 @@ public:
NS_DECLARE_STATIC_IID_ACCESSOR(NS_CSS_DECLARATION_IMPL_CID)
// If this ever becomes cycle-collected, please change the CC implementation
// for StyleRule to traverse it.
NS_DECL_ISUPPORTS
private:

View file

@ -12,6 +12,7 @@
#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"
@ -24,6 +25,10 @@ namespace mozilla {
class CSSStyleSheet;
namespace dom {
class CSSRuleList;
} // namespace dom
namespace css {
class GroupRuleRuleList;
@ -38,11 +43,10 @@ protected:
virtual ~GroupRule();
public:
NS_DECL_CYCLE_COLLECTION_CLASS(GroupRule)
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(GroupRule, Rule)
NS_DECL_ISUPPORTS_INHERITED
virtual bool IsCCLeaf() const override;
// 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
@ -80,9 +84,15 @@ 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);
void AppendRulesToCssText(nsAString& aCssText) const;
// to implement common methods on nsIDOMCSSMediaRule and
// nsIDOMCSSMozDocumentRule
@ -95,6 +105,24 @@ protected:
RefPtr<GroupRuleRuleList> 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

View file

@ -20,6 +20,7 @@ class nsString;
namespace mozilla {
class CSSStyleSheet;
class StyleSheet;
namespace css {
@ -34,10 +35,9 @@ private:
ImportRule(const ImportRule& aCopy);
~ImportRule();
public:
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(ImportRule, mozilla::css::Rule)
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
DECL_STYLE_RULE_INHERIT
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(ImportRule, Rule)
NS_DECL_ISUPPORTS_INHERITED
virtual bool IsCCLeaf() const override;
#ifdef HAVE_CPP_AMBIGUITY_RESOLVING_USING
using Rule::GetStyleSheet; // unhide since nsIDOMCSSImportRule has its own GetStyleSheet
@ -54,12 +54,18 @@ public:
virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override;
// nsIDOMCSSRule interface
NS_DECL_NSIDOMCSSRULE
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
// 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<nsMediaList> mMedia;

View file

@ -24,8 +24,7 @@ class nsIAtom;
namespace mozilla {
namespace css {
class NameSpaceRule final : public Rule,
public nsIDOMCSSRule
class NameSpaceRule final : public Rule
{
public:
NameSpaceRule(nsIAtom* aPrefix, const nsString& aURLSpec,
@ -37,25 +36,28 @@ private:
public:
NS_DECLARE_STATIC_IID_ACCESSOR(NS_CSS_NAMESPACE_RULE_IMPL_CID)
NS_DECL_ISUPPORTS
NS_DECL_ISUPPORTS_INHERITED
virtual bool IsCCLeaf() const override;
// 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<Rule> 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;
// nsIDOMCSSRule interface
NS_DECL_NSIDOMCSSRULE
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
private:
nsCOMPtr<nsIAtom> mPrefix;

View file

@ -12,6 +12,7 @@
#include "mozilla/MemoryReporting.h"
#include "nsISupports.h"
#include "nsIDOMCSSRule.h"
#include "nsWrapperCache.h"
class nsIDocument;
struct nsRuleData;
@ -22,15 +23,9 @@ namespace mozilla {
namespace css {
class GroupRule;
#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 {
class Rule : public nsIDOMCSSRule
, public nsWrapperCache
{
protected:
Rule(uint32_t aLineNumber, uint32_t aColumnNumber)
: mSheet(nullptr),
@ -51,6 +46,14 @@ protected:
virtual ~Rule() {}
public:
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
NS_DECL_CYCLE_COLLECTION_SKIPPABLE_SCRIPT_HOLDER_CLASS(Rule)
// Return true if this rule is known to be a cycle collection leaf, in the
// sense that it doesn't have any outgoing owning edges.
virtual bool IsCCLeaf() const MOZ_MUST_OVERRIDE;
// nsIDOMCSSRule interface
NS_DECL_NSIDOMCSSRULE
#ifdef DEBUG
virtual void List(FILE* out = stdout, int32_t aIndent = 0) const = 0;
@ -106,24 +109,24 @@ public:
*/
virtual already_AddRefed<Rule> 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:
// True if we're known-live for cycle collection purposes.
bool IsKnownLive() const;
// This is sometimes null (e.g., for style attributes).
CSSStyleSheet* mSheet;
// When the parent GroupRule is destroyed, it will call SetParentRule(nullptr)

View file

@ -15,11 +15,11 @@
#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"
@ -27,7 +27,6 @@
#include "nsCSSPseudoClasses.h"
#include "nsCSSAnonBoxes.h"
#include "nsTArray.h"
#include "nsDOMClassInfoID.h"
#include "nsContentUtils.h"
#include "nsError.h"
#include "mozAutoDocUpdate.h"
@ -1096,30 +1095,26 @@ 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<DOMCSSDeclarationImpl>;
public:
explicit DOMCSSDeclarationImpl(css::StyleRule *aRule);
NS_IMETHOD GetParentRule(nsIDOMCSSRule **aParent) override;
void DropReference(void);
virtual css::Declaration* GetCSSDeclaration(Operation aOperation) override;
virtual nsresult SetCSSDeclaration(css::Declaration* aDecl) override;
virtual void GetCSSParsingEnvironment(CSSParsingEnvironment& aCSSParseEnv) override;
virtual nsIDocument* DocToUpdate() override;
// Override |AddRef| and |Release| for being a member of
// |DOMCSSStyleRule|. Also, we need to forward QI for cycle
// collection things to DOMCSSStyleRule.
// Override |AddRef| and |Release| for being owned by StyleRule. Also, we
// need to forward QI for cycle collection things to StyleRule.
NS_DECL_ISUPPORTS_INHERITED
virtual nsINode *GetParentObject() override
@ -1137,55 +1132,12 @@ public:
return document ? document->GetDocGroup() : nullptr;
}
friend class css::DOMCSSStyleRule;
protected:
// This reference is not reference-counted. The rule object tells us
// when it's about to go away.
// This reference is not reference-counted. The rule object owns us and we go
// away when it does.
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)
{
@ -1194,52 +1146,33 @@ DOMCSSDeclarationImpl::DOMCSSDeclarationImpl(css::StyleRule *aRule)
DOMCSSDeclarationImpl::~DOMCSSDeclarationImpl(void)
{
NS_ASSERTION(!mRule, "DropReference not called.");
MOZ_COUNT_DTOR(DOMCSSDeclarationImpl);
}
inline css::DOMCSSStyleRule* DOMCSSDeclarationImpl::DomRule()
{
return reinterpret_cast<css::DOMCSSStyleRule*>
(reinterpret_cast<char*>(this) -
offsetof(css::DOMCSSStyleRule, mDOMDeclaration));
}
NS_IMPL_ADDREF_USING_AGGREGATOR(DOMCSSDeclarationImpl, DomRule())
NS_IMPL_RELEASE_USING_AGGREGATOR(DOMCSSDeclarationImpl, DomRule())
NS_IMPL_ADDREF_USING_AGGREGATOR(DOMCSSDeclarationImpl, mRule)
NS_IMPL_RELEASE_USING_AGGREGATOR(DOMCSSDeclarationImpl, mRule)
NS_INTERFACE_MAP_BEGIN(DOMCSSDeclarationImpl)
NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
// We forward the cycle collection interfaces to DomRule(), which is
// never null (in fact, we're part of that object!)
// We forward the cycle collection interfaces to mRule, which is
// never null.
if (aIID.Equals(NS_GET_IID(nsCycleCollectionISupports)) ||
aIID.Equals(NS_GET_IID(nsXPCOMCycleCollectionParticipant))) {
return DomRule()->QueryInterface(aIID, aInstancePtr);
return mRule->QueryInterface(aIID, aInstancePtr);
}
else
NS_IMPL_QUERY_TAIL_INHERITING(nsDOMCSSDeclaration)
void
DOMCSSDeclarationImpl::DropReference(void)
{
mRule = nullptr;
}
css::Declaration*
DOMCSSDeclarationImpl::GetCSSDeclaration(Operation aOperation)
{
if (mRule) {
if (aOperation != eOperation_Read) {
RefPtr<CSSStyleSheet> sheet = mRule->GetStyleSheet();
if (sheet) {
sheet->WillDirty();
}
if (aOperation != eOperation_Read) {
RefPtr<CSSStyleSheet> sheet = mRule->GetStyleSheet();
if (sheet) {
sheet->WillDirty();
}
return mRule->GetDeclaration();
} else {
return nullptr;
}
return mRule->GetDeclaration();
}
void
@ -1253,12 +1186,7 @@ DOMCSSDeclarationImpl::GetParentRule(nsIDOMCSSRule **aParent)
{
NS_ENSURE_ARG_POINTER(aParent);
if (!mRule) {
*aParent = nullptr;
return NS_OK;
}
NS_IF_ADDREF(*aParent = mRule->GetDOMRule());
NS_IF_ADDREF(*aParent = mRule);
return NS_OK;
}
@ -1294,153 +1222,48 @@ 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<nsISupports*>(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)
: Rule(aLineNumber, aColumnNumber),
mSelector(aSelector),
mDeclaration(aDeclaration)
: BindingStyleRule(aLineNumber, aColumnNumber)
, mSelector(aSelector)
, mDeclaration(aDeclaration)
{
NS_PRECONDITION(aDeclaration, "must have a declaration");
@ -1449,9 +1272,9 @@ StyleRule::StyleRule(nsCSSSelectorList* aSelector,
// for |Clone|
StyleRule::StyleRule(const StyleRule& aCopy)
: Rule(aCopy),
mSelector(aCopy.mSelector ? aCopy.mSelector->Clone() : nullptr),
mDeclaration(new Declaration(*aCopy.mDeclaration))
: BindingStyleRule(aCopy)
, mSelector(aCopy.mSelector ? aCopy.mSelector->Clone() : nullptr)
, mDeclaration(new Declaration(*aCopy.mDeclaration))
{
mDeclaration->SetOwningRule(this);
// rest is constructed lazily on existing data
@ -1460,28 +1283,66 @@ StyleRule::StyleRule(const StyleRule& aCopy)
StyleRule::~StyleRule()
{
delete mSelector;
if (mDOMRule) {
mDOMRule->DOMDeclaration()->DropReference();
}
DropReferences();
}
void
StyleRule::DropReferences()
{
if (mDeclaration) {
mDeclaration->SetOwningRule(nullptr);
}
}
// QueryInterface implementation for StyleRule
NS_INTERFACE_MAP_BEGIN(StyleRule)
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(StyleRule)
if (aIID.Equals(NS_GET_IID(mozilla::css::StyleRule))) {
*aInstancePtr = this;
NS_ADDREF_THIS();
return NS_OK;
}
else
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, mozilla::css::Rule)
NS_INTERFACE_MAP_END
NS_INTERFACE_MAP_ENTRY(nsICSSStyleRuleDOMWrapper)
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSStyleRule)
NS_INTERFACE_MAP_END_INHERITING(Rule)
NS_IMPL_ADDREF(StyleRule)
NS_IMPL_RELEASE(StyleRule)
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)
// Keep this in sync with IsCCLeaf.
// 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<nsISupports*>(p));
}
tmp->DropReferences();
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(StyleRule, Rule)
// Keep this in sync with IsCCLeaf.
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
bool
StyleRule::IsCCLeaf() const
{
if (!Rule::IsCCLeaf()) {
return false;
}
return !mDOMDeclaration || !mDOMDeclaration->PreservingWrapper();
}
/* virtual */ int32_t
StyleRule::GetType() const
@ -1496,27 +1357,6 @@ 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)
{
@ -1572,7 +1412,7 @@ StyleRule::List(FILE* out, int32_t aIndent) const
#endif
void
StyleRule::GetCssText(nsAString& aCssText)
StyleRule::GetCssTextImpl(nsAString& aCssText) const
{
if (mSelector) {
mSelector->ToString(aCssText, GetStyleSheet());
@ -1590,22 +1430,17 @@ StyleRule::GetCssText(nsAString& aCssText)
aCssText.Append(char16_t('}'));
}
void
StyleRule::SetCssText(const nsAString& aCssText)
{
// XXX TBI - need to re-parse rule & declaration
}
void
NS_IMETHODIMP
StyleRule::GetSelectorText(nsAString& aSelectorText)
{
if (mSelector)
mSelector->ToString(aSelectorText, GetStyleSheet());
else
aSelectorText.Truncate();
return NS_OK;
}
void
NS_IMETHODIMP
StyleRule::SetSelectorText(const nsAString& aSelectorText)
{
CSSStyleSheet* sheet = GetStyleSheet();
@ -1632,7 +1467,7 @@ StyleRule::SetSelectorText(const nsAString& aSelectorText)
aSelectorText, sheet->GetSheetURI(), 0, &selectorList);
if (NS_FAILED(result)) {
// Ignore parsing errors and continue to use the previous value.
return;
return NS_OK;
}
// Replace selector.
@ -1645,6 +1480,8 @@ StyleRule::SetSelectorText(const nsAString& aSelectorText)
mozAutoDocUpdate updateBatch(doc, UPDATE_STYLE, true);
doc->StyleRuleChanged(sheet, this);
}
return NS_OK;
}
/* virtual */ size_t
@ -1661,6 +1498,5 @@ StyleRule::SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const
return n;
}
} // namespace css
} // namespace mozilla

View file

@ -13,12 +13,14 @@
#include "mozilla/Attributes.h"
#include "mozilla/MemoryReporting.h"
#include "mozilla/css/Rule.h"
#include "mozilla/UniquePtr.h"
#include "mozilla/BindingStyleRule.h"
#include "nsString.h"
#include "nsCOMPtr.h"
#include "nsCSSPseudoElements.h"
#include "nsIStyleRule.h"
#include "nsICSSStyleRuleDOMWrapper.h"
class nsIAtom;
struct nsCSSSelectorList;
@ -316,13 +318,15 @@ 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 Rule
class StyleRule final : public BindingStyleRule
, public nsICSSStyleRuleDOMWrapper
{
public:
StyleRule(nsCSSSelectorList* aSelector,
@ -334,7 +338,19 @@ private:
public:
NS_DECLARE_STATIC_IID_ACCESSOR(NS_CSS_STYLE_RULE_IMPL_CID)
NS_DECL_ISUPPORTS
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(StyleRule, Rule)
virtual bool IsCCLeaf() const override;
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;
// null for style attribute
nsCSSSelectorList* Selector() { return mSelector; }
@ -343,20 +359,11 @@ 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;
virtual already_AddRefed<Rule> 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
@ -366,10 +373,16 @@ 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<Declaration> mDeclaration;
RefPtr<DOMCSSStyleRule> mDOMRule;
// We own it, and it aggregates its refcount with us.
UniquePtr<DOMCSSDeclarationImpl> mDOMDeclaration;
private:
StyleRule& operator=(const StyleRule& aCopy) = delete;

View file

@ -29,6 +29,10 @@ class CSSRuleList;
class SRIMetadata;
} // namespace dom
namespace css {
class Rule;
}
/**
* Superclass for CSSStyleSheet.
*/
@ -145,7 +149,7 @@ public:
// The XPCOM SetDisabled is fine for WebIDL.
// WebIDL CSSStyleSheet API
virtual nsIDOMCSSRule* GetDOMOwnerRule() const = 0;
virtual css::Rule* GetDOMOwnerRule() const = 0;
dom::CSSRuleList* GetCssRules(nsIPrincipal& aSubjectPrincipal,
ErrorResult& aRv);
uint32_t InsertRule(const nsAString& aRule, uint32_t aIndex,

View file

@ -74,6 +74,7 @@ EXPORTS += [
EXPORTS.mozilla += [
'AnimationCollection.h',
'BindingStyleRule.h',
'CSSEnabledState.h',
'CSSStyleSheet.h',
'CSSVariableDeclarations.h',
@ -177,10 +178,18 @@ UNIFIED_SOURCES += [
'SVGAttrAnimationRuleProcessor.cpp',
]
# nsCSSRuleProcessor.cpp needs to be built separately because it uses plarena.h.
# nsLayoutStylesheetCache.cpp needs to be built separately because it uses
# - BindingStyleRule.cpp doesn't necessarily need to be built separately,
# however, it may shift unified build boundaries, causing
# the Unified CPP containing it to include nsStyleCoord.cpp, which
# includes, via nsStyleCoord.h, <type_traits>, which ends up including
# <xutility>, which fails in much the way described in
# <https://bugzilla.mozilla.org/show_bug.cgi?id=1331102>.
# - 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',
]

File diff suppressed because it is too large Load diff

View file

@ -46,7 +46,7 @@ class ErrorResult;
namespace css {
class MediaRule final : public GroupRule,
class MediaRule final : public ConditionRule,
public nsIDOMCSSMediaRule
{
public:
@ -56,7 +56,7 @@ private:
~MediaRule();
public:
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(MediaRule, GroupRule)
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(MediaRule, ConditionRule)
NS_DECL_ISUPPORTS_INHERITED
// Rule methods
@ -65,18 +65,8 @@ public:
#endif
virtual void SetStyleSheet(mozilla::CSSStyleSheet* aSheet) override; //override GroupRule
virtual int32_t GetType() const override;
using Rule::GetType;
virtual already_AddRefed<Rule> 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
@ -93,17 +83,28 @@ 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<JSObject*> aGivenProto) override;
protected:
void AppendConditionText(nsAString& aOutput);
void AppendConditionText(nsAString& aOutput) const;
RefPtr<nsMediaList> mMedia;
};
class DocumentRule final : public GroupRule,
class DocumentRule final : public ConditionRule,
public nsIDOMCSSMozDocumentRule
{
public:
@ -120,18 +121,8 @@ 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<Rule> 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
@ -172,11 +163,21 @@ 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<JSObject*> aGivenProto) override;
protected:
void AppendConditionText(nsAString& aOutput);
void AppendConditionText(nsAString& aOutput) const;
nsAutoPtr<URL> mURLs; // linked list of |struct URL| above.
};
@ -230,6 +231,9 @@ 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
@ -242,35 +246,44 @@ 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_CYCLE_COLLECTING_ISUPPORTS
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(nsCSSFontFaceRule,
mozilla::css::Rule)
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(nsCSSFontFaceRule, mozilla::css::Rule)
virtual bool IsCCLeaf() const override;
// 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<mozilla::css::Rule> 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<JSObject*> aGivenProto) override;
void GetDescriptors(mozilla::CSSFontFaceDescriptors& aDescriptors) const
{ aDescriptors = mDecl.mDescriptors; }
@ -307,30 +320,39 @@ 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) {}
: mozilla::css::Rule(aCopy)
, mFamilyList(aCopy.mFamilyList)
, mFeatureValues(aCopy.mFeatureValues)
{
}
NS_DECL_ISUPPORTS
NS_DECL_ISUPPORTS_INHERITED
virtual bool IsCCLeaf() const override;
// 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<mozilla::css::Rule> 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;
// Our XPCOM GetFontFamily is OK
void SetFontFamily(const nsAString& aFamily, mozilla::ErrorResult& aRv);
// Our XPCOM GetValueText is OK
void SetValueText(const nsAString& aFamily, mozilla::ErrorResult& aRv);
const mozilla::FontFamilyList& GetFamilyList() { return mFamilyList; }
void SetFamilyList(const mozilla::FontFamilyList& aFamilyList);
@ -344,6 +366,8 @@ public:
virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override;
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
protected:
~nsCSSFontFeatureValuesRule() {}
@ -398,23 +422,27 @@ private:
nsCSSKeyframeRule(const nsCSSKeyframeRule& aCopy);
~nsCSSKeyframeRule();
public:
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsCSSKeyframeRule, mozilla::css::Rule)
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(nsCSSKeyframeRule, mozilla::css::Rule)
virtual bool IsCCLeaf() const override;
// 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<mozilla::css::Rule> 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;
// Our XPCOM GetKeyText is OK.
// Our XPCOM SetKeyText is OK.
nsICSSDeclaration* Style();
const nsTArray<float>& GetKeys() const { return mKeys; }
mozilla::css::Declaration* Declaration() { return mDeclaration; }
@ -422,6 +450,8 @@ public:
virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override;
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
void DoGetKeyText(nsAString &aKeyText) const;
private:
@ -452,22 +482,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<mozilla::css::Rule> 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;
@ -476,6 +506,8 @@ public:
virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override;
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
private:
uint32_t FindRuleIndexForKey(const nsAString& aKey);
@ -526,28 +558,33 @@ private:
nsCSSPageRule(const nsCSSPageRule& aCopy);
~nsCSSPageRule();
public:
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsCSSPageRule, nsIDOMCSSPageRule)
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(nsCSSPageRule, mozilla::css::Rule)
virtual bool IsCCLeaf() const override;
// 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<mozilla::css::Rule> 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<JSObject*> aGivenProto) override;
private:
RefPtr<mozilla::css::Declaration> mDeclaration;
// lazily created when needed:
@ -556,8 +593,8 @@ private:
namespace mozilla {
class CSSSupportsRule : public css::GroupRule,
public nsIDOMCSSSupportsRule
class CSSSupportsRule final : public css::ConditionRule,
public nsIDOMCSSSupportsRule
{
public:
CSSSupportsRule(bool aConditionMet, const nsString& aCondition,
@ -569,23 +606,13 @@ 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<mozilla::css::Rule> 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
@ -595,8 +622,17 @@ 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<JSObject*> aGivenProto) override;
protected:
virtual ~CSSSupportsRule();
@ -623,22 +659,45 @@ private:
~nsCSSCounterStyleRule();
public:
NS_DECL_ISUPPORTS
NS_DECL_ISUPPORTS_INHERITED
virtual bool IsCCLeaf() const override;
// 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<mozilla::css::Rule> 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,
@ -663,6 +722,8 @@ public:
virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override;
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
private:
typedef NS_STDCALL_FUNCPROTO(nsresult, Getter, nsCSSCounterStyleRule,
GetSymbols, (nsAString&));

View file

@ -18,6 +18,11 @@
#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: