Changeset 123627 in webkit


Ignore:
Timestamp:
Jul 25, 2012 9:52:56 AM (12 years ago)
Author:
tommyw@google.com
Message:

MediaStream API: Update MediaStreamTrack to match the specification
https://bugs.webkit.org/show_bug.cgi?id=90180

Reviewed by Adam Barth.

Source/Platform:

  • chromium/public/WebMediaStreamDescriptor.h:

(WebMediaStreamDescriptor):

  • chromium/public/WebMediaStreamSource.h:

(WebMediaStreamSource):

Source/WebCore:

MediaStreamTracks are now required to show the status of the underlying source,
and trigger events when that status changes.

Test: fast/mediastream/MediaStreamTrack.html

  • GNUmakefile.list.am:
  • Modules/mediastream/MediaStream.cpp:

(WebCore::MediaStream::MediaStream):
(WebCore::MediaStream::addTrack):

  • Modules/mediastream/MediaStreamTrack.cpp:

(WebCore::MediaStreamTrack::create):
(WebCore::MediaStreamTrack::MediaStreamTrack):
(WebCore::MediaStreamTrack::~MediaStreamTrack):
(WebCore::MediaStreamTrack::setEnabled):
(WebCore::MediaStreamTrack::readyState):
(WebCore):
(WebCore::MediaStreamTrack::sourceChangedState):
(WebCore::MediaStreamTrack::stop):
(WebCore::MediaStreamTrack::interfaceName):
(WebCore::MediaStreamTrack::scriptExecutionContext):
(WebCore::MediaStreamTrack::eventTargetData):
(WebCore::MediaStreamTrack::ensureEventTargetData):

  • Modules/mediastream/MediaStreamTrack.h:
  • Modules/mediastream/MediaStreamTrack.idl:
  • WebCore.gypi:
  • dom/EventNames.h:

(WebCore):

  • dom/EventTargetFactory.in:
  • platform/chromium/support/WebMediaStreamDescriptor.cpp:
  • platform/chromium/support/WebMediaStreamSource.cpp:

(WebKit::WebMediaStreamSource::setReadyState):
(WebKit):
(WebKit::WebMediaStreamSource::readyState):

  • platform/mediastream/MediaStreamSource.cpp: Copied from Source/WebCore/platform/mediastream/MediaStreamSource.h.

(WebCore):
(WebCore::MediaStreamSource::create):
(WebCore::MediaStreamSource::MediaStreamSource):
(WebCore::MediaStreamSource::setReadyState):
(WebCore::MediaStreamSource::addObserver):
(WebCore::MediaStreamSource::removeObserver):

  • platform/mediastream/MediaStreamSource.h:

(Observer):
(WebCore::MediaStreamSource::Observer::~Observer):
(MediaStreamSource):
(WebCore::MediaStreamSource::readyState):

  • platform/mediastream/chromium/MediaStreamCenterChromium.cpp:

(WebCore::MediaStreamCenterChromium::queryMediaStreamSources):
(WebCore::MediaStreamCenterChromium::didCreateMediaStream):

Tools:

Adding a Mock WebMediaStreamCenter to enable better LayoutTests.

  • DumpRenderTree/DumpRenderTree.gypi:
  • DumpRenderTree/chromium/MockWebKitPlatformSupport.cpp:

(MockWebKitPlatformSupport::createMediaStreamCenter):

  • DumpRenderTree/chromium/MockWebMediaStreamCenter.cpp: Added.

(WebKit):
(WebKit::MockWebMediaStreamCenter::MockWebMediaStreamCenter):
(WebKit::MockWebMediaStreamCenter::queryMediaStreamSources):
(WebKit::MockWebMediaStreamCenter::didEnableMediaStreamTrack):
(WebKit::MockWebMediaStreamCenter::didDisableMediaStreamTrack):
(WebKit::MockWebMediaStreamCenter::didStopLocalMediaStream):
(WebKit::MockWebMediaStreamCenter::didCreateMediaStream):
(WebKit::MockWebMediaStreamCenter::constructSDP):

  • DumpRenderTree/chromium/MockWebMediaStreamCenter.h: Copied from Tools/DumpRenderTree/chromium/MockWebKitPlatformSupport.cpp.

(WebKit):
(MockWebMediaStreamCenter):
(WebKit::MockWebMediaStreamCenter::MockWebMediaStreamCenter):

LayoutTests:

  • fast/mediastream/MediaStreamTrack-expected.txt: Added.
  • fast/mediastream/MediaStreamTrack.html: Added.
Location:
trunk
Files:
3 added
22 edited
2 copied

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r123624 r123627  
     12012-07-25  Tommy Widenflycht  <tommyw@google.com>
     2
     3        MediaStream API: Update MediaStreamTrack to match the specification
     4        https://bugs.webkit.org/show_bug.cgi?id=90180
     5
     6        Reviewed by Adam Barth.
     7
     8        * fast/mediastream/MediaStreamTrack-expected.txt: Added.
     9        * fast/mediastream/MediaStreamTrack.html: Added.
     10
    1112012-07-25  Allan Sandfeld Jensen  <allan.jensen@nokia.com>
    212
  • trunk/Source/Platform/ChangeLog

    r123553 r123627  
     12012-07-25  Tommy Widenflycht  <tommyw@google.com>
     2
     3        MediaStream API: Update MediaStreamTrack to match the specification
     4        https://bugs.webkit.org/show_bug.cgi?id=90180
     5
     6        Reviewed by Adam Barth.
     7
     8        * chromium/public/WebMediaStreamDescriptor.h:
     9        (WebMediaStreamDescriptor):
     10        * chromium/public/WebMediaStreamSource.h:
     11        (WebMediaStreamSource):
     12
    1132012-07-24  Dave Tu  <dtu@chromium.org>
    214
  • trunk/Source/Platform/chromium/public/WebMediaStreamDescriptor.h

    r123533 r123627  
    6969    WEBKIT_EXPORT WebString label() const;
    7070
    71     // DEPRECATED
    72     WEBKIT_EXPORT void sources(WebVector<WebMediaStreamSource>&) const;
    73 
    7471    WEBKIT_EXPORT void audioSources(WebVector<WebMediaStreamComponent>&) const;
    7572    WEBKIT_EXPORT void videoSources(WebVector<WebMediaStreamComponent>&) const;
  • trunk/Source/Platform/chromium/public/WebMediaStreamSource.h

    r123533 r123627  
    5151    };
    5252
     53    enum ReadyState {
     54        ReadyStateLive = 0,
     55        ReadyStateMuted = 1,
     56        ReadyStateEnded = 2
     57    };
     58
    5359    WebMediaStreamSource() { }
    5460    WebMediaStreamSource(const WebMediaStreamSource& other) { assign(other); }
     
    7177    WEBKIT_EXPORT WebString name() const;
    7278
     79    WEBKIT_EXPORT void setReadyState(ReadyState);
     80    WEBKIT_EXPORT ReadyState readyState() const;
     81
    7382#if WEBKIT_IMPLEMENTATION
    7483    WebMediaStreamSource(const WTF::PassRefPtr<WebCore::MediaStreamSource>&);
  • trunk/Source/WebCore/ChangeLog

    r123626 r123627  
     12012-07-25  Tommy Widenflycht  <tommyw@google.com>
     2
     3        MediaStream API: Update MediaStreamTrack to match the specification
     4        https://bugs.webkit.org/show_bug.cgi?id=90180
     5
     6        Reviewed by Adam Barth.
     7
     8        MediaStreamTracks are now required to show the status of the underlying source,
     9        and trigger events when that status changes.
     10
     11        Test: fast/mediastream/MediaStreamTrack.html
     12
     13        * GNUmakefile.list.am:
     14        * Modules/mediastream/MediaStream.cpp:
     15        (WebCore::MediaStream::MediaStream):
     16        (WebCore::MediaStream::addTrack):
     17        * Modules/mediastream/MediaStreamTrack.cpp:
     18        (WebCore::MediaStreamTrack::create):
     19        (WebCore::MediaStreamTrack::MediaStreamTrack):
     20        (WebCore::MediaStreamTrack::~MediaStreamTrack):
     21        (WebCore::MediaStreamTrack::setEnabled):
     22        (WebCore::MediaStreamTrack::readyState):
     23        (WebCore):
     24        (WebCore::MediaStreamTrack::sourceChangedState):
     25        (WebCore::MediaStreamTrack::stop):
     26        (WebCore::MediaStreamTrack::interfaceName):
     27        (WebCore::MediaStreamTrack::scriptExecutionContext):
     28        (WebCore::MediaStreamTrack::eventTargetData):
     29        (WebCore::MediaStreamTrack::ensureEventTargetData):
     30        * Modules/mediastream/MediaStreamTrack.h:
     31        * Modules/mediastream/MediaStreamTrack.idl:
     32        * WebCore.gypi:
     33        * dom/EventNames.h:
     34        (WebCore):
     35        * dom/EventTargetFactory.in:
     36        * platform/chromium/support/WebMediaStreamDescriptor.cpp:
     37        * platform/chromium/support/WebMediaStreamSource.cpp:
     38        (WebKit::WebMediaStreamSource::setReadyState):
     39        (WebKit):
     40        (WebKit::WebMediaStreamSource::readyState):
     41        * platform/mediastream/MediaStreamSource.cpp: Copied from Source/WebCore/platform/mediastream/MediaStreamSource.h.
     42        (WebCore):
     43        (WebCore::MediaStreamSource::create):
     44        (WebCore::MediaStreamSource::MediaStreamSource):
     45        (WebCore::MediaStreamSource::setReadyState):
     46        (WebCore::MediaStreamSource::addObserver):
     47        (WebCore::MediaStreamSource::removeObserver):
     48        * platform/mediastream/MediaStreamSource.h:
     49        (Observer):
     50        (WebCore::MediaStreamSource::Observer::~Observer):
     51        (MediaStreamSource):
     52        (WebCore::MediaStreamSource::readyState):
     53        * platform/mediastream/chromium/MediaStreamCenterChromium.cpp:
     54        (WebCore::MediaStreamCenterChromium::queryMediaStreamSources):
     55        (WebCore::MediaStreamCenterChromium::didCreateMediaStream):
     56
    1572012-07-25  Allan Sandfeld Jensen  <allan.jensen@nokia.com>
    258
  • trunk/Source/WebCore/GNUmakefile.list.am

    r123623 r123627  
    35473547        Source/WebCore/platform/mediastream/MediaStreamComponent.h \
    35483548        Source/WebCore/platform/mediastream/MediaStreamDescriptor.h \
     3549        Source/WebCore/platform/mediastream/MediaStreamSource.cpp \
    35493550        Source/WebCore/platform/mediastream/MediaStreamSource.h \
    35503551        Source/WebCore/platform/mediastream/MediaStreamSourcesQueryClient.h \
  • trunk/Source/WebCore/Modules/mediastream/MediaStream.cpp

    r123533 r123627  
    9595    audioTrackVector.reserveCapacity(numberOfAudioTracks);
    9696    for (size_t i = 0; i < numberOfAudioTracks; i++)
    97         audioTrackVector.append(MediaStreamTrack::create(m_descriptor, m_descriptor->audioComponent(i)));
     97        audioTrackVector.append(MediaStreamTrack::create(context, m_descriptor, m_descriptor->audioComponent(i)));
    9898    m_audioTracks = MediaStreamTrackList::create(this, audioTrackVector);
    9999
     
    102102    videoTrackVector.reserveCapacity(numberOfVideoTracks);
    103103    for (size_t i = 0; i < numberOfVideoTracks; i++)
    104         videoTrackVector.append(MediaStreamTrack::create(m_descriptor, m_descriptor->videoComponent(i)));
     104        videoTrackVector.append(MediaStreamTrack::create(context, m_descriptor, m_descriptor->videoComponent(i)));
    105105    m_videoTracks = MediaStreamTrackList::create(this, videoTrackVector);
    106106}
     
    152152void MediaStream::addTrack(MediaStreamComponent* component)
    153153{
    154     RefPtr<MediaStreamTrack> track = MediaStreamTrack::create(m_descriptor, component);
     154    RefPtr<MediaStreamTrack> track = MediaStreamTrack::create(scriptExecutionContext(), m_descriptor, component);
    155155    ExceptionCode ec = 0;
    156156    switch (component->source()->type()) {
  • trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp

    r123533 r123627  
    2929#if ENABLE(MEDIA_STREAM)
    3030
     31#include "Event.h"
    3132#include "MediaStreamCenter.h"
    3233#include "MediaStreamComponent.h"
     
    3435namespace WebCore {
    3536
    36 PassRefPtr<MediaStreamTrack> MediaStreamTrack::create(PassRefPtr<MediaStreamDescriptor> streamDescriptor, MediaStreamComponent* component)
     37PassRefPtr<MediaStreamTrack> MediaStreamTrack::create(ScriptExecutionContext* context, PassRefPtr<MediaStreamDescriptor> streamDescriptor, MediaStreamComponent* component)
    3738{
    38     return adoptRef(new MediaStreamTrack(streamDescriptor, component));
     39    RefPtr<MediaStreamTrack> track = adoptRef(new MediaStreamTrack(context, streamDescriptor, component));
     40    track->suspendIfNeeded();
     41    return track.release();
    3942}
    4043
    41 MediaStreamTrack::MediaStreamTrack(PassRefPtr<MediaStreamDescriptor> streamDescriptor, MediaStreamComponent* component)
    42     : m_streamDescriptor(streamDescriptor)
     44MediaStreamTrack::MediaStreamTrack(ScriptExecutionContext* context, PassRefPtr<MediaStreamDescriptor> streamDescriptor, MediaStreamComponent* component)
     45    : ActiveDOMObject(context, this)
     46    , m_stopped(false)
     47    , m_streamDescriptor(streamDescriptor)
    4348    , m_component(component)
    4449{
     50    m_component->source()->addObserver(this);
    4551}
    4652
    4753MediaStreamTrack::~MediaStreamTrack()
    4854{
     55    m_component->source()->removeObserver(this);
    4956}
    5057
     
    7784void MediaStreamTrack::setEnabled(bool enabled)
    7885{
    79     if (enabled == m_component->enabled())
     86    if (m_stopped || enabled == m_component->enabled())
    8087        return;
    8188
     
    8895}
    8996
     97MediaStreamTrack::ReadyState MediaStreamTrack::readyState() const
     98{
     99    if (m_stopped)
     100        return ENDED;
     101
     102    switch (m_component->source()->readyState()) {
     103    case MediaStreamSource::ReadyStateLive:
     104        return LIVE;
     105    case MediaStreamSource::ReadyStateMuted:
     106        return MUTED;
     107    case MediaStreamSource::ReadyStateEnded:
     108        return ENDED;
     109    }
     110
     111    ASSERT_NOT_REACHED();
     112    return ENDED;
     113}
     114
     115void MediaStreamTrack::sourceChangedState()
     116{
     117    if (m_stopped)
     118        return;
     119
     120    switch (m_component->source()->readyState()) {
     121    case MediaStreamSource::ReadyStateLive:
     122        dispatchEvent(Event::create(eventNames().unmuteEvent, false, false));
     123        break;
     124    case MediaStreamSource::ReadyStateMuted:
     125        dispatchEvent(Event::create(eventNames().muteEvent, false, false));
     126        break;
     127    case MediaStreamSource::ReadyStateEnded:
     128        dispatchEvent(Event::create(eventNames().endedEvent, false, false));
     129        break;
     130    }
     131}
     132
    90133MediaStreamComponent* MediaStreamTrack::component()
    91134{
     
    93136}
    94137
     138void MediaStreamTrack::stop()
     139{
     140    m_stopped = true;
     141}
     142
     143const AtomicString& MediaStreamTrack::interfaceName() const
     144{
     145    return eventNames().interfaceForMediaStreamTrack;
     146}
     147
     148ScriptExecutionContext* MediaStreamTrack::scriptExecutionContext() const
     149{
     150    return ActiveDOMObject::scriptExecutionContext();
     151}
     152
     153EventTargetData* MediaStreamTrack::eventTargetData()
     154{
     155    return &m_eventTargetData;
     156}
     157
     158EventTargetData* MediaStreamTrack::ensureEventTargetData()
     159{
     160    return &m_eventTargetData;
     161}
     162
    95163} // namespace WebCore
    96164
  • trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h

    r123533 r123627  
    2929#if ENABLE(MEDIA_STREAM)
    3030
     31#include "ActiveDOMObject.h"
     32#include "EventTarget.h"
    3133#include "MediaStreamDescriptor.h"
     34#include "MediaStreamSource.h"
    3235#include "PlatformString.h"
    3336#include <wtf/RefCounted.h>
     
    3942class MediaStreamComponent;
    4043
    41 class MediaStreamTrack : public RefCounted<MediaStreamTrack> {
     44class MediaStreamTrack : public RefCounted<MediaStreamTrack>, public ActiveDOMObject, public EventTarget, public MediaStreamSource::Observer {
    4245public:
    43     static PassRefPtr<MediaStreamTrack> create(PassRefPtr<MediaStreamDescriptor>, MediaStreamComponent*);
     46    enum ReadyState {
     47        LIVE = 0,
     48        MUTED = 1,
     49        ENDED = 2
     50    };
     51
     52    static PassRefPtr<MediaStreamTrack> create(ScriptExecutionContext*, PassRefPtr<MediaStreamDescriptor>, MediaStreamComponent*);
    4453    virtual ~MediaStreamTrack();
    4554
     
    5059    void setEnabled(bool);
    5160
     61    ReadyState readyState() const;
     62
     63    DEFINE_ATTRIBUTE_EVENT_LISTENER(mute);
     64    DEFINE_ATTRIBUTE_EVENT_LISTENER(unmute);
     65    DEFINE_ATTRIBUTE_EVENT_LISTENER(ended);
     66
    5267    MediaStreamComponent* component();
    5368
     69    // EventTarget
     70    virtual const AtomicString& interfaceName() const OVERRIDE;
     71    virtual ScriptExecutionContext* scriptExecutionContext() const OVERRIDE;
     72
     73    // ActiveDOMObject
     74    virtual void stop() OVERRIDE;
     75
     76    using RefCounted<MediaStreamTrack>::ref;
     77    using RefCounted<MediaStreamTrack>::deref;
     78
    5479private:
    55     MediaStreamTrack(PassRefPtr<MediaStreamDescriptor>, MediaStreamComponent*);
     80    MediaStreamTrack(ScriptExecutionContext*, PassRefPtr<MediaStreamDescriptor>, MediaStreamComponent*);
    5681
     82    // EventTarget
     83    virtual EventTargetData* eventTargetData() OVERRIDE;
     84    virtual EventTargetData* ensureEventTargetData() OVERRIDE;
     85    virtual void refEventTarget() OVERRIDE { ref(); }
     86    virtual void derefEventTarget() OVERRIDE { deref(); }
     87    EventTargetData m_eventTargetData;
     88
     89    // MediaStreamSourceObserver
     90    virtual void sourceChangedState() OVERRIDE;
     91
     92    bool m_stopped;
    5793    RefPtr<MediaStreamDescriptor> m_streamDescriptor;
    5894    RefPtr<MediaStreamComponent> m_component;
  • trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.idl

    r123533 r123627  
    2727    interface [
    2828        Conditional=MEDIA_STREAM,
     29        EventTarget,
     30        ActiveDOMObject
    2931    ] MediaStreamTrack {
    3032        readonly attribute DOMString kind;
    3133        readonly attribute DOMString label;
    3234                 attribute boolean enabled;
     35
     36        const unsigned short LIVE = 0;
     37        const unsigned short MUTED = 1;
     38        const unsigned short ENDED = 2;
     39        readonly attribute unsigned short readyState;
     40
     41        attribute EventListener onmute;
     42        attribute EventListener onunmute;
     43        attribute EventListener onended;
     44
     45        // EventTarget interface
     46        void addEventListener(in DOMString type,
     47                              in EventListener listener,
     48                              in [Optional] boolean useCapture);
     49        void removeEventListener(in DOMString type,
     50                                 in EventListener listener,
     51                                 in [Optional] boolean useCapture);
     52        boolean dispatchEvent(in Event event)
     53            raises(EventException);
    3354    };
    3455
  • trunk/Source/WebCore/WebCore.gypi

    r123623 r123627  
    448448            'platform/mediastream/MediaStreamComponent.h',
    449449            'platform/mediastream/MediaStreamDescriptor.h',
     450            'platform/mediastream/MediaStreamSource.cpp',
    450451            'platform/mediastream/MediaStreamSource.h',
    451452            'platform/mediastream/PeerConnection00Handler.h',
  • trunk/Source/WebCore/dom/EventNames.h

    r123533 r123627  
    220220    macro(statechange) \
    221221    macro(removetrack) \
     222    macro(mute) \
     223    macro(unmute) \
    222224    \
    223225    macro(show) \
  • trunk/Source/WebCore/dom/EventTargetFactory.in

    r123533 r123627  
    1818MediaController conditional=VIDEO
    1919MediaStream conditional=MEDIA_STREAM
     20MediaStreamTrack conditional=MEDIA_STREAM
    2021MediaStreamTrackList conditional=MEDIA_STREAM
    2122MessagePort
  • trunk/Source/WebCore/platform/chromium/support/WebMediaStreamDescriptor.cpp

    r123533 r123627  
    9292}
    9393
    94 // FIXME: Cleanup when the chromium code has switched to the split sources implementation.
    95 void WebMediaStreamDescriptor::sources(WebVector<WebMediaStreamSource>& webSources) const
    96 {
    97     size_t numberOfAudioSources = m_private->numberOfAudioComponents();
    98     size_t numberOfVideoSources = m_private->numberOfVideoComponents();
    99     WebVector<WebMediaStreamSource> result(numberOfAudioSources + numberOfVideoSources);
    100     size_t i = 0;
    101     for (size_t j = 0; j < numberOfAudioSources; ++i, ++j)
    102         result[i] = m_private->audioComponent(j)->source();
    103     for (size_t j = 0; j < numberOfVideoSources; ++i, ++j)
    104         result[i] = m_private->videoComponent(j)->source();
    105     webSources.swap(result);
    106 }
    107 
    10894void WebMediaStreamDescriptor::audioSources(WebVector<WebMediaStreamComponent>& webSources) const
    10995{
  • trunk/Source/WebCore/platform/chromium/support/WebMediaStreamSource.cpp

    r123533 r123627  
    9797}
    9898
     99void WebMediaStreamSource::setReadyState(ReadyState state)
     100{
     101    ASSERT(!m_private.isNull());
     102    m_private->setReadyState(static_cast<MediaStreamSource::ReadyState>(state));
     103}
     104
     105WebMediaStreamSource::ReadyState WebMediaStreamSource::readyState() const
     106{
     107    ASSERT(!m_private.isNull());
     108    return static_cast<ReadyState>(m_private->readyState());
     109}
     110
    99111} // namespace WebKit
    100112
  • trunk/Source/WebCore/platform/mediastream/MediaStreamSource.cpp

    r123626 r123627  
    11/*
    2  * Copyright (C) 2011 Ericsson AB. All rights reserved.
     2 * Copyright (C) 2012 Google Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    1212 *    in the documentation and/or other materials provided with the
    1313 *    distribution.
    14  * 3. Neither the name of Ericsson nor the names of its contributors
     14 * 3. Neither the name of Google Inc. nor the names of its contributors
    1515 *    may be used to endorse or promote products derived from this
    1616 *    software without specific prior written permission.
     
    2929 */
    3030
    31 #ifndef MediaStreamSource_h
    32 #define MediaStreamSource_h
     31#include "config.h"
    3332
    3433#if ENABLE(MEDIA_STREAM)
    3534
    36 #include "PlatformString.h"
    37 #include <wtf/RefCounted.h>
    38 #include <wtf/Vector.h>
     35#include "MediaStreamSource.h"
    3936
    4037namespace WebCore {
    4138
    42 class MediaStreamSource : public RefCounted<MediaStreamSource> {
    43 public:
    44     enum Type {
    45         TypeAudio,
    46         TypeVideo
    47     };
     39PassRefPtr<MediaStreamSource> MediaStreamSource::create(const String& id, Type type, const String& name, ReadyState readyState)
     40{
     41    return adoptRef(new MediaStreamSource(id, type, name, readyState));
     42}
    4843
    49     static PassRefPtr<MediaStreamSource> create(const String& id, Type type, const String& name)
    50     {
    51         return adoptRef(new MediaStreamSource(id, type, name));
     44MediaStreamSource::MediaStreamSource(const String& id, Type type, const String& name, ReadyState readyState)
     45    : m_id(id)
     46    , m_type(type)
     47    , m_name(name)
     48    , m_readyState(readyState)
     49{
     50}
     51
     52void MediaStreamSource::setReadyState(ReadyState readyState)
     53{
     54    ASSERT(m_readyState != ReadyStateEnded);
     55    if (m_readyState != readyState) {
     56        m_readyState = readyState;
     57        for (Vector<Observer*>::iterator i = m_observers.begin(); i != m_observers.end(); ++i)
     58            (*i)->sourceChangedState();
    5259    }
     60}
    5361
    54     const String& id() const { return m_id; }
    55     Type type() const { return m_type; }
    56     const String& name() const { return m_name; }
     62void MediaStreamSource::addObserver(MediaStreamSource::Observer* observer)
     63{
     64    m_observers.append(observer);
     65}
    5766
    58     bool muted() const { return m_muted; }
    59     void setMuted(bool muted) { m_muted = muted; }
    60 
    61 private:
    62     MediaStreamSource(const String& id, Type type, const String& name)
    63         : m_id(id)
    64         , m_type(type)
    65         , m_name(name)
    66         , m_muted(false)
    67     {
    68     }
    69 
    70     String m_id;
    71     Type m_type;
    72     String m_name;
    73     bool m_muted;
    74 };
    75 
    76 typedef Vector<RefPtr<MediaStreamSource> > MediaStreamSourceVector;
     67void MediaStreamSource::removeObserver(MediaStreamSource::Observer* observer)
     68{
     69    size_t pos = m_observers.find(observer);
     70    if (pos != notFound)
     71        m_observers.remove(pos);
     72}
    7773
    7874} // namespace WebCore
    7975
    8076#endif // ENABLE(MEDIA_STREAM)
    81 
    82 #endif // MediaStreamSource_h
  • trunk/Source/WebCore/platform/mediastream/MediaStreamSource.h

    r123533 r123627  
    4242class MediaStreamSource : public RefCounted<MediaStreamSource> {
    4343public:
     44    class Observer {
     45    public:
     46        virtual ~Observer() { }
     47        virtual void sourceChangedState() = 0;
     48    };
     49
    4450    enum Type {
    4551        TypeAudio,
     
    4753    };
    4854
    49     static PassRefPtr<MediaStreamSource> create(const String& id, Type type, const String& name)
    50     {
    51         return adoptRef(new MediaStreamSource(id, type, name));
    52     }
     55    enum ReadyState {
     56        ReadyStateLive = 0,
     57        ReadyStateMuted = 1,
     58        ReadyStateEnded = 2
     59    };
     60
     61    static PassRefPtr<MediaStreamSource> create(const String& id, Type, const String& name, ReadyState = ReadyStateLive);
    5362
    5463    const String& id() const { return m_id; }
     
    5665    const String& name() const { return m_name; }
    5766
    58     bool muted() const { return m_muted; }
    59     void setMuted(bool muted) { m_muted = muted; }
     67    void setReadyState(ReadyState);
     68    ReadyState readyState() const { return m_readyState; }
     69
     70    void addObserver(Observer*);
     71    void removeObserver(Observer*);
    6072
    6173private:
    62     MediaStreamSource(const String& id, Type type, const String& name)
    63         : m_id(id)
    64         , m_type(type)
    65         , m_name(name)
    66         , m_muted(false)
    67     {
    68     }
     74    MediaStreamSource(const String& id, Type, const String& name, ReadyState);
    6975
    7076    String m_id;
    7177    Type m_type;
    7278    String m_name;
    73     bool m_muted;
     79    ReadyState m_readyState;
     80    Vector<Observer*> m_observers;
    7481};
    7582
  • trunk/Source/WebCore/platform/mediastream/chromium/MediaStreamCenterChromium.cpp

    r123533 r123627  
    6969void MediaStreamCenterChromium::queryMediaStreamSources(PassRefPtr<MediaStreamSourcesQueryClient> client)
    7070{
    71     // FIXME: Remove this "short-circuit" and forward to m_private when Chrome and DumpRenderTree has implemented WebMediaStreamCenter.
    72     MediaStreamSourceVector audioSources, videoSources;
    73     client->didCompleteQuery(audioSources, videoSources);
     71    if (m_private)
     72        m_private->queryMediaStreamSources(client);
     73    else {
     74        MediaStreamSourceVector audioSources, videoSources;
     75        client->didCompleteQuery(audioSources, videoSources);
     76    }
    7477}
    7578
     
    101104{
    102105    if (m_private) {
    103         // FIXME: Remove when Chromium have switched to the new API.
    104         m_private->didConstructMediaStream(stream);
    105 
    106106        WebKit::WebMediaStreamDescriptor webStream(stream);
    107107        m_private->didCreateMediaStream(webStream);
  • trunk/Source/WebKit/chromium/src/AssertMatchingEnums.cpp

    r123533 r123627  
    538538COMPILE_ASSERT_MATCHING_ENUM(WebMediaStreamSource::TypeAudio, MediaStreamSource::TypeAudio);
    539539COMPILE_ASSERT_MATCHING_ENUM(WebMediaStreamSource::TypeVideo, MediaStreamSource::TypeVideo);
     540COMPILE_ASSERT_MATCHING_ENUM(WebMediaStreamSource::ReadyStateLive, MediaStreamSource::ReadyStateLive);
     541COMPILE_ASSERT_MATCHING_ENUM(WebMediaStreamSource::ReadyStateMuted, MediaStreamSource::ReadyStateMuted);
     542COMPILE_ASSERT_MATCHING_ENUM(WebMediaStreamSource::ReadyStateEnded, MediaStreamSource::ReadyStateEnded);
    540543
    541544COMPILE_ASSERT_MATCHING_ENUM(WebICEOptions::CandidateTypeAll, IceOptions::ALL);
  • trunk/Tools/ChangeLog

    r123614 r123627  
     12012-07-25  Tommy Widenflycht  <tommyw@google.com>
     2
     3        MediaStream API: Update MediaStreamTrack to match the specification
     4        https://bugs.webkit.org/show_bug.cgi?id=90180
     5
     6        Reviewed by Adam Barth.
     7
     8        Adding a Mock WebMediaStreamCenter to enable better LayoutTests.
     9
     10        * DumpRenderTree/DumpRenderTree.gypi:
     11        * DumpRenderTree/chromium/MockWebKitPlatformSupport.cpp:
     12        (MockWebKitPlatformSupport::createMediaStreamCenter):
     13        * DumpRenderTree/chromium/MockWebMediaStreamCenter.cpp: Added.
     14        (WebKit):
     15        (WebKit::MockWebMediaStreamCenter::MockWebMediaStreamCenter):
     16        (WebKit::MockWebMediaStreamCenter::queryMediaStreamSources):
     17        (WebKit::MockWebMediaStreamCenter::didEnableMediaStreamTrack):
     18        (WebKit::MockWebMediaStreamCenter::didDisableMediaStreamTrack):
     19        (WebKit::MockWebMediaStreamCenter::didStopLocalMediaStream):
     20        (WebKit::MockWebMediaStreamCenter::didCreateMediaStream):
     21        (WebKit::MockWebMediaStreamCenter::constructSDP):
     22        * DumpRenderTree/chromium/MockWebMediaStreamCenter.h: Copied from Tools/DumpRenderTree/chromium/MockWebKitPlatformSupport.cpp.
     23        (WebKit):
     24        (MockWebMediaStreamCenter):
     25        (WebKit::MockWebMediaStreamCenter::MockWebMediaStreamCenter):
     26
    1272012-07-25  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>
    228
  • trunk/Tools/DumpRenderTree/DumpRenderTree.gypi

    r123533 r123627  
    1717            'chromium/MockWebKitPlatformSupport.cpp',
    1818            'chromium/MockWebKitPlatformSupport.h',
     19            'chromium/MockWebMediaStreamCenter.cpp',
     20            'chromium/MockWebMediaStreamCenter.h',
    1921            'chromium/MockWebPrerenderingSupport.cpp',
    2022            'chromium/MockWebPrerenderingSupport.h',
  • trunk/Tools/DumpRenderTree/chromium/MockWebKitPlatformSupport.cpp

    r123533 r123627  
    3232#include "MockWebKitPlatformSupport.h"
    3333
     34#include "MockWebMediaStreamCenter.h"
    3435#include <wtf/Assertions.h>
     36#include <wtf/PassOwnPtr.h>
    3537
    3638using namespace WebKit;
     
    3840PassOwnPtr<MockWebKitPlatformSupport> MockWebKitPlatformSupport::create()
    3941{
    40     return WTF::adoptPtr(new MockWebKitPlatformSupport());
     42    return adoptPtr(new MockWebKitPlatformSupport());
    4143}
    4244
     
    5456}
    5557
    56 WebMediaStreamCenter* MockWebKitPlatformSupport::createMediaStreamCenter(WebMediaStreamCenterClient*)
     58#if ENABLE(MEDIA_STREAM)
     59WebMediaStreamCenter* MockWebKitPlatformSupport::createMediaStreamCenter(WebMediaStreamCenterClient* client)
    5760{
    58     return 0;
     61    if (!m_mockMediaStreamCenter)
     62        m_mockMediaStreamCenter = adoptPtr(new MockWebMediaStreamCenter(client));
     63
     64    return m_mockMediaStreamCenter.get();
    5965}
     66#endif // ENABLE(MEDIA_STREAM)
  • trunk/Tools/DumpRenderTree/chromium/MockWebKitPlatformSupport.h

    r123533 r123627  
    3333
    3434#include <public/Platform.h>
     35#include <wtf/OwnPtr.h>
    3536#include <wtf/PassOwnPtr.h>
    3637
     
    4243    virtual void cryptographicallyRandomValues(unsigned char* buffer, size_t length) OVERRIDE;
    4344
     45#if ENABLE(MEDIA_STREAM)
    4446    virtual WebKit::WebMediaStreamCenter* createMediaStreamCenter(WebKit::WebMediaStreamCenterClient*) OVERRIDE;
     47#endif // ENABLE(MEDIA_STREAM)
    4548
    4649private:
    4750    MockWebKitPlatformSupport();
     51
     52#if ENABLE(MEDIA_STREAM)
     53    OwnPtr<WebKit::WebMediaStreamCenter> m_mockMediaStreamCenter;
     54#endif // ENABLE(MEDIA_STREAM)
    4855};
    4956
  • trunk/Tools/DumpRenderTree/chromium/MockWebMediaStreamCenter.h

    r123626 r123627  
    2929 */
    3030
    31 #ifndef MockWebKitPlatformSupport_h
    32 #define MockWebKitPlatformSupport_h
     31#ifndef MockWebMediaStreamCenter_h
     32#define MockWebMediaStreamCenter_h
    3333
    34 #include <public/Platform.h>
    35 #include <wtf/PassOwnPtr.h>
     34#if ENABLE(MEDIA_STREAM)
     35#include "platform/WebMediaStreamCenter.h"
    3636
    37 class MockWebKitPlatformSupport : public WebKit::Platform {
     37namespace WebKit {
     38class WebMediaStreamCenterClient;
     39};
     40
     41class MockWebMediaStreamCenter : public WebKit::WebMediaStreamCenter {
    3842public:
    39     static PassOwnPtr<MockWebKitPlatformSupport> create();
    40     ~MockWebKitPlatformSupport();
     43    explicit MockWebMediaStreamCenter(WebKit::WebMediaStreamCenterClient*);
    4144
    42     virtual void cryptographicallyRandomValues(unsigned char* buffer, size_t length) OVERRIDE;
    43 
    44     virtual WebKit::WebMediaStreamCenter* createMediaStreamCenter(WebKit::WebMediaStreamCenterClient*) OVERRIDE;
     45    virtual void queryMediaStreamSources(const WebKit::WebMediaStreamSourcesRequest&) OVERRIDE;
     46    virtual void didEnableMediaStreamTrack(const WebKit::WebMediaStreamDescriptor&, const WebKit::WebMediaStreamComponent&) OVERRIDE;
     47    virtual void didDisableMediaStreamTrack(const WebKit::WebMediaStreamDescriptor&, const WebKit::WebMediaStreamComponent&) OVERRIDE;
     48    virtual void didStopLocalMediaStream(const WebKit::WebMediaStreamDescriptor&) OVERRIDE;
     49    virtual void didCreateMediaStream(WebKit::WebMediaStreamDescriptor&) OVERRIDE;
     50    virtual WebKit::WebString constructSDP(const WebKit::WebICECandidateDescriptor&) OVERRIDE;
     51    virtual WebKit::WebString constructSDP(const WebKit::WebSessionDescriptionDescriptor&) OVERRIDE;
    4552
    4653private:
    47     MockWebKitPlatformSupport();
     54    MockWebMediaStreamCenter() { }
    4855};
    4956
    50 #endif // MockWebKitPlatformSupport_h
     57#endif // ENABLE(MEDIA_STREAM)
     58#endif // MockWebMediaStreamCenter_h
     59
Note: See TracChangeset for help on using the changeset viewer.