<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[166080] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/166080">166080</a></dd>
<dt>Author</dt> <dd>bfulgham@apple.com</dd>
<dt>Date</dt> <dd>2014-03-21 11:41:08 -0700 (Fri, 21 Mar 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Handle recovery on &quot;timestamp-looking&quot; lines in the WebVTT parser
https://bugs.webkit.org/show_bug.cgi?id=130610

Reviewed by Eric Carlson.

Merged from Blink (patch by fs@opera.com):
https://chromium.googlesource.com/chromium/blink/+/b669a380efbffe25f3b154b026b57b9822ce08e2
http://crbug.com/75273002

Source/WebCore: 

Tests: media/track/track-webvtt-tc031-cue-recovery.html
       media/track/track-webvtt-tc032-degenerate-cues.html

* html/track/WebVTTParser.cpp:
(WebCore::WebVTTParser::parse):
(WebCore::WebVTTParser::collectCueText):
(WebCore::WebVTTParser::recoverCue):
(WebCore::WebVTTParser::ignoreBadCue):
* html/track/WebVTTParser.h:

LayoutTests: 

* media/track/captions-webvtt/tc006-cue-id-error.vtt:
* media/track/captions-webvtt/tc007-cue-no-id-error.vtt:
* media/track/captions-webvtt/tc011-cues-no-separation.vtt:
* media/track/captions-webvtt/tc031-cue-recovery-cuetext.vtt: Added.
* media/track/captions-webvtt/tc031-cue-recovery-header.vtt: Added.
* media/track/captions-webvtt/tc031-cue-recovery-note.vtt: Added.
* media/track/captions-webvtt/tc032-degenerate-cues.vtt: Added.
* media/track/track-webvtt-tc006-cue-identifiers-expected.txt:
* media/track/track-webvtt-tc006-cue-identifiers.html:
* media/track/track-webvtt-tc007-cue-no-id-expected.txt:
* media/track/track-webvtt-tc007-cue-no-id.html:
* media/track/track-webvtt-tc011-blank-lines-expected.txt:
* media/track/track-webvtt-tc011-blank-lines.html:
* media/track/track-webvtt-tc031-cue-recovery-expected.txt: Added.
* media/track/track-webvtt-tc031-cue-recovery.html: Added.
* media/track/track-webvtt-tc032-degenerate-cues-expected.txt: Added.
* media/track/track-webvtt-tc032-degenerate-cues.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsmediatrackcaptionswebvtttc006cueiderrorvtt">trunk/LayoutTests/media/track/captions-webvtt/tc006-cue-id-error.vtt</a></li>
<li><a href="#trunkLayoutTestsmediatrackcaptionswebvtttc007cuenoiderrorvtt">trunk/LayoutTests/media/track/captions-webvtt/tc007-cue-no-id-error.vtt</a></li>
<li><a href="#trunkLayoutTestsmediatrackcaptionswebvtttc011cuesnoseparationvtt">trunk/LayoutTests/media/track/captions-webvtt/tc011-cues-no-separation.vtt</a></li>
<li><a href="#trunkLayoutTestsmediatracktrackwebvtttc006cueidentifiersexpectedtxt">trunk/LayoutTests/media/track/track-webvtt-tc006-cue-identifiers-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmediatracktrackwebvtttc006cueidentifiershtml">trunk/LayoutTests/media/track/track-webvtt-tc006-cue-identifiers.html</a></li>
<li><a href="#trunkLayoutTestsmediatracktrackwebvtttc007cuenoidexpectedtxt">trunk/LayoutTests/media/track/track-webvtt-tc007-cue-no-id-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmediatracktrackwebvtttc007cuenoidhtml">trunk/LayoutTests/media/track/track-webvtt-tc007-cue-no-id.html</a></li>
<li><a href="#trunkLayoutTestsmediatracktrackwebvtttc011blanklinesexpectedtxt">trunk/LayoutTests/media/track/track-webvtt-tc011-blank-lines-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmediatracktrackwebvtttc011blanklineshtml">trunk/LayoutTests/media/track/track-webvtt-tc011-blank-lines.html</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorehtmltrackWebVTTParsercpp">trunk/Source/WebCore/html/track/WebVTTParser.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmltrackWebVTTParserh">trunk/Source/WebCore/html/track/WebVTTParser.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsmediatrackcaptionswebvtttc031cuerecoverycuetextvtt">trunk/LayoutTests/media/track/captions-webvtt/tc031-cue-recovery-cuetext.vtt</a></li>
<li><a href="#trunkLayoutTestsmediatrackcaptionswebvtttc031cuerecoveryheadervtt">trunk/LayoutTests/media/track/captions-webvtt/tc031-cue-recovery-header.vtt</a></li>
<li><a href="#trunkLayoutTestsmediatrackcaptionswebvtttc031cuerecoverynotevtt">trunk/LayoutTests/media/track/captions-webvtt/tc031-cue-recovery-note.vtt</a></li>
<li><a href="#trunkLayoutTestsmediatrackcaptionswebvtttc032degeneratecuesvtt">trunk/LayoutTests/media/track/captions-webvtt/tc032-degenerate-cues.vtt</a></li>
<li><a href="#trunkLayoutTestsmediatracktrackwebvtttc031cuerecoveryexpectedtxt">trunk/LayoutTests/media/track/track-webvtt-tc031-cue-recovery-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmediatracktrackwebvtttc031cuerecoveryhtml">trunk/LayoutTests/media/track/track-webvtt-tc031-cue-recovery.html</a></li>
<li><a href="#trunkLayoutTestsmediatracktrackwebvtttc032degeneratecuesexpectedtxt">trunk/LayoutTests/media/track/track-webvtt-tc032-degenerate-cues-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmediatracktrackwebvtttc032degeneratecueshtml">trunk/LayoutTests/media/track/track-webvtt-tc032-degenerate-cues.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (166079 => 166080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-03-21 18:28:06 UTC (rev 166079)
+++ trunk/LayoutTests/ChangeLog        2014-03-21 18:41:08 UTC (rev 166080)
</span><span class="lines">@@ -1,3 +1,32 @@
</span><ins>+2014-03-21  Brent Fulgham  &lt;bfulgham@apple.com&gt;
+
+        Handle recovery on &quot;timestamp-looking&quot; lines in the WebVTT parser
+        https://bugs.webkit.org/show_bug.cgi?id=130610
+
+        Reviewed by Eric Carlson.
+
+        Merged from Blink (patch by fs@opera.com):
+        https://chromium.googlesource.com/chromium/blink/+/b669a380efbffe25f3b154b026b57b9822ce08e2
+        http://crbug.com/75273002
+
+        * media/track/captions-webvtt/tc006-cue-id-error.vtt:
+        * media/track/captions-webvtt/tc007-cue-no-id-error.vtt:
+        * media/track/captions-webvtt/tc011-cues-no-separation.vtt:
+        * media/track/captions-webvtt/tc031-cue-recovery-cuetext.vtt: Added.
+        * media/track/captions-webvtt/tc031-cue-recovery-header.vtt: Added.
+        * media/track/captions-webvtt/tc031-cue-recovery-note.vtt: Added.
+        * media/track/captions-webvtt/tc032-degenerate-cues.vtt: Added.
+        * media/track/track-webvtt-tc006-cue-identifiers-expected.txt:
+        * media/track/track-webvtt-tc006-cue-identifiers.html:
+        * media/track/track-webvtt-tc007-cue-no-id-expected.txt:
+        * media/track/track-webvtt-tc007-cue-no-id.html:
+        * media/track/track-webvtt-tc011-blank-lines-expected.txt:
+        * media/track/track-webvtt-tc011-blank-lines.html:
+        * media/track/track-webvtt-tc031-cue-recovery-expected.txt: Added.
+        * media/track/track-webvtt-tc031-cue-recovery.html: Added.
+        * media/track/track-webvtt-tc032-degenerate-cues-expected.txt: Added.
+        * media/track/track-webvtt-tc032-degenerate-cues.html: Added.
+
</ins><span class="cx"> 2014-03-21  David Hyatt  &lt;hyatt@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Crash in RenderBlock::addChildIgnoringAnonymousColumnBlocks.
</span></span></pre></div>
<a id="trunkLayoutTestsmediatrackcaptionswebvtttc006cueiderrorvtt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/track/captions-webvtt/tc006-cue-id-error.vtt (166079 => 166080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/track/captions-webvtt/tc006-cue-id-error.vtt        2014-03-21 18:28:06 UTC (rev 166079)
+++ trunk/LayoutTests/media/track/captions-webvtt/tc006-cue-id-error.vtt        2014-03-21 18:41:08 UTC (rev 166080)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> WEBVTT
</span><del>-Cue identifiers cannot contain the string &quot;--&gt;&quot;.
</del><ins>+Cue identifiers may contain the string &quot;--&gt;&quot;, but are treated as blanks
</ins><span class="cx"> 
</span><span class="cx"> --&gt;random_id
</span><span class="cx"> 00:00:00.000 --&gt; 00:00:30.500
</span></span></pre></div>
<a id="trunkLayoutTestsmediatrackcaptionswebvtttc007cuenoiderrorvtt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/track/captions-webvtt/tc007-cue-no-id-error.vtt (166079 => 166080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/track/captions-webvtt/tc007-cue-no-id-error.vtt        2014-03-21 18:28:06 UTC (rev 166079)
+++ trunk/LayoutTests/media/track/captions-webvtt/tc007-cue-no-id-error.vtt        2014-03-21 18:41:08 UTC (rev 166080)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> WEBVTT
</span><del>-Cue identifiers cannot contain &quot;--&gt;&quot;.  Whole cue is ignored.
</del><ins>+Cue identifiers may contain &quot;--&gt;&quot;, but are treated as blank.
</ins><span class="cx"> 
</span><span class="cx"> --&gt;
</span><span class="cx"> 00:00:00.000 --&gt; 00:00:30.500
</span></span></pre></div>
<a id="trunkLayoutTestsmediatrackcaptionswebvtttc011cuesnoseparationvtt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/track/captions-webvtt/tc011-cues-no-separation.vtt (166079 => 166080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/track/captions-webvtt/tc011-cues-no-separation.vtt        2014-03-21 18:28:06 UTC (rev 166079)
+++ trunk/LayoutTests/media/track/captions-webvtt/tc011-cues-no-separation.vtt        2014-03-21 18:41:08 UTC (rev 166080)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> WEBVTT
</span><del>-Cues must be separated by at least one blank line, otherwise treated like one big cue.
</del><ins>+Cues do not need to be separated.
</ins><span class="cx"> 
</span><span class="cx"> 1
</span><span class="cx"> 00:00:00.000 --&gt; 00:00:30.500
</span></span></pre></div>
<a id="trunkLayoutTestsmediatrackcaptionswebvtttc031cuerecoverycuetextvtt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/media/track/captions-webvtt/tc031-cue-recovery-cuetext.vtt (0 => 166080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/track/captions-webvtt/tc031-cue-recovery-cuetext.vtt                                (rev 0)
+++ trunk/LayoutTests/media/track/captions-webvtt/tc031-cue-recovery-cuetext.vtt        2014-03-21 18:41:08 UTC (rev 166080)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+WEBVTT
+
+00:00.000 --&gt; 00:01.000
+Valid cue 1
+00:02.000 --&gt; 00:03.000
+Valid cue 2
</ins></span></pre></div>
<a id="trunkLayoutTestsmediatrackcaptionswebvtttc031cuerecoveryheadervtt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/media/track/captions-webvtt/tc031-cue-recovery-header.vtt (0 => 166080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/track/captions-webvtt/tc031-cue-recovery-header.vtt                                (rev 0)
+++ trunk/LayoutTests/media/track/captions-webvtt/tc031-cue-recovery-header.vtt        2014-03-21 18:41:08 UTC (rev 166080)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+WEBVTT
+00:00.000 --&gt; 00:01.000
+Valid cue 1
+
+00:02.000 --&gt; 00:03.000
+Valid cue 2
</ins></span></pre></div>
<a id="trunkLayoutTestsmediatrackcaptionswebvtttc031cuerecoverynotevtt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/media/track/captions-webvtt/tc031-cue-recovery-note.vtt (0 => 166080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/track/captions-webvtt/tc031-cue-recovery-note.vtt                                (rev 0)
+++ trunk/LayoutTests/media/track/captions-webvtt/tc031-cue-recovery-note.vtt        2014-03-21 18:41:08 UTC (rev 166080)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+WEBVTT
+
+00:00.000 --&gt; 00:01.000
+Valid cue 1
+
+NOTE about something
+NOTE or something else - maybe an identifier
+00:02.000 --&gt; 00:03.000
+Valid cue 2
</ins></span></pre></div>
<a id="trunkLayoutTestsmediatrackcaptionswebvtttc032degeneratecuesvtt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/media/track/captions-webvtt/tc032-degenerate-cues.vtt (0 => 166080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/track/captions-webvtt/tc032-degenerate-cues.vtt                                (rev 0)
+++ trunk/LayoutTests/media/track/captions-webvtt/tc032-degenerate-cues.vtt        2014-03-21 18:41:08 UTC (rev 166080)
</span><span class="lines">@@ -0,0 +1,5 @@
</span><ins>+WEBVTT
+
+00:00.000 --&gt; 00:01.000
+00:02.000 --&gt; 00:03.000
+00:04.000 --&gt; 00:05.000
</ins></span></pre></div>
<a id="trunkLayoutTestsmediatracktrackwebvtttc006cueidentifiersexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/track/track-webvtt-tc006-cue-identifiers-expected.txt (166079 => 166080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/track/track-webvtt-tc006-cue-identifiers-expected.txt        2014-03-21 18:28:06 UTC (rev 166079)
+++ trunk/LayoutTests/media/track/track-webvtt-tc006-cue-identifiers-expected.txt        2014-03-21 18:41:08 UTC (rev 166080)
</span><span class="lines">@@ -1,4 +1,4 @@
</span><del>-Tests that any text other than &quot;--&gt;&quot; is recognized as optional cue identifier.
</del><ins>+Tests that any text (including &quot;--&gt;&quot;) is recognized as optional cue identifier.
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -22,6 +22,15 @@
</span><span class="cx"> EXPECTED (cues[3].text == 'Duplicate identifier') OK
</span><span class="cx"> 
</span><span class="cx"> *** Testing text track 1
</span><del>-EXPECTED (cues.length == '0') OK
</del><ins>+EXPECTED (cues.length == '3') OK
+EXPECTED (cues[0].id == '') OK
+EXPECTED (cues[0].startTime == '0') OK
+EXPECTED (cues[0].endTime == '30.5') OK
+EXPECTED (cues[1].id == '') OK
+EXPECTED (cues[1].startTime == '31') OK
+EXPECTED (cues[1].endTime == '60.5') OK
+EXPECTED (cues[2].id == '') OK
+EXPECTED (cues[2].startTime == '61') OK
+EXPECTED (cues[2].endTime == '1200.5') OK
</ins><span class="cx"> END OF TEST
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsmediatracktrackwebvtttc006cueidentifiershtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/track/track-webvtt-tc006-cue-identifiers.html (166079 => 166080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/track/track-webvtt-tc006-cue-identifiers.html        2014-03-21 18:28:06 UTC (rev 166079)
+++ trunk/LayoutTests/media/track/track-webvtt-tc006-cue-identifiers.html        2014-03-21 18:41:08 UTC (rev 166080)
</span><span class="lines">@@ -55,9 +55,22 @@
</span><span class="cx">                 findMediaElement();
</span><span class="cx">                 var expected = 
</span><span class="cx">                 {
</span><del>-                    length : 0,
</del><ins>+                    length : 3,
</ins><span class="cx">                     tests:
</span><del>-                    [],
</del><ins>+                    [
+                            {
+                                property : &quot;id&quot;,
+                                values : [&quot;&quot;, &quot;&quot;, &quot;&quot;],
+                            },
+                            {
+                                property : &quot;startTime&quot;,
+                                values : [0.0, 31.0, 61.0],
+                            },
+                            {
+                                property : &quot;endTime&quot;,
+                                values : [30.5, 60.5, 1200.5],
+                            },
+                    ],
</ins><span class="cx">                 };
</span><span class="cx">                 testCues(1, expected);
</span><span class="cx"> 
</span><span class="lines">@@ -66,7 +79,7 @@
</span><span class="cx">         &lt;/script&gt;
</span><span class="cx">     &lt;/head&gt;
</span><span class="cx">     &lt;body onload=&quot;enableAllTextTracks()&quot;&gt;
</span><del>-        &lt;p&gt;Tests that any text other than &quot;--&gt;&quot; is recognized as optional cue identifier.&lt;/p&gt;
</del><ins>+        &lt;p&gt;Tests that any text (including &quot;--&gt;&quot;) is recognized as optional cue identifier.&lt;/p&gt;
</ins><span class="cx">         &lt;video&gt;
</span><span class="cx">             &lt;track src=&quot;captions-webvtt/tc006-cue-id.vtt&quot; onload=&quot;trackLoaded()&quot;&gt;
</span><span class="cx">             &lt;track src=&quot;captions-webvtt/tc006-cue-id-error.vtt&quot; onload=&quot;trackLoaded()&quot;&gt;
</span></span></pre></div>
<a id="trunkLayoutTestsmediatracktrackwebvtttc007cuenoidexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/track/track-webvtt-tc007-cue-no-id-expected.txt (166079 => 166080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/track/track-webvtt-tc007-cue-no-id-expected.txt        2014-03-21 18:28:06 UTC (rev 166079)
+++ trunk/LayoutTests/media/track/track-webvtt-tc007-cue-no-id-expected.txt        2014-03-21 18:41:08 UTC (rev 166080)
</span><span class="lines">@@ -1,4 +1,4 @@
</span><del>-Tests empty cue identifiers (they are optional), but makes sure &quot;--&gt;&quot; found leads to discarded cue.
</del><ins>+Tests empty cue identifiers (they are optional), including cues with &quot;--&gt;&quot;, which are treated as empty.
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -18,6 +18,18 @@
</span><span class="cx"> EXPECTED (cues[2].text == 'I said Bear is coming now!!!!') OK
</span><span class="cx"> 
</span><span class="cx"> *** Testing text track 1
</span><del>-EXPECTED (cues.length == '0') OK
</del><ins>+EXPECTED (cues.length == '3') OK
+EXPECTED (cues[0].id == '') OK
+EXPECTED (cues[0].startTime == '0') OK
+EXPECTED (cues[0].endTime == '30.5') OK
+EXPECTED (cues[0].text == 'Bear is Coming!!!!!') OK
+EXPECTED (cues[1].id == '') OK
+EXPECTED (cues[1].startTime == '31') OK
+EXPECTED (cues[1].endTime == '60.5') OK
+EXPECTED (cues[1].text == 'I said Bear is coming!!!!') OK
+EXPECTED (cues[2].id == '') OK
+EXPECTED (cues[2].startTime == '61') OK
+EXPECTED (cues[2].endTime == '1200.5') OK
+EXPECTED (cues[2].text == 'I said Bear is coming now!!!!') OK
</ins><span class="cx"> END OF TEST
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsmediatracktrackwebvtttc007cuenoidhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/track/track-webvtt-tc007-cue-no-id.html (166079 => 166080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/track/track-webvtt-tc007-cue-no-id.html        2014-03-21 18:28:06 UTC (rev 166079)
+++ trunk/LayoutTests/media/track/track-webvtt-tc007-cue-no-id.html        2014-03-21 18:41:08 UTC (rev 166080)
</span><span class="lines">@@ -55,9 +55,26 @@
</span><span class="cx">                 findMediaElement();
</span><span class="cx">                 var expected = 
</span><span class="cx">                 {
</span><del>-                    length : 0,
</del><ins>+                    length : 3,
</ins><span class="cx">                     tests:
</span><del>-                    [],
</del><ins>+                    [
+                        {
+                            property : &quot;id&quot;,
+                            values : [&quot;&quot;, &quot;&quot;, &quot;&quot;],
+                        },
+                        {
+                            property : &quot;startTime&quot;,
+                            values : [0.0, 31.0, 61.0],
+                        },
+                        {
+                            property : &quot;endTime&quot;,
+                            values : [30.5, 60.5, 1200.5],
+                        },
+                        {
+                            property : &quot;text&quot;,
+                            values : [&quot;Bear is Coming!!!!!&quot;, &quot;I said Bear is coming!!!!&quot;, &quot;I said Bear is coming now!!!!&quot;],
+                        },
+                    ],
</ins><span class="cx">                 };
</span><span class="cx">                 testCues(1, expected);
</span><span class="cx"> 
</span><span class="lines">@@ -66,7 +83,7 @@
</span><span class="cx">         &lt;/script&gt;
</span><span class="cx">     &lt;/head&gt;
</span><span class="cx">     &lt;body onload=&quot;enableAllTextTracks()&quot;&gt;
</span><del>-        &lt;p&gt;Tests empty cue identifiers (they are optional), but makes sure &quot;--&gt;&quot; found leads to discarded cue.&lt;/p&gt;
</del><ins>+        &lt;p&gt;Tests empty cue identifiers (they are optional), including cues with &quot;--&gt;&quot;, which are treated as empty.&lt;/p&gt;
</ins><span class="cx">         &lt;video&gt;
</span><span class="cx">             &lt;track src=&quot;captions-webvtt/tc007-cue-no-id.vtt&quot; onload=&quot;trackLoaded()&quot;&gt;
</span><span class="cx">             &lt;track src=&quot;captions-webvtt/tc007-cue-no-id-error.vtt&quot; onload=&quot;trackLoaded()&quot;&gt;
</span></span></pre></div>
<a id="trunkLayoutTestsmediatracktrackwebvtttc011blanklinesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/track/track-webvtt-tc011-blank-lines-expected.txt (166079 => 166080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/track/track-webvtt-tc011-blank-lines-expected.txt        2014-03-21 18:28:06 UTC (rev 166079)
+++ trunk/LayoutTests/media/track/track-webvtt-tc011-blank-lines-expected.txt        2014-03-21 18:41:08 UTC (rev 166080)
</span><span class="lines">@@ -1,7 +1,9 @@
</span><del>-Tests that cues are not affected by multiple newlines \n, \r, and \r\n and that cue not properly separated are treated as one big cue.
</del><ins>+Tests that cues are not affected by multiple newlines \n, \r, and \r\n and that cues that are not separated by whitespace are handled properly.
</ins><span class="cx"> 
</span><ins>+Note that cues not separated by whitespace will merge portions of the following cue (e.g., the '2' from the unseparated cue in the second track becomes part of the prior cue.)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><ins>+
</ins><span class="cx"> *** Testing text track 0
</span><span class="cx"> EXPECTED (cues.length == '3') OK
</span><span class="cx"> EXPECTED (cues[0].id == '1') OK
</span><span class="lines">@@ -18,6 +20,18 @@
</span><span class="cx"> EXPECTED (cues[2].text == 'I said Bear is coming now!!!!') OK
</span><span class="cx"> 
</span><span class="cx"> *** Testing text track 1
</span><del>-EXPECTED (cues.length == '1') OK
</del><ins>+EXPECTED (cues.length == '3') OK
+EXPECTED (cues[0].id == '1') OK
+EXPECTED (cues[0].startTime == '0') OK
+EXPECTED (cues[0].endTime == '30.5') OK
+EXPECTED (cues[0].text == 'Bear is Coming!!!!! 2') OK
+EXPECTED (cues[1].id == '') OK
+EXPECTED (cues[1].startTime == '31') OK
+EXPECTED (cues[1].endTime == '60.5') OK
+EXPECTED (cues[1].text == 'I said Bear is coming!!!!') OK
+EXPECTED (cues[2].id == '') OK
+EXPECTED (cues[2].startTime == '61') OK
+EXPECTED (cues[2].endTime == '361200.5') OK
+EXPECTED (cues[2].text == 'I said Bear is coming now!!!!') OK
</ins><span class="cx"> END OF TEST
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsmediatracktrackwebvtttc011blanklineshtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/track/track-webvtt-tc011-blank-lines.html (166079 => 166080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/track/track-webvtt-tc011-blank-lines.html        2014-03-21 18:28:06 UTC (rev 166079)
+++ trunk/LayoutTests/media/track/track-webvtt-tc011-blank-lines.html        2014-03-21 18:41:08 UTC (rev 166080)
</span><span class="lines">@@ -54,9 +54,26 @@
</span><span class="cx">                 findMediaElement();
</span><span class="cx">                 var expected = 
</span><span class="cx">                 {
</span><del>-                    length : 1,
</del><ins>+                    length : 3,
</ins><span class="cx">                     tests:
</span><del>-                    [],
</del><ins>+                    [
+                        {
+                            property : &quot;id&quot;,
+                            values : [&quot;1&quot;, &quot;&quot;, &quot;&quot;],
+                        },
+                        {
+                            property : &quot;startTime&quot;,
+                            values : [0.0, 31.0, 61.0],
+                        },
+                        {
+                            property : &quot;endTime&quot;,
+                            values : [30.5, 60.5, 361200.5],
+                        },
+                        {
+                            property : &quot;text&quot;,
+                            values : [&quot;Bear is Coming!!!!!\n2&quot;, &quot;I said Bear is coming!!!!&quot;, &quot;I said Bear is coming now!!!!&quot;],
+                        },
+                    ],
</ins><span class="cx">                 };
</span><span class="cx">                 testCues(1, expected);
</span><span class="cx"> 
</span><span class="lines">@@ -65,7 +82,8 @@
</span><span class="cx">         &lt;/script&gt;
</span><span class="cx">     &lt;/head&gt;
</span><span class="cx">     &lt;body onload=&quot;enableAllTextTracks()&quot;&gt;
</span><del>-    &lt;p&gt;Tests that cues are not affected by multiple newlines \n, \r, and \r\n and that cue not properly separated are treated as one big cue.&lt;/p&gt;
</del><ins>+    &lt;p&gt;Tests that cues are not affected by multiple newlines \n, \r, and \r\n and that cues that are not separated by whitespace are handled properly.&lt;/p&gt;
+        &lt;p&gt;Note that cues not separated by whitespace will merge portions of the following cue (e.g., the '2' from the unseparated cue in the second track becomes part of the prior cue.)&lt;/p&gt;
</ins><span class="cx">         &lt;video&gt;
</span><span class="cx">             &lt;track src=&quot;captions-webvtt/tc011-cues.vtt&quot; onload=&quot;trackLoaded()&quot;&gt;
</span><span class="cx">             &lt;track src=&quot;captions-webvtt/tc011-cues-no-separation.vtt&quot; onload=&quot;trackLoaded()&quot;&gt;
</span></span></pre></div>
<a id="trunkLayoutTestsmediatracktrackwebvtttc031cuerecoveryexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/media/track/track-webvtt-tc031-cue-recovery-expected.txt (0 => 166080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/track/track-webvtt-tc031-cue-recovery-expected.txt                                (rev 0)
+++ trunk/LayoutTests/media/track/track-webvtt-tc031-cue-recovery-expected.txt        2014-03-21 18:41:08 UTC (rev 166080)
</span><span class="lines">@@ -0,0 +1,32 @@
</span><ins>+Tests that a cue is recovered when a line with a &quot;--&gt;&quot; is encountered (missing blank line separator).
+
+
+
+*** Testing text track 0
+EXPECTED (cues.length == '2') OK
+EXPECTED (cues[0].startTime == '0') OK
+EXPECTED (cues[0].endTime == '1') OK
+EXPECTED (cues[0].text == 'Valid cue 1') OK
+EXPECTED (cues[1].startTime == '2') OK
+EXPECTED (cues[1].endTime == '3') OK
+EXPECTED (cues[1].text == 'Valid cue 2') OK
+
+*** Testing text track 1
+EXPECTED (cues.length == '2') OK
+EXPECTED (cues[0].startTime == '0') OK
+EXPECTED (cues[0].endTime == '1') OK
+EXPECTED (cues[0].text == 'Valid cue 1') OK
+EXPECTED (cues[1].startTime == '2') OK
+EXPECTED (cues[1].endTime == '3') OK
+EXPECTED (cues[1].text == 'Valid cue 2') OK
+
+*** Testing text track 2
+EXPECTED (cues.length == '2') OK
+EXPECTED (cues[0].startTime == '0') OK
+EXPECTED (cues[0].endTime == '1') OK
+EXPECTED (cues[0].text == 'Valid cue 1') OK
+EXPECTED (cues[1].startTime == '2') OK
+EXPECTED (cues[1].endTime == '3') OK
+EXPECTED (cues[1].text == 'Valid cue 2') OK
+END OF TEST
+
</ins></span></pre></div>
<a id="trunkLayoutTestsmediatracktrackwebvtttc031cuerecoveryhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/media/track/track-webvtt-tc031-cue-recovery.html (0 => 166080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/track/track-webvtt-tc031-cue-recovery.html                                (rev 0)
+++ trunk/LayoutTests/media/track/track-webvtt-tc031-cue-recovery.html        2014-03-21 18:41:08 UTC (rev 166080)
</span><span class="lines">@@ -0,0 +1,63 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+    &lt;head&gt;
+        &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
+
+        &lt;script src=../media-file.js&gt;&lt;/script&gt;
+        &lt;script src=../video-test.js&gt;&lt;/script&gt;
+        &lt;script&gt;
+
+            numberOfTrackTests = 3;
+
+            function trackLoaded()
+            {
+                numberOfTracksLoaded++;
+                if (numberOfTracksLoaded == numberOfTrackTests) {
+                    testTrack(0);
+                    testTrack(1);
+                    testTrack(2);
+                }
+            }
+
+            function testTrack(i)
+            {
+                findMediaElement();
+                var expected =
+                {
+                    length: 2,
+                    tests:
+                    [
+                        {
+                            property: &quot;startTime&quot;,
+                            values: [ &quot;0&quot;, &quot;2&quot; ],
+                        },
+                        {
+                            property: &quot;endTime&quot;,
+                            values: [ &quot;1&quot;, &quot;3&quot; ],
+                        },
+                        {
+                            property: &quot;text&quot;,
+                            values:
+                            [
+                                'Valid cue 1',
+                                'Valid cue 2',
+                            ],
+                        },
+                    ],
+                };
+
+                testCues(i, expected);
+
+                allTestsEnded();
+            }
+        &lt;/script&gt;
+    &lt;/head&gt;
+    &lt;body onload=&quot;enableAllTextTracks()&quot;&gt;
+      &lt;p&gt;Tests that a cue is recovered when a line with a &quot;--&gt;&quot; is encountered (missing blank line separator).&lt;/p&gt;
+        &lt;video&gt;
+            &lt;track src=&quot;captions-webvtt/tc031-cue-recovery-header.vtt&quot; onload=&quot;trackLoaded()&quot;&gt;
+            &lt;track src=&quot;captions-webvtt/tc031-cue-recovery-note.vtt&quot; onload=&quot;trackLoaded()&quot;&gt;
+            &lt;track src=&quot;captions-webvtt/tc031-cue-recovery-cuetext.vtt&quot; onload=&quot;trackLoaded()&quot;&gt;
+        &lt;/video&gt;
+    &lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsmediatracktrackwebvtttc032degeneratecuesexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/media/track/track-webvtt-tc032-degenerate-cues-expected.txt (0 => 166080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/track/track-webvtt-tc032-degenerate-cues-expected.txt                                (rev 0)
+++ trunk/LayoutTests/media/track/track-webvtt-tc032-degenerate-cues-expected.txt        2014-03-21 18:41:08 UTC (rev 166080)
</span><span class="lines">@@ -0,0 +1,17 @@
</span><ins>+Tests that a degenerate cues without separating blank lines are parsed correctly.
+
+
+
+*** Testing text track 0
+EXPECTED (cues.length == '3') OK
+EXPECTED (cues[0].startTime == '0') OK
+EXPECTED (cues[0].endTime == '1') OK
+EXPECTED (cues[0].text == '') OK
+EXPECTED (cues[1].startTime == '2') OK
+EXPECTED (cues[1].endTime == '3') OK
+EXPECTED (cues[1].text == '') OK
+EXPECTED (cues[2].startTime == '4') OK
+EXPECTED (cues[2].endTime == '5') OK
+EXPECTED (cues[2].text == '') OK
+END OF TEST
+
</ins></span></pre></div>
<a id="trunkLayoutTestsmediatracktrackwebvtttc032degeneratecueshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/media/track/track-webvtt-tc032-degenerate-cues.html (0 => 166080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/track/track-webvtt-tc032-degenerate-cues.html                                (rev 0)
+++ trunk/LayoutTests/media/track/track-webvtt-tc032-degenerate-cues.html        2014-03-21 18:41:08 UTC (rev 166080)
</span><span class="lines">@@ -0,0 +1,55 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+    &lt;head&gt;
+        &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
+
+        &lt;script src=../media-file.js&gt;&lt;/script&gt;
+        &lt;script src=../video-test.js&gt;&lt;/script&gt;
+        &lt;script&gt;
+
+            numberOfTrackTests = 1;
+
+            function trackLoaded()
+            {
+                numberOfTracksLoaded++;
+                if (numberOfTracksLoaded == numberOfTrackTests) {
+                    testTrack0();
+                }
+            }
+
+            function testTrack0()
+            {
+                findMediaElement();
+                var expected =
+                {
+                    length: 3,
+                    tests:
+                    [
+                        {
+                            property: &quot;startTime&quot;,
+                            values: [ &quot;0&quot;, &quot;2&quot;, &quot;4&quot; ],
+                        },
+                        {
+                            property: &quot;endTime&quot;,
+                            values: [ &quot;1&quot;, &quot;3&quot;, &quot;5&quot; ],
+                        },
+                        {
+                            property: &quot;text&quot;,
+                            values: [ '', '', '' ],
+                        },
+                    ],
+                };
+
+                testCues(0, expected);
+
+                allTestsEnded();
+            }
+        &lt;/script&gt;
+    &lt;/head&gt;
+    &lt;body onload=&quot;enableAllTextTracks()&quot;&gt;
+      &lt;p&gt;Tests that a degenerate cues without separating blank lines are parsed correctly.&lt;/p&gt;
+        &lt;video&gt;
+            &lt;track src=&quot;captions-webvtt/tc032-degenerate-cues.vtt&quot; onload=&quot;trackLoaded()&quot;&gt;
+        &lt;/video&gt;
+    &lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (166079 => 166080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-03-21 18:28:06 UTC (rev 166079)
+++ trunk/Source/WebCore/ChangeLog        2014-03-21 18:41:08 UTC (rev 166080)
</span><span class="lines">@@ -1,3 +1,24 @@
</span><ins>+2014-03-21  Brent Fulgham  &lt;bfulgham@apple.com&gt;
+
+        Handle recovery on &quot;timestamp-looking&quot; lines in the WebVTT parser
+        https://bugs.webkit.org/show_bug.cgi?id=130610
+
+        Reviewed by Eric Carlson.
+
+        Merged from Blink (patch by fs@opera.com):
+        https://chromium.googlesource.com/chromium/blink/+/b669a380efbffe25f3b154b026b57b9822ce08e2
+        http://crbug.com/75273002
+
+        Tests: media/track/track-webvtt-tc031-cue-recovery.html
+               media/track/track-webvtt-tc032-degenerate-cues.html
+
+        * html/track/WebVTTParser.cpp:
+        (WebCore::WebVTTParser::parse):
+        (WebCore::WebVTTParser::collectCueText):
+        (WebCore::WebVTTParser::recoverCue):
+        (WebCore::WebVTTParser::ignoreBadCue):
+        * html/track/WebVTTParser.h:
+
</ins><span class="cx"> 2014-03-21  Andreas Kling  &lt;akling@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Remove unused RenderView::repaintRectangleInViewAndCompositedLayers().
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackWebVTTParsercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/WebVTTParser.cpp (166079 => 166080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/WebVTTParser.cpp        2014-03-21 18:28:06 UTC (rev 166079)
+++ trunk/Source/WebCore/html/track/WebVTTParser.cpp        2014-03-21 18:41:08 UTC (rev 166080)
</span><span class="lines">@@ -211,6 +211,10 @@
</span><span class="cx">                 m_state = Id;
</span><span class="cx">                 break;
</span><span class="cx">             }
</span><ins>+            // Step 15 - Break out of header loop if the line could be a timestamp line.
+            if (line.contains(&quot;--&gt;&quot;))
+                m_state = recoverCue(line);
+
</ins><span class="cx">             // Step 16 - Line is not the empty string and does not contain &quot;--&gt;&quot;.
</span><span class="cx">             break;
</span><span class="cx"> 
</span><span class="lines">@@ -355,10 +359,19 @@
</span><span class="cx"> 
</span><span class="cx"> WebVTTParser::ParseState WebVTTParser::collectCueText(const String&amp; line)
</span><span class="cx"> {
</span><ins>+    // Step 34.
</ins><span class="cx">     if (line.isEmpty()) {
</span><span class="cx">         createNewCue();
</span><span class="cx">         return Id;
</span><span class="cx">     }
</span><ins>+    // Step 35.
+    if (line.contains(&quot;--&gt;&quot;)) {
+        // Step 39-40.
+        createNewCue();
+
+        // Step 41 - New iteration of the cue loop.
+        return recoverCue(line);
+    }
</ins><span class="cx">     if (!m_currentContent.isEmpty())
</span><span class="cx">         m_currentContent.append(&quot;\n&quot;);
</span><span class="cx">     m_currentContent.append(line);
</span><span class="lines">@@ -366,11 +379,22 @@
</span><span class="cx">     return CueText;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+WebVTTParser::ParseState WebVTTParser::recoverCue(const String&amp; line)
+{
+    // Step 17 and 21.
+    resetCueValues();
+
+    // Step 22.
+    return collectTimingsAndSettings(line);
+}
+
</ins><span class="cx"> WebVTTParser::ParseState WebVTTParser::ignoreBadCue(const String&amp; line)
</span><span class="cx"> {
</span><del>-    if (!line.isEmpty())
-        return BadCue;
-    return Id;
</del><ins>+    if (line.isEmpty())
+        return Id;
+    if (line.contains(&quot;--&gt;&quot;))
+        return recoverCue(line);
+    return BadCue;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // A helper class for the construction of a &quot;cue fragment&quot; from the cue text.
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackWebVTTParserh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/WebVTTParser.h (166079 => 166080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/WebVTTParser.h        2014-03-21 18:28:06 UTC (rev 166079)
+++ trunk/Source/WebCore/html/track/WebVTTParser.h        2014-03-21 18:41:08 UTC (rev 166080)
</span><span class="lines">@@ -165,6 +165,7 @@
</span><span class="cx">     ParseState collectCueId(const String&amp;);
</span><span class="cx">     ParseState collectTimingsAndSettings(const String&amp;);
</span><span class="cx">     ParseState collectCueText(const String&amp;);
</span><ins>+    ParseState recoverCue(const String&amp;);
</ins><span class="cx">     ParseState ignoreBadCue(const String&amp;);
</span><span class="cx"> 
</span><span class="cx">     void createNewCue();
</span></span></pre>
</div>
</div>

</body>
</html>