Diff
Modified: trunk/LayoutTests/ChangeLog (236530 => 236531)
--- trunk/LayoutTests/ChangeLog 2018-09-26 22:31:18 UTC (rev 236530)
+++ trunk/LayoutTests/ChangeLog 2018-09-26 23:10:41 UTC (rev 236531)
@@ -1,3 +1,32 @@
+2018-09-26 Per Arne Vollan <pvol...@apple.com>
+
+ WebVTT cue alignment broken
+ https://bugs.webkit.org/show_bug.cgi?id=190004
+
+ Reviewed by Eric Carlson.
+
+ * media/track/captions-webvtt/left-align.vtt: Added.
+ * media/track/track-add-remove-cue-expected.txt:
+ * media/track/track-add-remove-cue.html:
+ * media/track/track-cue-left-align-expected-mismatch.html: Added.
+ * media/track/track-cue-left-align.html: Added.
+ * media/track/track-cue-mutable-expected.txt:
+ * media/track/track-cue-mutable.html:
+ * media/track/track-vttcue-expected.txt:
+ * media/track/track-vttcue.html:
+ * media/track/track-webvtt-tc013-settings-expected.txt:
+ * media/track/track-webvtt-tc013-settings.html:
+ * media/track/track-webvtt-tc015-positioning-expected.txt:
+ * media/track/track-webvtt-tc015-positioning.html:
+ * media/track/track-webvtt-tc016-align-positioning-expected.txt:
+ * media/track/track-webvtt-tc016-align-positioning.html:
+ * media/track/track-webvtt-tc018-align-text-line-position-expected.txt:
+ * media/track/track-webvtt-tc018-align-text-line-position.html:
+ * media/track/track-webvtt-tc021-valign-expected.txt:
+ * media/track/track-webvtt-tc021-valign.html:
+ * media/video-test.js:
+ (testCues):
+
2018-09-26 James Savage <james.sav...@apple.com>
Allow override of viewport configuration.
Added: trunk/LayoutTests/media/track/captions-webvtt/left-align.vtt (0 => 236531)
--- trunk/LayoutTests/media/track/captions-webvtt/left-align.vtt (rev 0)
+++ trunk/LayoutTests/media/track/captions-webvtt/left-align.vtt 2018-09-26 23:10:41 UTC (rev 236531)
@@ -0,0 +1,5 @@
+WEBVTT
+
+1
+00:00.000 --> 01:00.000 align:left
+Lorum ipsum
Modified: trunk/LayoutTests/media/track/track-add-remove-cue-expected.txt (236530 => 236531)
--- trunk/LayoutTests/media/track/track-add-remove-cue-expected.txt 2018-09-26 22:31:18 UTC (rev 236530)
+++ trunk/LayoutTests/media/track/track-add-remove-cue-expected.txt 2018-09-26 23:10:41 UTC (rev 236531)
@@ -20,7 +20,7 @@
EXPECTED (textCue.vertical == '') OK
EXPECTED (textCue.snapToLines == 'true') OK
EXPECTED (textCue.line == '-1') OK
-EXPECTED (textCue.position == '50') OK
+EXPECTED (textCue.position == 'auto') OK
EXPECTED (textCue.size == '100') OK
EXPECTED (textCue.align == 'center') OK
@@ -43,7 +43,7 @@
EXPECTED (newCue.vertical == '') OK
EXPECTED (newCue.snapToLines == 'true') OK
EXPECTED (newCue.line == '-1') OK
-EXPECTED (newCue.position == '50') OK
+EXPECTED (newCue.position == 'auto') OK
EXPECTED (newCue.size == '100') OK
EXPECTED (newCue.align == 'center') OK
Modified: trunk/LayoutTests/media/track/track-add-remove-cue.html (236530 => 236531)
--- trunk/LayoutTests/media/track/track-add-remove-cue.html 2018-09-26 22:31:18 UTC (rev 236530)
+++ trunk/LayoutTests/media/track/track-add-remove-cue.html 2018-09-26 23:10:41 UTC (rev 236531)
@@ -32,7 +32,7 @@
testExpected("textCue.vertical", "");
testExpected("textCue.snapToLines", true);
testExpected("textCue.line", -1);
- testExpected("textCue.position", 50);
+ testExpected("textCue.position", 'auto');
testExpected("textCue.size", 100);
testExpected("textCue.align", "center");
@@ -57,7 +57,7 @@
testExpected("newCue.vertical", "");
testExpected("newCue.snapToLines", true);
testExpected("newCue.line", -1);
- testExpected("newCue.position", 50);
+ testExpected("newCue.position", 'auto');
testExpected("newCue.size", 100);
testExpected("newCue.align", "center");
Added: trunk/LayoutTests/media/track/track-cue-left-align-expected-mismatch.html (0 => 236531)
--- trunk/LayoutTests/media/track/track-cue-left-align-expected-mismatch.html (rev 0)
+++ trunk/LayoutTests/media/track/track-cue-left-align-expected-mismatch.html 2018-09-26 23:10:41 UTC (rev 236531)
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script>var requirePixelDump = true;</script>
+ <script src=""
+ <script src=""
+ <script src=""
+
+ <style>
+
+ .obscurer {
+ width: 500px;
+ height: 500px;
+ position: absolute;
+ background-color: white;
+ }
+ </style>
+ <script>
+ function seeked()
+ {
+ endTest();
+ }
+
+ function loaded()
+ {
+ consoleWrite("Test that text stroke is applied correctly.");
+ findMediaElement();
+ video.src = "" '../content/test');
+ waitForEvent('seeked', seeked);
+ waitForEvent('canplaythrough', function() { video.currentTime = .5; });
+ }
+
+ setCaptionDisplayMode('Automatic');
+ </script>
+ </head>
+ <body _onload_="loaded()">
+ <video style="position: absolute; left: 0px; top: 0px;" controls ></video>
+ <div class="obscurer" style="left: 100px; top: 0px;"></div>
+ </body>
+</html>
Added: trunk/LayoutTests/media/track/track-cue-left-align.html (0 => 236531)
--- trunk/LayoutTests/media/track/track-cue-left-align.html (rev 0)
+++ trunk/LayoutTests/media/track/track-cue-left-align.html 2018-09-26 23:10:41 UTC (rev 236531)
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script>var requirePixelDump = true;</script>
+ <script src=""
+ <script src=""
+ <script src=""
+
+ <style>
+
+ .obscurer {
+ width: 500px;
+ height: 500px;
+ position: absolute;
+ background-color: white;
+ }
+ </style>
+ <script>
+ function seeked()
+ {
+ endTest();
+ }
+
+ function loaded()
+ {
+ consoleWrite("Test that text stroke is applied correctly.");
+ findMediaElement();
+ video.src = "" '../content/test');
+ waitForEvent('seeked', seeked);
+ waitForEvent('canplaythrough', function() { video.currentTime = .5; });
+ }
+
+ setCaptionDisplayMode('Automatic');
+ </script>
+ </head>
+ <body _onload_="loaded()">
+ <video style="position: absolute; left: 0px; top: 0px;" controls >
+ <track src="" kind="captions" default>
+ </video>
+ <div class="obscurer" style="left: 100px; top: 0px;"></div>
+ </body>
+</html>
Modified: trunk/LayoutTests/media/track/track-cue-mutable-expected.txt (236530 => 236531)
--- trunk/LayoutTests/media/track/track-cue-mutable-expected.txt 2018-09-26 22:31:18 UTC (rev 236530)
+++ trunk/LayoutTests/media/track/track-cue-mutable-expected.txt 2018-09-26 23:10:41 UTC (rev 236531)
@@ -9,7 +9,7 @@
EXPECTED (textCue.vertical == '') OK
EXPECTED (textCue.snapToLines == 'true') OK
EXPECTED (textCue.line == '-1') OK
-EXPECTED (textCue.position == '50') OK
+EXPECTED (textCue.position == 'auto') OK
EXPECTED (textCue.size == '100') OK
EXPECTED (textCue.align == 'center') OK
Modified: trunk/LayoutTests/media/track/track-cue-mutable.html (236530 => 236531)
--- trunk/LayoutTests/media/track/track-cue-mutable.html 2018-09-26 22:31:18 UTC (rev 236530)
+++ trunk/LayoutTests/media/track/track-cue-mutable.html 2018-09-26 23:10:41 UTC (rev 236531)
@@ -29,7 +29,7 @@
testExpected("textCue.vertical", "");
testExpected("textCue.snapToLines", true);
testExpected("textCue.line", -1);
- testExpected("textCue.position", 50);
+ testExpected("textCue.position", 'auto');
testExpected("textCue.size", 100);
testExpected("textCue.align", "center");
Modified: trunk/LayoutTests/media/track/track-vttcue-expected.txt (236530 => 236531)
--- trunk/LayoutTests/media/track/track-vttcue-expected.txt 2018-09-26 22:31:18 UTC (rev 236530)
+++ trunk/LayoutTests/media/track/track-vttcue-expected.txt 2018-09-26 23:10:41 UTC (rev 236531)
@@ -14,7 +14,7 @@
EXPECTED (trackCue.vertical == '') OK
EXPECTED (trackCue.snapToLines == 'true') OK
EXPECTED (trackCue.line == '-1') OK
-EXPECTED (trackCue.position == '50') OK
+EXPECTED (trackCue.position == 'auto') OK
EXPECTED (trackCue.size == '100') OK
EXPECTED (trackCue.align == 'center') OK
EXPECTED (trackCue.text == 'Lorem') OK
@@ -32,7 +32,7 @@
EXPECTED (newCue.vertical == '') OK
EXPECTED (newCue.snapToLines == 'true') OK
EXPECTED (newCue.line == '-1') OK
-EXPECTED (newCue.position == '50') OK
+EXPECTED (newCue.position == 'auto') OK
EXPECTED (newCue.size == '100') OK
EXPECTED (newCue.align == 'center') OK
EXPECTED (newCue.text == 'Pie') OK
Modified: trunk/LayoutTests/media/track/track-vttcue.html (236530 => 236531)
--- trunk/LayoutTests/media/track/track-vttcue.html 2018-09-26 22:31:18 UTC (rev 236530)
+++ trunk/LayoutTests/media/track/track-vttcue.html 2018-09-26 23:10:41 UTC (rev 236531)
@@ -33,7 +33,7 @@
testExpected("trackCue.vertical", "");
testExpected("trackCue.snapToLines", true);
testExpected("trackCue.line", -1);
- testExpected("trackCue.position", 50);
+ testExpected("trackCue.position", 'auto');
testExpected("trackCue.size", 100);
testExpected("trackCue.align", "center");
testExpected("trackCue.text", "Lorem");
@@ -53,7 +53,7 @@
testExpected("newCue.vertical", "");
testExpected("newCue.snapToLines", true);
testExpected("newCue.line", -1);
- testExpected("newCue.position", 50);
+ testExpected("newCue.position", 'auto');
testExpected("newCue.size", 100);
testExpected("newCue.align", "center");
testExpected("newCue.text", "Pie");
Modified: trunk/LayoutTests/media/track/track-webvtt-tc013-settings-expected.txt (236530 => 236531)
--- trunk/LayoutTests/media/track/track-webvtt-tc013-settings-expected.txt 2018-09-26 22:31:18 UTC (rev 236530)
+++ trunk/LayoutTests/media/track/track-webvtt-tc013-settings-expected.txt 2018-09-26 23:10:41 UTC (rev 236531)
@@ -5,7 +5,7 @@
*** Testing text track 0
EXPECTED (cues.length == '4') OK
EXPECTED (cues[0].line == '100') OK
-EXPECTED (cues[0].position == '50') OK
+EXPECTED (cues[0].position == 'auto') OK
EXPECTED (cues[0].align == 'start') OK
EXPECTED (cues[0].vertical == '') OK
EXPECTED (cues[1].line == '15') OK
@@ -17,7 +17,7 @@
EXPECTED (cues[2].align == 'center') OK
EXPECTED (cues[2].vertical == '') OK
EXPECTED (cues[3].line == '95') OK
-EXPECTED (cues[3].position == '50') OK
+EXPECTED (cues[3].position == 'auto') OK
EXPECTED (cues[3].align == 'end') OK
EXPECTED (cues[3].vertical == 'lr') OK
@@ -32,7 +32,7 @@
EXPECTED (cues[1].align == 'end') OK
EXPECTED (cues[1].vertical == '') OK
EXPECTED (cues[2].line == '-1') OK
-EXPECTED (cues[2].position == '50') OK
+EXPECTED (cues[2].position == 'auto') OK
EXPECTED (cues[2].align == 'center') OK
EXPECTED (cues[2].vertical == '') OK
EXPECTED (cues[3].line == '-1') OK
Modified: trunk/LayoutTests/media/track/track-webvtt-tc013-settings.html (236530 => 236531)
--- trunk/LayoutTests/media/track/track-webvtt-tc013-settings.html 2018-09-26 22:31:18 UTC (rev 236530)
+++ trunk/LayoutTests/media/track/track-webvtt-tc013-settings.html 2018-09-26 23:10:41 UTC (rev 236531)
@@ -33,7 +33,7 @@
},
{
property : "position",
- values : [50, 40, 10, 50],
+ values : ['auto', 40, 10, 'auto'],
},
{
property : "align",
@@ -55,7 +55,7 @@
},
{
property : "position",
- values : [10, 50, 50, 90],
+ values : [10, 50, 'auto', 90],
},
{
property : "align",
Modified: trunk/LayoutTests/media/track/track-webvtt-tc015-positioning-expected.txt (236530 => 236531)
--- trunk/LayoutTests/media/track/track-webvtt-tc015-positioning-expected.txt 2018-09-26 22:31:18 UTC (rev 236530)
+++ trunk/LayoutTests/media/track/track-webvtt-tc015-positioning-expected.txt 2018-09-26 23:10:41 UTC (rev 236531)
@@ -6,7 +6,7 @@
EXPECTED (cues.length == '4') OK
EXPECTED (cues[0].position == '0') OK
EXPECTED (cues[1].position == '49.2') OK
-EXPECTED (cues[2].position == '50') OK
+EXPECTED (cues[2].position == 'auto') OK
EXPECTED (cues[3].position == '100') OK
*** Testing text track 1
@@ -13,18 +13,18 @@
EXPECTED (cues.length == '4') OK
EXPECTED (cues[0].position == '0') OK
EXPECTED (cues[1].position == '49.2') OK
-EXPECTED (cues[2].position == '50') OK
+EXPECTED (cues[2].position == 'auto') OK
EXPECTED (cues[3].position == '100') OK
*** Testing text track 2
EXPECTED (cues.length == '8') OK
-EXPECTED (cues[0].position == '50') OK
-EXPECTED (cues[1].position == '50') OK
-EXPECTED (cues[2].position == '50') OK
-EXPECTED (cues[3].position == '50') OK
-EXPECTED (cues[4].position == '50') OK
-EXPECTED (cues[5].position == '50') OK
-EXPECTED (cues[6].position == '50') OK
-EXPECTED (cues[7].position == '50') OK
+EXPECTED (cues[0].position == 'auto') OK
+EXPECTED (cues[1].position == 'auto') OK
+EXPECTED (cues[2].position == 'auto') OK
+EXPECTED (cues[3].position == 'auto') OK
+EXPECTED (cues[4].position == 'auto') OK
+EXPECTED (cues[5].position == 'auto') OK
+EXPECTED (cues[6].position == 'auto') OK
+EXPECTED (cues[7].position == 'auto') OK
END OF TEST
Modified: trunk/LayoutTests/media/track/track-webvtt-tc015-positioning.html (236530 => 236531)
--- trunk/LayoutTests/media/track/track-webvtt-tc015-positioning.html 2018-09-26 22:31:18 UTC (rev 236530)
+++ trunk/LayoutTests/media/track/track-webvtt-tc015-positioning.html 2018-09-26 23:10:41 UTC (rev 236531)
@@ -29,7 +29,7 @@
[
{
property : "position",
- values : [0, 49.2, 50, 100],
+ values : [0, 49.2, 'auto', 100],
precision : 2,
},
],
@@ -49,7 +49,7 @@
[
{
property : "position",
- values : [50, 50, 50, 50, 50, 50, 50, 50],
+ values : ['auto', 'auto', 'auto', 'auto', 'auto', 'auto', 'auto', 'auto'],
},
],
};
@@ -67,4 +67,4 @@
<track src="" _onload_="trackLoaded()">
</video>
</body>
-</html>
\ No newline at end of file
+</html>
Modified: trunk/LayoutTests/media/track/track-webvtt-tc016-align-positioning-expected.txt (236530 => 236531)
--- trunk/LayoutTests/media/track/track-webvtt-tc016-align-positioning-expected.txt 2018-09-26 22:31:18 UTC (rev 236530)
+++ trunk/LayoutTests/media/track/track-webvtt-tc016-align-positioning-expected.txt 2018-09-26 23:10:41 UTC (rev 236531)
@@ -15,9 +15,9 @@
EXPECTED (cues.length == '3') OK
EXPECTED (cues[0].position == '10') OK
EXPECTED (cues[0].align == 'center') OK
-EXPECTED (cues[1].position == '50') OK
+EXPECTED (cues[1].position == 'auto') OK
EXPECTED (cues[1].align == 'center') OK
-EXPECTED (cues[2].position == '50') OK
+EXPECTED (cues[2].position == 'auto') OK
EXPECTED (cues[2].align == 'center') OK
END OF TEST
Modified: trunk/LayoutTests/media/track/track-webvtt-tc016-align-positioning.html (236530 => 236531)
--- trunk/LayoutTests/media/track/track-webvtt-tc016-align-positioning.html 2018-09-26 22:31:18 UTC (rev 236530)
+++ trunk/LayoutTests/media/track/track-webvtt-tc016-align-positioning.html 2018-09-26 23:10:41 UTC (rev 236531)
@@ -51,7 +51,7 @@
[
{
property : "position",
- values : [10, 50, 50],
+ values : [10, 'auto', 'auto'],
},
{
property : "align",
Modified: trunk/LayoutTests/media/track/track-webvtt-tc018-align-text-line-position-expected.txt (236530 => 236531)
--- trunk/LayoutTests/media/track/track-webvtt-tc018-align-text-line-position-expected.txt 2018-09-26 22:31:18 UTC (rev 236530)
+++ trunk/LayoutTests/media/track/track-webvtt-tc018-align-text-line-position-expected.txt 2018-09-26 23:10:41 UTC (rev 236531)
@@ -9,7 +9,7 @@
EXPECTED (cues[0].line == '0') OK
EXPECTED (cues[0].snapToLines == 'false') OK
EXPECTED (cues[1].align == 'start') OK
-EXPECTED (cues[1].position == '50') OK
+EXPECTED (cues[1].position == 'auto') OK
EXPECTED (cues[1].line == '0') OK
EXPECTED (cues[1].snapToLines == 'true') OK
EXPECTED (cues[2].align == 'center') OK
@@ -28,7 +28,7 @@
*** Testing text track 1
EXPECTED (cues.length == '3') OK
EXPECTED (cues[0].align == 'center') OK
-EXPECTED (cues[0].position == '50') OK
+EXPECTED (cues[0].position == 'auto') OK
EXPECTED (cues[0].line == '-1') OK
EXPECTED (cues[0].snapToLines == 'true') OK
EXPECTED (cues[1].align == 'end') OK
Modified: trunk/LayoutTests/media/track/track-webvtt-tc018-align-text-line-position.html (236530 => 236531)
--- trunk/LayoutTests/media/track/track-webvtt-tc018-align-text-line-position.html 2018-09-26 22:31:18 UTC (rev 236530)
+++ trunk/LayoutTests/media/track/track-webvtt-tc018-align-text-line-position.html 2018-09-26 23:10:41 UTC (rev 236531)
@@ -33,7 +33,7 @@
},
{
property : "position",
- values : [10, 50, 80.3, 30, 60],
+ values : [10, 'auto', 80.3, 30, 60],
precision : 2,
},
{
@@ -66,7 +66,7 @@
},
{
property : "position",
- values : [50, 0, 60],
+ values : ['auto', 0, 60],
},
{
property : "line",
Modified: trunk/LayoutTests/media/track/track-webvtt-tc021-valign-expected.txt (236530 => 236531)
--- trunk/LayoutTests/media/track/track-webvtt-tc021-valign-expected.txt 2018-09-26 22:31:18 UTC (rev 236530)
+++ trunk/LayoutTests/media/track/track-webvtt-tc021-valign-expected.txt 2018-09-26 23:10:41 UTC (rev 236531)
@@ -6,10 +6,10 @@
EXPECTED (cues.length == '3') OK
EXPECTED (cues[0].vertical == 'rl') OK
EXPECTED (cues[0].align == 'center') OK
-EXPECTED (cues[0].position == '50') OK
+EXPECTED (cues[0].position == 'auto') OK
EXPECTED (cues[1].vertical == 'lr') OK
EXPECTED (cues[1].align == 'center') OK
-EXPECTED (cues[1].position == '50') OK
+EXPECTED (cues[1].position == 'auto') OK
EXPECTED (cues[2].vertical == 'rl') OK
EXPECTED (cues[2].align == 'start') OK
EXPECTED (cues[2].position == '0') OK
@@ -18,10 +18,10 @@
EXPECTED (cues.length == '3') OK
EXPECTED (cues[0].vertical == 'rl') OK
EXPECTED (cues[0].align == 'center') OK
-EXPECTED (cues[0].position == '50') OK
+EXPECTED (cues[0].position == 'auto') OK
EXPECTED (cues[1].vertical == 'lr') OK
EXPECTED (cues[1].align == 'center') OK
-EXPECTED (cues[1].position == '50') OK
+EXPECTED (cues[1].position == 'auto') OK
EXPECTED (cues[2].vertical == 'rl') OK
EXPECTED (cues[2].align == 'start') OK
EXPECTED (cues[2].position == '0') OK
Modified: trunk/LayoutTests/media/track/track-webvtt-tc021-valign.html (236530 => 236531)
--- trunk/LayoutTests/media/track/track-webvtt-tc021-valign.html 2018-09-26 22:31:18 UTC (rev 236530)
+++ trunk/LayoutTests/media/track/track-webvtt-tc021-valign.html 2018-09-26 23:10:41 UTC (rev 236531)
@@ -37,7 +37,7 @@
},
{
property : "position",
- values : [50, 50, 0],
+ values : ['auto', 'auto', 0],
},
],
};
Modified: trunk/LayoutTests/media/video-test.js (236530 => 236531)
--- trunk/LayoutTests/media/video-test.js 2018-09-26 22:31:18 UTC (rev 236530)
+++ trunk/LayoutTests/media/video-test.js 2018-09-26 23:10:41 UTC (rev 236531)
@@ -377,7 +377,7 @@
var test = expected.tests[j];
var propertyString = "cues[" + i + "]." + test.property;
var propertyValue = eval(propertyString);
- if (test["precision"])
+ if (test["precision"] && typeof(propertyValue) == 'number')
propertyValue = propertyValue.toFixed(test["precision"]);
reportExpected(test.values[i] == propertyValue, propertyString, "==", test.values[i], propertyValue)
}
Modified: trunk/Source/WebCore/ChangeLog (236530 => 236531)
--- trunk/Source/WebCore/ChangeLog 2018-09-26 22:31:18 UTC (rev 236530)
+++ trunk/Source/WebCore/ChangeLog 2018-09-26 23:10:41 UTC (rev 236531)
@@ -1,3 +1,34 @@
+2018-09-26 Per Arne Vollan <pvol...@apple.com>
+
+ WebVTT cue alignment broken
+ https://bugs.webkit.org/show_bug.cgi?id=190004
+
+ Reviewed by Eric Carlson.
+
+ If the position of the queue is unspecified, the default value of 50 was used, which is incorrect.
+ This patch also updates the API according to https://w3c.github.io/webvtt/#the-vttcue-interface.
+ The position attribute should not be a double, but either a double or the "auto" keyword. Parts
+ of this patch is inspired by the associated code in the Chromium project.
+
+ Test: media/track/track-cue-left-align.html
+
+ * html/track/TextTrackCueGeneric.cpp:
+ (WebCore::TextTrackCueGenericBoxElement::applyCSSProperties):
+ (WebCore::TextTrackCueGeneric::setPosition):
+ * html/track/TextTrackCueGeneric.h:
+ * html/track/VTTCue.cpp:
+ (WebCore::VTTCueBox::applyCSSProperties):
+ (WebCore::VTTCue::initialize):
+ (WebCore::VTTCue::position const):
+ (WebCore::VTTCue::setPosition):
+ (WebCore::VTTCue::textPositionIsAuto const):
+ (WebCore::VTTCue::calculateComputedTextPosition const):
+ (WebCore::VTTCue::calculateDisplayParameters):
+ (WebCore::VTTCue::toJSON const):
+ * html/track/VTTCue.h:
+ (WebCore::VTTCue::position const): Deleted.
+ * html/track/VTTCue.idl:
+
2018-09-26 James Savage <james.sav...@apple.com>
Allow override of viewport configuration.
Modified: trunk/Source/WebCore/html/track/TextTrackCueGeneric.cpp (236530 => 236531)
--- trunk/Source/WebCore/html/track/TextTrackCueGeneric.cpp 2018-09-26 22:31:18 UTC (rev 236530)
+++ trunk/Source/WebCore/html/track/TextTrackCueGeneric.cpp 2018-09-26 23:10:41 UTC (rev 236531)
@@ -74,6 +74,8 @@
RefPtr<TextTrackCueGeneric> cue = static_cast<TextTrackCueGeneric*>(getCue());
Ref<HTMLSpanElement> cueElement = cue->element();
+ double textPosition = cue->calculateComputedTextPosition();
+
CSSValueID alignment = cue->getCSSAlignment();
float size = static_cast<float>(cue->getCSSSize());
if (cue->useDefaultPosition()) {
@@ -80,7 +82,7 @@
setInlineStyleProperty(CSSPropertyBottom, 0, CSSPrimitiveValue::CSS_PX);
setInlineStyleProperty(CSSPropertyMarginBottom, 1.0, CSSPrimitiveValue::CSS_PERCENTAGE);
} else {
- setInlineStyleProperty(CSSPropertyLeft, static_cast<float>(cue->position()), CSSPrimitiveValue::CSS_PERCENTAGE);
+ setInlineStyleProperty(CSSPropertyLeft, static_cast<float>(textPosition), CSSPrimitiveValue::CSS_PERCENTAGE);
setInlineStyleProperty(CSSPropertyTop, static_cast<float>(cue->line()), CSSPrimitiveValue::CSS_PERCENTAGE);
double authorFontSize = videoSize.height() * cue->baseFontSizeRelativeToVideoHeight() / 100.0;
@@ -95,7 +97,7 @@
if (cue->getWritingDirection() == VTTCue::Horizontal) {
setInlineStyleProperty(CSSPropertyWidth, newCueSize, CSSPrimitiveValue::CSS_PERCENTAGE);
if ((alignment == CSSValueMiddle || alignment == CSSValueCenter) && multiplier != 1.0)
- setInlineStyleProperty(CSSPropertyLeft, static_cast<double>(cue->position() - (newCueSize - m_cue.getCSSSize()) / 2), CSSPrimitiveValue::CSS_PERCENTAGE);
+ setInlineStyleProperty(CSSPropertyLeft, static_cast<double>(textPosition - (newCueSize - m_cue.getCSSSize()) / 2), CSSPrimitiveValue::CSS_PERCENTAGE);
} else {
setInlineStyleProperty(CSSPropertyHeight, newCueSize, CSSPrimitiveValue::CSS_PERCENTAGE);
if ((alignment == CSSValueMiddle || alignment == CSSValueCenter) && multiplier != 1.0)
@@ -103,7 +105,6 @@
}
}
- double textPosition = m_cue.position();
double maxSize = 100.0;
if (alignment == CSSValueEnd || alignment == CSSValueRight)
@@ -169,7 +170,7 @@
return result;
}
-ExceptionOr<void> TextTrackCueGeneric::setPosition(double position)
+ExceptionOr<void> TextTrackCueGeneric::setPosition(const LineAndPositionSetting& position)
{
auto result = VTTCue::setPosition(position);
if (!result.hasException())
Modified: trunk/Source/WebCore/html/track/TextTrackCueGeneric.h (236530 => 236531)
--- trunk/Source/WebCore/html/track/TextTrackCueGeneric.h 2018-09-26 22:31:18 UTC (rev 236530)
+++ trunk/Source/WebCore/html/track/TextTrackCueGeneric.h 2018-09-26 23:10:41 UTC (rev 236531)
@@ -43,7 +43,7 @@
}
ExceptionOr<void> setLine(double) final;
- ExceptionOr<void> setPosition(double) final;
+ ExceptionOr<void> setPosition(const LineAndPositionSetting&) final;
bool useDefaultPosition() const { return m_useDefaultPosition; }
Modified: trunk/Source/WebCore/html/track/VTTCue.cpp (236530 => 236531)
--- trunk/Source/WebCore/html/track/VTTCue.cpp 2018-09-26 22:31:18 UTC (rev 236530)
+++ trunk/Source/WebCore/html/track/VTTCue.cpp 2018-09-26 23:10:41 UTC (rev 236531)
@@ -177,7 +177,7 @@
if (authorFontSize)
multiplier = m_fontSizeFromCaptionUserPrefs / authorFontSize;
- double textPosition = m_cue.position();
+ double textPosition = m_cue.calculateComputedTextPosition();
double maxSize = 100.0;
CSSValueID alignment = m_cue.getCSSAlignment();
if (alignment == CSSValueEnd || alignment == CSSValueRight)
@@ -285,7 +285,7 @@
{
m_linePosition = undefinedPosition;
m_computedLinePosition = undefinedPosition;
- m_textPosition = 50;
+ m_textPosition = std::numeric_limits<double>::quiet_NaN();
m_cueSize = 100;
m_writingDirection = Horizontal;
m_cueAlignment = Center;
@@ -391,20 +391,37 @@
return { };
}
-ExceptionOr<void> VTTCue::setPosition(double position)
+VTTCue::LineAndPositionSetting VTTCue::position() const
{
- // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#dom-texttrackcue-position
- // On setting, if the new value is negative or greater than 100, then throw an IndexSizeError exception.
- // Otherwise, set the text track cue text position to the new value.
- if (!(position >= 0 && position <= 100))
- return Exception { IndexSizeError };
+ if (textPositionIsAuto())
+ return Auto;
+ return m_textPosition;
+}
- // Otherwise, set the text track cue line position to the new value.
- if (m_textPosition == position)
- return { };
-
+ExceptionOr<void> VTTCue::setPosition(const LineAndPositionSetting& position)
+{
+ // http://dev.w3.org/html5/webvtt/#dfn-vttcue-position
+ // On setting, if the new value is negative or greater than 100, then an
+ // IndexSizeError exception must be thrown. Otherwise, the WebVTT cue
+ // position must be set to the new value; if the new value is the string
+ // "auto", then it must be interpreted as the special value auto.
+ double textPosition = 0;
+ if (WTF::holds_alternative<AutoKeyword>(position)) {
+ if (textPositionIsAuto())
+ return { };
+ textPosition = std::numeric_limits<double>::quiet_NaN();
+ } else {
+ if (!(WTF::get<double>(position) >= 0 && WTF::get<double>(position) <= 100))
+ return Exception { IndexSizeError };
+
+ // Otherwise, set the text track cue line position to the new value.
+ textPosition = WTF::get<double>(position);
+ if (m_textPosition == textPosition)
+ return { };
+ }
+
willChange();
- m_textPosition = position;
+ m_textPosition = textPosition;
didChange();
return { };
@@ -609,6 +626,11 @@
return u_charType(character) == U_PARAGRAPH_SEPARATOR;
}
+bool VTTCue::textPositionIsAuto() const
+{
+ return std::isnan(m_textPosition);
+}
+
void VTTCue::determineTextDirection()
{
static NeverDestroyed<const String> rtTag(MAKE_STATIC_STRING_IMPL("rt"));
@@ -652,6 +674,35 @@
}
}
+double VTTCue::calculateComputedTextPosition() const
+{
+ // http://dev.w3.org/html5/webvtt/#dfn-cue-computed-position
+
+ // 1. If the position is numeric, then return the value of the position and
+ // abort these steps. (Otherwise, the position is the special value auto.)
+ if (!textPositionIsAuto())
+ return m_textPosition;
+
+ switch (m_cueAlignment) {
+ case Start:
+ case Left:
+ // 2. If the cue text alignment is start or left, return 0 and abort these
+ // steps.
+ return 0;
+ case End:
+ case Right:
+ // 3. If the cue text alignment is end or right, return 100 and abort these
+ // steps.
+ return 100;
+ case Center:
+ // 4. If the cue text alignment is center, return 50 and abort these steps.
+ return 50;
+ default:
+ ASSERT_NOT_REACHED();
+ return 0;
+ }
+}
+
void VTTCue::calculateDisplayParameters()
{
// Steps 10.2, 10.3
@@ -667,21 +718,22 @@
// 10.5 Determine the value of maximum size for cue as per the appropriate
// rules from the following list:
- int maximumSize = m_textPosition;
+ double computedTextPosition = calculateComputedTextPosition();
+ int maximumSize = computedTextPosition;
if ((m_writingDirection == Horizontal && m_cueAlignment == Start && m_displayDirection == CSSValueLtr)
|| (m_writingDirection == Horizontal && m_cueAlignment == End && m_displayDirection == CSSValueRtl)
|| (m_writingDirection == Horizontal && m_cueAlignment == Left)
|| (m_writingDirection == VerticalGrowingLeft && (m_cueAlignment == Start || m_cueAlignment == Left))
|| (m_writingDirection == VerticalGrowingRight && (m_cueAlignment == Start || m_cueAlignment == Left))) {
- maximumSize = 100 - m_textPosition;
+ maximumSize = 100 - computedTextPosition;
} else if ((m_writingDirection == Horizontal && m_cueAlignment == End && m_displayDirection == CSSValueLtr)
|| (m_writingDirection == Horizontal && m_cueAlignment == Start && m_displayDirection == CSSValueRtl)
|| (m_writingDirection == Horizontal && m_cueAlignment == Right)
|| (m_writingDirection == VerticalGrowingLeft && (m_cueAlignment == End || m_cueAlignment == Right))
|| (m_writingDirection == VerticalGrowingRight && (m_cueAlignment == End || m_cueAlignment == Right))) {
- maximumSize = m_textPosition;
+ maximumSize = computedTextPosition;
} else if (m_cueAlignment == Center) {
- maximumSize = m_textPosition <= 50 ? m_textPosition : (100 - m_textPosition);
+ maximumSize = computedTextPosition <= 50 ? computedTextPosition : (100 - computedTextPosition);
maximumSize = maximumSize * 2;
} else
ASSERT_NOT_REACHED();
@@ -699,33 +751,33 @@
switch (m_cueAlignment) {
case Start:
if (m_displayDirection == CSSValueLtr)
- m_displayPosition.first = m_textPosition;
+ m_displayPosition.first = computedTextPosition;
else
- m_displayPosition.first = 100 - m_textPosition - m_displaySize;
+ m_displayPosition.first = 100 - computedTextPosition - m_displaySize;
break;
case End:
if (m_displayDirection == CSSValueRtl)
- m_displayPosition.first = 100 - m_textPosition;
+ m_displayPosition.first = 100 - computedTextPosition;
else
- m_displayPosition.first = m_textPosition - m_displaySize;
+ m_displayPosition.first = computedTextPosition - m_displaySize;
break;
case Left:
if (m_displayDirection == CSSValueLtr)
- m_displayPosition.first = m_textPosition;
+ m_displayPosition.first = computedTextPosition;
else
- m_displayPosition.first = 100 - m_textPosition;
+ m_displayPosition.first = 100 - computedTextPosition;
break;
case Right:
if (m_displayDirection == CSSValueLtr)
- m_displayPosition.first = m_textPosition - m_displaySize;
+ m_displayPosition.first = computedTextPosition - m_displaySize;
else
- m_displayPosition.first = 100 - m_textPosition - m_displaySize;
+ m_displayPosition.first = 100 - computedTextPosition - m_displaySize;
break;
case Center:
if (m_displayDirection == CSSValueLtr)
- m_displayPosition.first = m_textPosition - m_displaySize / 2;
+ m_displayPosition.first = computedTextPosition - m_displaySize / 2;
else
- m_displayPosition.first = 100 - m_textPosition - m_displaySize / 2;
+ m_displayPosition.first = 100 - computedTextPosition - m_displaySize / 2;
break;
case NumberOfAlignments:
ASSERT_NOT_REACHED();
@@ -1197,7 +1249,10 @@
object.setString("vertical"_s, vertical());
object.setBoolean("snapToLines"_s, snapToLines());
object.setDouble("line"_s, m_linePosition);
- object.setDouble("position"_s, position());
+ if (textPositionIsAuto())
+ object.setString("position"_s, "auto");
+ else
+ object.setDouble("position"_s, m_textPosition);
object.setInteger("size"_s, m_cueSize);
object.setString("align"_s, align());
object.setString("regionId"_s, regionId());
Modified: trunk/Source/WebCore/html/track/VTTCue.h (236530 => 236531)
--- trunk/Source/WebCore/html/track/VTTCue.h 2018-09-26 22:31:18 UTC (rev 236530)
+++ trunk/Source/WebCore/html/track/VTTCue.h 2018-09-26 23:10:41 UTC (rev 236531)
@@ -88,6 +88,12 @@
virtual ~VTTCue();
+ enum AutoKeyword {
+ Auto
+ };
+
+ using LineAndPositionSetting = Variant<double, AutoKeyword>;
+
const String& vertical() const;
ExceptionOr<void> setVertical(const String&);
@@ -97,8 +103,8 @@
double line() const { return m_linePosition; }
virtual ExceptionOr<void> setLine(double);
- double position() const { return m_textPosition; }
- virtual ExceptionOr<void> setPosition(double);
+ LineAndPositionSetting position() const;
+ virtual ExceptionOr<void> setPosition(const LineAndPositionSetting&);
int size() const { return m_cueSize; }
ExceptionOr<void> setSize(int);
@@ -170,6 +176,8 @@
String toJSONString() const;
+ double calculateComputedTextPosition() const;
+
protected:
VTTCue(ScriptExecutionContext&, const MediaTime& start, const MediaTime& end, const String& content);
VTTCue(ScriptExecutionContext&, const WebVTTCueData&);
@@ -186,6 +194,8 @@
void parseSettings(const String&);
+ bool textPositionIsAuto() const;
+
void determineTextDirection();
void calculateDisplayParameters();
Modified: trunk/Source/WebCore/html/track/VTTCue.idl (236530 => 236531)
--- trunk/Source/WebCore/html/track/VTTCue.idl 2018-09-26 22:31:18 UTC (rev 236530)
+++ trunk/Source/WebCore/html/track/VTTCue.idl 2018-09-26 23:10:41 UTC (rev 236531)
@@ -23,6 +23,9 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+enum AutoKeyword { "auto" };
+typedef (double or AutoKeyword) LineAndPositionSetting;
+
[
Conditional=VIDEO_TRACK,
Constructor(double startTime, double endTime, DOMString text),
@@ -33,7 +36,7 @@
attribute DOMString vertical;
attribute boolean snapToLines;
attribute double line;
- attribute double position;
+ attribute LineAndPositionSetting position;
attribute double size;
attribute DOMString align;
attribute DOMString text;