Commit 96c6933b authored by Xidorn Quan's avatar Xidorn Quan
Browse files

Bug 1363596 part 2 - Add support for symbols() function. r=heycam

MozReview-Commit-ID: IuFnhkdWG3C

--HG--
extra : source : 7eccc8ee6a73c9756c58989dd1e408361dedf74f
parent 118e3a97
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -147,6 +147,7 @@ function treatAsSafeArgument(entry, varName, csuName)
        // 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],
+1 −1
Original line number Diff line number Diff line
@@ -31,5 +31,5 @@ fails-if(webrender) == dependent-builtin.html dependent-builtin-ref.ht
== 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||stylo) == symbols-function.html            symbols-function-ref.html
== symbols-function.html            symbols-function-ref.html
== symbols-function-invalid.html    symbols-function-invalid-ref.html
+21 −6
Original line number Diff line number Diff line
@@ -1701,16 +1701,31 @@ AnonymousCounterStyle::AnonymousCounterStyle(const nsSubstring& aContent)
  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
+1 −0
Original line number Diff line number Diff line
@@ -104,6 +104,7 @@ 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;
+12 −0
Original line number Diff line number Diff line
@@ -1164,6 +1164,18 @@ 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)
{
Loading