mirror of
https://github.com/roytam1/basilisk55.git
synced 2026-05-26 15:02:46 +00:00
import from UXP: Issue #2828 - Part 1: Build and store the array of layer name tokens in the layer at-rules (53e6317b)
This commit is contained in:
@@ -5232,8 +5232,11 @@ CSSParserImpl::ParseSupportsConditionTermsAfterOperator(
|
||||
bool
|
||||
CSSParserImpl::ParseLayerRule(RuleAppendFunc aAppendFunc, void* aProcessData)
|
||||
{
|
||||
nsString layerName;
|
||||
nsTArray<nsString>* nameList = new nsTArray<nsString>();
|
||||
nsString name;
|
||||
nsTArray<nsString> path;
|
||||
|
||||
nsTArray<nsString> nameList;
|
||||
nsTArray<nsTArray<nsString>> pathList;
|
||||
|
||||
uint32_t linenum, colnum;
|
||||
if (!GetNextTokenLocation(true, &linenum, &colnum)) {
|
||||
@@ -5249,8 +5252,8 @@ CSSParserImpl::ParseLayerRule(RuleAppendFunc aAppendFunc, void* aProcessData)
|
||||
// followed by a "{", which indicates an anonymous layer.
|
||||
bool isStatement = false;
|
||||
if (tk->mType == eCSSToken_Ident) {
|
||||
nsString* currentName = new nsString();
|
||||
currentName->Assign(tk->mIdent);
|
||||
name.Assign(tk->mIdent);
|
||||
path.AppendElement(tk->mIdent);
|
||||
|
||||
bool parsing = true;
|
||||
bool expectIdent = false;
|
||||
@@ -5263,49 +5266,40 @@ CSSParserImpl::ParseLayerRule(RuleAppendFunc aAppendFunc, void* aProcessData)
|
||||
case eCSSToken_Symbol: {
|
||||
if ('.' == tk->mSymbol) {
|
||||
expectIdent = true;
|
||||
if (!currentName->IsEmpty()) {
|
||||
currentName->Append(tk->mSymbol);
|
||||
if (!name.IsEmpty()) {
|
||||
name.Append(tk->mSymbol);
|
||||
continue;
|
||||
}
|
||||
parsing = false;
|
||||
break;
|
||||
} else if (',' == tk->mSymbol) {
|
||||
} else if (',' == tk->mSymbol || ';' == tk->mSymbol || '{' == tk->mSymbol) {
|
||||
if (expectIdent) {
|
||||
parsing = false;
|
||||
break;
|
||||
}
|
||||
nameList->AppendElement(*currentName);
|
||||
currentName = new nsString();
|
||||
nameList.AppendElement(name);
|
||||
pathList.AppendElement(path);
|
||||
if ('{' == tk->mSymbol) {
|
||||
if (nameList.Length() > 1) {
|
||||
return false;
|
||||
}
|
||||
parsing = false;
|
||||
break;
|
||||
} else if (';' == tk->mSymbol) {
|
||||
isStatement = true;
|
||||
parsing = false;
|
||||
break;
|
||||
}
|
||||
name.Truncate();
|
||||
path.Clear();
|
||||
expectIdent = true;
|
||||
continue;
|
||||
} else if (';' == tk->mSymbol) {
|
||||
if (expectIdent) {
|
||||
parsing = false;
|
||||
break;
|
||||
}
|
||||
nameList->AppendElement(*currentName);
|
||||
currentName = new nsString();
|
||||
isStatement = true;
|
||||
parsing = false;
|
||||
break;
|
||||
} else if ('{' == tk->mSymbol) {
|
||||
if (expectIdent) {
|
||||
parsing = false;
|
||||
break;
|
||||
}
|
||||
nameList->AppendElement(*currentName);
|
||||
uint32_t nameListLength = nameList->Length();
|
||||
if (nameListLength == 0 || nameListLength > 1) {
|
||||
return false;
|
||||
}
|
||||
layerName.Assign(nameList->ElementAt(0));
|
||||
parsing = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
case eCSSToken_Ident: {
|
||||
expectIdent = false;
|
||||
currentName->Append(tk->mIdent);
|
||||
name.Append(tk->mIdent);
|
||||
path.AppendElement(tk->mIdent);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
@@ -5317,22 +5311,26 @@ CSSParserImpl::ParseLayerRule(RuleAppendFunc aAppendFunc, void* aProcessData)
|
||||
if (expectIdent) {
|
||||
UngetToken();
|
||||
return false;
|
||||
}
|
||||
} else if (tk->mType == eCSSToken_Symbol && '{' != tk->mSymbol) {
|
||||
UngetToken();
|
||||
}
|
||||
} else if (tk->mType == eCSSToken_Symbol) {
|
||||
if ('{' != tk->mSymbol) {
|
||||
UngetToken();
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (isStatement) {
|
||||
RefPtr<CSSLayerStatementRule> rule =
|
||||
new CSSLayerStatementRule(*nameList, linenum, colnum);
|
||||
new CSSLayerStatementRule(nameList, pathList, linenum, colnum);
|
||||
(*aAppendFunc)(rule, aProcessData);
|
||||
return true;
|
||||
}
|
||||
|
||||
UngetToken();
|
||||
RefPtr<css::GroupRule> rule =
|
||||
new CSSLayerBlockRule(layerName, linenum, colnum);
|
||||
new CSSLayerBlockRule(name, path, linenum, colnum);
|
||||
return ParseGroupRule(rule, aAppendFunc, aProcessData);
|
||||
}
|
||||
|
||||
|
||||
@@ -3355,15 +3355,18 @@ namespace mozilla {
|
||||
|
||||
CSSLayerStatementRule::CSSLayerStatementRule(
|
||||
const nsTArray<nsString>& aNameList,
|
||||
const nsTArray<nsTArray<nsString>>& aPathList,
|
||||
uint32_t aLineNumber, uint32_t aColumnNumber)
|
||||
: Rule(aLineNumber, aColumnNumber)
|
||||
, mNameList(aNameList)
|
||||
, mPathList(aPathList)
|
||||
{
|
||||
}
|
||||
|
||||
CSSLayerStatementRule::CSSLayerStatementRule(const CSSLayerStatementRule& aCopy)
|
||||
: Rule(aCopy)
|
||||
, mNameList(aCopy.mNameList)
|
||||
, mPathList(aCopy.mPathList)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -3390,6 +3393,7 @@ NS_IMPL_CYCLE_COLLECTION_CLASS(CSSLayerStatementRule)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(CSSLayerStatementRule)
|
||||
tmp->mNameList.Clear();
|
||||
tmp->mPathList.Clear();
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(CSSLayerStatementRule, mozilla::css::Rule)
|
||||
@@ -3441,10 +3445,28 @@ CSSLayerStatementRule::GetNameList(nsTArray<nsString>& aResult)
|
||||
aResult = mNameList;
|
||||
}
|
||||
|
||||
void
|
||||
CSSLayerStatementRule::GetPathList(nsTArray<nsTArray<nsString>>& aResult)
|
||||
{
|
||||
aResult = mPathList;
|
||||
}
|
||||
|
||||
/* virtual */ size_t
|
||||
CSSLayerStatementRule::SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const
|
||||
{
|
||||
return aMallocSizeOf(this);
|
||||
size_t n = aMallocSizeOf(this);
|
||||
n += mNameList.ShallowSizeOfExcludingThis(aMallocSizeOf);
|
||||
for (const nsString& s : mNameList) {
|
||||
n += s.SizeOfExcludingThisIfUnshared(aMallocSizeOf);
|
||||
}
|
||||
n += mPathList.ShallowSizeOfExcludingThis(aMallocSizeOf);
|
||||
for (const nsTArray<nsString>& inner : mPathList) {
|
||||
n += inner.ShallowSizeOfExcludingThis(aMallocSizeOf);
|
||||
for (const nsString& str : inner) {
|
||||
n += str.SizeOfExcludingThisIfUnshared(aMallocSizeOf);
|
||||
}
|
||||
}
|
||||
return n;
|
||||
}
|
||||
|
||||
/* virtual */ JSObject*
|
||||
@@ -3460,9 +3482,11 @@ CSSLayerStatementRule::WrapObject(JSContext* aCx,
|
||||
//
|
||||
|
||||
CSSLayerBlockRule::CSSLayerBlockRule(const nsString& aName,
|
||||
const nsTArray<nsString>& aPath,
|
||||
uint32_t aLineNumber, uint32_t aColumnNumber)
|
||||
: css::GroupRule(aLineNumber, aColumnNumber)
|
||||
, mName(aName)
|
||||
, mPath(aPath)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -3473,6 +3497,7 @@ CSSLayerBlockRule::~CSSLayerBlockRule()
|
||||
CSSLayerBlockRule::CSSLayerBlockRule(const CSSLayerBlockRule& aCopy)
|
||||
: css::GroupRule(aCopy)
|
||||
, mName(aCopy.mName)
|
||||
, mPath(aCopy.mPath)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -3505,15 +3530,32 @@ CSSLayerBlockRule::UseForPresentation(nsPresContext* aPresContext,
|
||||
return true;
|
||||
}
|
||||
|
||||
NS_IMPL_ADDREF_INHERITED(CSSLayerBlockRule, css::GroupRule)
|
||||
NS_IMPL_RELEASE_INHERITED(CSSLayerBlockRule, css::GroupRule)
|
||||
void
|
||||
CSSLayerBlockRule::GetPath(nsTArray<nsString>& aResult)
|
||||
{
|
||||
aResult = mPath;
|
||||
}
|
||||
|
||||
NS_IMPL_ADDREF_INHERITED(CSSLayerBlockRule, GroupRule)
|
||||
NS_IMPL_RELEASE_INHERITED(CSSLayerBlockRule, GroupRule)
|
||||
|
||||
// QueryInterface implementation for CSSLayerBlockRule
|
||||
NS_INTERFACE_MAP_BEGIN(CSSLayerBlockRule)
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(CSSLayerBlockRule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSGroupingRule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSLayerBlockRule)
|
||||
NS_INTERFACE_MAP_END_INHERITING(GroupRule)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(CSSLayerBlockRule)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(CSSLayerBlockRule,
|
||||
GroupRule)
|
||||
tmp->mPath.Clear();
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(CSSLayerBlockRule,
|
||||
GroupRule)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
||||
|
||||
uint16_t
|
||||
CSSLayerBlockRule::Type() const
|
||||
{
|
||||
@@ -3549,9 +3591,9 @@ CSSLayerBlockRule::DeleteRule(uint32_t aIndex)
|
||||
|
||||
// nsIDOMCSSLayerBlockRule methods
|
||||
NS_IMETHODIMP
|
||||
CSSLayerBlockRule::GetName(nsAString& aConditionText)
|
||||
CSSLayerBlockRule::GetName(nsAString& aLayerName)
|
||||
{
|
||||
aConditionText.Assign(mName);
|
||||
aLayerName.Assign(mName);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@@ -3561,6 +3603,10 @@ CSSLayerBlockRule::SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const
|
||||
size_t n = aMallocSizeOf(this);
|
||||
n += css::GroupRule::SizeOfExcludingThis(aMallocSizeOf);
|
||||
n += mName.SizeOfExcludingThisIfUnshared(aMallocSizeOf);
|
||||
n += mPath.ShallowSizeOfExcludingThis(aMallocSizeOf);
|
||||
for (const nsString& s : mPath) {
|
||||
n += s.SizeOfExcludingThisIfUnshared(aMallocSizeOf);
|
||||
}
|
||||
return n;
|
||||
}
|
||||
|
||||
|
||||
@@ -758,6 +758,7 @@ class CSSLayerStatementRule final : public css::Rule,
|
||||
{
|
||||
public:
|
||||
CSSLayerStatementRule(const nsTArray<nsString>& aNameList,
|
||||
const nsTArray<nsTArray<nsString>>& aPathList,
|
||||
uint32_t aLineNumber, uint32_t aColumnNumber);
|
||||
CSSLayerStatementRule(const CSSLayerStatementRule& aCopy);
|
||||
|
||||
@@ -780,6 +781,7 @@ public:
|
||||
uint16_t Type() const override;
|
||||
void GetCssTextImpl(nsAString& aCssText) const override;
|
||||
void GetNameList(nsTArray<nsString>& aResult);
|
||||
void GetPathList(nsTArray<nsTArray<nsString>>& aResult);
|
||||
|
||||
virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override;
|
||||
|
||||
@@ -789,6 +791,7 @@ protected:
|
||||
virtual ~CSSLayerStatementRule();
|
||||
|
||||
nsTArray<nsString> mNameList;
|
||||
nsTArray<nsTArray<nsString>> mPathList;
|
||||
};
|
||||
|
||||
class CSSLayerBlockRule final : public css::GroupRule,
|
||||
@@ -796,6 +799,7 @@ class CSSLayerBlockRule final : public css::GroupRule,
|
||||
{
|
||||
public:
|
||||
CSSLayerBlockRule(const nsString& aName,
|
||||
const nsTArray<nsString>& aPath,
|
||||
uint32_t aLineNumber, uint32_t aColumnNumber);
|
||||
CSSLayerBlockRule(const CSSLayerBlockRule& aCopy);
|
||||
|
||||
@@ -808,7 +812,9 @@ public:
|
||||
virtual already_AddRefed<mozilla::css::Rule> Clone() const override;
|
||||
virtual bool UseForPresentation(nsPresContext* aPresContext,
|
||||
nsMediaQueryResultCacheKey& aKey) override;
|
||||
void GetPath(nsTArray<nsString>& aResult);
|
||||
|
||||
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(CSSLayerBlockRule, GroupRule)
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
|
||||
// nsIDOMCSSGroupingRule interface
|
||||
@@ -830,6 +836,7 @@ protected:
|
||||
virtual ~CSSLayerBlockRule();
|
||||
|
||||
nsString mName;
|
||||
nsTArray<nsString> mPath;
|
||||
};
|
||||
|
||||
} // namespace mozilla
|
||||
|
||||
Reference in New Issue
Block a user