From 3434ea57c1aab3e3f6ad833e586bf5910903c22f Mon Sep 17 00:00:00 2001 From: Moonchild Date: Apr 04 2024 08:20:43 +0000 Subject: Issue #2490 - Part 16: Convert CSSFontFeatureValuesRule to WebIDL. --- diff --git a/dom/base/nsDOMClassInfo.cpp b/dom/base/nsDOMClassInfo.cpp index 1d32381..2127832 100644 --- a/dom/base/nsDOMClassInfo.cpp +++ b/dom/base/nsDOMClassInfo.cpp @@ -222,10 +222,6 @@ static nsDOMClassInfoData sClassInfoData[] = { DOM_DEFAULT_SCRIPTABLE_FLAGS | nsIXPCScriptable::WANT_PRECREATE) - NS_DEFINE_CLASSINFO_DATA(CSSFontFeatureValuesRule, nsDOMGenericSH, - DOM_DEFAULT_SCRIPTABLE_FLAGS | - nsIXPCScriptable::WANT_PRECREATE) - NS_DEFINE_CHROME_XBL_CLASSINFO_DATA(XULControlElement, nsDOMGenericSH, DOM_DEFAULT_SCRIPTABLE_FLAGS) NS_DEFINE_CHROME_XBL_CLASSINFO_DATA(XULLabeledControlElement, nsDOMGenericSH, @@ -551,11 +547,6 @@ nsDOMClassInfo::Init() DOM_CLASSINFO_MAP_ENTRY(nsIDOMCSSCounterStyleRule) DOM_CLASSINFO_MAP_END - DOM_CLASSINFO_MAP_BEGIN(CSSFontFeatureValuesRule, nsIDOMCSSFontFeatureValuesRule) - DOM_CLASSINFO_MAP_ENTRY(nsIDOMCSSRule) - 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/nsDOMClassInfoClasses.h b/dom/base/nsDOMClassInfoClasses.h index 299105f..b22cad3 100644 --- a/dom/base/nsDOMClassInfoClasses.h +++ b/dom/base/nsDOMClassInfoClasses.h @@ -26,8 +26,6 @@ DOMCI_CLASS(CSSKeyframesRule) // @counter-style in CSS DOMCI_CLASS(CSSCounterStyleRule) -DOMCI_CLASS(CSSFontFeatureValuesRule) - DOMCI_CLASS(XULControlElement) DOMCI_CLASS(XULLabeledControlElement) DOMCI_CLASS(XULButtonElement) diff --git a/dom/base/nsWrapperCache.h b/dom/base/nsWrapperCache.h index cedda8b..78fff8f 100644 --- a/dom/base/nsWrapperCache.h +++ b/dom/base/nsWrapperCache.h @@ -23,7 +23,6 @@ class ProcessGlobal; class SandboxPrivate; class nsInProcessTabChildGlobal; class nsWindowRoot; -class nsCSSFontFeatureValuesRule; class nsCSSKeyframeRule; class nsCSSKeyframesRule; class nsCSSCounterStyleRule; @@ -284,7 +283,6 @@ private: friend class SandboxPrivate; friend class nsInProcessTabChildGlobal; friend class nsWindowRoot; - friend class nsCSSFontFeatureValuesRule; friend class nsCSSKeyframeRule; friend class nsCSSKeyframesRule; friend class nsCSSCounterStyleRule; diff --git a/dom/bindings/Bindings.conf b/dom/bindings/Bindings.conf index c525020..700bc00 100644 --- a/dom/bindings/Bindings.conf +++ b/dom/bindings/Bindings.conf @@ -191,6 +191,11 @@ DOMInterfaces = { 'headerFile': 'nsCSSRules.h', }, +'CSSFontFeatureValuesRule': { + 'nativeType': 'nsCSSFontFeatureValuesRule', + 'headerFile': 'nsCSSRules.h', +}, + 'CSSGroupingRule': { 'concrete': False, 'nativeType': 'mozilla::css::GroupRule', diff --git a/dom/webidl/CSSFontFeatureValuesRule.webidl b/dom/webidl/CSSFontFeatureValuesRule.webidl new file mode 100644 index 0000000..7532938 --- /dev/null +++ b/dom/webidl/CSSFontFeatureValuesRule.webidl @@ -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; +}; diff --git a/dom/webidl/moz.build b/dom/webidl/moz.build index 18dfba2..acbd911 100644 --- a/dom/webidl/moz.build +++ b/dom/webidl/moz.build @@ -93,6 +93,7 @@ WEBIDL_FILES = [ 'CSSAnimation.webidl', 'CSSConditionRule.webidl', 'CSSFontFaceRule.webidl', + 'CSSFontFeatureValuesRule.webidl', 'CSSGroupingRule.webidl', 'CSSImportRule.webidl', 'CSSLexer.webidl', diff --git a/layout/style/nsCSSRules.cpp b/layout/style/nsCSSRules.cpp index fc009eb..85ddd72 100644 --- a/layout/style/nsCSSRules.cpp +++ b/layout/style/nsCSSRules.cpp @@ -40,6 +40,7 @@ #include "mozilla/dom/CSSMozDocumentRuleBinding.h" #include "mozilla/dom/CSSPageRuleBinding.h" #include "mozilla/dom/CSSFontFaceRuleBinding.h" +#include "mozilla/dom/CSSFontFeatureValuesRuleBinding.h" #include "StyleRule.h" #include "nsFont.h" #include "nsIURI.h" @@ -1796,7 +1797,6 @@ NS_IMPL_RELEASE_INHERITED(nsCSSFontFeatureValuesRule, mozilla::css::Rule) // implementation. NS_INTERFACE_MAP_BEGIN(nsCSSFontFeatureValuesRule) NS_INTERFACE_MAP_ENTRY(nsIDOMCSSFontFeatureValuesRule) - NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSFontFeatureValuesRule) NS_INTERFACE_MAP_END_INHERITING(mozilla::css::Rule) bool @@ -1905,6 +1905,20 @@ nsCSSFontFeatureValuesRule::GetCssTextImpl(nsAString& aCssText) const FontFeatureValuesRuleToString(mFamilyList, mFeatureValues, aCssText); } +void +nsCSSFontFeatureValuesRule::SetFontFamily(const nsAString& aFamily, + ErrorResult& aRv) +{ + aRv.Throw(NS_ERROR_NOT_IMPLEMENTED); +} + +void +nsCSSFontFeatureValuesRule::SetValueText(const nsAString& aFamily, + ErrorResult& aRv) +{ + aRv.Throw(NS_ERROR_NOT_IMPLEMENTED); +} + NS_IMETHODIMP nsCSSFontFeatureValuesRule::GetFontFamily(nsAString& aFamilyListStr) { @@ -1997,8 +2011,7 @@ nsCSSFontFeatureValuesRule::SizeOfIncludingThis( nsCSSFontFeatureValuesRule::WrapObject(JSContext* aCx, JS::Handle aGivenProto) { - NS_NOTREACHED("We called SetIsNotDOMBinding() in our constructor"); - return nullptr; + return CSSFontFeatureValuesRuleBinding::Wrap(aCx, this, aGivenProto); } // ------------------------------------------- diff --git a/layout/style/nsCSSRules.h b/layout/style/nsCSSRules.h index 1b25991..c330f9b 100644 --- a/layout/style/nsCSSRules.h +++ b/layout/style/nsCSSRules.h @@ -322,7 +322,6 @@ public: nsCSSFontFeatureValuesRule(uint32_t aLineNumber, uint32_t aColumnNumber) : mozilla::css::Rule(aLineNumber, aColumnNumber) { - SetIsNotDOMBinding(); } nsCSSFontFeatureValuesRule(const nsCSSFontFeatureValuesRule& aCopy) @@ -331,7 +330,6 @@ public: , mFamilyList(aCopy.mFamilyList) , mFeatureValues(aCopy.mFeatureValues) { - SetIsNotDOMBinding(); } NS_DECL_ISUPPORTS_INHERITED @@ -350,6 +348,10 @@ public: // 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);