Index: Source/core/html/track/vtt/VTTRegion.cpp |
diff --git a/Source/core/html/track/vtt/VTTRegion.cpp b/Source/core/html/track/vtt/VTTRegion.cpp |
index 21c4595a05f926f129bfe3d78e18fbe9b7a6af28..dd7613ecad3d3ac1e5287e3db4aca9773aa86508 100644 |
--- a/Source/core/html/track/vtt/VTTRegion.cpp |
+++ b/Source/core/html/track/vtt/VTTRegion.cpp |
@@ -213,9 +213,7 @@ void VTTRegion::setRegionSettings(const String& inputString) |
} |
// Scan the value part. |
- VTTScanner::Run valueRun = input.collectUntil<VTTParser::isASpace>(); |
- parseSettingValue(name, input.extractString(valueRun)); |
- input.skipRun(valueRun); |
+ parseSettingValue(name, input); |
} |
} |
@@ -237,19 +235,27 @@ VTTRegion::RegionSetting VTTRegion::scanSettingName(VTTScanner& input) |
return None; |
} |
-void VTTRegion::parseSettingValue(RegionSetting setting, const String& value) |
+static inline bool parsedEntireRun(const VTTScanner& input, const VTTScanner::Run& run) |
+{ |
+ return input.isAt(run.end()); |
+} |
+ |
+void VTTRegion::parseSettingValue(RegionSetting setting, VTTScanner& input) |
{ |
DEFINE_STATIC_LOCAL(const AtomicString, scrollUpValueKeyword, ("up", AtomicString::ConstructFromLiteral)); |
+ VTTScanner::Run valueRun = input.collectUntil<VTTParser::isASpace>(); |
+ |
switch (setting) { |
- case Id: |
- if (value.find("-->") == kNotFound) |
- m_id = value; |
+ case Id: { |
+ String stringValue = input.extractString(valueRun); |
+ if (stringValue.find("-->") == kNotFound) |
+ m_id = stringValue; |
break; |
+ } |
case Width: { |
float floatWidth; |
- VTTScanner valueScanner(value); |
- if (VTTParser::parseFloatPercentageValue(valueScanner, floatWidth) && valueScanner.isAtEnd()) |
+ if (VTTParser::parseFloatPercentageValue(input, floatWidth) && parsedEntireRun(input, valueRun)) |
m_width = floatWidth; |
else |
WTF_LOG(Media, "VTTRegion::parseSettingValue, invalid Width"); |
@@ -257,33 +263,30 @@ void VTTRegion::parseSettingValue(RegionSetting setting, const String& value) |
} |
case Height: { |
int number; |
- VTTScanner valueScanner(value); |
- if (valueScanner.scanDigits(number) && valueScanner.isAtEnd()) |
+ if (input.scanDigits(number) && parsedEntireRun(input, valueRun)) |
m_heightInLines = number; |
else |
WTF_LOG(Media, "VTTRegion::parseSettingValue, invalid Height"); |
break; |
} |
case RegionAnchor: { |
- VTTScanner valueScanner(value); |
FloatPoint anchor; |
- if (VTTParser::parseFloatPercentageValuePair(valueScanner, ',', anchor) && valueScanner.isAtEnd()) |
+ if (VTTParser::parseFloatPercentageValuePair(input, ',', anchor) && parsedEntireRun(input, valueRun)) |
m_regionAnchor = anchor; |
else |
WTF_LOG(Media, "VTTRegion::parseSettingValue, invalid RegionAnchor"); |
break; |
} |
case ViewportAnchor: { |
- VTTScanner valueScanner(value); |
FloatPoint anchor; |
- if (VTTParser::parseFloatPercentageValuePair(valueScanner, ',', anchor) && valueScanner.isAtEnd()) |
+ if (VTTParser::parseFloatPercentageValuePair(input, ',', anchor) && parsedEntireRun(input, valueRun)) |
m_viewportAnchor = anchor; |
else |
WTF_LOG(Media, "VTTRegion::parseSettingValue, invalid ViewportAnchor"); |
break; |
} |
case Scroll: |
- if (value == scrollUpValueKeyword) |
+ if (input.scanRun(valueRun, scrollUpValueKeyword)) |
m_scroll = true; |
else |
WTF_LOG(Media, "VTTRegion::parseSettingValue, invalid Scroll"); |
@@ -291,6 +294,8 @@ void VTTRegion::parseSettingValue(RegionSetting setting, const String& value) |
case None: |
break; |
} |
+ |
+ input.skipRun(valueRun); |
} |
const AtomicString& VTTRegion::textTrackCueContainerShadowPseudoId() |