Title: [136295] trunk
Revision
136295
Author
[email protected]
Date
2012-11-30 16:13:34 -0800 (Fri, 30 Nov 2012)

Log Message

Add support for the 'unpause()' method on MediaController.
https://bugs.webkit.org/show_bug.cgi?id=103751

Reviewed by Eric Carlson.

Source/WebCore:

The MediaController spec has been updated to add an unpause() method
which is functionally identical to the old play() method, and changes
the semantics of play() to call play() on the underlying slaved media
elements. The spec also added a playbackState() method, returning a
string representing the last calculated playback state.

Test: media/media-controller-unpause.html

* html/MediaController.cpp:
(MediaController::unpause): Renamed from play().
(MediaController::play): Added. Same as unpause(), but also call
    play() on slaved media elements.
(playbackStateWaiting): Static string accessor.
(playbackStatePlaying): Ditto.
(playbackStateEnded): Ditto.
(MediaController::playbackState): Added. Returns string value of
    m_playbackState.
* html/MediaController.h:
* html/MediaController.idl:

LayoutTests:

Add new test for unpause() and playbackState() methods.

* media/media-controller-unpause.html:
* media/media-controller-unpause-expected.txt:
* media/media-controller-playback.html:
* media/media-controller-playback-expected.txt:

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (136294 => 136295)


--- trunk/LayoutTests/ChangeLog	2012-11-30 23:59:55 UTC (rev 136294)
+++ trunk/LayoutTests/ChangeLog	2012-12-01 00:13:34 UTC (rev 136295)
@@ -1,3 +1,17 @@
+2012-11-30  Jer Noble  <[email protected]>
+
+        Add support for the 'unpause()' method on MediaController.
+        https://bugs.webkit.org/show_bug.cgi?id=103751
+
+        Reviewed by Eric Carlson.
+
+        Add new test for unpause() and playbackState() methods.
+
+        * media/media-controller-unpause.html:
+        * media/media-controller-unpause-expected.txt:
+        * media/media-controller-playback.html:
+        * media/media-controller-playback-expected.txt:
+
 2012-11-30  Zhenyao Mo  <[email protected]>
 
         Unreviewed, webkit gardening, fix webkit lint.

Modified: trunk/LayoutTests/media/media-controller-playback-expected.txt (136294 => 136295)


--- trunk/LayoutTests/media/media-controller-playback-expected.txt	2012-11-30 23:59:55 UTC (rev 136294)
+++ trunk/LayoutTests/media/media-controller-playback-expected.txt	2012-12-01 00:13:34 UTC (rev 136295)
@@ -1,8 +1,6 @@
  
 RUN(controller = video.controller)
 EVENT(canplaythrough)
-RUN(video.play())
-RUN(video2.play())
 RUN(controller.play())
 EVENT(playing)
 EXPECTED (controller.paused == 'false') OK

Modified: trunk/LayoutTests/media/media-controller-playback.html (136294 => 136295)


--- trunk/LayoutTests/media/media-controller-playback.html	2012-11-30 23:59:55 UTC (rev 136294)
+++ trunk/LayoutTests/media/media-controller-playback.html	2012-12-01 00:13:34 UTC (rev 136295)
@@ -22,8 +22,6 @@
         function canplaythrough() {
             consoleWrite("EVENT(canplaythrough)");
             controller.removeEventListener('canplaythrough', canplaythrough, true);
-            run('video.play()');
-            run('video2.play()');
             controller.addEventListener('playing', playing, true);
             run('controller.play()');
         }
@@ -49,4 +47,4 @@
         <video mediaGroup="group" controls></video>
         <video mediaGroup="group" controls></video>
     </body>
-</html>
\ No newline at end of file
+</html>

Added: trunk/LayoutTests/media/media-controller-unpause-expected.txt (0 => 136295)


--- trunk/LayoutTests/media/media-controller-unpause-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/media/media-controller-unpause-expected.txt	2012-12-01 00:13:34 UTC (rev 136295)
@@ -0,0 +1,12 @@
+ 
+RUN(controller = video.controller)
+EVENT(canplaythrough)
+RUN(controller.pause())
+EVENT(pause)
+RUN(controller.unpause())
+EVENT(play)
+EXPECTED (controller.playbackState == 'waiting') OK
+RUN(controller.play())
+EVENT(playing)
+END OF TEST
+

Copied: trunk/LayoutTests/media/media-controller-unpause.html (from rev 136294, trunk/LayoutTests/media/media-controller-playback.html) (0 => 136295)


--- trunk/LayoutTests/media/media-controller-unpause.html	                        (rev 0)
+++ trunk/LayoutTests/media/media-controller-unpause.html	2012-12-01 00:13:34 UTC (rev 136295)
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <script src=""
+        <script src=""
+
+        <script>
+        var controller;
+        var video2;
+
+        function start()
+        {
+            var videos = document.getElementsByTagName('video');
+            video = videos[0];
+            video2 = videos[1];
+            run('controller = video.controller');
+            controller.addEventListener('canplaythrough', canplaythrough, true);
+            var src = "" 'content/test');
+            video.src = ""
+            video2.src = ""
+        }
+
+        function canplaythrough()
+        {
+            consoleWrite("EVENT(canplaythrough)");
+            controller.removeEventListener('canplaythrough', canplaythrough, true);
+            controller.addEventListener('pause', pause, true);
+            run('controller.pause()');
+        }
+
+        function pause() {
+            consoleWrite("EVENT(pause)");
+            controller.removeEventListener('pause', pause, true);
+            controller.addEventListener('play', play, true);
+            run('controller.unpause()');
+        }
+
+        function play()
+        {
+            consoleWrite('EVENT(play)');
+            controller.removeEventListener('play', play, true);
+            testExpected('controller.playbackState', 'waiting');
+            controller.addEventListener('playing', playing, true);
+            run('controller.play()');
+        }
+
+        function playing()
+        {
+            consoleWrite("EVENT(playing)");
+            controller.removeEventListener('playing', playing, true);
+            endTest();
+        }
+        </script>
+    </head>
+    <body _onload_="start()">
+        <video mediaGroup="group" controls></video>
+        <video mediaGroup="group" controls></video>
+    </body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (136294 => 136295)


--- trunk/Source/WebCore/ChangeLog	2012-11-30 23:59:55 UTC (rev 136294)
+++ trunk/Source/WebCore/ChangeLog	2012-12-01 00:13:34 UTC (rev 136295)
@@ -1,3 +1,30 @@
+2012-11-30  Jer Noble  <[email protected]>
+
+        Add support for the 'unpause()' method on MediaController.
+        https://bugs.webkit.org/show_bug.cgi?id=103751
+
+        Reviewed by Eric Carlson.
+
+        The MediaController spec has been updated to add an unpause() method
+        which is functionally identical to the old play() method, and changes
+        the semantics of play() to call play() on the underlying slaved media
+        elements. The spec also added a playbackState() method, returning a
+        string representing the last calculated playback state.
+
+        Test: media/media-controller-unpause.html
+
+        * html/MediaController.cpp:
+        (MediaController::unpause): Renamed from play().
+        (MediaController::play): Added. Same as unpause(), but also call
+            play() on slaved media elements.
+        (playbackStateWaiting): Static string accessor.
+        (playbackStatePlaying): Ditto.
+        (playbackStateEnded): Ditto.
+        (MediaController::playbackState): Added. Returns string value of
+            m_playbackState.
+        * html/MediaController.h:
+        * html/MediaController.idl:
+
 2012-11-30  Julien Chaffraix  <[email protected]>
 
         [CSS Grid Layout] Align the grid track code with the specification's production rules

Modified: trunk/Source/WebCore/html/MediaController.cpp (136294 => 136295)


--- trunk/Source/WebCore/html/MediaController.cpp	2012-11-30 23:59:55 UTC (rev 136294)
+++ trunk/Source/WebCore/html/MediaController.cpp	2012-12-01 00:13:34 UTC (rev 136295)
@@ -178,9 +178,9 @@
     scheduleTimeupdateEvent();
 }
 
-void MediaController::play()
+void MediaController::unpause()
 {
-    // When the play() method is invoked, if the MediaController is a paused media controller,
+    // When the unpause() method is invoked, if the MediaController is a paused media controller,
     if (!m_paused)
         return;
 
@@ -192,6 +192,17 @@
     reportControllerState();
 }
 
+void MediaController::play()
+{
+    // When the play() method is invoked, the user agent must invoke the play method of each
+    // slaved media element in turn,
+    for (size_t index = 0; index < m_mediaElements.size(); ++index)
+        m_mediaElements[index]->play();
+
+    // and then invoke the unpause method of the MediaController.
+    unpause();
+}
+
 void MediaController::pause()
 {
     // When the pause() method is invoked, if the MediaController is a playing media controller,
@@ -279,6 +290,36 @@
         m_mediaElements[index]->updateVolume();
 }
 
+static const AtomicString& playbackStateWaiting()
+{
+    DEFINE_STATIC_LOCAL(AtomicString, waiting, ("waiting", AtomicString::ConstructFromLiteral));
+    return waiting;
+}
+
+static const AtomicString& playbackStatePlaying()
+{
+    DEFINE_STATIC_LOCAL(AtomicString, playing, ("playing", AtomicString::ConstructFromLiteral));
+    return playing;
+}
+
+static const AtomicString& playbackStateEnded()
+{
+    DEFINE_STATIC_LOCAL(AtomicString, ended, ("ended", AtomicString::ConstructFromLiteral));
+    return ended;
+}
+
+const AtomicString& MediaController::playbackState() const
+{
+    switch (m_playbackState) {
+    case WAITING:
+        return playbackStateWaiting();
+    case PLAYING:
+        return playbackStatePlaying();
+    case ENDED:
+        return playbackStateEnded();
+    }
+}
+
 void MediaController::reportControllerState()
 {
     updateReadyState();

Modified: trunk/Source/WebCore/html/MediaController.h (136294 => 136295)


--- trunk/Source/WebCore/html/MediaController.h	2012-11-30 23:59:55 UTC (rev 136294)
+++ trunk/Source/WebCore/html/MediaController.h	2012-12-01 00:13:34 UTC (rev 136295)
@@ -67,6 +67,7 @@
     virtual bool paused() const { return m_paused; }
     virtual void play();
     virtual void pause();
+    void unpause();
     
     virtual float defaultPlaybackRate() const { return m_defaultPlaybackRate; }
     virtual void setDefaultPlaybackRate(float);
@@ -83,7 +84,7 @@
     virtual ReadyState readyState() const { return m_readyState; }
 
     enum PlaybackState { WAITING, PLAYING, ENDED };
-    virtual PlaybackState playbackState() const { return m_playbackState; }
+    const AtomicString& playbackState() const;
 
     virtual bool supportsFullscreen() const { return false; }
     virtual bool isFullscreen() const { return false; }

Modified: trunk/Source/WebCore/html/MediaController.idl (136294 => 136295)


--- trunk/Source/WebCore/html/MediaController.idl	2012-11-30 23:59:55 UTC (rev 136294)
+++ trunk/Source/WebCore/html/MediaController.idl	2012-12-01 00:13:34 UTC (rev 136295)
@@ -39,8 +39,10 @@
 
     readonly attribute boolean paused;
     readonly attribute TimeRanges played;
+    readonly attribute DOMString playbackState;
     void play();
     void pause();
+    void unpause();
 
     attribute double defaultPlaybackRate;
     attribute double playbackRate;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to