Title: [120018] trunk
Revision
120018
Author
[email protected]
Date
2012-06-11 16:18:15 -0700 (Mon, 11 Jun 2012)

Log Message

[BlackBerry] Unexpected repeats of short media
https://bugs.webkit.org/show_bug.cgi?id=88733

Patch by Max Feil <[email protected]> on 2012-06-11
Reviewed by Antonio Gomes.

Source/WebCore:

The m_userDrivenSeekTimer is causing unwanted repeats of short
media such as sound effects because it is causing the current
time to not reflect that the media has finished playing.
This problem only affects media whose duration is close to
or less than the SeekSubmissionDelay, which is currently
set to 100ms. My fix is to ignore the userDrivenSeekTimer in
MediaPlayerPrivate::currentTime() if the duration of the media
is within twice the SeekSubmissionDelay. Seek drag smoothness
is a non-issue for such short media.

Test: platform/blackberry/media/short-media-repeats-correctly.html

* platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
(WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
(WebCore):
(WebCore::MediaPlayerPrivate::currentTime):
(WebCore::MediaPlayerPrivate::seek):
(WebCore::MediaPlayerPrivate::userDrivenSeekTimerFired):
* platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h:
(MediaPlayerPrivate):

LayoutTests:

Test for problem where short media repeats unintentionally.

* media/content/short.wav: Added.
* platform/blackberry/media/short-media-repeats-correctly-expected.txt: Added.
* platform/blackberry/media/short-media-repeats-correctly.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (120017 => 120018)


--- trunk/LayoutTests/ChangeLog	2012-06-11 23:14:38 UTC (rev 120017)
+++ trunk/LayoutTests/ChangeLog	2012-06-11 23:18:15 UTC (rev 120018)
@@ -1,3 +1,16 @@
+2012-06-11  Max Feil  <[email protected]>
+
+        [BlackBerry] Unexpected repeats of short media
+        https://bugs.webkit.org/show_bug.cgi?id=88733
+
+        Reviewed by Antonio Gomes.
+
+        Test for problem where short media repeats unintentionally.
+
+        * media/content/short.wav: Added.
+        * platform/blackberry/media/short-media-repeats-correctly-expected.txt: Added.
+        * platform/blackberry/media/short-media-repeats-correctly.html: Added.
+
 2012-06-11  Julien Chaffraix  <[email protected]>
 
         Account for margin after when laying out <legend> element

Added: trunk/LayoutTests/media/content/short.wav (0 => 120018)


--- trunk/LayoutTests/media/content/short.wav	                        (rev 0)
+++ trunk/LayoutTests/media/content/short.wav	2012-06-11 23:18:15 UTC (rev 120018)
@@ -0,0 +1,68 @@
+RIFF0WAVEfmt D\xAC\xB1data\xF6\xE4
+\xE2k\xE3\xD4\xE5H\xDBv\xE7\xE7\xF4\xCF\xE3\xAA\xAB\xE7\xB8\xD7\xF2^+b\xF9\xB56\xF5>0R\xD2\xF5\xFFx\xCD\xC3\xCCU\xE68\xD5\xF0\xC8\xE4\x80\xF2\xCD\xD8'\xAA\xD7/\xDF\xD0\x9AA\xC9\xFF\xFEK@\xFC0\xFD\xEB\xDE\xD2A\xF2[։\xC9(\xEAlϗ\xFB\xD3U\xCE\xD5<%\x9E\xE7\x96D\xF3\xB1\xFC\xEA\xF3\xA0\xF5J\xA2\xF1\x9B\xFE\x86\xC9\x8B\xE2\xF4\xB6N\xF1\xC7\xB1\xED	\xA1\xDE%\xB10\xF7 \xDD\xF15\xF7\xFE\xC9=d\xE3\xC0:f\xD4!\xDD\xDB\xF0\x87\xE4\xDE\xD0s\xF2\x82\xC6}\xADЁ*Ӑ\xF9D\xD6\xE0\xF71Ð\xF0\xE7\xC7\xE9-\xCA\xF3\xF2\xC5\xE3\xA5u\xFD&$\xDDl*\xCF4\xA28UOA+\xE7o\xB3\xA1sj Rh\xC5
+\x9DY\xA2\xF0\xCA6\xAB\xDC\xC2\xF6\xC4B\xEF\xC1\xB8\xB3\xD1œ\xCA=\xD1\xC0\xDB\xDD·\x81\xE1~\xBA\xD9\xDA\xEB\xC8\xF7\xEF\xC9ƺ\xF5$\xD0;\xFA\xE6\xE06\xF1\x97\xFF\xE9\xF8f
++\xF7\xF9\x9C\xFC	i\xFD\x8F'\xC3\xF9'z\xF9\xF9\xEA\xF6 
+\xBD\xF3\xE9\xFB\x9E\xEEp\xF4\xB6\xEF\xBC\xF4*\xF2\x8A\xFB\xBF\xAD\xF8,\xDDn\xCF." \xB6
+*
+\xA5\xF5\x91\xD0\xE1\xD9\xE0]\xF8\xEA\xEFh\xF7{\xE5\xFBs\xDF\xD3\xF3\xE6\xDD\xC3\xD9\xF9
+\xC6\xE4;\xF7\xAC\xCB>X\xC5\Z^\xC1\xD4{J7\x98\xCDٙ&a\xA7\xFAf\x8Fs\x89K\xEE\xB0B\xE2\x84\xC5}\xAB\xF66\x89\xA7\x98s"IߐA™\xD3%?\xB8\xAD|w\xC6'\xE9\xBAP\xAA&\xE5\xDA4\x92\xBCkd\xCB'׾X\xBB\xA3\xFA)g\xB9\xDFkb\xE5\xF6\xD917\xE9\xFD\xB57\xC4р\xAC˦\xBA$\x80=_g\xC9\xF3i\xE2M\xE5\xABЙ
+\xB9\xE2\x8F\xC8\xF75\xB9D\xC8\xDA\xFC\xD8\xF8B\x9D\xE3\x9DޓWx\xCAuI\x9B,C\xD1\xF7J\x85\xD91\xDB\xC3L\xF1\xC4\xD9cr*s\xDD7ZYʠG\xD8\xC4p,'%\xC0\xA9I\x88}\xF2a\xACC\xC9Z\x94\xEB\xEFe\xF3\xA1\xB2,\xF7\x8Cآ$\xB5\xE4\xE4\xB3?\xF0~\x8B\xC5\xFCY\x8E-\xF6\xCFc)z\x92\xCD(\xED"\x9F\xF6K8\xDDc0\xB7&\xDD\xFB\xB8ʗXG"\xB1\xFD\xB6&\xE3\xC9\xCA\xDD \xC2vb)(\xD6\xCCYX\x96>s\xB2\xFBDZ-\xB4\xBC\x9D(aC\xEB\xB5\xD3\\xD6 \xE4\xEA\xD8(\xC2m?Y\xBF9\x9C\xEB\xD3\x8C\xC8-\xB9P\xF3r,{\xD3\xDD\xF2\xBB5\xB1i;\xFD\xF6\xBBH\xAB:\xCAm8\xBE\xAC\xE2xbT0\xFDG\xC6c\xC1ϯh\xE5}\xF5\xC9\xA1\xF3\x93&\xB9I:\xD2\\xA2\xA1I\xF5ᐻ\xA5\xF6l\xE9\xF4\xAAO:\xB5\xC4\xCFd\xD4\x9E\xAD\xBF\x95x\xFD\xA1\xF6\x86\xD7g\xAD\xD9\xBC0D\xEA$\xE9\xCE\xD8\xDC\xCEL<\xC3$\xB8%\x97\xF48\xAD\xE0**\x9C*\xD0	vG\xAA\xF0\xC2TB	\x9C#C|\xF6/>\xD2\xEA\xEE
+-\xF1L\xDB\x84'p\xAF=\xB0\xAD\\xBC
+ƛ\xE6\xFA\xC7@d\xE7sƞ\xFE\xA4\xE6\xE2\xEC\xF1D۶,\x9B\xAC\x8D\xF0(\xD6\xB2\xDC
+ͻ\xF5G
+\xF1\x95wQY9\xBE\xED<\xC2\xDD\xFC\xD5׆y\xFE\xA0\xC63\x8F\xC0<9 fI\x81\xEE\x92^\xD2\xCE\xC1s\xEA\xD7\xDEP\x93\xEC\xB4\xEC 4\xCA\xFB:\xF1\xF3\xFB\xF5\x87\xEF\xC7Dů\xF6\xD7\xEA\xD9\xCF\xDA\xF4\xD5\xD3\xFF\xEB/\xD3\xFA\xF8\xA2\xEBK\xF9\xD7-C\xFBm(\xD4\xD8\xDF5\xE8d\xEB[
+~\xF5\xFAy\xEF\x9D\xF3\xC2\xE4i\xA7\xFCb+
+\xF8VH\xC0XF0\xB9[7\xFB\xE8r\x9A\xEA0\xF5ܸ\xE0\xE4*\x9A\xDC%\xF4%\xE7G\xE2\xE5\xDA3\xF2\xE7\xD7\xEA\x87\xDAi\xDCw\xFD/\xD5\xC1\xF7\xBB\xFE\x94\xE9\xB9\xFF\xEB\xD4\xF7A\xFD\xEC\xEC\x87\xF7\xDD$\xED\xC9\xF2\xEF\xBF\xF8`?8
+u\xB2\xFDc*\xB3\xEB\x91\xB0\xFB\xF4
+p%}\xFDq-H
+\xDD>&99ȣ.\xBAZ\xD4\xF8\xEF\xF8Ïۀ\xDA\xC1\xB3d\xC66\xA6\xB4\xC0W:\x99K-aղE\x88\xB3V\xAC\xFDz54B\xE8\xC0\xEE\x86\xEBg\xC1\xE4\xDD\xE9\xC0QD\xE8\xB26
+7\xE1\xB4#\x8B/ɅuR%\x81-\xFCY\xF2\xC3\xD1*X\xD2\xEE\xD2D%\xD9\xDC55\xF6\xB2\xFB\xCD\xA6Ï[E\xBC22\xEE#\x8F\xV\xCAA"tR\xCE\xFB\xAC\xD8WȾJo\x82uAP\xEBG u\xBD\xD6\xCD\xFB\xD3\xEC\xE0\xD7\xFCܖZ\xA6
+\x8DtNղc\xDD\xC6<\xBD\xB9quz'!,\xFDY)\xC6,W\xD5_\xEB\xDCj:\xF5%\xE7.I\xBF\xC9\xE2l7\xE1\xADz\xDB\xE7Nn\xCD\xF21\xF6\xFA\xDB\xD6Rۦj\xEB\xF4\xC3W>\x83\xC2-O\xED\x88c\xE5G舰T\xF6\x9Fm8\xA3\x92\x8D\xA5\xE8\xDB:\xE8\xF8\xB7\xCB\xEF\xC2^\xC5\xDD\xFD\xDET\x97\xCE\xFCWJtA}TP
+,/\xD2ͪ2\xEF\xEB\xF2\xC10\xCFM/\xD6\xCBF\xC8ų\xE1~\xFD0\xB7\x9C\x85\xB6\xFE\xA2,V\xB8?I\x89\xE5<ߐK\xC6\xDF
+)S<\x9D\xD5Dn\xEB+\xE5\xC2\xE4\xD5[\xD7\xE5\xA2\xEDC\x86\xF1\xF3@<\xD6\xFB\xEE!Z\xEA\xB6>O\xDD\xD0p\x9C\x80r\xFD\xAC\xFA\xCF\xE3C9\xE6=;>q\xD3)U#\xB0\xF7\xECn۳\xB5\xF0\xFD\xD2V|/o
+@<(
+\x83\xB4)sU-\xBC\xD7N\x88\xB8\xDA\xE7P\xB9\xA1\xF9\xF56\xEEzB\x87˃j\xE4\xE8A	r\xFA\x97_r.\x9A} \xCD\xFC\xFDV\xEF&\xD1&@\xDC\xE5"z\xE4"\xE1\xE5\xF7%\xC0'\xF3\xBF\xFE\xFB@D܉Jr\xE0o\xF3\xEE؜ϣ\xC7\xE2#b/\xA1\xD4\xDEA\xE8	\xD7\xDD\x97\xE0{\xDBw\xDF\xFB\x88\xDCM\xF5\x88\xFC\xFA\xDD\xCE\xF0\xB1\xFA\xB2\xF1/\x98\xF4.\xCD\xF1\xE5\xE6\xF1\xDE\xEF\xE1\xFC;\xD5#\xEE\xBE\x90Ke':\xE8k5\xBD\xF027\xE5\xCE\xE2\xE4\xF5\xAB\xDC3\x85\xF8\xF0!\xB5\xEB	\x9D\xF2\xE4	\xF0\xDFv=؏\xEDx\xE4\xCA\xEA\xCE\xFF\x82\xE9K\xA8
+\xD6\xF4\xE0;\xF6.%	\xF6\x8Bҧ\xC9\xDB4\xE4\xDF\xF0\xE9Գ\xF3d\xE0\x85\xEF!\xF4\xF1%\xF2D\xB5\xFFZ\xF9l\xEE\xFD\x9A0\xC2=\x93T
+v\xFC\xDD[\xF9\xAC	\xA2\xAB~\xF2\xB3\xF4\xD8\xF37\xE8\xCF\xF3xe\xE6\xECe\xF0\xF7\xFC3\xDF\xFE\xF5Ǿ\xF7ŃX\xBBf\xEB"`\xA4\xB4\xF1\xDE1\xADrPU\xFD*J\xFD\xDA\xF5\xEB\x82ʯg\xDFKE\xF7%T\xF9֖\xF3t")\xB5
+mg\xA2-P\xB4\xBA
+\xE6\xC1\xE5Z6\xFF\xE5\xEAF\xA0\xFDL\x9B\xB8uT.̇'O*\xB3\xEBN\xE6\xC4\xEB\xEF\xC6o\xB1W.ȎI
+'\xB76\x88D\xBBȁ\xFAF\x{114DE7};\xD4\xB5'BqB\xDBq\xB9\xC8O\xBA\x9ABQ\xC0vMQ$<\xD9\xDF:\x83\xD1\xD1\xE80K\xADxT\xA8\xF4n!=\xD89\xF4
+i\xEB\x8D\xF4\xE2\xEB\xAE%\x82\xF64[
+\xF4!\xDC\xD5\xEF\xC9\xE9\xFFK>\xBEs*$\xF7'\xD1C)\x85͒\xC7\xF3\xB8\xEA
+
+\xF6\xC4\xF1	\xF3R\xD9\xF2\xEDѷ\xF2\xEAj
+&Z\xDAI\x94\xBB"?\x91\xEF
+p<\xA0\xE4\xE4\xF3j\xF7I\xD6\xF2w$\xB5\xD6p\xF8ò\xD9\x84\xD8\xD6\xD5\xC2\x91\xF9j\x9B(m\xA4\xBA\xFB\x86\xFC\xE30\xAE\xF6\x8C\xA8\xD3\xF4w\xF6\x91\xFC\x87'\xC5\xE7`\xE7\xDF\xDB2
+>\xE3l}\xEA\xF1A"\xE1\xD4\xF0\xFD\xE7\xDBńH\xF6+g5\x81\xED)>o\xFBS\xE7\x93\xE7\x86\xE9\x8E\xD2,"\xD3\xE0\xF9\xF2\xDBrh\xFD=\xBF;\xA1\xDE\xDC%\xAA\xF6T\xE7c\xF7w˨\xFA\xE5\xE8
+\xF6G\xAB\xEB&\xE2\xFBH\x93\xE3\xAE\xEF\xFF\xE5*\xFFU\xF0?\xE0\xC9\xBB\xED\xBEr\xF8\xE845\xE7\xB3$T\xDF\xDEA\xF1\x9F\xCFq\xF7\x81\xEA\xB0\xF0D\xF61y\xED8\x93\xE7\x9E\xFD\xE0\xF1\xE7;\xEB\xB4\xF9\x93\xF2\x87\xE0\xCB\xF8,\xE1?
+e\xFF\xCE\xB2\xC6\xEE\xAE\xF1\xE6\xD2\xFDd\xEB\x90\xFCQ\xEC\xF5\xDAv\xF0\xBD\xF0\xB1\xF3\xD1\xF8\xE3\xF7U\xED\xFF\xF8%V\xFC\xFF\xFA\xF8\xF6k2}\xB2\xDAL\xF7\xE9{[\xDC\xC3
+t\xD2\xEEE\xEC\xC4\xC7-\xD2\xC9\xEDo\xF6e\xF1\xC5\xF7\xF6!\xFA\xC2\xE3\x96\xEDo\xE9\x92\xE6\xF6\xF5\xFB%\x91\xFA\xB3\xFDt\xF1 \xF9\xDD\xF6\xE85*\xFD\xA9
+j\xFD\x81\xFA+\xFB=\xF4\xC4\xFDA\xCC\xFF\xFD\xAF\xFC\xD1	\x9A\xF6\x88\xF9\xF3\xCA\xFA/\xF1\xA7\xF7.\xF4\x9E\xF1\xD4\xD9\xED^\xFCG\xF3\xF3.\xFE)\xD2\xAD
+v\xAB%1\xF7o	^\xF9	3\xE3\xF7\xFA6\xE2\xE2P\xDE\xE5\xE9lނ\xE9\xD7\xC8\\xD0\xF6\xFD4\xB6q)\xA3
+KC|\xE4\x8A\xE3N\xF4\xA0\xAB\xCF\xFC\xD0˃+%
+j\xFD+/@\xEFO\xECQ{\xCCwW\xBC!L\x90V\xC8\xEA\xFB\xFD\xB2\xC1\xAA8&\x89֜M\xF1\xB4\xDE\xE0<\xBE\xAA\>\xDC00\x86\x82P\xD7ݚ\xFC\x9B\xB2\xBA\xDBX\xB2 2t\xFC\xCCD\xB7%\xFD\xD3)\xE0\xE1\xDD\xC0\xED\xA8\xFF\xE7\xEF\xF2!0\xEAb\xCF\xEE\x97\xD2	9b\xE1\x8F&X\xF5\x90\xF0\xEF\x90\xF3\x8D\xC368E\xFE?&4\x80\xB5U\xF3\xAD"\xE4\xC1\xEC(\xB7\x980\xF4\xD8\xFE\xFA
+Ը\x86p\xF7\xBA\xF3\xDE.\x8D\xDEq\x90ި\xEA
+DC\xF5#0\xE6\xD3\xB5\xE3\xC3\xFB\x99\xA8\xD8\xDC\xE5Oa*\xCA\xE2\xB9\xEFP\xD8\xCE\x89\xF8\xBC\xAF\xFF\x9F\xF9\xAC\xDF\xED\xA8u\xF7\xD3\xE6\x91S\xF4J\xFE\xB4\xF3\xC9\xFB\x9F\xECSv	\xBB8\xFCJ\xF4q
+\xE4\xC9n\xC2\xFB\xA6	\xBAbF\xEFT\xFC	\xF7w\xDE\xDF\xF1\xF50{\xE7\xC0T\xE9\xF9\x8D)\xF2rS\xF8\xF4j\xE3G\xEC\xE4\xB8ɑ8\x99
+\xB0'\xED\xF53P\xFA\xB2\xF0\xDC\xF9\xE0\xC7QQ\xFA( \xE5\xEF\xB9\xE7\xF0\xFC\xA5\xF5\xF2q\xA8{\xF4\x8A\xF05\xE4\xB1\xFC0\xF1\x8Bg-\xA3)\xF5\xEFMC(\xF5\xD5\xAF_\xDE
+\xC8\xF2	\xB1\xFF\xFA%\xE9l\xBAO\xF8d\xFC\xF6\xDB\xF5\xB8\xBD\xF7	\xFE\xEE/\xF0\x87\xF2\xD9\xE9n\xF67\xF3O\xFC\xAE\xFD\x85\xF2Z\xF7d\xEA\xDF\xDC\xF4~\xE8\\xFA \xF4\xA6\xFC}\xF3\xB6\xF4\xB5\xF8\xC6\xEF\x88\xFA\xED\xEB\x86\xFB$\xFF\xFB\xDF
+6\xFC\x96f\xF9\xA9@\xF0 BX\xFF&\xD6\xFBU<\xF79
+\xCE\xFD\x98\xE3@\x86\xFF,\xE2\xF8$\x9F\xF3\xBC\xAA\xE7T\xF6\x9F\xF2u\xDEW\xFE\xC1\xE7\x9A\xF3a\xFF\xEE*\xEFZ\xF5\x8A\xEBX\xF9\xD8\xF9\xF4!\x92\xF2N\xFE\xAA\xFEB\xF2Q\xF78\xF3\xF7\xE7\x9E\xFF\xFCB\xF5$\xFE\x96\xFB9\xED\x80\xFD+\xFBp\xFEx\xFF/
+\xBB)\xCA\xFBP\xF77\xFE>\xFF\xB0\xFF\xBF\xA6\xFFc\xFB\xB6\xFCq\xFCE\xF5\xD4r\x9B\xF8\x8D!\xFF\x9B\xFAV\xFE\xD2\xFCj\xFDZ\xCFW\xFAF\xED\x91\xF8N\xF6\x83\xF4\xC0\xF8\xFB5\xF61\xF3\xD7\xF4\xF5#\xF7v\xF6\xF6Y\xF6[\xFB\xF0\xFA\xAC\xFE\x87\xF7j\xF7n\xF3F\xFBq\xF3\xB7\xFB\xA1\xF4\xD5\xFA\xF7\xB4\xFCc\xF3\xCC\xF8\xDA\xF8\xE0\xF8MrF\xFF(\xFC{q\xFCr\xB0\xFE=\xFD\xDBS\x82\xFB{\xFFA\xF6\xF4\xF6\xF4\xFF\xE9\xF9\xF9\xF9\x90]\xFF\xFBz\xDA\xFE\x82\xF5v\xBC\xFD\xA1\xFD\xFF\xFE\xBA\xFA`\xF7\xFC\xFD%\xF6\xE8\xF8\xFF\xD1\xF7Z\xFA\xFBc\xF7\xE4\xF7\xC2\xF31\xFA\x9B\xF4\xFE'\xFD\x98\xFE\xFB:V\xFC\xFF~\xFF\xFCO\xFE\x84\xFDs\xFBi\xF5\xF7\xE4\xFE8\xF3G\xFE\xF8\xA6\xFEc\xFC\xAE\xAE\xFB@\xA8G\xFC\x85\xFF\xC1\xFCY\xF85\xFE\\xF9\xD3\xF9\x8B\xF6\xCB\xFE\x8B\xF4gQA\xE3z\xFE\x9F\xEF\xF1\xD3\xC3
+\xE2\x8C\x95
+\xE1\xF8\xE0M\xFA`\xE1y\xFD\x9E\xE2\x80\xB0\xF6\xA7!\x9A\xB3!\x9D\xF9z\xFD\xD4
+\xE1\xAA\xEA\xF0\xBA\xF5\x94\xEA\x8D)\xE6f\xF6B\xDD0\xECM\xFD\x88Ϙl\xDF\xDC\xD3\x9A\xD8%q\xFD\xBCR\xFB\xB6\xF9\xCB\xF8\xDD\xEBK
+\xE6
+&\x85F\xFB\xF0\xF0\x86\x91\xF1\\xFFt\xF6\xD2
+\xB3\xF0W
+\x98b\xFC\xB0\xFE\xB8\xFF\xA6\xEB
+)\xF6\xA1\x8F \x8By"\xB3\xFA\xA5\x8D\xA4\xE2ho\xF8\xE1\xFE\x83\xC2\xFF\x85\xFD\xB3	\xE8\xF8\xDA\xFB\xE6\xF4/\xFAy\xFFL\xED\x98$\xFDC\xD51V\xE5\xC8
+(	?\xF6\xED\xE8
+\xAE\xB7l\xF4\xF1\xCD\xF7\xFA\xAD\xF3-\xF2\xF2\xFBW\xD7
+\x8B\xDE~\xAB\xEE
+ \xB9A\xFC\x8E\xB9y\xF9#ai\xE1\xC5	4\x98\xFF\xEB\xF6Q\xFCQ\xFF\xF7\xE5\xFC\xC1\xF5\x9F\xD5\xED3\xFE|\xFC*w\xF2;\xFC\xCC\xAE\xF8M\xF9\x93\xFD\xF7\xFE\xD2\xFE\xFEI\xF8\x93\xBB\xF5\xFE\xBE\xFC_\xF6a\xFB:\xF8/\xF8J\xF8\xD8\xF1W\xFC[\xEA\xE8*\xF4A\xFE\xA9\xF7\xE5\xFF\x91\xFFu\xFE\xC9O&\xEE\x85\xFA\x8E\xF5\xB8\xBF\xF0
+\x81V\xFF\xB1\xD1\xF9\xA4\xFC\xAA\xFD\x94\xF8U.\xFF\xB8\xBA\xF9\x99\xFEo\xFE
+\xFD,\xFE\xED\xFC\xE6\xF4F\xFD.\xF8\xF2\xAA\xFDk\xF7\x86\xFC8\xF8\xF1\xFC\x8F\xF4,\xF2\x81\xFB	\xFA\xFA\xFDX\xFC\x90\xF9\x87\xDA\xF4WA\xFB\x8D\xCF\xFB\x87E\xB5\xEC\xE0\xFE\x9B\xFD\x82\xFE;\xF9kh\xFC\xD2\xFC;
+1\xF2\xB5\x82\xFE\xE9	\xE7\xFF|\xAC\xD8R\xF9\xFC\xB4\xFB\xDF\xFB)\xFC\xC4\xFFy\xFC,\xFD[\xFB\xE8\xFB\xFA\xD2\xF7H\xF8\xAD\xF8l\xFEU\xFDC\xFC\xB8\xFD/r\xF7\xEE\xE4\xF9\xB8c\xF9\xA0\xFE\xA8\xFE\xD7\xF8\xFB\x97\xF5(\xF9M\xFFT\xF9\x92\xDA\xF3\x94Ja\xC1\xDE\xFE\xFF#\xFA\xB0\xFDz\xFC!`u\xC93\xE2\xFE/\x91\xFD;\xE1\xFA\x81\xFF\xDE\xFE\xFA\x8F\xEB\xFB[\x81\xFD.\xFF
+\xFD\x9A\xFE\xFD\xFA\xFA\xB2\xF79\xF5a\xF7\xB9\xF5H\xFE\xB9\xF4f\xE2\xF60K\xFA\xA0\xFF$\xC7\xC6D\xB5\xC5\xFBP\xFC\x92\xFA\xB7\xF6\x90\x97\xF8\xA1*\xFE*\xA4\xFF\xBF\xFC\xC5\xA8\xF79l\xFDX\xB3\xFE\xF8\xFB\x83\xFC\xEF\xF2\xFD\xFE\xF7\x94Q\x86n\x9A\xFF\x96\xF4\xF7\xB6\xFB\xFB;\xF9_\xFD+\xFB\xFEg\xF6\xD4b\xF9\xDFc\xB2\xFDL\xFE\xFB\x83\xE3\xF9\xE7\xFA\xFEE\xF0\xFB\xFF(\xF7\xB6\xE5\xF9\xDA	\xF4\x8C	\xF9\xF8\xA3\xF31\xFCh\xF8\x9C\xF9\xDF\x97\xF45\xC5\xFC	\xD3\xD4\x93\xB6\xBF	p\xF9TB\xF5\xAB\xF5O\xF9\xC2\xF5\x84\xF5\xB9\xB8\xFD\xA6\xCA)\xFEJ\xF8\xFE\xF6\xE3\xFB$\xFB\xDB\xF5\xF6G\xF3\xBBt\xF8<A\xF5\x93\xFC\x8E\xF4\xF9\xC0\xFA\x8F\xF8^\xFB\xAD\xF5\xEAg\xF6Mbp\xB3\xDA\xFD2\x9D\xF9\xB4F\xF9?\xFCq\xFE\x97\xF5I\xE5\xF8\x95\xCC\xFCADv\xFD\xFA\xFF\xF8\xCA\xFBc\xFA\xBE\xF6K\xD0\xF6\xC1\xFBg\xFE\xA8\xDC\xF5\xFD\x8BP\xFCc\xFD\xE1\xFE\xB6\xFD\xCD\xF7\xE1/\xF9\x8F\xCE'\xC9(\xFFzf\xF6e4\xF7\xE3\xF9\xFD\xFC\xAA\xFA\x97\xD9\xFAW\xAC\xB6\xFC\xC4\xFB\xFDv\xDC\xFB:&\xF8
+\xFD\xF1\xF7n\xF5\xD1\xF9\x8E\xF5J\xAF\xF8\xC0W~\xF9p\xA9\xFD\xB3\xFF\xC4\xFA\x9Cp\xFB\xE7\xFA\xC7\xFF\xCD\xFAc\xFE\xC9\xFEp\\xFDdD\xFB\xFD\xE1p\xFCPt\xF9R\xFF5\xFC\x8C\xFA\x9D\xFF\xFC{\xFF\xFF\xFB\xFF\xFF\xFE\xDB\xFC\x96\xEB\xFA\xD2\xFF\x86\xFA\xD1\xFE,\xF9\xD4\xFC=\xFAQ\xF8\xB1\xFC\xAC\xFA\xAA\xFF\xFC\x8C\xFF\xE9\xFE\xF8\xF4T\xF9f\xFC\xEF\xFC\xAC\xFDx\xFDi\xFEl\xFDj\xFCi\xFE\x9B\xFF*\xFF\xA6\xFF\xE4\xFF\xE9\x96\xFC01\xFC(\x92\xFB\xFD$\xFC\x92\xF96\xFFi\xF8w3\xFE\x90*9U!\xFDB\xFF
\ No newline at end of file

Added: trunk/LayoutTests/platform/blackberry/media/short-media-repeats-correctly-expected.txt (0 => 120018)


--- trunk/LayoutTests/platform/blackberry/media/short-media-repeats-correctly-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/platform/blackberry/media/short-media-repeats-correctly-expected.txt	2012-06-11 23:18:15 UTC (rev 120018)
@@ -0,0 +1,22 @@
+Test that a very short audio file does not repeat unintentionally.
+
+EVENT(canplaythrough)
+EVENT(playing)
+EVENT(ended)
+EVENT(playing)
+EVENT(ended)
+EVENT(progress)
+EVENT(playing)
+EVENT(ended)
+EVENT(progress)
+EVENT(playing)
+EVENT(ended)
+EVENT(progress)
+EVENT(playing)
+EVENT(ended)
+EVENT(progress)
+EVENT(playing)
+EVENT(ended)
+EVENT(progress)
+EXPECTED(progressCount == '5') OK
+END OF TEST

Added: trunk/LayoutTests/platform/blackberry/media/short-media-repeats-correctly.html (0 => 120018)


--- trunk/LayoutTests/platform/blackberry/media/short-media-repeats-correctly.html	                        (rev 0)
+++ trunk/LayoutTests/platform/blackberry/media/short-media-repeats-correctly.html	2012-06-11 23:18:15 UTC (rev 120018)
@@ -0,0 +1,72 @@
+<html>
+    <meta name="viewport" content="width=device-width">
+    <title>Short Media Repeats Correctly</title>
+    <body>
+    <p>Test that a very short audio file does not repeat unintentionally.</p>
+
+    <script src=""
+    <script src=""
+    <script>
+        function errorListener(event)
+        {
+            logResult(false, "Caught 'error' event, media.error.code = " + this.error.code);
+            endTest();
+        }
+
+        function canplaythroughListener(event)
+        {
+            consoleWrite("EVENT(canplaythrough)");
+            this.play();
+        }
+
+        function playingListener(event)
+        {
+            consoleWrite("EVENT(playing)");
+        }
+
+        function progressListener(event)
+        {
+            // If the media repeats more often than intended there will be too
+            // many progress events received, in this case one progress
+            // event per play. I tried listening for other more intuitive
+            // events but nothing else is being triggered when the repeated
+            // plays in question occur.
+            consoleWrite("EVENT(progress)");
+            ++progressCount;
+        }
+
+        function endedListener(event)
+        {
+            consoleWrite("EVENT(ended)");
+            if (++endedCount <= 5) // Set total number of repeats here
+                setTimeout("continueTest()", 100); // Give events time to come
+            else
+                setTimeout("concludeTest()", 100); // Give events time to come
+        }
+
+        function continueTest()
+        {
+            if (++repeatCount == 1)
+                audioElement.addEventListener('progress', progressListener);
+            audioElement.play();
+        }
+
+        function concludeTest()
+        {
+            testExpected("progressCount", repeatCount);
+            endTest();
+        }
+
+        document.write("<audio controls></audio>");
+        var audioElement = document.getElementsByTagName('audio')[0];
+        var endedCount = 0;
+        var repeatCount = 0;
+        var progressCount = 0;
+        audioElement.addEventListener('error', errorListener);
+        audioElement.addEventListener('canplaythrough', canplaythroughListener);
+        audioElement.addEventListener('playing', playingListener);
+        audioElement.addEventListener('ended', endedListener);
+        audioElement.src = "" "../../../media/content/short");
+    </script>
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (120017 => 120018)


--- trunk/Source/WebCore/ChangeLog	2012-06-11 23:14:38 UTC (rev 120017)
+++ trunk/Source/WebCore/ChangeLog	2012-06-11 23:18:15 UTC (rev 120018)
@@ -1,3 +1,31 @@
+2012-06-11  Max Feil  <[email protected]>
+
+        [BlackBerry] Unexpected repeats of short media
+        https://bugs.webkit.org/show_bug.cgi?id=88733
+
+        Reviewed by Antonio Gomes.
+
+        The m_userDrivenSeekTimer is causing unwanted repeats of short
+        media such as sound effects because it is causing the current
+        time to not reflect that the media has finished playing.
+        This problem only affects media whose duration is close to
+        or less than the SeekSubmissionDelay, which is currently
+        set to 100ms. My fix is to ignore the userDrivenSeekTimer in
+        MediaPlayerPrivate::currentTime() if the duration of the media
+        is within twice the SeekSubmissionDelay. Seek drag smoothness
+        is a non-issue for such short media.
+
+        Test: platform/blackberry/media/short-media-repeats-correctly.html
+
+        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
+        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
+        (WebCore):
+        (WebCore::MediaPlayerPrivate::currentTime):
+        (WebCore::MediaPlayerPrivate::seek):
+        (WebCore::MediaPlayerPrivate::userDrivenSeekTimerFired):
+        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h:
+        (MediaPlayerPrivate):
+
 2012-06-11  Julien Chaffraix  <[email protected]>
 
         Account for margin after when laying out <legend> element

Modified: trunk/Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp (120017 => 120018)


--- trunk/Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp	2012-06-11 23:14:38 UTC (rev 120017)
+++ trunk/Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp	2012-06-11 23:18:15 UTC (rev 120018)
@@ -226,13 +226,17 @@
     return m_platformPlayer->duration();
 }
 
+static const double SeekSubmissionDelay = 0.1; // Reasonable throttling value.
+static const double ShortMediaThreshold = SeekSubmissionDelay * 2.0;
+
 float MediaPlayerPrivate::currentTime() const
 {
-    return m_userDrivenSeekTimer.isActive() ? m_lastSeekTime: m_platformPlayer->currentTime();
+    // For very short media on the order of SeekSubmissionDelay we get
+    // unwanted repeats if we don't return the most up-to-date currentTime().
+    bool shortMedia = m_platformPlayer->duration() < ShortMediaThreshold;
+    return m_userDrivenSeekTimer.isActive() && !shortMedia ? m_lastSeekTime: m_platformPlayer->currentTime();
 }
 
-static const double SeekSubmissionDelay = 0.1; // Reasonable throttling value.
-
 void MediaPlayerPrivate::seek(float time)
 {
     m_lastSeekTime = time;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to