Issue #2490 - Part 14: Convert CSSPageRule to WebIDL.

The .style PutForwards bit is coming along for the ride here as a new feature.
This commit is contained in:
Moonchild 2024-04-03 16:47:23 +02:00 • committed by roytam1
commit 74fdaed1fe
8 changed files with 34 additions and 21 deletions

View file

@ -76,7 +76,6 @@
#include "nsIDOMCSSKeyframesRule.h" #include "nsIDOMCSSKeyframesRule.h"
#include "nsIDOMCSSFontFaceRule.h" #include "nsIDOMCSSFontFaceRule.h"
#include "nsIDOMCSSCounterStyleRule.h" #include "nsIDOMCSSCounterStyleRule.h"
#include "nsIDOMCSSPageRule.h"
#include "nsIDOMXULCommandDispatcher.h" #include "nsIDOMXULCommandDispatcher.h"
#include "nsIControllers.h" #include "nsIControllers.h"
#ifdef MOZ_XUL #ifdef MOZ_XUL
@ -236,10 +235,6 @@ static nsDOMClassInfoData sClassInfoData[] = {
DOM_DEFAULT_SCRIPTABLE_FLAGS | DOM_DEFAULT_SCRIPTABLE_FLAGS |
nsIXPCScriptable::WANT_PRECREATE) nsIXPCScriptable::WANT_PRECREATE)
NS_DEFINE_CLASSINFO_DATA(CSSPageRule, nsDOMGenericSH,
DOM_DEFAULT_SCRIPTABLE_FLAGS |
nsIXPCScriptable::WANT_PRECREATE)
NS_DEFINE_CLASSINFO_DATA(CSSFontFeatureValuesRule, nsDOMGenericSH, NS_DEFINE_CLASSINFO_DATA(CSSFontFeatureValuesRule, nsDOMGenericSH,
DOM_DEFAULT_SCRIPTABLE_FLAGS | DOM_DEFAULT_SCRIPTABLE_FLAGS |
nsIXPCScriptable::WANT_PRECREATE) nsIXPCScriptable::WANT_PRECREATE)
@ -580,11 +575,6 @@ nsDOMClassInfo::Init()
DOM_CLASSINFO_MAP_ENTRY(nsIDOMCSSCounterStyleRule) DOM_CLASSINFO_MAP_ENTRY(nsIDOMCSSCounterStyleRule)
DOM_CLASSINFO_MAP_END DOM_CLASSINFO_MAP_END
DOM_CLASSINFO_MAP_BEGIN(CSSPageRule, nsIDOMCSSPageRule)
DOM_CLASSINFO_MAP_ENTRY(nsIDOMCSSRule)
DOM_CLASSINFO_MAP_ENTRY(nsIDOMCSSPageRule)
DOM_CLASSINFO_MAP_END
DOM_CLASSINFO_MAP_BEGIN(CSSFontFeatureValuesRule, nsIDOMCSSFontFeatureValuesRule) DOM_CLASSINFO_MAP_BEGIN(CSSFontFeatureValuesRule, nsIDOMCSSFontFeatureValuesRule)
DOM_CLASSINFO_MAP_ENTRY(nsIDOMCSSRule) DOM_CLASSINFO_MAP_ENTRY(nsIDOMCSSRule)
DOM_CLASSINFO_MAP_ENTRY(nsIDOMCSSFontFeatureValuesRule) DOM_CLASSINFO_MAP_ENTRY(nsIDOMCSSFontFeatureValuesRule)

View file

@ -36,8 +36,6 @@ DOMCI_CLASS(CSSKeyframesRule)
// @counter-style in CSS // @counter-style in CSS
DOMCI_CLASS(CSSCounterStyleRule) DOMCI_CLASS(CSSCounterStyleRule)
DOMCI_CLASS(CSSPageRule)
DOMCI_CLASS(CSSFontFeatureValuesRule) DOMCI_CLASS(CSSFontFeatureValuesRule)
DOMCI_CLASS(XULControlElement) DOMCI_CLASS(XULControlElement)

View file

@ -27,7 +27,6 @@ class nsCSSFontFaceRule;
class nsCSSFontFeatureValuesRule; class nsCSSFontFeatureValuesRule;
class nsCSSKeyframeRule; class nsCSSKeyframeRule;
class nsCSSKeyframesRule; class nsCSSKeyframesRule;
class nsCSSPageRule;
class nsCSSCounterStyleRule; class nsCSSCounterStyleRule;
#define NS_WRAPPERCACHE_IID \ #define NS_WRAPPERCACHE_IID \
@ -290,7 +289,6 @@ private:
friend class nsCSSFontFeatureValuesRule; friend class nsCSSFontFeatureValuesRule;
friend class nsCSSKeyframeRule; friend class nsCSSKeyframeRule;
friend class nsCSSKeyframesRule; friend class nsCSSKeyframesRule;
friend class nsCSSPageRule;
friend class nsCSSCounterStyleRule; friend class nsCSSCounterStyleRule;
void SetIsNotDOMBinding() void SetIsNotDOMBinding()

View file

@ -230,6 +230,11 @@ DOMInterfaces = {
'nativeType': 'mozilla::css::NameSpaceRule', 'nativeType': 'mozilla::css::NameSpaceRule',
}, },
'CSSPageRule': {
'nativeType': 'nsCSSPageRule',
'headerFile': 'nsCSSRules.h',
},
'CSSPrimitiveValue': { 'CSSPrimitiveValue': {
'nativeType': 'nsROCSSPrimitiveValue', 'nativeType': 'nsROCSSPrimitiveValue',
}, },

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;
};

View file

@ -97,6 +97,7 @@ WEBIDL_FILES = [
'CSSMediaRule.webidl', 'CSSMediaRule.webidl',
'CSSMozDocumentRule.webidl', 'CSSMozDocumentRule.webidl',
'CSSNamespaceRule.webidl', 'CSSNamespaceRule.webidl',
'CSSPageRule.webidl',
'CSSPrimitiveValue.webidl', 'CSSPrimitiveValue.webidl',
'CSSPseudoElement.webidl', 'CSSPseudoElement.webidl',
'CSSRule.webidl', 'CSSRule.webidl',

View file

@ -38,6 +38,7 @@
#include "mozilla/dom/CSSMediaRuleBinding.h" #include "mozilla/dom/CSSMediaRuleBinding.h"
#include "mozilla/dom/CSSSupportsRuleBinding.h" #include "mozilla/dom/CSSSupportsRuleBinding.h"
#include "mozilla/dom/CSSMozDocumentRuleBinding.h" #include "mozilla/dom/CSSMozDocumentRuleBinding.h"
#include "mozilla/dom/CSSPageRuleBinding.h"
#include "StyleRule.h" #include "StyleRule.h"
#include "nsFont.h" #include "nsFont.h"
#include "nsIURI.h" #include "nsIURI.h"
@ -2606,7 +2607,6 @@ nsCSSPageRule::nsCSSPageRule(const nsCSSPageRule& aCopy)
: Rule(aCopy) : Rule(aCopy)
, mDeclaration(new css::Declaration(*aCopy.mDeclaration)) , mDeclaration(new css::Declaration(*aCopy.mDeclaration))
{ {
SetIsNotDOMBinding();
mDeclaration->SetOwningRule(this); mDeclaration->SetOwningRule(this);
} }
@ -2651,7 +2651,6 @@ nsCSSPageRule::IsCCLeaf() const
// QueryInterface implementation for nsCSSPageRule // QueryInterface implementation for nsCSSPageRule
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(nsCSSPageRule) NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(nsCSSPageRule)
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSPageRule) NS_INTERFACE_MAP_ENTRY(nsIDOMCSSPageRule)
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSPageRule)
NS_INTERFACE_MAP_END_INHERITING(mozilla::css::Rule) NS_INTERFACE_MAP_END_INHERITING(mozilla::css::Rule)
#ifdef DEBUG #ifdef DEBUG
@ -2696,12 +2695,18 @@ nsCSSPageRule::GetCssTextImpl(nsAString& aCssText) const
NS_IMETHODIMP NS_IMETHODIMP
nsCSSPageRule::GetStyle(nsIDOMCSSStyleDeclaration** aStyle) nsCSSPageRule::GetStyle(nsIDOMCSSStyleDeclaration** aStyle)
{
NS_ADDREF(*aStyle = Style());
return NS_OK;
}
nsICSSDeclaration*
nsCSSPageRule::Style()
{ {
if (!mDOMDeclaration) { if (!mDOMDeclaration) {
mDOMDeclaration = new nsCSSPageStyleDeclaration(this); mDOMDeclaration = new nsCSSPageStyleDeclaration(this);
} }
NS_ADDREF(*aStyle = mDOMDeclaration); return mDOMDeclaration;
return NS_OK;
} }
void void
@ -2729,8 +2734,7 @@ nsCSSPageRule::SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const
nsCSSPageRule::WrapObject(JSContext* aCx, nsCSSPageRule::WrapObject(JSContext* aCx,
JS::Handle<JSObject*> aGivenProto) JS::Handle<JSObject*> aGivenProto)
{ {
NS_NOTREACHED("We called SetIsNotDOMBinding() in our constructor"); return CSSPageRuleBinding::Wrap(aCx, this, aGivenProto);
return nullptr;
} }
namespace mozilla { namespace mozilla {

View file

@ -544,7 +544,6 @@ public:
: mozilla::css::Rule(aLineNumber, aColumnNumber) : mozilla::css::Rule(aLineNumber, aColumnNumber)
, mDeclaration(aDeclaration) , mDeclaration(aDeclaration)
{ {
SetIsNotDOMBinding();
mDeclaration->SetOwningRule(this); mDeclaration->SetOwningRule(this);
} }
private: private:
@ -568,6 +567,7 @@ public:
// WebIDL interface // WebIDL interface
uint16_t Type() const override; uint16_t Type() const override;
void GetCssTextImpl(nsAString& aCssText) const override; void GetCssTextImpl(nsAString& aCssText) const override;
nsICSSDeclaration* Style();
mozilla::css::Declaration* Declaration() { return mDeclaration; } mozilla::css::Declaration* Declaration() { return mDeclaration; }