Bug 1363596 part 2 - Add support for symbols() function. r=heycam
MozReview-Commit-ID: IuFnhkdWG3C
--- a/js/src/devtools/rootAnalysis/analyzeHeapWrites.js
+++ b/js/src/devtools/rootAnalysis/analyzeHeapWrites.js
@@ -142,16 +142,17 @@ function treatAsSafeArgument(entry, varN
["Gecko_SetNodeFlags", "aNode", null],
["Gecko_UnsetNodeFlags", "aNode", null],
// Various Servo binding out parameters. This is a mess and there needs
// to be a way to indicate which params are out parameters, either using
// an attribute or a naming convention.
["Gecko_CopyFontFamilyFrom", "dst", null],
["Gecko_SetCounterStyleToName", "aPtr", null],
+ ["Gecko_SetCounterStyleToSymbols", "aPtr", null],
["Gecko_CopyCounterStyle", "aDst", null],
["Gecko_SetMozBinding", "aDisplay", null],
[/ClassOrClassList/, /aClass/, null],
["Gecko_GetAtomAsUTF16", "aLength", null],
["Gecko_CopyMozBindingFrom", "aDest", null],
["Gecko_SetNullImageValue", "aImage", null],
["Gecko_SetGradientImageValue", "aImage", null],
["Gecko_SetImageOrientation", "aVisibility", null],
--- a/layout/reftests/counter-style/reftest.list
+++ b/layout/reftests/counter-style/reftest.list
@@ -26,10 +26,10 @@ fails-if(webrender) == descriptor-range-
fails-if(webrender) == descriptor-pad-invalid.html descriptor-pad-invalid-ref.html
fails-if(webrender) == descriptor-fallback.html descriptor-fallback-ref.html
fails-if(webrender) == descriptor-symbols-invalid.html descriptor-symbols-invalid-ref.html
== name-case-sensitivity.html name-case-sensitivity-ref.html
fails-if(webrender) == dependent-builtin.html dependent-builtin-ref.html
== redefine-builtin.html redefine-builtin-ref.html
== redefine-attr-mapping.html redefine-attr-mapping-ref.html
== disclosure-styles.html disclosure-styles-ref.html
-fails-if(styloVsGecko) == symbols-function.html symbols-function-ref.html
+== symbols-function.html symbols-function-ref.html
== symbols-function-invalid.html symbols-function-invalid-ref.html
--- a/layout/style/CounterStyleManager.cpp
+++ b/layout/style/CounterStyleManager.cpp
@@ -1696,26 +1696,41 @@ AnonymousCounterStyle::AnonymousCounterS
: CounterStyle(NS_STYLE_LIST_STYLE_CUSTOM)
, mSingleString(true)
, mSystem(NS_STYLE_COUNTER_SYSTEM_CYCLIC)
{
mSymbols.SetCapacity(1);
mSymbols.AppendElement(aContent);
}
+static nsTArray<nsString>
+CollectSymbolsFromCSSValueList(const nsCSSValueList* aList)
+{
+ nsTArray<nsString> symbols;
+ for (const nsCSSValueList* item = aList; item; item = item->mNext) {
+ item->mValue.GetStringValue(*symbols.AppendElement());
+ }
+ symbols.Compact();
+ return symbols;
+}
+
AnonymousCounterStyle::AnonymousCounterStyle(const nsCSSValue::Array* aParams)
+ : AnonymousCounterStyle(
+ aParams->Item(0).GetIntValue(),
+ CollectSymbolsFromCSSValueList(aParams->Item(1).GetListValue()))
+{
+}
+
+AnonymousCounterStyle::AnonymousCounterStyle(uint8_t aSystem,
+ nsTArray<nsString> aSymbols)
: CounterStyle(NS_STYLE_LIST_STYLE_CUSTOM)
, mSingleString(false)
- , mSystem(aParams->Item(0).GetIntValue())
+ , mSystem(aSystem)
+ , mSymbols(Move(aSymbols))
{
- for (const nsCSSValueList* item = aParams->Item(1).GetListValue();
- item; item = item->mNext) {
- item->mValue.GetStringValue(*mSymbols.AppendElement());
- }
- mSymbols.Compact();
}
/* virtual */ void
AnonymousCounterStyle::GetStyleName(nsAString& aResult)
{
aResult.Truncate();
}
--- a/layout/style/CounterStyleManager.h
+++ b/layout/style/CounterStyleManager.h
@@ -99,16 +99,17 @@ public:
protected:
int32_t mStyle;
};
class AnonymousCounterStyle final : public CounterStyle
{
public:
explicit AnonymousCounterStyle(const nsSubstring& aContent);
+ AnonymousCounterStyle(uint8_t aSystem, nsTArray<nsString> aSymbols);
explicit AnonymousCounterStyle(const nsCSSValue::Array* aValue);
virtual void GetStyleName(nsAString& aResult) override;
virtual void GetPrefix(nsAString& aResult) override;
virtual void GetSuffix(nsAString& aResult) override;
virtual bool IsBullet() override;
virtual void GetNegative(NegativeType& aResult) override;
--- a/layout/style/ServoBindings.cpp
+++ b/layout/style/ServoBindings.cpp
@@ -1160,16 +1160,28 @@ Gecko_CopyImageOrientationFrom(nsStyleVi
void
Gecko_SetCounterStyleToName(CounterStylePtr* aPtr, nsIAtom* aName)
{
*aPtr = already_AddRefed<nsIAtom>(aName);
}
void
+Gecko_SetCounterStyleToSymbols(CounterStylePtr* aPtr, uint8_t aSymbolsType,
+ nsACString const* const* aSymbols,
+ uint32_t aSymbolsCount)
+{
+ nsTArray<nsString> symbols(aSymbolsCount);
+ for (uint32_t i = 0; i < aSymbolsCount; i++) {
+ symbols.AppendElement(NS_ConvertUTF8toUTF16(*aSymbols[i]));
+ }
+ *aPtr = new AnonymousCounterStyle(aSymbolsType, Move(symbols));
+}
+
+void
Gecko_CopyCounterStyle(CounterStylePtr* aDst, const CounterStylePtr* aSrc)
{
*aDst = *aSrc;
}
already_AddRefed<css::URLValue>
ServoBundledURI::IntoCssUrl()
{
--- a/layout/style/ServoBindings.h
+++ b/layout/style/ServoBindings.h
@@ -271,16 +271,20 @@ void Gecko_SetImageOrientation(nsStyleVi
bool aFlip);
void Gecko_SetImageOrientationAsFromImage(nsStyleVisibility* aVisibility);
void Gecko_CopyImageOrientationFrom(nsStyleVisibility* aDst,
const nsStyleVisibility* aSrc);
// Counter style.
// This function takes an already addrefed nsIAtom
void Gecko_SetCounterStyleToName(mozilla::CounterStylePtr* ptr, nsIAtom* name);
+void Gecko_SetCounterStyleToSymbols(mozilla::CounterStylePtr* ptr,
+ uint8_t symbols_type,
+ nsACString const* const* symbols,
+ uint32_t symbols_count);
void Gecko_CopyCounterStyle(mozilla::CounterStylePtr* dst,
const mozilla::CounterStylePtr* src);
// background-image style.
void Gecko_SetNullImageValue(nsStyleImage* image);
void Gecko_SetGradientImageValue(nsStyleImage* image, nsStyleGradient* gradient);
NS_DECL_THREADSAFE_FFI_REFCOUNTING(mozilla::css::ImageValue, ImageValue);
mozilla::css::ImageValue* Gecko_ImageValue_Create(ServoBundledURI aURI);
--- a/layout/style/test/stylo-failures.md
+++ b/layout/style/test/stylo-failures.md
@@ -48,19 +48,18 @@ to mochitest command.
* console support bug 1352669
* test_bug413958.html `monitorConsole` [3]
* test_parser_diagnostics_unprintables.html [550]
* Transition support:
* test_transitions.html: pseudo elements [4]
* test_transitions_and_reframes.html `pseudo-element`: bug 1366422 [4]
* Events:
* test_animations_event_order.html [2]
-* symbols() function and string value on list-style-type bug 1363596
- * test_value_storage.html `symbols(` [30]
- * ... `list-style-type` [8]
+* string value on list-style-type bug 1363596
+ * test_value_storage.html `list-style-type` [8]
* ... `'list-style'` [18]
* Unimplemented \@font-face descriptors:
* test_font_face_parser.html `font-language-override`: bug 1355364 [8]
* keyword values should be preserved in \@font-face bug 1355368
* test_font_face_parser.html `font-weight` [4]
* test_font_loading_api.html `weight` [1]
* @namespace support:
* test_namespace_rule.html: bug 1355715 [6]