Commit 58f14979 authored by Xiaocheng Hu's avatar Xiaocheng Hu Committed by Commit Bot

Use const CSSParserContext reference at some places where it's never null

Change-Id: I1deab83b451783a6db930a1c6b98055bba57d8f1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2055684Reviewed-by: default avatarAnders Hartvoll Ruud <andruud@chromium.org>
Commit-Queue: Xiaocheng Hu <xiaochengh@chromium.org>
Cr-Commit-Position: refs/heads/master@{#741471}
parent 2a5c2ae0
...@@ -40,11 +40,9 @@ bool CouldConsumeReservedKeyword(CSSParserTokenRange range) { ...@@ -40,11 +40,9 @@ bool CouldConsumeReservedKeyword(CSSParserTokenRange range) {
return false; return false;
} }
// TODO(xiaochengh): |context| is never nullptr in this function. Change
// parameter type to |const CSSParserContext&| to avoid confusion.
const CSSValue* ConsumeSingleType(const CSSSyntaxComponent& syntax, const CSSValue* ConsumeSingleType(const CSSSyntaxComponent& syntax,
CSSParserTokenRange& range, CSSParserTokenRange& range,
const CSSParserContext* context) { const CSSParserContext& context) {
switch (syntax.GetType()) { switch (syntax.GetType()) {
case CSSSyntaxType::kIdent: case CSSSyntaxType::kIdent:
if (range.Peek().GetType() == kIdentToken && if (range.Peek().GetType() == kIdentToken &&
...@@ -55,54 +53,53 @@ const CSSValue* ConsumeSingleType(const CSSSyntaxComponent& syntax, ...@@ -55,54 +53,53 @@ const CSSValue* ConsumeSingleType(const CSSSyntaxComponent& syntax,
} }
return nullptr; return nullptr;
case CSSSyntaxType::kLength: { case CSSSyntaxType::kLength: {
CSSParserContext::ParserModeOverridingScope scope(*context, CSSParserContext::ParserModeOverridingScope scope(context,
kHTMLStandardMode); kHTMLStandardMode);
return css_property_parser_helpers::ConsumeLength( return css_property_parser_helpers::ConsumeLength(
range, *context, ValueRange::kValueRangeAll); range, context, ValueRange::kValueRangeAll);
} }
case CSSSyntaxType::kNumber: case CSSSyntaxType::kNumber:
return css_property_parser_helpers::ConsumeNumber( return css_property_parser_helpers::ConsumeNumber(
range, *context, ValueRange::kValueRangeAll); range, context, ValueRange::kValueRangeAll);
case CSSSyntaxType::kPercentage: case CSSSyntaxType::kPercentage:
return css_property_parser_helpers::ConsumePercent( return css_property_parser_helpers::ConsumePercent(
range, *context, ValueRange::kValueRangeAll); range, context, ValueRange::kValueRangeAll);
case CSSSyntaxType::kLengthPercentage: { case CSSSyntaxType::kLengthPercentage: {
CSSParserContext::ParserModeOverridingScope scope(*context, CSSParserContext::ParserModeOverridingScope scope(context,
kHTMLStandardMode); kHTMLStandardMode);
return css_property_parser_helpers::ConsumeLengthOrPercent( return css_property_parser_helpers::ConsumeLengthOrPercent(
range, *context, ValueRange::kValueRangeAll); range, context, ValueRange::kValueRangeAll);
} }
case CSSSyntaxType::kColor: { case CSSSyntaxType::kColor: {
CSSParserContext::ParserModeOverridingScope scope(*context, CSSParserContext::ParserModeOverridingScope scope(context,
kHTMLStandardMode); kHTMLStandardMode);
return css_property_parser_helpers::ConsumeColor(range, *context); return css_property_parser_helpers::ConsumeColor(range, context);
} }
case CSSSyntaxType::kImage: case CSSSyntaxType::kImage:
return css_property_parser_helpers::ConsumeImage(range, *context); return css_property_parser_helpers::ConsumeImage(range, context);
case CSSSyntaxType::kUrl: case CSSSyntaxType::kUrl:
return css_property_parser_helpers::ConsumeUrl(range, *context); return css_property_parser_helpers::ConsumeUrl(range, context);
case CSSSyntaxType::kInteger: case CSSSyntaxType::kInteger:
return css_property_parser_helpers::ConsumeIntegerOrNumberCalc(range, return css_property_parser_helpers::ConsumeIntegerOrNumberCalc(range,
*context); context);
case CSSSyntaxType::kAngle: case CSSSyntaxType::kAngle:
return css_property_parser_helpers::ConsumeAngle( return css_property_parser_helpers::ConsumeAngle(
range, *context, base::Optional<WebFeature>()); range, context, base::Optional<WebFeature>());
case CSSSyntaxType::kTime: case CSSSyntaxType::kTime:
return css_property_parser_helpers::ConsumeTime( return css_property_parser_helpers::ConsumeTime(
range, *context, ValueRange::kValueRangeAll); range, context, ValueRange::kValueRangeAll);
case CSSSyntaxType::kResolution: case CSSSyntaxType::kResolution:
return css_property_parser_helpers::ConsumeResolution(range); return css_property_parser_helpers::ConsumeResolution(range);
case CSSSyntaxType::kTransformFunction: case CSSSyntaxType::kTransformFunction:
return css_property_parser_helpers::ConsumeTransformValue(range, return css_property_parser_helpers::ConsumeTransformValue(range, context);
*context);
case CSSSyntaxType::kTransformList: case CSSSyntaxType::kTransformList:
return css_property_parser_helpers::ConsumeTransformList(range, *context); return css_property_parser_helpers::ConsumeTransformList(range, context);
case CSSSyntaxType::kCustomIdent: case CSSSyntaxType::kCustomIdent:
// TODO(crbug.com/579788): Implement 'revert'. // TODO(crbug.com/579788): Implement 'revert'.
// TODO(crbug.com/882285): Make 'default' invalid as <custom-ident>. // TODO(crbug.com/882285): Make 'default' invalid as <custom-ident>.
if (IsReservedIdentToken(range.Peek())) if (IsReservedIdentToken(range.Peek()))
return nullptr; return nullptr;
return css_property_parser_helpers::ConsumeCustomIdent(range, *context); return css_property_parser_helpers::ConsumeCustomIdent(range, context);
default: default:
NOTREACHED(); NOTREACHED();
return nullptr; return nullptr;
...@@ -111,7 +108,7 @@ const CSSValue* ConsumeSingleType(const CSSSyntaxComponent& syntax, ...@@ -111,7 +108,7 @@ const CSSValue* ConsumeSingleType(const CSSSyntaxComponent& syntax,
const CSSValue* ConsumeSyntaxComponent(const CSSSyntaxComponent& syntax, const CSSValue* ConsumeSyntaxComponent(const CSSSyntaxComponent& syntax,
CSSParserTokenRange range, CSSParserTokenRange range,
const CSSParserContext* context) { const CSSParserContext& context) {
// CSS-wide keywords are already handled by the CSSPropertyParser // CSS-wide keywords are already handled by the CSSPropertyParser
if (syntax.GetRepeat() == CSSSyntaxRepeat::kSpaceSeparated) { if (syntax.GetRepeat() == CSSSyntaxRepeat::kSpaceSeparated) {
CSSValueList* list = CSSValueList::CreateSpaceSeparated(); CSSValueList* list = CSSValueList::CreateSpaceSeparated();
...@@ -143,7 +140,7 @@ const CSSValue* ConsumeSyntaxComponent(const CSSSyntaxComponent& syntax, ...@@ -143,7 +140,7 @@ const CSSValue* ConsumeSyntaxComponent(const CSSSyntaxComponent& syntax,
} // namespace } // namespace
const CSSValue* CSSSyntaxDefinition::Parse(CSSParserTokenRange range, const CSSValue* CSSSyntaxDefinition::Parse(CSSParserTokenRange range,
const CSSParserContext* context, const CSSParserContext& context,
bool is_animation_tainted) const { bool is_animation_tainted) const {
if (IsTokenStream()) { if (IsTokenStream()) {
// TODO(crbug.com/579788): Implement 'revert'. // TODO(crbug.com/579788): Implement 'revert'.
...@@ -151,7 +148,7 @@ const CSSValue* CSSSyntaxDefinition::Parse(CSSParserTokenRange range, ...@@ -151,7 +148,7 @@ const CSSValue* CSSSyntaxDefinition::Parse(CSSParserTokenRange range,
if (CouldConsumeReservedKeyword(range)) if (CouldConsumeReservedKeyword(range))
return nullptr; return nullptr;
return CSSVariableParser::ParseRegisteredPropertyValue( return CSSVariableParser::ParseRegisteredPropertyValue(
range, *context, false, is_animation_tainted); range, context, false, is_animation_tainted);
} }
range.ConsumeWhitespace(); range.ConsumeWhitespace();
for (const CSSSyntaxComponent& component : syntax_components_) { for (const CSSSyntaxComponent& component : syntax_components_) {
...@@ -159,7 +156,7 @@ const CSSValue* CSSSyntaxDefinition::Parse(CSSParserTokenRange range, ...@@ -159,7 +156,7 @@ const CSSValue* CSSSyntaxDefinition::Parse(CSSParserTokenRange range,
ConsumeSyntaxComponent(component, range, context)) ConsumeSyntaxComponent(component, range, context))
return result; return result;
} }
return CSSVariableParser::ParseRegisteredPropertyValue(range, *context, true, return CSSVariableParser::ParseRegisteredPropertyValue(range, context, true,
is_animation_tainted); is_animation_tainted);
} }
......
...@@ -17,7 +17,7 @@ class CSSValue; ...@@ -17,7 +17,7 @@ class CSSValue;
class CORE_EXPORT CSSSyntaxDefinition { class CORE_EXPORT CSSSyntaxDefinition {
public: public:
const CSSValue* Parse(CSSParserTokenRange, const CSSValue* Parse(CSSParserTokenRange,
const CSSParserContext*, const CSSParserContext&,
bool is_animation_tainted) const; bool is_animation_tainted) const;
bool IsTokenStream() const { bool IsTokenStream() const {
return syntax_components_.size() == 1 && return syntax_components_.size() == 1 &&
......
...@@ -96,7 +96,8 @@ const CSSValue* CSSVariableData::ParseForSyntax( ...@@ -96,7 +96,8 @@ const CSSValue* CSSVariableData::ParseForSyntax(
DCHECK(!NeedsVariableResolution()); DCHECK(!NeedsVariableResolution());
// TODO(timloh): This probably needs a proper parser context for // TODO(timloh): This probably needs a proper parser context for
// relative URL resolution. // relative URL resolution.
return syntax.Parse(TokenRange(), StrictCSSParserContext(secure_context_mode), return syntax.Parse(TokenRange(),
*StrictCSSParserContext(secure_context_mode),
is_animation_tainted_); is_animation_tainted_);
} }
......
...@@ -190,6 +190,8 @@ bool CSSParserContext::operator==(const CSSParserContext& other) const { ...@@ -190,6 +190,8 @@ bool CSSParserContext::operator==(const CSSParserContext& other) const {
resource_fetch_restriction_ == other.resource_fetch_restriction_; resource_fetch_restriction_ == other.resource_fetch_restriction_;
} }
// TODO(xiaochengh): This function never returns null. Change it to return a
// const reference to avoid confusion.
const CSSParserContext* StrictCSSParserContext( const CSSParserContext* StrictCSSParserContext(
SecureContextMode secure_context_mode) { SecureContextMode secure_context_mode) {
DEFINE_THREAD_SAFE_STATIC_LOCAL(ThreadSpecific<Persistent<CSSParserContext>>, DEFINE_THREAD_SAFE_STATIC_LOCAL(ThreadSpecific<Persistent<CSSParserContext>>,
......
...@@ -188,7 +188,7 @@ const CSSValue* CustomProperty::ParseTyped( ...@@ -188,7 +188,7 @@ const CSSValue* CustomProperty::ParseTyped(
const CSSParserLocalContext& local_context) const { const CSSParserLocalContext& local_context) const {
if (!registration_) if (!registration_)
return ParseUntyped(range, context, local_context); return ParseUntyped(range, context, local_context);
return registration_->Syntax().Parse(range, &context, return registration_->Syntax().Parse(range, context,
local_context.IsAnimationTainted()); local_context.IsAnimationTainted());
} }
......
...@@ -133,8 +133,8 @@ PropertyRegistration* PropertyRegistration::MaybeCreate( ...@@ -133,8 +133,8 @@ PropertyRegistration* PropertyRegistration::MaybeCreate(
const CSSParserContext* parser_context = const CSSParserContext* parser_context =
document.ElementSheet().Contents()->ParserContext(); document.ElementSheet().Contents()->ParserContext();
const bool is_animation_tainted = false; const bool is_animation_tainted = false;
initial = syntax->Parse(initial_variable_data->TokenRange(), parser_context, initial = syntax->Parse(initial_variable_data->TokenRange(),
is_animation_tainted); *parser_context, is_animation_tainted);
if (!initial) if (!initial)
return nullptr; return nullptr;
if (!ComputationallyIndependent(*initial)) if (!ComputationallyIndependent(*initial))
...@@ -195,7 +195,7 @@ void PropertyRegistration::registerProperty( ...@@ -195,7 +195,7 @@ void PropertyRegistration::registerProperty(
const auto tokens = tokenizer.TokenizeToEOF(); const auto tokens = tokenizer.TokenizeToEOF();
bool is_animation_tainted = false; bool is_animation_tainted = false;
initial = syntax_definition->Parse(CSSParserTokenRange(tokens), initial = syntax_definition->Parse(CSSParserTokenRange(tokens),
parser_context, is_animation_tainted); *parser_context, is_animation_tainted);
if (!initial) { if (!initial) {
exception_state.ThrowDOMException( exception_state.ThrowDOMException(
DOMExceptionCode::kSyntaxError, DOMExceptionCode::kSyntaxError,
......
...@@ -52,7 +52,7 @@ CSSVariableResolver::Fallback CSSVariableResolver::ResolveFallback( ...@@ -52,7 +52,7 @@ CSSVariableResolver::Fallback CSSVariableResolver::ResolveFallback(
const CSSParserContext* context = const CSSParserContext* context =
StrictCSSParserContext(state_.GetDocument().GetSecureContextMode()); StrictCSSParserContext(state_.GetDocument().GetSecureContextMode());
const bool is_animation_tainted = false; const bool is_animation_tainted = false;
if (!registration->Syntax().Parse(resolved_range, context, if (!registration->Syntax().Parse(resolved_range, *context,
is_animation_tainted)) is_animation_tainted))
return Fallback::kFail; return Fallback::kFail;
} }
......
...@@ -301,7 +301,7 @@ TEST_F(CSSVariableResolverTest, NeedsResolutionClearedByResolver) { ...@@ -301,7 +301,7 @@ TEST_F(CSSVariableResolverTest, NeedsResolutionClearedByResolver) {
const auto tokens = CSSTokenizer(initial_value_str).TokenizeToEOF(); const auto tokens = CSSTokenizer(initial_value_str).TokenizeToEOF();
const auto* context = MakeGarbageCollected<CSSParserContext>(GetDocument()); const auto* context = MakeGarbageCollected<CSSParserContext>(GetDocument());
const CSSValue* initial_value = const CSSValue* initial_value =
token_syntax->Parse(CSSParserTokenRange(tokens), context, false); token_syntax->Parse(CSSParserTokenRange(tokens), *context, false);
ASSERT_TRUE(initial_value); ASSERT_TRUE(initial_value);
ASSERT_TRUE(initial_value->IsVariableReferenceValue()); ASSERT_TRUE(initial_value->IsVariableReferenceValue());
PropertyRegistration* registration = PropertyRegistration* registration =
......
...@@ -59,6 +59,8 @@ class CORE_EXPORT StyleSheetContents final ...@@ -59,6 +59,8 @@ class CORE_EXPORT StyleSheetContents final
StyleSheetContents() = delete; StyleSheetContents() = delete;
~StyleSheetContents(); ~StyleSheetContents();
// TODO(xiaochengh): |parser_context_| should never be null. Make it return a
// const reference here to avoid confusion.
const CSSParserContext* ParserContext() const { return parser_context_; } const CSSParserContext* ParserContext() const { return parser_context_; }
const AtomicString& DefaultNamespace() const { return default_namespace_; } const AtomicString& DefaultNamespace() const { return default_namespace_; }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment