Changeset 156473 in webkit


Ignore:
Timestamp:
Sep 26, 2013 10:43:07 AM (11 years ago)
Author:
eric.carlson@apple.com
Message:

[MediaStream] Cleanup platform interface
https://bugs.webkit.org/show_bug.cgi?id=121935

Reviewed by Jer Noble.

No new tests, tests will be updated in the next patch.

  • CMakeLists.txt: Remove MediaStreamComponent.cpp.
  • GNUmakefile.list.am: Remove MediaStreamComponent.h|cpp and MediaStreamSourcesQueryClient.h.

Add MediaStreamConstraintsValidationClient.h and MediaStreamCreationClient.h.

  • Modules/mediastream/MediaStream.cpp:

(WebCore::processTrack): Duplicate MediaStreamSource when necessary to work around bug 121954.
(WebCore::createFromSourceVectors): MediaStreamCenter::instance -> MediaStream::sharedStreamCenter.
(WebCore::MediaStream::MediaStream): *Components -> *Streams.
(WebCore::MediaStream::setEnded): New.
(WebCore::MediaStream::stop): MediaStreamCenter::instance -> MediaStream::sharedStreamCenter.
(WebCore::MediaStream::addTrack): Append the track parameter rather than duplicating it, as per spec.
(WebCore::MediaStream::removeTrack): *Components -> *Streams.
(WebCore::MediaStream::trackDidEnd): Renamed from trackEnded.
(WebCore::MediaStream::streamDidEnd): Renamed from streamEnded.
(WebCore::MediaStream::addRemoteSource): Renamed from addRemoteTrack. *Components -> *Streams.
(WebCore::MediaStream::removeRemoteSource): Renamed from removeRemoteTrack. *Components -> *Streams.

  • Modules/mediastream/MediaStream.h:
  • Modules/mediastream/MediaStreamTrack.cpp:

(WebCore::MediaStreamTrack::create): *Component -> *Stream.
(WebCore::MediaStreamTrack::MediaStreamTrack): Don't assume source is valid.
(WebCore::MediaStreamTrack::~MediaStreamTrack): Ditto.
(WebCore::MediaStreamTrack::kind): Ditto. AtomicString -> const AtomicString&.
(WebCore::MediaStreamTrack::setSource): Moved from .h file.
(WebCore::MediaStreamTrack::id): Don't assume source is valid. Create ID when the source doesn't have one.
(WebCore::MediaStreamTrack::label): Don't assume source is valid.
(WebCore::MediaStreamTrack::enabled):
(WebCore::MediaStreamTrack::setEnabled): *Component -> *Stream. MediaStreamCenter::instance -> MediaStreamCenter::shared.
(WebCore::MediaStreamTrack::readyState): "muted" is not a readyState, but "new" is.
(WebCore::MediaStreamTrack::getSources): MediaStreamCenter::instance -> MediaStreamCenter::shared.
(WebCore::MediaStreamTrack::ended): *Component -> *Stream.
(WebCore::MediaStreamTrack::sourceChangedState): Dispatch "started" and "unmuted" events.
(WebCore::MediaStreamTrack::trackDidEnd): Renamed from didEndTrack. m_component -> m_source.

  • Modules/mediastream/MediaStreamTrack.h:
  • Modules/mediastream/RTCDTMFSender.cpp:

(WebCore::RTCDTMFSender::create): track->component() -> track->source();

  • Modules/mediastream/RTCPeerConnection.cpp:

(WebCore::RTCPeerConnection::didRemoveRemoteStream): Ditto.

  • Modules/mediastream/RTCStatsRequestImpl.cpp:

(WebCore::RTCStatsRequestImpl::RTCStatsRequestImpl): Ditto.
(WebCore::RTCStatsRequestImpl::component): Removed, it was unused.

  • Modules/mediastream/RTCStatsRequestImpl.h:
  • Modules/mediastream/UserMediaClient.h:
  • Modules/mediastream/UserMediaController.h:

(WebCore::UserMediaController::requestPermission): Renamed from requestUserMedia, get rid of source

vector parameters.

(WebCore::UserMediaController::cancelRequest): Renamed from cancelUserMediaRequest.

  • Modules/mediastream/UserMediaRequest.cpp:

(WebCore::parseOptions): MediaConstraintsImpl -> MediaConstraints.
(WebCore::UserMediaRequest::create): Ditto.
(WebCore::UserMediaRequest::UserMediaRequest): Ditto.
(WebCore::UserMediaRequest::securityOrigin): New.
(WebCore::UserMediaRequest::start): Request constraint validation.
(WebCore::UserMediaRequest::constraintsValidated): New. Callback from media engine when constraints

can be supported.

(WebCore::UserMediaRequest::requestPermission): New. Ask user media client for permission to access media.
(WebCore::UserMediaRequest::userMediaAccessGranted): New. Access has been granted.
(WebCore::UserMediaRequest::createMediaStream): New. Allowed to access media, ask media engine

to create stream sources.

(WebCore::UserMediaRequest::userMediaAccessDenied): New. User media client has denied access request.
(WebCore::UserMediaRequest::constraintsInvalid): New. Media engine can not support constraints.
(WebCore::UserMediaRequest::didCreateStream): New. Media engine has created stream sources.
(WebCore::UserMediaRequest::callSuccessHandler): New. Create stream from sources and call success handler.
(WebCore::UserMediaRequest::failedToCreateStreamWithConstraintsError): Renamed from constraintFailure.
(WebCore::UserMediaRequest::failedToCreateStreamWithPermissionError): Renamed from permissionFailure.
(WebCore::UserMediaRequest::callErrorHandler):
(WebCore::UserMediaRequest::contextDestroyed): cancelUserMediaRequest -> cancelRequest.

  • Modules/mediastream/UserMediaRequest.h:
  • Modules/webaudio/AudioContext.cpp:

(WebCore::AudioContext::createMediaStreamSource): localAudio->component()->source() -> localAudio->source().

  • Modules/webaudio/MediaStreamAudioDestinationNode.cpp:

(WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode): MediaStreamSource::TypeAudio ->

MediaStreamSource::Audio, MediaStreamSource::ReadyStateLive -> MediaStreamSource::Live.
MediaStreamCenter::instance -> MediaStreamCenter::shared.

  • WebCore.exp.in: Export new symbols.
  • WebCore.xcodeproj/project.pbxproj: Add new files and remove deleted files.
  • dom/EventNames.h: Define "started" event.
  • platform/mediastream/MediaStreamCenter.cpp:

(WebCore::mediaStreamCenterOverride): Make it possible to override the shared stream center. Will

be used for testing in a later patch.

(WebCore::MediaStreamCenter::shared): Renamed from instance. Return current stream center.
(WebCore::MediaStreamCenter::setSharedStreamCenter): Override current stream center.
(WebCore::MediaStreamCenter::endLocalMediaStream): Never call the descriptor client, always call

the descriptor and let it deal with the client.

  • platform/mediastream/MediaStreamCenter.h:
  • platform/mediastream/MediaStreamComponent.cpp: Removed.
  • platform/mediastream/MediaStreamComponent.h: Removed.
  • platform/mediastream/MediaStreamConstraintsValidationClient.h: Added.
  • platform/mediastream/MediaStreamCreationClient.h: Added.
  • platform/mediastream/MediaStreamDescriptor.cpp:

(WebCore::MediaStreamDescriptor::addSource): *Component -> *Source.
(WebCore::MediaStreamDescriptor::removeSource): Ditto.
(WebCore::MediaStreamDescriptor::addRemoteSource): Ditto.
(WebCore::MediaStreamDescriptor::removeRemoteSource): Ditto.
(WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Ditto.
(WebCore::MediaStreamDescriptor::setEnded): Ditto. Set source readyStates to Ended.

  • platform/mediastream/MediaStreamDescriptor.h:
  • platform/mediastream/MediaStreamSource.cpp:

(WebCore::MediaStreamSource::MediaStreamSource): Initialize new member variables.
(WebCore::MediaStreamSource::setReadyState): Early return when the state hasn't changed.
(WebCore::MediaStreamSource::setStream): New.
(WebCore::MediaStreamSource::setMuted): New.

  • platform/mediastream/MediaStreamSource.h:
  • platform/mediastream/MediaStreamSourcesQueryClient.h: Removed.
  • platform/mediastream/RTCPeerConnectionHandler.h:
  • platform/mediastream/RTCStatsRequest.h:
  • platform/mediastream/blackberry/MediaStreamCenterBlackBerry.cpp: Update for new MediaStreamCenter API.
  • platform/mediastream/blackberry/MediaStreamCenterBlackBerry.h:
  • platform/mediastream/gstreamer/MediaStreamCenterGStreamer.cpp: Ditto.
  • platform/mediastream/gstreamer/MediaStreamCenterGStreamer.h:
  • platform/mediastream/mac/MediaStreamCenterMac.cpp: Ditto.
  • platform/mediastream/mac/MediaStreamCenterMac.h:
Location:
trunk/Source/WebCore
Files:
2 added
3 deleted
34 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/CMakeLists.txt

    r156406 r156473  
    20262026
    20272027    platform/mediastream/MediaStreamCenter.cpp
    2028     platform/mediastream/MediaStreamComponent.cpp
    20292028    platform/mediastream/MediaStreamDescriptor.cpp
    20302029    platform/mediastream/MediaStreamSource.cpp
  • trunk/Source/WebCore/ChangeLog

    r156472 r156473  
    1 2013-09-26  Tim Horton  <timothy_horton@apple.com>
    2 
    3         Tiled drawing should not imply threaded scrolling
    4         https://bugs.webkit.org/show_bug.cgi?id=121874
    5         <rdar://problem/15071494>
    6 
    7         Reviewed by Sam Weinig.
    8 
    9         No new tests; a near-future patch is going to put the majority of layout
    10         tests into the tiled-drawing-without-threaded-scrolling mode.
    11 
    12         * page/ChromeClient.h:
    13         (WebCore::ChromeClient::shouldUseTiledBackingForFrame):
    14         Add a ChromeClient callback to determine whether a given frame wants a TiledBacking for its contents.
    15 
    16         * page/FrameView.h:
    17         * WebCore.exp.in:
    18         Make isMainFrameView public and export it for use in WebKit2.
    19 
    20         * rendering/RenderLayerBacking.cpp:
    21         (WebCore::RenderLayerBacking::RenderLayerBacking):
    22         Make use of shouldUseTiledBackingForFrame instead of predicating the
    23         main frame using a tile cache on whether we have a scrolling coordinator.
    24 
    25         * rendering/RenderLayerCompositor.cpp:
    26         (WebCore::RenderLayerCompositor::mainFrameBackingIsTiled): Added.
    27 
    28         (WebCore::RenderLayerCompositor::shouldCompositeOverflowControls):
    29         (WebCore::RenderLayerCompositor::requiresOverhangAreasLayer):
    30         (WebCore::RenderLayerCompositor::requiresContentShadowLayer):
    31         All of these checks for existence of a scrollingCoordinator should actually
    32         key off whether we're using tiled drawing at the root; they have nothing
    33         to do with threaded scrolling.
    34 
    35         * rendering/RenderLayerCompositor.h:
    36 
    37 2013-09-26  Brady Eidson  <beidson@apple.com>
    38 
    39         Mark IDBDatabase "FINAL" now that http://webkit.org/b/121747 is fixed.
    40 
    41         Rubberstamped by Andreas Kling
    42 
    43         * Modules/indexeddb/IDBDatabase.h: Mark this class FINAL.
     12013-09-26  Eric Carlson  <eric.carlson@apple.com>
     2
     3        [MediaStream] Cleanup platform interface
     4        https://bugs.webkit.org/show_bug.cgi?id=121935
     5
     6        Reviewed by Jer Noble.
     7
     8        No new tests, tests will be updated in the next patch.
     9
     10        * CMakeLists.txt: Remove MediaStreamComponent.cpp.
     11        * GNUmakefile.list.am: Remove MediaStreamComponent.h|cpp and MediaStreamSourcesQueryClient.h.
     12            Add MediaStreamConstraintsValidationClient.h and MediaStreamCreationClient.h.
     13
     14        * Modules/mediastream/MediaStream.cpp:
     15        (WebCore::processTrack): Duplicate MediaStreamSource when necessary to work around bug 121954.
     16        (WebCore::createFromSourceVectors): MediaStreamCenter::instance -> MediaStream::sharedStreamCenter.
     17        (WebCore::MediaStream::MediaStream): *Components -> *Streams.
     18        (WebCore::MediaStream::setEnded): New.
     19        (WebCore::MediaStream::stop):  MediaStreamCenter::instance -> MediaStream::sharedStreamCenter.
     20        (WebCore::MediaStream::addTrack): Append the track parameter rather than duplicating it, as per spec.
     21        (WebCore::MediaStream::removeTrack): *Components -> *Streams.
     22        (WebCore::MediaStream::trackDidEnd): Renamed from trackEnded.
     23        (WebCore::MediaStream::streamDidEnd): Renamed from streamEnded.
     24        (WebCore::MediaStream::addRemoteSource): Renamed from addRemoteTrack. *Components -> *Streams.
     25        (WebCore::MediaStream::removeRemoteSource): Renamed from removeRemoteTrack. *Components -> *Streams.
     26        * Modules/mediastream/MediaStream.h:
     27
     28        * Modules/mediastream/MediaStreamTrack.cpp:
     29        (WebCore::MediaStreamTrack::create): *Component -> *Stream.
     30        (WebCore::MediaStreamTrack::MediaStreamTrack): Don't assume source is valid.
     31        (WebCore::MediaStreamTrack::~MediaStreamTrack): Ditto.
     32        (WebCore::MediaStreamTrack::kind): Ditto. AtomicString -> const AtomicString&.
     33        (WebCore::MediaStreamTrack::setSource): Moved from .h file.
     34        (WebCore::MediaStreamTrack::id): Don't assume source is valid. Create ID when the source doesn't have one.
     35        (WebCore::MediaStreamTrack::label): Don't assume source is valid.
     36        (WebCore::MediaStreamTrack::enabled):
     37        (WebCore::MediaStreamTrack::setEnabled): *Component -> *Stream. MediaStreamCenter::instance -> MediaStreamCenter::shared.
     38        (WebCore::MediaStreamTrack::readyState): "muted" is not a readyState, but "new" is.
     39        (WebCore::MediaStreamTrack::getSources): MediaStreamCenter::instance -> MediaStreamCenter::shared.
     40        (WebCore::MediaStreamTrack::ended): *Component -> *Stream.
     41        (WebCore::MediaStreamTrack::sourceChangedState): Dispatch "started" and "unmuted" events.
     42        (WebCore::MediaStreamTrack::trackDidEnd): Renamed from didEndTrack. m_component -> m_source.
     43        * Modules/mediastream/MediaStreamTrack.h:
     44
     45        * Modules/mediastream/RTCDTMFSender.cpp:
     46        (WebCore::RTCDTMFSender::create): track->component() -> track->source();
     47
     48        * Modules/mediastream/RTCPeerConnection.cpp:
     49        (WebCore::RTCPeerConnection::didRemoveRemoteStream): Ditto.
     50
     51        * Modules/mediastream/RTCStatsRequestImpl.cpp:
     52        (WebCore::RTCStatsRequestImpl::RTCStatsRequestImpl): Ditto.
     53        (WebCore::RTCStatsRequestImpl::component): Removed, it was unused.
     54        * Modules/mediastream/RTCStatsRequestImpl.h:
     55
     56        * Modules/mediastream/UserMediaClient.h:
     57        * Modules/mediastream/UserMediaController.h:
     58        (WebCore::UserMediaController::requestPermission): Renamed from requestUserMedia, get rid of source
     59            vector parameters.
     60        (WebCore::UserMediaController::cancelRequest): Renamed from cancelUserMediaRequest.
     61
     62        * Modules/mediastream/UserMediaRequest.cpp:
     63        (WebCore::parseOptions): MediaConstraintsImpl -> MediaConstraints.
     64        (WebCore::UserMediaRequest::create): Ditto.
     65        (WebCore::UserMediaRequest::UserMediaRequest): Ditto.
     66        (WebCore::UserMediaRequest::securityOrigin): New.
     67        (WebCore::UserMediaRequest::start): Request constraint validation.
     68        (WebCore::UserMediaRequest::constraintsValidated): New. Callback from media engine when constraints
     69            can be supported.
     70        (WebCore::UserMediaRequest::requestPermission): New. Ask user media client for permission to access media.
     71        (WebCore::UserMediaRequest::userMediaAccessGranted): New. Access has been granted.
     72        (WebCore::UserMediaRequest::createMediaStream): New. Allowed to access media, ask media engine
     73            to create stream sources.
     74        (WebCore::UserMediaRequest::userMediaAccessDenied): New. User media client has denied access request.
     75        (WebCore::UserMediaRequest::constraintsInvalid): New. Media engine can not support constraints.
     76        (WebCore::UserMediaRequest::didCreateStream): New. Media engine has created stream sources.
     77        (WebCore::UserMediaRequest::callSuccessHandler): New. Create stream from sources and call success handler.
     78        (WebCore::UserMediaRequest::failedToCreateStreamWithConstraintsError): Renamed from constraintFailure.
     79        (WebCore::UserMediaRequest::failedToCreateStreamWithPermissionError): Renamed from permissionFailure.
     80        (WebCore::UserMediaRequest::callErrorHandler):
     81        (WebCore::UserMediaRequest::contextDestroyed): cancelUserMediaRequest -> cancelRequest.
     82        * Modules/mediastream/UserMediaRequest.h:
     83
     84        * Modules/webaudio/AudioContext.cpp:
     85        (WebCore::AudioContext::createMediaStreamSource): localAudio->component()->source() -> localAudio->source().
     86
     87        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
     88        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode): MediaStreamSource::TypeAudio ->
     89            MediaStreamSource::Audio, MediaStreamSource::ReadyStateLive -> MediaStreamSource::Live.
     90            MediaStreamCenter::instance -> MediaStreamCenter::shared.
     91
     92        * WebCore.exp.in: Export new symbols.
     93
     94        * WebCore.xcodeproj/project.pbxproj: Add new files and remove deleted files.
     95
     96        * dom/EventNames.h: Define "started" event.
     97
     98        * platform/mediastream/MediaStreamCenter.cpp:
     99        (WebCore::mediaStreamCenterOverride): Make it possible to override the shared stream center. Will
     100            be used for testing in a later patch.
     101        (WebCore::MediaStreamCenter::shared): Renamed from instance. Return current stream center.
     102        (WebCore::MediaStreamCenter::setSharedStreamCenter): Override current stream center.
     103        (WebCore::MediaStreamCenter::endLocalMediaStream): Never call the descriptor client, always call
     104            the descriptor and let it deal with the client.
     105        * platform/mediastream/MediaStreamCenter.h:
     106
     107        * platform/mediastream/MediaStreamComponent.cpp: Removed.
     108        * platform/mediastream/MediaStreamComponent.h: Removed.
     109
     110        * platform/mediastream/MediaStreamConstraintsValidationClient.h: Added.
     111        * platform/mediastream/MediaStreamCreationClient.h: Added.
     112
     113        * platform/mediastream/MediaStreamDescriptor.cpp:
     114        (WebCore::MediaStreamDescriptor::addSource): *Component -> *Source.
     115        (WebCore::MediaStreamDescriptor::removeSource): Ditto.
     116        (WebCore::MediaStreamDescriptor::addRemoteSource): Ditto.
     117        (WebCore::MediaStreamDescriptor::removeRemoteSource): Ditto.
     118        (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Ditto.
     119        (WebCore::MediaStreamDescriptor::setEnded): Ditto. Set source readyStates to Ended.
     120        * platform/mediastream/MediaStreamDescriptor.h:
     121
     122        * platform/mediastream/MediaStreamSource.cpp:
     123        (WebCore::MediaStreamSource::MediaStreamSource): Initialize new member variables.
     124        (WebCore::MediaStreamSource::setReadyState): Early return when the state hasn't changed.
     125        (WebCore::MediaStreamSource::setStream): New.
     126        (WebCore::MediaStreamSource::setMuted): New.
     127        * platform/mediastream/MediaStreamSource.h:
     128
     129        * platform/mediastream/MediaStreamSourcesQueryClient.h: Removed.
     130
     131        * platform/mediastream/RTCPeerConnectionHandler.h:
     132        * platform/mediastream/RTCStatsRequest.h:
     133
     134        * platform/mediastream/blackberry/MediaStreamCenterBlackBerry.cpp: Update for new MediaStreamCenter API.
     135        * platform/mediastream/blackberry/MediaStreamCenterBlackBerry.h:
     136
     137        * platform/mediastream/gstreamer/MediaStreamCenterGStreamer.cpp: Ditto.
     138        * platform/mediastream/gstreamer/MediaStreamCenterGStreamer.h:
     139
     140        * platform/mediastream/mac/MediaStreamCenterMac.cpp: Ditto.
     141        * platform/mediastream/mac/MediaStreamCenterMac.h:
    44142
    451432013-09-26  Gurpreet Kaur  <k.gurpreet@samsung.com>
  • trunk/Source/WebCore/GNUmakefile.list.am

    r156458 r156473  
    54555455        Source/WebCore/platform/mediastream/MediaStreamCenter.cpp \
    54565456        Source/WebCore/platform/mediastream/MediaStreamCenter.h \
    5457         Source/WebCore/platform/mediastream/MediaStreamComponent.cpp \
    5458         Source/WebCore/platform/mediastream/MediaStreamComponent.h \
     5457        Source/WebCore/platform/mediastream/MediaStreamConstraintsValidationClient.h \
     5458        Source/WebCore/platform/mediastream/MediaStreamCreationClient.h \
    54595459        Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp \
    54605460        Source/WebCore/platform/mediastream/MediaStreamDescriptor.h \
    54615461        Source/WebCore/platform/mediastream/MediaStreamSource.cpp \
    54625462        Source/WebCore/platform/mediastream/MediaStreamSource.h \
    5463         Source/WebCore/platform/mediastream/MediaStreamSourcesQueryClient.h \
    54645463        Source/WebCore/platform/mediastream/MediaStreamTrackSourcesRequestClient.h \
    54655464        Source/WebCore/platform/mediastream/RTCConfiguration.h \
  • trunk/Source/WebCore/Modules/mediastream/MediaStream.cpp

    r156413 r156473  
    22 * Copyright (C) 2011 Google Inc. All rights reserved.
    33 * Copyright (C) 2011, 2012 Ericsson AB. All rights reserved.
     4 * Copyright (C) 2013 Apple Inc. All rights reserved.
    45 *
    56 * Redistribution and use in source and binary forms, with or without
     
    3536#include "MediaStreamSource.h"
    3637#include "MediaStreamTrackEvent.h"
     38#include <wtf/NeverDestroyed.h>
    3739
    3840namespace WebCore {
     
    5254        return;
    5355
    54     MediaStreamSource* source = track->component()->source();
    55     if (!containsSource(sourceVector, source))
    56         sourceVector.append(source);
     56    MediaStreamSource* source = track->source();
     57    if (!containsSource(sourceVector, source)) {
     58        if (source->stream()) {
     59            // FIXME: this should not be necessary because tracks and streams must be able to share sources, but our code
     60            // currenlty assumes each source is attached to just one track.
     61            // https://bugs.webkit.org/show_bug.cgi?id=121954
     62            sourceVector.append(MediaStreamSource::create(source->id(), source->type(), source->name(), source->readyState(), source->requiresAudioConsumer()).get());
     63        } else
     64            sourceVector.append(source);
     65    }
    5766}
    5867
     
    6069{
    6170    RefPtr<MediaStreamDescriptor> descriptor = MediaStreamDescriptor::create(audioSources, videoSources);
    62     MediaStreamCenter::instance().didCreateMediaStream(descriptor.get());
     71    MediaStreamCenter::shared().didCreateMediaStream(descriptor.get());
    6372
    6473    return MediaStream::create(context, descriptor.release());
     
    113122    m_descriptor->setClient(this);
    114123
    115     size_t numberOfAudioTracks = m_descriptor->numberOfAudioComponents();
     124    size_t numberOfAudioTracks = m_descriptor->numberOfAudioStreams();
    116125    m_audioTracks.reserveCapacity(numberOfAudioTracks);
    117126    for (size_t i = 0; i < numberOfAudioTracks; i++)
    118         m_audioTracks.append(MediaStreamTrack::create(context, m_descriptor->audioComponent(i)));
    119 
    120     size_t numberOfVideoTracks = m_descriptor->numberOfVideoComponents();
     127        m_audioTracks.append(MediaStreamTrack::create(context, m_descriptor->audioStreams(i)));
     128
     129    size_t numberOfVideoTracks = m_descriptor->numberOfVideoStreams();
    121130    m_videoTracks.reserveCapacity(numberOfVideoTracks);
    122131    for (size_t i = 0; i < numberOfVideoTracks; i++)
    123         m_videoTracks.append(MediaStreamTrack::create(context, m_descriptor->videoComponent(i)));
     132        m_videoTracks.append(MediaStreamTrack::create(context, m_descriptor->videoStreams(i)));
    124133}
    125134
     
    134143}
    135144
     145void MediaStream::setEnded()
     146{
     147    if (ended())
     148        return;
     149    m_descriptor->setEnded();
     150}
     151
    136152void MediaStream::stop()
    137153{
     
    139155        return;
    140156
    141     MediaStreamCenter::instance().didStopLocalMediaStream(descriptor());
    142     streamEnded();
     157    MediaStreamCenter::shared().didStopLocalMediaStream(descriptor());
     158    setEnded();
    143159}
    144160
     
    156172
    157173    RefPtr<MediaStreamTrack> track = prpTrack;
    158 
    159174    if (getTrackById(track->id()))
    160175        return;
    161176
    162     RefPtr<MediaStreamComponent> component = MediaStreamComponent::create(m_descriptor.get(), track->component()->source());
    163     RefPtr<MediaStreamTrack> newTrack = MediaStreamTrack::create(scriptExecutionContext(), component.get());
    164 
    165     switch (component->source()->type()) {
    166     case MediaStreamSource::TypeAudio:
    167         m_audioTracks.append(newTrack);
    168         break;
    169     case MediaStreamSource::TypeVideo:
    170         m_videoTracks.append(newTrack);
    171         break;
    172     }
    173 
    174     m_descriptor->addComponent(component.release());
    175     MediaStreamCenter::instance().didAddMediaStreamTrack(m_descriptor.get(), newTrack->component());
     177    switch (track->source()->type()) {
     178    case MediaStreamSource::Audio:
     179        m_audioTracks.append(track);
     180        break;
     181    case MediaStreamSource::Video:
     182        m_videoTracks.append(track);
     183        break;
     184    }
     185
     186    MediaStreamCenter::shared().didAddMediaStreamTrack(track->source());
    176187}
    177188
     
    191202
    192203    size_t pos = notFound;
    193     switch (track->component()->source()->type()) {
    194     case MediaStreamSource::TypeAudio:
     204    switch (track->source()->type()) {
     205    case MediaStreamSource::Audio:
    195206        pos = m_audioTracks.find(track);
    196207        if (pos != notFound)
    197208            m_audioTracks.remove(pos);
    198209        break;
    199     case MediaStreamSource::TypeVideo:
     210    case MediaStreamSource::Video:
    200211        pos = m_videoTracks.find(track);
    201212        if (pos != notFound)
     
    207218        return;
    208219
    209     m_descriptor->removeComponent(track->component());
     220    m_descriptor->removeSource(track->source());
    210221
    211222    if (!m_audioTracks.size() && !m_videoTracks.size())
    212         m_descriptor->setEnded();
    213 
    214     MediaStreamCenter::instance().didRemoveMediaStreamTrack(m_descriptor.get(), track->component());
     223        setEnded();
     224
     225    MediaStreamCenter::shared().didRemoveMediaStreamTrack(track->source());
    215226}
    216227
     
    230241}
    231242
    232 void MediaStream::trackEnded()
     243void MediaStream::trackDidEnd()
    233244{
    234245    for (size_t i = 0; i < m_audioTracks.size(); ++i)
     
    240251            return;
    241252   
    242     streamEnded();
    243 }
    244 
    245 void MediaStream::streamEnded()
    246 {
    247     if (ended())
    248         return;
    249 
    250     m_descriptor->setEnded();
     253    setEnded();
     254}
     255
     256void MediaStream::streamDidEnd()
     257{
     258    if (ended())
     259        return;
     260
    251261    scheduleDispatchEvent(Event::create(eventNames().endedEvent, false, false));
    252262}
     
    258268}
    259269
    260 void MediaStream::addRemoteTrack(MediaStreamComponent* component)
    261 {
    262     ASSERT(component && !component->stream());
    263     if (ended())
    264         return;
    265 
    266     component->setStream(descriptor());
    267 
    268     RefPtr<MediaStreamTrack> track = MediaStreamTrack::create(scriptExecutionContext(), component);
    269     switch (component->source()->type()) {
    270     case MediaStreamSource::TypeAudio:
     270void MediaStream::addRemoteSource(MediaStreamSource* source)
     271{
     272    ASSERT(source);
     273    if (ended())
     274        return;
     275
     276    source->setStream(descriptor());
     277
     278    RefPtr<MediaStreamTrack> track = MediaStreamTrack::create(scriptExecutionContext(), source);
     279    switch (source->type()) {
     280    case MediaStreamSource::Audio:
    271281        m_audioTracks.append(track);
    272282        break;
    273     case MediaStreamSource::TypeVideo:
     283    case MediaStreamSource::Video:
    274284        m_videoTracks.append(track);
    275285        break;
    276286    }
    277     m_descriptor->addComponent(component);
     287    m_descriptor->addSource(source);
    278288
    279289    scheduleDispatchEvent(MediaStreamTrackEvent::create(eventNames().addtrackEvent, false, false, track));
    280290}
    281291
    282 void MediaStream::removeRemoteTrack(MediaStreamComponent* component)
     292void MediaStream::removeRemoteSource(MediaStreamSource* source)
    283293{
    284294    if (ended())
     
    286296
    287297    MediaStreamTrackVector* tracks = 0;
    288     switch (component->source()->type()) {
    289     case MediaStreamSource::TypeAudio:
     298    switch (source->type()) {
     299    case MediaStreamSource::Audio:
    290300        tracks = &m_audioTracks;
    291301        break;
    292     case MediaStreamSource::TypeVideo:
     302    case MediaStreamSource::Video:
    293303        tracks = &m_videoTracks;
    294304        break;
     
    297307    size_t index = notFound;
    298308    for (size_t i = 0; i < tracks->size(); ++i) {
    299         if ((*tracks)[i]->component() == component) {
     309        if ((*tracks)[i]->source() == source) {
    300310            index = i;
    301311            break;
     
    305315        return;
    306316
    307     m_descriptor->removeComponent(component);
     317    m_descriptor->removeSource(source);
    308318
    309319    RefPtr<MediaStreamTrack> track = (*tracks)[index];
  • trunk/Source/WebCore/Modules/mediastream/MediaStream.h

    r156413 r156473  
    22 * Copyright (C) 2011 Google Inc. All rights reserved.
    33 * Copyright (C) 2011 Ericsson AB. All rights reserved.
     4 * Copyright (C) 2013 Apple Inc. All rights reserved.
    45 *
    56 * Redistribution and use in source and binary forms, with or without
     
    4243namespace WebCore {
    4344
     45class MediaStreamCenter;
     46
    4447// FIXME: This class should be marked FINAL once <http://webkit.org/b/121747> is fixed.
    4548class MediaStream : public RefCounted<MediaStream>, public URLRegistrable, public ScriptWrappable, public MediaStreamDescriptorClient, public EventTargetWithInlineData, public ContextDestructionObserver {
     
    6164
    6265    bool ended() const;
     66    void setEnded();
    6367    void stop();
    6468
     
    6670    DEFINE_ATTRIBUTE_EVENT_LISTENER(addtrack);
    6771    DEFINE_ATTRIBUTE_EVENT_LISTENER(removetrack);
    68 
    69     // MediaStreamDescriptorClient
    70     virtual void trackEnded() OVERRIDE;
    71     virtual void streamEnded() OVERRIDE;
    7272
    7373    MediaStreamDescriptor* descriptor() const { return m_descriptor.get(); }
     
    9090
    9191private:
     92    // MediaStreamDescriptorClient
     93    virtual void trackDidEnd() OVERRIDE;
     94    virtual void streamDidEnd() OVERRIDE;
     95   
    9296    // EventTarget
    9397    virtual void refEventTarget() OVERRIDE FINAL { ref(); }
     
    9599
    96100    // MediaStreamDescriptorClient
    97     virtual void addRemoteTrack(MediaStreamComponent*) OVERRIDE;
    98     virtual void removeRemoteTrack(MediaStreamComponent*) OVERRIDE;
     101    virtual void addRemoteSource(MediaStreamSource*) OVERRIDE;
     102    virtual void removeRemoteSource(MediaStreamSource*) OVERRIDE;
    99103
    100104    void scheduleDispatchEvent(PassRefPtr<Event>);
     
    103107    bool m_stopped;
    104108
     109    RefPtr<MediaStreamDescriptor> m_descriptor;
    105110    MediaStreamTrackVector m_audioTracks;
    106111    MediaStreamTrackVector m_videoTracks;
    107     RefPtr<MediaStreamDescriptor> m_descriptor;
    108112
    109113    Timer<MediaStream> m_scheduledEventTimer;
    110     Vector<RefPtr<Event> > m_scheduledEvents;
     114    Vector<RefPtr<Event>> m_scheduledEvents;
    111115};
    112116
  • trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp

    r156413 r156473  
    22 * Copyright (C) 2011 Google Inc. All rights reserved.
    33 * Copyright (C) 2011 Ericsson AB. All rights reserved.
     4 * Copyright (C) 2013 Apple Inc. All rights reserved.
    45 *
    56 * Redistribution and use in source and binary forms, with or without
     
    2930#if ENABLE(MEDIA_STREAM)
    3031
     32#include "Dictionary.h"
    3133#include "Event.h"
    3234#include "ExceptionCode.h"
     35#include "MediaStream.h"
    3336#include "MediaStreamCenter.h"
    34 #include "MediaStreamComponent.h"
     37#include "MediaStreamDescriptor.h"
    3538#include "MediaStreamTrackSourcesCallback.h"
    3639#include "MediaStreamTrackSourcesRequest.h"
     40#include "UUID.h"
    3741#include <wtf/NeverDestroyed.h>
    3842
    3943namespace WebCore {
    4044
    41 PassRefPtr<MediaStreamTrack> MediaStreamTrack::create(ScriptExecutionContext* context, MediaStreamComponent* component)
    42 {
    43     RefPtr<MediaStreamTrack> track = adoptRef(new MediaStreamTrack(context, component));
    44     track->suspendIfNeeded();
     45PassRefPtr<MediaStreamTrack> MediaStreamTrack::create(ScriptExecutionContext* context, const Dictionary& videoConstraints)
     46{
     47    RefPtr<MediaStreamTrack> track = adoptRef(new MediaStreamTrack(context, 0, &videoConstraints));
    4548    return track.release();
    4649}
    4750
    48 MediaStreamTrack::MediaStreamTrack(ScriptExecutionContext* context, MediaStreamComponent* component)
     51PassRefPtr<MediaStreamTrack> MediaStreamTrack::create(ScriptExecutionContext* context, MediaStreamSource* source)
     52{
     53    RefPtr<MediaStreamTrack> track = adoptRef(new MediaStreamTrack(context, source, 0));
     54    return track.release();
     55}
     56
     57MediaStreamTrack::MediaStreamTrack(ScriptExecutionContext* context, MediaStreamSource* source, const Dictionary*)
    4958    : ActiveDOMObject(context)
    50     , m_component(component)
     59    , m_source(source)
     60    , m_readyState(MediaStreamSource::New)
    5161    , m_stopped(false)
    52 {
    53     m_component->source()->addObserver(this);
     62    , m_enabled(true)
     63    , m_muted(false)
     64{
     65    suspendIfNeeded();
     66    if (m_source) {
     67        m_source->addObserver(this);
     68        m_muted = m_source->muted();
     69    }
    5470}
    5571
    5672MediaStreamTrack::~MediaStreamTrack()
    5773{
    58     m_component->source()->removeObserver(this);
    59 }
    60 
    61 AtomicString MediaStreamTrack::kind() const
    62 {
     74    if (m_source)
     75        m_source->removeObserver(this);
     76}
     77
     78const AtomicString& MediaStreamTrack::kind() const
     79{
     80    if (!m_source)
     81        return emptyAtom;
     82
    6383    static NeverDestroyed<AtomicString> audioKind("audio", AtomicString::ConstructFromLiteral);
    6484    static NeverDestroyed<AtomicString> videoKind("video", AtomicString::ConstructFromLiteral);
    6585
    66     switch (m_component->source()->type()) {
    67     case MediaStreamSource::TypeAudio:
     86    switch (m_source->type()) {
     87    case MediaStreamSource::Audio:
    6888        return audioKind;
    69     case MediaStreamSource::TypeVideo:
     89    case MediaStreamSource::Video:
    7090        return videoKind;
    7191    }
     
    7595}
    7696
    77 String MediaStreamTrack::id() const
    78 {
    79     return m_component->id();
    80 }
    81 
    82 String MediaStreamTrack::label() const
    83 {
    84     return m_component->source()->name();
     97void MediaStreamTrack::setSource(MediaStreamSource* source)
     98{
     99    ASSERT(source == m_source || !m_source);
     100    m_source = source;
     101}
     102
     103const String& MediaStreamTrack::id() const
     104{
     105    if (!m_id.isEmpty())
     106        return m_id;
     107
     108    if (!m_source)
     109        return emptyString();
     110
     111    const String& id = m_source->id();
     112    if (!id.isEmpty())
     113        return id;
     114
     115    // The spec says:
     116    //   Unless a MediaStreamTrack object is created as a part a of special purpose algorithm that
     117    //   specifies how the track id must be initialized, the user agent must generate a globally
     118    //   unique identifier string and initialize the object's id attribute to that string.
     119    // so generate a UUID if the source doesn't have an ID.
     120    m_id = createCanonicalUUIDString();
     121    return m_id;
     122}
     123
     124const String& MediaStreamTrack::label() const
     125{
     126    if (m_source)
     127        return m_source->name();
     128    return emptyString();
    85129}
    86130
    87131bool MediaStreamTrack::enabled() const
    88132{
    89     return m_component->enabled();
     133    return m_enabled;
    90134}
    91135
    92136void MediaStreamTrack::setEnabled(bool enabled)
    93137{
    94     if (m_stopped || enabled == m_component->enabled())
    95         return;
    96 
    97     m_component->setEnabled(enabled);
    98 
    99     if (m_component->stream()->ended())
    100         return;
    101 
    102     MediaStreamCenter::instance().didSetMediaStreamTrackEnabled(m_component->stream(), m_component.get());
    103 }
    104 
    105 AtomicString MediaStreamTrack::readyState() const
     138    if (m_stopped)
     139        return;
     140   
     141    m_enabled = enabled;
     142
     143    if (!m_source || enabled == m_source->enabled())
     144        return;
     145
     146    m_source->setEnabled(enabled);
     147
     148    if (m_source->stream()->ended())
     149        return;
     150
     151    MediaStreamCenter::shared().didSetMediaStreamTrackEnabled(m_source.get());
     152}
     153
     154const AtomicString& MediaStreamTrack::readyState() const
    106155{
    107156    static NeverDestroyed<AtomicString> ended("ended", AtomicString::ConstructFromLiteral);
    108157    static NeverDestroyed<AtomicString> live("live", AtomicString::ConstructFromLiteral);
    109     static NeverDestroyed<AtomicString> muted("muted", AtomicString::ConstructFromLiteral);
     158    static NeverDestroyed<AtomicString> newState("new", AtomicString::ConstructFromLiteral);
     159
     160    if (!m_source)
     161        return newState;
    110162
    111163    if (m_stopped)
    112164        return ended;
    113165
    114     switch (m_component->source()->readyState()) {
    115     case MediaStreamSource::ReadyStateLive:
     166    switch (m_source->readyState()) {
     167    case MediaStreamSource::Live:
    116168        return live;
    117     case MediaStreamSource::ReadyStateMuted:
    118         return muted;
    119     case MediaStreamSource::ReadyStateEnded:
     169    case MediaStreamSource::New:
     170        return newState;
     171    case MediaStreamSource::Ended:
    120172        return ended;
    121173    }
     
    128180{
    129181    RefPtr<MediaStreamTrackSourcesRequest> request = MediaStreamTrackSourcesRequest::create(context, callback);
    130     if (!MediaStreamCenter::instance().getMediaStreamTrackSources(request.release()))
     182    if (!MediaStreamCenter::shared().getMediaStreamTrackSources(request.release()))
    131183        ec = NOT_SUPPORTED_ERR;
    132184}
     
    134186bool MediaStreamTrack::ended() const
    135187{
    136     return m_stopped || (m_component->source()->readyState() == MediaStreamSource::ReadyStateEnded);
     188    return m_stopped || (m_source && m_source->readyState() == MediaStreamSource::Ended);
    137189}
    138190
     
    142194        return;
    143195
    144     switch (m_component->source()->readyState()) {
    145     case MediaStreamSource::ReadyStateLive:
     196    MediaStreamSource::ReadyState oldReadyState = m_readyState;
     197    m_readyState = m_source->readyState();
     198
     199    if (m_readyState >= MediaStreamSource::Live && oldReadyState == MediaStreamSource::New)
     200        dispatchEvent(Event::create(eventNames().startedEvent, false, false));
     201    if (m_readyState == MediaStreamSource::Ended && oldReadyState != MediaStreamSource::Ended)
     202        dispatchEvent(Event::create(eventNames().endedEvent, false, false));
     203
     204    if (m_muted == m_source->muted())
     205        return;
     206
     207    m_muted = m_source->muted();
     208    if (m_muted)
     209        dispatchEvent(Event::create(eventNames().muteEvent, false, false));
     210    else
    146211        dispatchEvent(Event::create(eventNames().unmuteEvent, false, false));
    147         break;
    148     case MediaStreamSource::ReadyStateMuted:
    149         dispatchEvent(Event::create(eventNames().muteEvent, false, false));
    150         break;
    151     case MediaStreamSource::ReadyStateEnded:
    152         dispatchEvent(Event::create(eventNames().endedEvent, false, false));
    153         didEndTrack();
    154         break;
    155     }
    156 }
    157 
    158 void MediaStreamTrack::didEndTrack()
    159 {
    160     MediaStreamDescriptorClient* client = m_component->stream()->client();
     212}
     213
     214void MediaStreamTrack::trackDidEnd()
     215{
     216    // FIXME: this is wrong, the track shouldn't have to call the descriptor's client!
     217    MediaStreamDescriptorClient* client = m_source ? m_source->stream()->client() : 0;
    161218    if (!client)
    162219        return;
    163220   
    164     client->trackEnded();
    165 }
    166 
    167 MediaStreamComponent* MediaStreamTrack::component()
    168 {
    169     return m_component.get();
     221    client->trackDidEnd();
    170222}
    171223
  • trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h

    r156413 r156473  
    22 * Copyright (C) 2011 Google Inc. All rights reserved.
    33 * Copyright (C) 2011 Ericsson AB. All rights reserved.
     4 * Copyright (C) 2013 Apple Inc. All rights reserved.
    45 *
    56 * Redistribution and use in source and binary forms, with or without
     
    3132#include "ActiveDOMObject.h"
    3233#include "EventTarget.h"
    33 #include "MediaStreamDescriptor.h"
    3434#include "MediaStreamSource.h"
    3535#include "ScriptWrappable.h"
     
    4141namespace WebCore {
    4242
    43 class MediaStreamComponent;
     43class Dictionary;
     44class MediaConstraints;
    4445class MediaStreamTrackSourcesCallback;
    4546
     
    4748class MediaStreamTrack : public RefCounted<MediaStreamTrack>, public ScriptWrappable, public ActiveDOMObject, public EventTargetWithInlineData, public MediaStreamSource::Observer {
    4849public:
    49     static PassRefPtr<MediaStreamTrack> create(ScriptExecutionContext*, MediaStreamComponent*);
     50
     51    static PassRefPtr<MediaStreamTrack> create(ScriptExecutionContext*, const Dictionary&);
     52    static PassRefPtr<MediaStreamTrack> create(ScriptExecutionContext*, MediaStreamSource*);
     53
    5054    virtual ~MediaStreamTrack();
    5155
    52     AtomicString kind() const;
    53     String id() const;
    54     String label() const;
     56    const AtomicString& kind() const;
     57    const String& id() const;
     58    const String& label() const;
    5559
    5660    bool enabled() const;
    5761    void setEnabled(bool);
    58 
    59     void didEndTrack();
    6062   
    61     AtomicString readyState() const;
     63    const AtomicString& readyState() const;
    6264
    6365    static void getSources(ScriptExecutionContext*, PassRefPtr<MediaStreamTrackSourcesCallback>, ExceptionCode&);
     66
     67    MediaStreamSource* source() const { return m_source.get(); }
     68    void setSource(MediaStreamSource*);
    6469
    6570    DEFINE_ATTRIBUTE_EVENT_LISTENER(mute);
     
    6772    DEFINE_ATTRIBUTE_EVENT_LISTENER(ended);
    6873
    69     MediaStreamComponent* component();
    7074    bool ended() const;
    7175
     
    8185
    8286private:
    83     MediaStreamTrack(ScriptExecutionContext*, MediaStreamComponent*);
     87    MediaStreamTrack(ScriptExecutionContext*, MediaStreamSource*, const Dictionary*);
     88
     89    void trackDidEnd();
    8490
    8591    // EventTarget
     
    9096    virtual void sourceChangedState() OVERRIDE;
    9197
    92     RefPtr<MediaStreamComponent> m_component;
     98    RefPtr<MediaStreamSource> m_source;
     99    RefPtr<MediaConstraints> m_constraints;
     100    MediaStreamSource::ReadyState m_readyState;
     101    mutable String m_id;
     102
    93103    bool m_stopped;
     104    bool m_enabled;
     105    bool m_muted;
    94106};
    95107
  • trunk/Source/WebCore/Modules/mediastream/RTCDTMFSender.cpp

    r156413 r156473  
    4848{
    4949    RefPtr<MediaStreamTrack> track = prpTrack;
    50     OwnPtr<RTCDTMFSenderHandler> handler = peerConnectionHandler->createDTMFSender(track->component());
     50    OwnPtr<RTCDTMFSenderHandler> handler = peerConnectionHandler->createDTMFSender(track->source());
    5151    if (!handler) {
    5252        ec = NOT_SUPPORTED_ERR;
  • trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp

    r156413 r156473  
    560560    ASSERT(streamDescriptor->client());
    561561
     562    // FIXME: this class shouldn't know that the descriptor client is a MediaStream!
    562563    RefPtr<MediaStream> stream = static_cast<MediaStream*>(streamDescriptor->client());
    563     stream->streamEnded();
     564    stream->setEnded();
    564565
    565566    if (m_signalingState == SignalingStateClosed)
  • trunk/Source/WebCore/Modules/mediastream/RTCStatsRequestImpl.cpp

    r146537 r156473  
    2929#include "RTCStatsRequestImpl.h"
    3030
     31#include "MediaStreamDescriptor.h"
     32#include "MediaStreamTrack.h"
    3133#include "RTCStatsCallback.h"
    3234#include "RTCStatsRequest.h"
     
    4547    : ActiveDOMObject(context)
    4648    , m_successCallback(callback)
    47     , m_stream(selector ? selector->component()->stream() : 0)
    48     , m_component(selector ? selector->component() : 0)
     49    , m_stream(selector ? selector->source()->stream() : 0)
    4950{
    5051}
     
    6768{
    6869    return m_stream.get();
    69 }
    70 
    71 MediaStreamComponent* RTCStatsRequestImpl::component()
    72 {
    73     return m_component.get();
    7470}
    7571
  • trunk/Source/WebCore/Modules/mediastream/RTCStatsRequestImpl.h

    r131584 r156473  
    4747    virtual bool hasSelector() OVERRIDE;
    4848    virtual MediaStreamDescriptor* stream() OVERRIDE;
    49     virtual MediaStreamComponent* component() OVERRIDE;
    5049
    5150    virtual void requestSucceeded(PassRefPtr<RTCStatsResponseBase>) OVERRIDE;
     
    6160    RefPtr<RTCStatsCallback> m_successCallback;
    6261    RefPtr<MediaStreamDescriptor> m_stream;
    63     RefPtr<MediaStreamComponent> m_component;
    6462};
    6563
  • trunk/Source/WebCore/Modules/mediastream/UserMediaClient.h

    r108437 r156473  
    3434#if ENABLE(MEDIA_STREAM)
    3535
    36 #include "UserMediaRequest.h"
    37 #include <wtf/text/WTFString.h>
     36#include <wtf/PassRefPtr.h>
    3837
    3938namespace WebCore {
    4039
    4140class Page;
     41class UserMediaRequest;
    4242
    4343class UserMediaClient {
     
    4545    virtual void pageDestroyed() = 0;
    4646
    47     virtual void requestUserMedia(PassRefPtr<UserMediaRequest>, const MediaStreamSourceVector& audioSources,  const MediaStreamSourceVector& videoSources) = 0;
    48     virtual void cancelUserMediaRequest(UserMediaRequest*) = 0;
     47    virtual void requestPermission(PassRefPtr<UserMediaRequest>) = 0;
     48    virtual void cancelRequest(UserMediaRequest*) = 0;
    4949
    5050protected:
  • trunk/Source/WebCore/Modules/mediastream/UserMediaController.h

    r140509 r156473  
    3030#include "Page.h"
    3131#include "UserMediaClient.h"
     32#include "UserMediaRequest.h"
    3233#include <wtf/PassOwnPtr.h>
    3334
     
    3940
    4041    UserMediaClient* client() const { return m_client; }
    41     void requestUserMedia(PassRefPtr<UserMediaRequest>, const MediaStreamSourceVector& audioSources,  const MediaStreamSourceVector& videoSources);
    42     void cancelUserMediaRequest(UserMediaRequest*);
     42    void requestPermission(PassRefPtr<UserMediaRequest>);
     43    void cancelRequest(UserMediaRequest*);
    4344
    4445    static PassOwnPtr<UserMediaController> create(UserMediaClient*);
     
    5354};
    5455
    55 inline void UserMediaController::requestUserMedia(PassRefPtr<UserMediaRequest> request, const MediaStreamSourceVector& audioSources,  const MediaStreamSourceVector& videoSources)
     56inline void UserMediaController::requestPermission(PassRefPtr<UserMediaRequest> request)
    5657{
    57     m_client->requestUserMedia(request, audioSources, videoSources);
     58    m_client->requestPermission(request);
    5859}
    5960
    60 inline void UserMediaController::cancelUserMediaRequest(UserMediaRequest* request)
     61inline void UserMediaController::cancelRequest(UserMediaRequest* request)
    6162{
    62     m_client->cancelUserMediaRequest(request);
     63    m_client->cancelRequest(request);
    6364}
    6465
  • trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp

    r156108 r156473  
    22 * Copyright (C) 2011 Ericsson AB. All rights reserved.
    33 * Copyright (C) 2012 Google Inc. All rights reserved.
     4 * Copyright (C) 2013 Apple Inc. All rights reserved.
    45 *
    56 * Redistribution and use in source and binary forms, with or without
     
    4344#include "MediaStreamCenter.h"
    4445#include "MediaStreamDescriptor.h"
    45 #include "SpaceSplitString.h"
     46#include "SecurityOrigin.h"
    4647#include "UserMediaController.h"
    4748#include <wtf/Functional.h>
     
    5051namespace WebCore {
    5152
    52 static PassRefPtr<MediaConstraintsImpl> parseOptions(const Dictionary& options, const String& mediaType, ExceptionCode& ec)
    53 {
    54     RefPtr<MediaConstraintsImpl> constraints;
     53static PassRefPtr<MediaConstraints> parseOptions(const Dictionary& options, const String& mediaType, ExceptionCode& ec)
     54{
     55    RefPtr<MediaConstraints> constraints;
    5556
    5657    Dictionary constraintsDictionary;
     
    7273    ASSERT(successCallback);
    7374
    74     RefPtr<MediaConstraintsImpl> audioConstraints = parseOptions(options, AtomicString("audio", AtomicString::ConstructFromLiteral), ec);
     75    RefPtr<MediaConstraints> audioConstraints = parseOptions(options, AtomicString("audio", AtomicString::ConstructFromLiteral), ec);
    7576    if (ec)
    7677        return 0;
    7778
    78     RefPtr<MediaConstraintsImpl> videoConstraints = parseOptions(options, AtomicString("video", AtomicString::ConstructFromLiteral), ec);
     79    RefPtr<MediaConstraints> videoConstraints = parseOptions(options, AtomicString("video", AtomicString::ConstructFromLiteral), ec);
    7980    if (ec)
    8081        return 0;
     
    8687}
    8788
    88 UserMediaRequest::UserMediaRequest(ScriptExecutionContext* context, UserMediaController* controller, PassRefPtr<MediaConstraintsImpl> audioConstraints, PassRefPtr<MediaConstraintsImpl> videoConstraints, PassRefPtr<NavigatorUserMediaSuccessCallback> successCallback, PassRefPtr<NavigatorUserMediaErrorCallback> errorCallback)
     89UserMediaRequest::UserMediaRequest(ScriptExecutionContext* context, UserMediaController* controller, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints, PassRefPtr<NavigatorUserMediaSuccessCallback> successCallback, PassRefPtr<NavigatorUserMediaErrorCallback> errorCallback)
    8990    : ContextDestructionObserver(context)
    9091    , m_audioConstraints(audioConstraints)
     
    100101}
    101102
    102 PassRefPtr<MediaConstraints> UserMediaRequest::audioConstraints() const
    103 {
    104     return m_audioConstraints;
    105 }
    106 
    107 PassRefPtr<MediaConstraints> UserMediaRequest::videoConstraints() const
    108 {
    109     return m_videoConstraints;
    110 }
    111 
    112 Document* UserMediaRequest::ownerDocument()
     103SecurityOrigin* UserMediaRequest::securityOrigin() const
    113104{
    114105    if (m_scriptExecutionContext)
    115         return toDocument(m_scriptExecutionContext);
    116 
     106        return m_scriptExecutionContext->securityOrigin();
     107   
    117108    return 0;
    118109}
    119 
     110   
    120111void UserMediaRequest::start()
    121112{
    122     MediaStreamCenter::instance().queryMediaStreamSources(this);
    123 }
    124 
    125 void UserMediaRequest::didCompleteQuery(const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources)
     113    // 1 - make sure the system is capable of supporting the audio and video constraints. We don't want to ask for
     114    // user permission if the constraints can not be suported.
     115    MediaStreamCenter::shared().validateRequestConstraints(this, m_audioConstraints, m_videoConstraints);
     116}
     117
     118   
     119void UserMediaRequest::constraintsValidated()
    126120{
    127121    if (m_controller)
    128         m_controller->requestUserMedia(this, audioSources, videoSources);
    129 }
    130 
    131 void UserMediaRequest::succeed(PassRefPtr<MediaStreamDescriptor> streamDescriptor)
    132 {
    133     if (!m_scriptExecutionContext)
    134         return;
     122        callOnMainThread(bind(&UserMediaRequest::requestPermission, this));
     123}
     124
     125void UserMediaRequest::requestPermission()
     126{
     127    // 2 - The constraints are valid, ask the user for access to media.
     128    if (m_controller)
     129        m_controller->requestPermission(this);
     130}
     131
     132void UserMediaRequest::userMediaAccessGranted()
     133{
     134    callOnMainThread(bind(&UserMediaRequest::createMediaStream, this));
     135}
     136
     137void UserMediaRequest::createMediaStream()
     138{
     139    // 3 - the user granted access, ask platform to create the media stream descriptors.
     140    MediaStreamCenter::shared().createMediaStream(this, m_audioConstraints, m_videoConstraints);
     141}
     142
     143void UserMediaRequest::userMediaAccessDenied()
     144{
     145    failedToCreateStreamWithPermissionError();
     146}
     147
     148void UserMediaRequest::constraintsInvalid(const String& constraintName)
     149{
     150    failedToCreateStreamWithConstraintsError(constraintName);
     151}
     152
     153void UserMediaRequest::didCreateStream(PassRefPtr<MediaStreamDescriptor> streamDescriptor)
     154{
     155    if (!m_scriptExecutionContext || !m_successCallback)
     156        return;
     157
     158    callOnMainThread(bind(&UserMediaRequest::callSuccessHandler, this, streamDescriptor));
     159}
     160
     161void UserMediaRequest::callSuccessHandler(PassRefPtr<MediaStreamDescriptor> streamDescriptor)
     162{
     163    // 4 - Create the MediaStream and pass it to the success callback.
     164    ASSERT(m_successCallback);
    135165
    136166    RefPtr<MediaStream> stream = MediaStream::create(m_scriptExecutionContext, streamDescriptor);
     
    138168    MediaStreamTrackVector tracks = stream->getAudioTracks();
    139169    for (MediaStreamTrackVector::iterator iter = tracks.begin(); iter != tracks.end(); ++iter)
    140         (*iter)->component()->source()->setConstraints(m_audioConstraints);
     170        (*iter)->source()->setConstraints(m_audioConstraints);
    141171
    142172    tracks = stream->getVideoTracks();
    143173    for (MediaStreamTrackVector::iterator iter = tracks.begin(); iter != tracks.end(); ++iter)
    144         (*iter)->component()->source()->setConstraints(m_videoConstraints);
    145 
     174        (*iter)->source()->setConstraints(m_videoConstraints);
     175
     176    MediaStreamCenter::shared().didCreateMediaStream(streamDescriptor.get());
    146177    m_successCallback->handleEvent(stream.get());
    147178}
    148179
    149 void UserMediaRequest::permissionFailure()
    150 {
     180void UserMediaRequest::failedToCreateStreamWithConstraintsError(const String& constraintName)
     181{
     182    ASSERT(!constraintName.isEmpty());
    151183    if (!m_scriptExecutionContext)
    152184        return;
     
    154186    if (!m_errorCallback)
    155187        return;
    156    
     188
     189    RefPtr<NavigatorUserMediaError> error = NavigatorUserMediaError::create(NavigatorUserMediaError::constraintNotSatisfiedErrorName(), constraintName);
     190    callOnMainThread(bind(&UserMediaRequest::callErrorHandler, this, error.release()));
     191}
     192
     193void UserMediaRequest::failedToCreateStreamWithPermissionError()
     194{
     195    if (!m_scriptExecutionContext)
     196        return;
     197
     198    if (!m_errorCallback)
     199        return;
     200
    157201    RefPtr<NavigatorUserMediaError> error = NavigatorUserMediaError::create(NavigatorUserMediaError::permissionDeniedErrorName(), emptyString());
    158202    callOnMainThread(bind(&UserMediaRequest::callErrorHandler, this, error.release()));
    159203}
    160204
    161 void UserMediaRequest::constraintFailure(const String& constraintName)
    162 {
    163     ASSERT(!constraintName.isEmpty());
    164     if (!m_scriptExecutionContext)
    165         return;
    166    
    167     if (!m_errorCallback)
    168         return;
    169 
    170     RefPtr<NavigatorUserMediaError> error = NavigatorUserMediaError::create(NavigatorUserMediaError::constraintNotSatisfiedErrorName(), constraintName);
    171     callOnMainThread(bind(&UserMediaRequest::callErrorHandler, this, error.release()));
    172 }
    173 
    174 void UserMediaRequest::callSuccessHandler(PassRefPtr<MediaStream> stream)
    175 {
    176     ASSERT(m_successCallback);
    177    
    178     m_successCallback->handleEvent(stream.get());
    179 }
    180 
    181 void UserMediaRequest::callErrorHandler(PassRefPtr<NavigatorUserMediaError> error)
    182 {
     205void UserMediaRequest::callErrorHandler(PassRefPtr<NavigatorUserMediaError> prpError)
     206{
     207    RefPtr<NavigatorUserMediaError> error = prpError;
     208
    183209    ASSERT(error);
    184210   
     
    191217
    192218    if (m_controller) {
    193         m_controller->cancelUserMediaRequest(this);
     219        m_controller->cancelRequest(this);
    194220        m_controller = 0;
    195221    }
  • trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.h

    r156108 r156473  
    11/*
    22 * Copyright (C) 2011 Ericsson AB. All rights reserved.
     3 * Copyright (C) 2013 Apple Inc. All rights reserved.
    34 *
    45 * Redistribution and use in source and binary forms, with or without
     
    3536
    3637#include "ActiveDOMObject.h"
    37 #include "ExceptionBase.h"
     38#include "MediaStreamCreationClient.h"
    3839#include "MediaStreamSource.h"
    39 #include "MediaStreamSourcesQueryClient.h"
    4040#include "NavigatorUserMediaErrorCallback.h"
    4141#include "NavigatorUserMediaSuccessCallback.h"
    4242#include <wtf/PassRefPtr.h>
     43#include <wtf/RefCounted.h>
    4344#include <wtf/text/WTFString.h>
    4445
     
    4849class Document;
    4950class MediaConstraints;
    50 class MediaConstraintsImpl;
    5151class MediaStreamDescriptor;
    5252class UserMediaController;
     53class SecurityOrigin;
    5354
    54 class UserMediaRequest : public MediaStreamSourcesQueryClient, public ContextDestructionObserver {
     55typedef int ExceptionCode;
     56
     57class UserMediaRequest : public MediaStreamCreationClient, public ContextDestructionObserver {
    5558public:
    5659    static PassRefPtr<UserMediaRequest> create(ScriptExecutionContext*, UserMediaController*, const Dictionary& options, PassRefPtr<NavigatorUserMediaSuccessCallback>, PassRefPtr<NavigatorUserMediaErrorCallback>, ExceptionCode&);
    5760    ~UserMediaRequest();
    5861
    59     Document* ownerDocument();
     62    SecurityOrigin* securityOrigin() const;
    6063
    6164    void start();
    62     void succeed(PassRefPtr<MediaStreamDescriptor>);
    63     void permissionFailure();
    64     void constraintFailure(const String& constraintName);
     65    void userMediaAccessGranted();
     66    void userMediaAccessDenied();
    6567
    66     // MediaStreamSourcesQueryClient
    67     virtual PassRefPtr<MediaConstraints> audioConstraints() const OVERRIDE;
    68     virtual PassRefPtr<MediaConstraints> videoConstraints() const OVERRIDE;
    69     virtual void didCompleteQuery(const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources) OVERRIDE;
     68private:
     69    UserMediaRequest(ScriptExecutionContext*, UserMediaController*, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints, PassRefPtr<NavigatorUserMediaSuccessCallback>, PassRefPtr<NavigatorUserMediaErrorCallback>);
     70
     71    // MediaStreamCreationClient
     72    virtual void constraintsValidated() OVERRIDE FINAL;
     73    virtual void constraintsInvalid(const String& constraintName) OVERRIDE FINAL;
     74    virtual void didCreateStream(PassRefPtr<MediaStreamDescriptor>) OVERRIDE FINAL;
     75    virtual void failedToCreateStreamWithConstraintsError(const String& constraintName) OVERRIDE FINAL;
     76    virtual void failedToCreateStreamWithPermissionError() OVERRIDE FINAL;
    7077
    7178    // ContextDestructionObserver
    72     virtual void contextDestroyed();
     79    virtual void contextDestroyed() OVERRIDE FINAL;
     80   
     81    void callSuccessHandler(PassRefPtr<MediaStreamDescriptor>);
     82    void callErrorHandler(PassRefPtr<NavigatorUserMediaError>);
     83    void requestPermission();
     84    void createMediaStream();
    7385
    74 private:
    75     UserMediaRequest(ScriptExecutionContext*, UserMediaController*, PassRefPtr<MediaConstraintsImpl> audioConstraints, PassRefPtr<MediaConstraintsImpl> videoConstraints, PassRefPtr<NavigatorUserMediaSuccessCallback>, PassRefPtr<NavigatorUserMediaErrorCallback>);
    76 
    77     void callSuccessHandler(PassRefPtr<MediaStream>);
    78     void callErrorHandler(PassRefPtr<NavigatorUserMediaError>);
    79 
    80     RefPtr<MediaConstraintsImpl> m_audioConstraints;
    81     RefPtr<MediaConstraintsImpl> m_videoConstraints;
     86    RefPtr<MediaConstraints> m_audioConstraints;
     87    RefPtr<MediaConstraints> m_videoConstraints;
    8288
    8389    UserMediaController* m_controller;
  • trunk/Source/WebCore/Modules/webaudio/AudioContext.cpp

    r156413 r156473  
    422422    for (size_t i = 0; i < audioTracks.size(); ++i) {
    423423        RefPtr<MediaStreamTrack> localAudio = audioTracks[i];
    424         MediaStreamSource* source = localAudio->component()->source();
     424        MediaStreamSource* source = localAudio->source();
    425425        if (!source->deviceId().isEmpty()) {
    426426            destination()->enableInput(source->deviceId());
  • trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.cpp

    r155573 r156473  
    5050    setNodeType(NodeTypeMediaStreamAudioDestination);
    5151
    52     m_source = MediaStreamSource::create(ASCIILiteral("WebAudio-") + createCanonicalUUIDString(), MediaStreamSource::TypeAudio, "MediaStreamAudioDestinationNode", MediaStreamSource::ReadyStateLive, true);
     52    m_source = MediaStreamSource::create(ASCIILiteral("WebAudio-") + createCanonicalUUIDString(), MediaStreamSource::Audio, "MediaStreamAudioDestinationNode", MediaStreamSource::Live, true);
    5353    MediaStreamSourceVector audioSources;
    5454    audioSources.append(m_source);
    5555    MediaStreamSourceVector videoSources;
    5656    m_stream = MediaStream::create(context->scriptExecutionContext(), MediaStreamDescriptor::create(audioSources, videoSources));
    57     MediaStreamCenter::instance().didCreateMediaStream(m_stream->descriptor());
     57    MediaStreamCenter::shared().didCreateMediaStream(m_stream->descriptor());
    5858
    5959    m_source->setAudioFormat(numberOfChannels, context->sampleRate());
  • trunk/Source/WebCore/WebCore.exp.in

    r156472 r156473  
    28002800_wkCachePartitionKey
    28012801#endif
     2802
     2803#if ENABLE(MEDIA_STREAM)
     2804__ZN7WebCore16UserMediaRequest22userMediaAccessGrantedEv
     2805__ZN7WebCore16UserMediaRequest21userMediaAccessDeniedEv
     2806__ZN7WebCore18provideUserMediaToEPNS_4PageEPNS_15UserMediaClientE
     2807__ZNK7WebCore16UserMediaRequest14securityOriginEv
     2808#endif
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r156458 r156473  
    9696                070756E014239B4E00414161 /* JSTextTrackCueList.h in Headers */ = {isa = PBXBuildFile; fileRef = 070756DA14239B4E00414161 /* JSTextTrackCueList.h */; };
    9797                0709FC4E1025DEE30059CDBA /* AccessibilitySlider.h in Headers */ = {isa = PBXBuildFile; fileRef = 0709FC4D1025DEE30059CDBA /* AccessibilitySlider.h */; };
    98                 0711589017DF6F6200EDFE2B /* MediaStreamComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0711588E17DF633700EDFE2B /* MediaStreamComponent.cpp */; };
     98                070F549817F12F6B00169E04 /* MediaStreamConstraintsValidationClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 070F549717F12F6B00169E04 /* MediaStreamConstraintsValidationClient.h */; };
     99                070F549E17F2402700169E04 /* AudioDestinationConsumer.h in Headers */ = {isa = PBXBuildFile; fileRef = 070F549D17F2402700169E04 /* AudioDestinationConsumer.h */; settings = {ATTRIBUTES = (Private, ); }; };
    99100                0711589117DF6F6600EDFE2B /* MediaStreamDescriptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0711588F17DF633700EDFE2B /* MediaStreamDescriptor.cpp */; };
    100101                071A9EC2168FBC43002629F9 /* TextTrackCueGeneric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 071A9EC0168FB56C002629F9 /* TextTrackCueGeneric.cpp */; };
     
    203204                078E093317D16B0600420AA1 /* MediaStreamCenter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07221B9A17CF0AD400848E51 /* MediaStreamCenter.cpp */; };
    204205                078E093417D16B0B00420AA1 /* MediaStreamCenter.h in Headers */ = {isa = PBXBuildFile; fileRef = 07221B9B17CF0AD400848E51 /* MediaStreamCenter.h */; settings = {ATTRIBUTES = (Private, ); }; };
    205                 078E093517D16B2100420AA1 /* MediaStreamComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 07221B9C17CF0AD400848E51 /* MediaStreamComponent.h */; settings = {ATTRIBUTES = (Private, ); }; };
    206206                078E093617D16B2100420AA1 /* MediaStreamSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07221B9E17CF0AD400848E51 /* MediaStreamSource.cpp */; };
    207207                078E093717D16B2C00420AA1 /* MediaStreamDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 07221B9D17CF0AD400848E51 /* MediaStreamDescriptor.h */; settings = {ATTRIBUTES = (Private, ); }; };
    208208                078E093817D16B2C00420AA1 /* MediaStreamSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 07221B9F17CF0AD400848E51 /* MediaStreamSource.h */; settings = {ATTRIBUTES = (Private, ); }; };
    209                 078E093917D16B2C00420AA1 /* MediaStreamSourcesQueryClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 07221BA017CF0AD400848E51 /* MediaStreamSourcesQueryClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
     209                078E093917D16B2C00420AA1 /* MediaStreamCreationClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 07221BA017CF0AD400848E51 /* MediaStreamCreationClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
    210210                078E093A17D16E1C00420AA1 /* MediaConstraints.h in Headers */ = {isa = PBXBuildFile; fileRef = 07221B9917CF0AD400848E51 /* MediaConstraints.h */; settings = {ATTRIBUTES = (Private, ); }; };
    211211                078E093B17D16E1C00420AA1 /* RTCConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 07221BA117CF0AD400848E51 /* RTCConfiguration.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    64686468                0709FC4D1025DEE30059CDBA /* AccessibilitySlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilitySlider.h; sourceTree = "<group>"; };
    64696469                070DD8F50F01868000727DEB /* mediaControls.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mediaControls.css; sourceTree = "<group>"; };
    6470                 0711588E17DF633700EDFE2B /* MediaStreamComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaStreamComponent.cpp; sourceTree = "<group>"; };
     6470                070F549717F12F6B00169E04 /* MediaStreamConstraintsValidationClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaStreamConstraintsValidationClient.h; sourceTree = "<group>"; };
     6471                070F549D17F2402700169E04 /* AudioDestinationConsumer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioDestinationConsumer.h; sourceTree = "<group>"; };
    64716472                0711588F17DF633700EDFE2B /* MediaStreamDescriptor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaStreamDescriptor.cpp; sourceTree = "<group>"; };
    64726473                071A9EC0168FB56C002629F9 /* TextTrackCueGeneric.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextTrackCueGeneric.cpp; sourceTree = "<group>"; };
     
    65516552                07221B9A17CF0AD400848E51 /* MediaStreamCenter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaStreamCenter.cpp; sourceTree = "<group>"; };
    65526553                07221B9B17CF0AD400848E51 /* MediaStreamCenter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaStreamCenter.h; sourceTree = "<group>"; };
    6553                 07221B9C17CF0AD400848E51 /* MediaStreamComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaStreamComponent.h; sourceTree = "<group>"; };
    65546554                07221B9D17CF0AD400848E51 /* MediaStreamDescriptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaStreamDescriptor.h; sourceTree = "<group>"; };
    65556555                07221B9E17CF0AD400848E51 /* MediaStreamSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaStreamSource.cpp; sourceTree = "<group>"; };
    65566556                07221B9F17CF0AD400848E51 /* MediaStreamSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaStreamSource.h; sourceTree = "<group>"; };
    6557                 07221BA017CF0AD400848E51 /* MediaStreamSourcesQueryClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaStreamSourcesQueryClient.h; sourceTree = "<group>"; };
     6557                07221BA017CF0AD400848E51 /* MediaStreamCreationClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaStreamCreationClient.h; sourceTree = "<group>"; };
    65586558                07221BA117CF0AD400848E51 /* RTCConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCConfiguration.h; sourceTree = "<group>"; };
    65596559                07221BA217CF0AD400848E51 /* RTCDataChannelHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCDataChannelHandler.h; sourceTree = "<group>"; };
     
    1340013400                                07221B9A17CF0AD400848E51 /* MediaStreamCenter.cpp */,
    1340113401                                07221B9B17CF0AD400848E51 /* MediaStreamCenter.h */,
    13402                                 0711588E17DF633700EDFE2B /* MediaStreamComponent.cpp */,
    13403                                 07221B9C17CF0AD400848E51 /* MediaStreamComponent.h */,
     13402                                070F549717F12F6B00169E04 /* MediaStreamConstraintsValidationClient.h */,
     13403                                07221BA017CF0AD400848E51 /* MediaStreamCreationClient.h */,
    1340413404                                0711588F17DF633700EDFE2B /* MediaStreamDescriptor.cpp */,
    1340513405                                07221B9D17CF0AD400848E51 /* MediaStreamDescriptor.h */,
    1340613406                                07221B9E17CF0AD400848E51 /* MediaStreamSource.cpp */,
    1340713407                                07221B9F17CF0AD400848E51 /* MediaStreamSource.h */,
    13408                                 07221BA017CF0AD400848E51 /* MediaStreamSourcesQueryClient.h */,
    1340913408                                076306E217E22A43005A7C4E /* MediaStreamTrackSourcesRequestClient.h */,
    1341013409                                07221BA117CF0AD400848E51 /* RTCConfiguration.h */,
     
    2129321292                                FD31604812B026F700C1A359 /* AudioChannel.h */,
    2129421293                                FD31604912B026F700C1A359 /* AudioDestination.h */,
     21294                                070F549D17F2402700169E04 /* AudioDestinationConsumer.h */,
    2129521295                                FD31604A12B026F700C1A359 /* AudioDSPKernel.h */,
    2129621296                                FD31604B12B026F700C1A359 /* AudioDSPKernelProcessor.cpp */,
     
    2155021550                                FD31600512B0267600C1A359 /* AudioContext.h in Headers */,
    2155121551                                FD31607F12B026F700C1A359 /* AudioDestination.h in Headers */,
     21552                                070F549E17F2402700169E04 /* AudioDestinationConsumer.h in Headers */,
    2155221553                                FD3160BD12B0272A00C1A359 /* AudioDestinationMac.h in Headers */,
    2155321554                                FD31600812B0267600C1A359 /* AudioDestinationNode.h in Headers */,
     
    2180821809                                A80E6D0D0A1989CA007FB8C5 /* CSSRule.h in Headers */,
    2180921810                                A80E6CF20A1989CA007FB8C5 /* CSSRuleList.h in Headers */,
     21811                                070F549817F12F6B00169E04 /* MediaStreamConstraintsValidationClient.h in Headers */,
    2181021812                                371F51A10D262FA000ECE0D5 /* CSSSegmentedFontFace.h in Headers */,
    2181121813                                A80E73520A199C77007FB8C5 /* CSSSelector.h in Headers */,
     
    2195921961                                85E711910AC5D5350053270F /* DOMCounterInternal.h in Headers */,
    2196021962                                BC1A37B0097C715F0019F3D8 /* DOMCSS.h in Headers */,
    21961                                 078E093917D16B2C00420AA1 /* MediaStreamSourcesQueryClient.h in Headers */,
     21963                                078E093917D16B2C00420AA1 /* MediaStreamCreationClient.h in Headers */,
    2196221964                                85032DD70AA8C9BE007D3B7D /* DOMCSSCharsetRule.h in Headers */,
    2196321965                                85909CDC0ACC7A7E00DF01F1 /* DOMCSSCharsetRuleInternal.h in Headers */,
     
    2420824210                                B2227A240D00BF220071B782 /* SVGForeignObjectElement.h in Headers */,
    2420924211                                B2227A270D00BF220071B782 /* SVGGElement.h in Headers */,
    24210                                 078E093517D16B2100420AA1 /* MediaStreamComponent.h in Headers */,
    2421124212                                087E0AF713606D0B00FA4BA8 /* SVGGlyph.h in Headers */,
    2421224213                                B2A1F2AE0CEF0ABF00442F6A /* SVGGlyphElement.h in Headers */,
     
    2673326734                                CD61FE671794AADB004101EB /* MediaSourceRegistry.cpp in Sources */,
    2673426735                                FD671A77159BB07000197559 /* MediaStreamAudioSourceNode.cpp in Sources */,
    26735                                 0711589017DF6F6200EDFE2B /* MediaStreamComponent.cpp in Sources */,
    2673626736                                0711589117DF6F6600EDFE2B /* MediaStreamDescriptor.cpp in Sources */,
    2673726737                                BCB16C170979C3BD00467741 /* MemoryCache.cpp in Sources */,
  • trunk/Source/WebCore/dom/EventNames.h

    r156241 r156473  
    241241    macro(mute) \
    242242    macro(unmute) \
     243    macro(started) \
    243244    macro(iceconnectionstatechange) \
    244245    macro(icecandidate) \
  • trunk/Source/WebCore/platform/mediastream/MediaStreamCenter.cpp

    r155362 r156473  
    4040namespace WebCore {
    4141
     42static MediaStreamCenter*& mediaStreamCenterOverride()
     43{
     44    static MediaStreamCenter* override;
     45    return override;
     46}
     47
     48MediaStreamCenter& MediaStreamCenter::shared()
     49{
     50    MediaStreamCenter* override = mediaStreamCenterOverride();
     51    if (override)
     52        return *override;
     53   
     54    return MediaStreamCenter::platformCenter();
     55}
     56
     57void MediaStreamCenter::setSharedStreamCenter(MediaStreamCenter* center)
     58{
     59    mediaStreamCenterOverride() = center;
     60}
     61
    4262MediaStreamCenter::MediaStreamCenter()
    4363{
     
    5070void MediaStreamCenter::endLocalMediaStream(MediaStreamDescriptor* streamDescriptor)
    5171{
    52     MediaStreamDescriptorClient* client = streamDescriptor->client();
    53     if (client)
    54         client->streamEnded();
    55     else
    56         streamDescriptor->setEnded();
     72    streamDescriptor->setEnded();
    5773}
    5874
  • trunk/Source/WebCore/platform/mediastream/MediaStreamCenter.h

    r155992 r156473  
    4040namespace WebCore {
    4141
    42 class MediaStreamComponent;
     42class MediaConstraints;
     43class MediaStreamCreationClient;
     44class MediaStreamCreationClient;
    4345class MediaStreamDescriptor;
    44 class MediaStreamSourcesQueryClient;
     46class MediaStreamSource;
    4547class MediaStreamTrackSourcesRequestClient;
    4648
     
    4951    virtual ~MediaStreamCenter();
    5052
    51     static MediaStreamCenter& instance();
     53    static MediaStreamCenter& shared();
     54    static void setSharedStreamCenter(MediaStreamCenter*);
    5255
    53     virtual void queryMediaStreamSources(PassRefPtr<MediaStreamSourcesQueryClient>) = 0;
     56    virtual void validateRequestConstraints(PassRefPtr<MediaStreamCreationClient>, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints) = 0;
    5457
    55     // Calls from the DOM objects to notify the platform
     58    virtual void createMediaStream(PassRefPtr<MediaStreamCreationClient>, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints) = 0;
     59
    5660    virtual bool getMediaStreamTrackSources(PassRefPtr<MediaStreamTrackSourcesRequestClient>) = 0;
    57     virtual void didSetMediaStreamTrackEnabled(MediaStreamDescriptor*, MediaStreamComponent*) = 0;
    58     virtual bool didAddMediaStreamTrack(MediaStreamDescriptor*, MediaStreamComponent*) = 0;
    59     virtual bool didRemoveMediaStreamTrack(MediaStreamDescriptor*, MediaStreamComponent*) = 0;
     61
     62    virtual void didSetMediaStreamTrackEnabled(MediaStreamSource*) = 0;
     63
     64    virtual bool didAddMediaStreamTrack(MediaStreamSource*) = 0;
     65    virtual bool didRemoveMediaStreamTrack(MediaStreamSource*) = 0;
     66
    6067    virtual void didStopLocalMediaStream(MediaStreamDescriptor*) = 0;
    6168    virtual void didCreateMediaStream(MediaStreamDescriptor*) = 0;
     
    6572
    6673    void endLocalMediaStream(MediaStreamDescriptor*);
     74    static MediaStreamCenter& platformCenter();
    6775};
    6876
  • trunk/Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp

    r155477 r156473  
    4848}
    4949
    50 PassRefPtr<MediaStreamDescriptor> MediaStreamDescriptor::create(const MediaStreamComponentVector& audioComponents, const MediaStreamComponentVector& videoComponents)
     50void MediaStreamDescriptor::addSource(PassRefPtr<MediaStreamSource> source)
    5151{
    52     return adoptRef(new MediaStreamDescriptor(createCanonicalUUIDString(), audioComponents, videoComponents));
    53 }
    54 
    55 void MediaStreamDescriptor::addComponent(PassRefPtr<MediaStreamComponent> component)
    56 {
    57     switch (component->source()->type()) {
    58     case MediaStreamSource::TypeAudio:
    59         if (m_audioComponents.find(component) == notFound)
    60             m_audioComponents.append(component);
     52    switch (source->type()) {
     53    case MediaStreamSource::Audio:
     54        if (m_audioStreamSources.find(source) == notFound)
     55            m_audioStreamSources.append(source);
    6156        break;
    62     case MediaStreamSource::TypeVideo:
    63         if (m_videoComponents.find(component) == notFound)
    64             m_videoComponents.append(component);
     57    case MediaStreamSource::Video:
     58        if (m_videoStreamSources.find(source) == notFound)
     59            m_videoStreamSources.append(source);
    6560        break;
    6661    }
    6762}
    6863
    69 void MediaStreamDescriptor::removeComponent(PassRefPtr<MediaStreamComponent> component)
     64void MediaStreamDescriptor::removeSource(PassRefPtr<MediaStreamSource> source)
    7065{
    7166    size_t pos = notFound;
    72     switch (component->source()->type()) {
    73     case MediaStreamSource::TypeAudio:
    74         pos = m_audioComponents.find(component);
     67    switch (source->type()) {
     68    case MediaStreamSource::Audio:
     69        pos = m_audioStreamSources.find(source);
    7570        if (pos != notFound)
    76             m_audioComponents.remove(pos);
     71            m_audioStreamSources.remove(pos);
    7772        break;
    78     case MediaStreamSource::TypeVideo:
    79         pos = m_videoComponents.find(component);
     73    case MediaStreamSource::Video:
     74        pos = m_videoStreamSources.find(source);
    8075        if (pos != notFound)
    81             m_videoComponents.remove(pos);
     76            m_videoStreamSources.remove(pos);
    8277        break;
    8378    }
    8479}
    8580
    86 void MediaStreamDescriptor::addRemoteTrack(MediaStreamComponent* component)
     81void MediaStreamDescriptor::addRemoteSource(MediaStreamSource* source)
    8782{
    8883    if (m_client)
    89         m_client->addRemoteTrack(component);
     84        m_client->addRemoteSource(source);
    9085    else
    91         addComponent(component);
     86        addSource(source);
    9287}
    9388
    94 void MediaStreamDescriptor::removeRemoteTrack(MediaStreamComponent* component)
     89void MediaStreamDescriptor::removeRemoteSource(MediaStreamSource* source)
    9590{
    9691    if (m_client)
    97         m_client->removeRemoteTrack(component);
     92        m_client->removeRemoteSource(source);
    9893    else
    99         removeComponent(component);
     94        removeSource(source);
    10095}
    10196
     
    106101{
    107102    ASSERT(m_id.length());
    108     for (size_t i = 0; i < audioSources.size(); i++)
    109         m_audioComponents.append(MediaStreamComponent::create(this, audioSources[i]));
     103    for (size_t i = 0; i < audioSources.size(); i++) {
     104        audioSources[i]->setStream(this);
     105        m_audioStreamSources.append(audioSources[i]);
     106    }
    110107
    111     for (size_t i = 0; i < videoSources.size(); i++)
    112         m_videoComponents.append(MediaStreamComponent::create(this, videoSources[i]));
     108    for (size_t i = 0; i < videoSources.size(); i++) {
     109        videoSources[i]->setStream(this);
     110        m_videoStreamSources.append(videoSources[i]);
     111    }
    113112}
    114113
    115 MediaStreamDescriptor::MediaStreamDescriptor(const String& id, const MediaStreamComponentVector& audioComponents, const MediaStreamComponentVector& videoComponents)
    116     : m_client(0)
    117     , m_id(id)
    118     , m_ended(false)
     114void MediaStreamDescriptor::setEnded()
    119115{
    120     ASSERT(m_id.length());
    121     for (MediaStreamComponentVector::const_iterator iter = audioComponents.begin(); iter != audioComponents.end(); ++iter) {
    122         (*iter)->setStream(this);
    123         m_audioComponents.append((*iter));
    124     }
    125     for (MediaStreamComponentVector::const_iterator iter = videoComponents.begin(); iter != videoComponents.end(); ++iter) {
    126         (*iter)->setStream(this);
    127         m_videoComponents.append((*iter));
    128     }
     116    if (m_client)
     117        m_client->streamDidEnd();
     118    m_ended = true;
     119    for (size_t i = 0; i < m_audioStreamSources.size(); i++)
     120        m_audioStreamSources[i]->setReadyState(MediaStreamSource::Ended);
     121    for (size_t i = 0; i < m_videoStreamSources.size(); i++)
     122        m_videoStreamSources[i]->setReadyState(MediaStreamSource::Ended);
    129123}
    130124
  • trunk/Source/WebCore/platform/mediastream/MediaStreamDescriptor.h

    r155573 r156473  
    3535#if ENABLE(MEDIA_STREAM)
    3636
    37 #include "MediaStreamComponent.h"
    3837#include "MediaStreamSource.h"
    39 #include "UUID.h"
    4038#include <wtf/RefCounted.h>
    4139#include <wtf/Vector.h>
     
    4745    virtual ~MediaStreamDescriptorClient() { }
    4846
    49     virtual void trackEnded() = 0;
    50     virtual void streamEnded() = 0;
    51     virtual void addRemoteTrack(MediaStreamComponent*) = 0;
    52     virtual void removeRemoteTrack(MediaStreamComponent*) = 0;
     47    virtual void trackDidEnd() = 0;
     48    virtual void streamDidEnd() = 0;
     49    virtual void addRemoteSource(MediaStreamSource*) = 0;
     50    virtual void removeRemoteSource(MediaStreamSource*) = 0;
    5351};
    5452
    5553class MediaStreamDescriptor : public RefCounted<MediaStreamDescriptor> {
    5654public:
    57     class ExtraData : public RefCounted<ExtraData> {
    58     public:
    59         virtual ~ExtraData() { }
    60     };
    6155
    6256    static PassRefPtr<MediaStreamDescriptor> create(const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources);
    63     static PassRefPtr<MediaStreamDescriptor> create(const MediaStreamComponentVector& audioComponents, const MediaStreamComponentVector& videoComponents);
    6457
    6558    MediaStreamDescriptorClient* client() const { return m_client; }
     
    6861    String id() const { return m_id; }
    6962
    70     unsigned numberOfAudioComponents() const { return m_audioComponents.size(); }
    71     MediaStreamComponent* audioComponent(unsigned index) const { return m_audioComponents[index].get(); }
     63    unsigned numberOfAudioStreams() const { return m_audioStreamSources.size(); }
     64    MediaStreamSource* audioStreams(unsigned index) const { return m_audioStreamSources[index].get(); }
    7265
    73     unsigned numberOfVideoComponents() const { return m_videoComponents.size(); }
    74     MediaStreamComponent* videoComponent(unsigned index) const { return m_videoComponents[index].get(); }
     66    unsigned numberOfVideoStreams() const { return m_videoStreamSources.size(); }
     67    MediaStreamSource* videoStreams(unsigned index) const { return m_videoStreamSources[index].get(); }
    7568
    76     void addComponent(PassRefPtr<MediaStreamComponent>);
    77     void removeComponent(PassRefPtr<MediaStreamComponent>);
     69    void addSource(PassRefPtr<MediaStreamSource>);
     70    void removeSource(PassRefPtr<MediaStreamSource>);
    7871
    79     void addRemoteTrack(MediaStreamComponent*);
    80     void removeRemoteTrack(MediaStreamComponent*);
     72    void addRemoteSource(MediaStreamSource*);
     73    void removeRemoteSource(MediaStreamSource*);
    8174
    8275    bool ended() const { return m_ended; }
    83     void setEnded() { m_ended = true; }
    84 
    85     PassRefPtr<ExtraData> extraData() const { return m_extraData; }
    86     void setExtraData(PassRefPtr<ExtraData> extraData) { m_extraData = extraData; }
     76    void setEnded();
    8777
    8878private:
    8979    MediaStreamDescriptor(const String& id, const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources);
    90     MediaStreamDescriptor(const String& id, const MediaStreamComponentVector& audioComponents, const MediaStreamComponentVector& videoComponents);
    9180
    9281    MediaStreamDescriptorClient* m_client;
    9382    String m_id;
    94     Vector<RefPtr<MediaStreamComponent> > m_audioComponents;
    95     Vector<RefPtr<MediaStreamComponent> > m_videoComponents;
     83    Vector<RefPtr<MediaStreamSource> > m_audioStreamSources;
     84    Vector<RefPtr<MediaStreamSource> > m_videoStreamSources;
    9685    bool m_ended;
    97 
    98     RefPtr<ExtraData> m_extraData;
    9986};
    10087
  • trunk/Source/WebCore/platform/mediastream/MediaStreamSource.cpp

    r144748 r156473  
    3434
    3535#include "MediaStreamSource.h"
     36
     37#include "AudioDestinationConsumer.h"
    3638#include <wtf/PassOwnPtr.h>
    3739
     
    4850    , m_name(name)
    4951    , m_readyState(readyState)
     52    , m_stream(0)
    5053    , m_requiresConsumer(requiresConsumer)
     54    , m_enabled(true)
     55    , m_muted(false)
    5156{
    5257}
     
    5459void MediaStreamSource::setReadyState(ReadyState readyState)
    5560{
    56     if (m_readyState != ReadyStateEnded && m_readyState != readyState) {
    57         m_readyState = readyState;
    58         for (Vector<Observer*>::iterator i = m_observers.begin(); i != m_observers.end(); ++i)
    59             (*i)->sourceChangedState();
    60     }
     61    if (m_readyState == Ended || m_readyState == readyState)
     62        return;
     63
     64    m_readyState = readyState;
     65    for (Vector<Observer*>::iterator i = m_observers.begin(); i != m_observers.end(); ++i)
     66        (*i)->sourceChangedState();
    6167}
    6268
     
    7177    if (pos != notFound)
    7278        m_observers.remove(pos);
     79}
     80
     81void MediaStreamSource::setStream(MediaStreamDescriptor* stream)
     82{
     83    ASSERT(!m_stream && stream);
     84    m_stream = stream;
     85}
     86
     87void MediaStreamSource::setMuted(bool muted)
     88{
     89    if (m_muted == muted)
     90        return;
     91
     92    m_muted = muted;
     93    for (Vector<Observer*>::iterator i = m_observers.begin(); i != m_observers.end(); ++i)
     94        (*i)->sourceChangedState();
    7395}
    7496
  • trunk/Source/WebCore/platform/mediastream/MediaStreamSource.h

    r155881 r156473  
    4343namespace WebCore {
    4444
     45class AudioBus;
     46class MediaStreamDescriptor;
     47
    4548class MediaStreamSource : public RefCounted<MediaStreamSource> {
    4649public:
     
    5154    };
    5255
    53     class ExtraData : public RefCounted<ExtraData> {
    54     public:
    55         virtual ~ExtraData() { }
    56     };
     56    enum Type { Audio, Video };
     57    enum ReadyState { New = 0, Live = 1, Ended = 2 };
    5758
    58     enum Type {
    59         TypeAudio,
    60         TypeVideo
    61     };
    62 
    63     enum ReadyState {
    64         ReadyStateLive = 0,
    65         ReadyStateMuted = 1,
    66         ReadyStateEnded = 2
    67     };
    68 
    69     static PassRefPtr<MediaStreamSource> create(const String& id, Type, const String& name, ReadyState = ReadyStateLive, bool requiresConsumer = false);
     59    static PassRefPtr<MediaStreamSource> create(const String& id, Type, const String& name, ReadyState = New, bool requiresConsumer = false);
    7060
    7161    const String& id() const { return m_id; }
     62
    7263    Type type() const { return m_type; }
    7364    const String& name() const { return m_name; }
     
    7970    void removeObserver(Observer*);
    8071
    81     PassRefPtr<ExtraData> extraData() const { return m_extraData; }
    82     void setExtraData(PassRefPtr<ExtraData> extraData) { m_extraData = extraData; }
     72    void setConstraints(PassRefPtr<MediaConstraints> constraints) { m_constraints = constraints; }
     73    MediaConstraints* constraints() const { return m_constraints.get(); }
    8374
    84     void setConstraints(PassRefPtr<MediaConstraints> constraints) { m_constraints = constraints; }
    85     MediaConstraints* constraints() { return m_constraints.get(); }
    86 
    87     const String& deviceId() { return m_deviceId; }
     75    const String& deviceId() const { return m_deviceId; }
    8876    void setDeviceId(const String& deviceId) { m_deviceId = deviceId; }
    8977
     78    bool enabled() const { return m_enabled; }
     79    void setEnabled(bool enabled) { m_enabled = enabled; }
     80
     81    bool muted() const { return m_muted; }
     82    void setMuted(bool);
     83   
    9084    void setAudioFormat(size_t numberOfChannels, float sampleRate);
    9185    void consumeAudio(AudioBus*, size_t numberOfFrames);
     86
     87    MediaStreamDescriptor* stream() const { return m_stream; }
     88    void setStream(MediaStreamDescriptor*);
    9289
    9390    bool requiresAudioConsumer() const { return m_requiresConsumer; }
    9491    void addAudioConsumer(PassRefPtr<AudioDestinationConsumer>);
    9592    bool removeAudioConsumer(AudioDestinationConsumer*);
    96     const Vector<RefPtr<AudioDestinationConsumer> >& audioConsumers() { return m_audioConsumers; }
     93    const Vector<RefPtr<AudioDestinationConsumer> >& audioConsumers() const { return m_audioConsumers; }
    9794
    9895private:
     
    104101    ReadyState m_readyState;
    105102    String m_deviceId;
    106     bool m_requiresConsumer;
    107103    Vector<Observer*> m_observers;
    108104    Mutex m_audioConsumersLock;
    109     Vector<RefPtr<AudioDestinationConsumer> > m_audioConsumers;
    110     RefPtr<ExtraData> m_extraData;
     105    Vector<RefPtr<AudioDestinationConsumer>> m_audioConsumers;
    111106    RefPtr<MediaConstraints> m_constraints;
     107    MediaStreamDescriptor* m_stream;
     108
     109    bool m_requiresConsumer;
     110    bool m_enabled;
     111    bool m_muted;
    112112};
    113113
  • trunk/Source/WebCore/platform/mediastream/RTCPeerConnectionHandler.h

    r155954 r156473  
    4141
    4242class MediaConstraints;
    43 class MediaStreamComponent;
     43class MediaStreamSource;
    4444class RTCConfiguration;
    4545class RTCDTMFSenderHandler;
     
    8787    virtual void getStats(PassRefPtr<RTCStatsRequest>) = 0;
    8888    virtual PassOwnPtr<RTCDataChannelHandler> createDataChannel(const String& label, const RTCDataChannelInit&) = 0;
    89     virtual PassOwnPtr<RTCDTMFSenderHandler> createDTMFSender(PassRefPtr<MediaStreamComponent>) = 0;
     89    virtual PassOwnPtr<RTCDTMFSenderHandler> createDTMFSender(PassRefPtr<MediaStreamSource>) = 0;
    9090    virtual void stop() = 0;
    9191
  • trunk/Source/WebCore/platform/mediastream/RTCStatsRequest.h

    r131584 r156473  
    5151    virtual bool hasSelector() = 0;
    5252    virtual MediaStreamDescriptor* stream() = 0;
    53     virtual MediaStreamComponent* component() = 0;
    5453    virtual void requestSucceeded(PassRefPtr<RTCStatsResponseBase>) = 0;
    5554
  • trunk/Source/WebCore/platform/mediastream/blackberry/MediaStreamCenterBlackBerry.cpp

    r155992 r156473  
    4242namespace WebCore {
    4343
    44 MediaStreamCenter& MediaStreamCenter::instance()
     44MediaStreamCenter& MediaStreamCenter::platformCenter()
    4545{
    4646    ASSERT(isMainThread());
     
    5757}
    5858
    59 void MediaStreamCenterBlackBerry::queryMediaStreamSources(PassRefPtr<MediaStreamSourcesQueryClient> client)
     59void MediaStreamCenterBlackBerry::validateRequestConstraints(PassRefPtr<MediaStreamCreationClient>, PassRefPtr<MediaConstraints>, PassRefPtr<MediaConstraints>)
    6060{
    61     MediaStreamSourceVector audioSources, videoSources;
    62     client->didCompleteQuery(audioSources, videoSources);
     61    notImplemented();
     62}
     63   
     64void MediaStreamCenterBlackBerry::createMediaStream(PassRefPtr<MediaStreamCreationClient>, PassRefPtr<MediaConstraints>, PassRefPtr<MediaConstraints>)
     65{
     66    notImplemented();
    6367}
    6468
    65 bool MediaStreamCenterMac::getMediaStreamTrackSources(PassRefPtr<MediaStreamTrackSourcesRequestClient>)
     69bool MediaStreamCenterBlackBerry::getMediaStreamTrackSources(PassRefPtr<MediaStreamTrackSourcesRequestClient>)
    6670{
     71    notImplemented();
    6772    return false;
    6873}
    6974
    70 void MediaStreamCenterBlackBerry::didSetMediaStreamTrackEnabled(MediaStreamDescriptor*, MediaStreamComponent*)
     75void MediaStreamCenterBlackBerry::didSetMediaStreamTrackEnabled(MediaStreamSource*)
    7176{
     77    notImplemented();
    7278}
    7379
    74 bool MediaStreamCenterBlackBerry::didAddMediaStreamTrack(MediaStreamDescriptor*, MediaStreamComponent*)
     80bool MediaStreamCenterBlackBerry::didAddMediaStreamTrack(MediaStreamSource*)
    7581{
     82    notImplemented();
    7683    return false;
    7784}
    7885
    79 bool MediaStreamCenterBlackBerry::didRemoveMediaStreamTrack(MediaStreamDescriptor*, MediaStreamComponent*)
     86bool MediaStreamCenterBlackBerry::didRemoveMediaStreamTrack(MediaStreamSource*)
    8087{
     88    notImplemented();
    8189    return false;
    8290}
    8391
    84 void MediaStreamCenterBlackBerry::didStopLocalMediaStream(MediaStreamDescriptor*)
     92void MediaStreamCenterBlackBerry::didStopLocalMediaStream(MediaStreamDescriptor* stream)
    8593{
     94    endLocalMediaStream(stream);
    8695}
    8796
    8897void MediaStreamCenterBlackBerry::didCreateMediaStream(MediaStreamDescriptor*)
    8998{
     99    notImplemented();
    90100}
    91101
  • trunk/Source/WebCore/platform/mediastream/blackberry/MediaStreamCenterBlackBerry.h

    r155992 r156473  
    4242namespace WebCore {
    4343
    44 class MediaStreamComponent;
    4544class MediaStreamDescriptor;
     45class MediaStreamSource;
    4646class MediaStreamSourcesQueryClient;
    4747
     
    5252
    5353    // MediaStreamCenter
    54     virtual void queryMediaStreamSources(PassRefPtr<MediaStreamSourcesQueryClient>) OVERRIDE;
     54    virtual void validateRequestConstraints(PassRefPtr<MediaStreamCreationClient>, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints);
     55    virtual void createMediaStream(PassRefPtr<MediaStreamCreationClient>, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints);
    5556    virtual bool getMediaStreamTrackSources(PassRefPtr<MediaStreamTrackSourcesRequestClient>) OVERRIDE;
    56     virtual void didSetMediaStreamTrackEnabled(MediaStreamDescriptor*, MediaStreamComponent*) OVERRIDE;
    57     virtual bool didAddMediaStreamTrack(MediaStreamDescriptor*, MediaStreamComponent*) OVERRIDE;
    58     virtual bool didRemoveMediaStreamTrack(MediaStreamDescriptor*, MediaStreamComponent*) OVERRIDE;
     57    virtual void didSetMediaStreamTrackEnabled(MediaStreamSource*) OVERRIDE;
     58    virtual bool didAddMediaStreamTrack(MediaStreamSource*) OVERRIDE;
     59    virtual bool didRemoveMediaStreamTrack(MediaStreamSource*) OVERRIDE;
    5960    virtual void didStopLocalMediaStream(MediaStreamDescriptor*) OVERRIDE;
    6061    virtual void didCreateMediaStream(MediaStreamDescriptor*) OVERRIDE;
  • trunk/Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterGStreamer.cpp

    r155992 r156473  
    4242namespace WebCore {
    4343
    44 MediaStreamCenter& MediaStreamCenter::instance()
     44MediaStreamCenter& MediaStreamCenter::platformCenter()
    4545{
    4646    ASSERT(isMainThread());
     
    5757}
    5858
    59 void MediaStreamCenterGStreamer::queryMediaStreamSources(PassRefPtr<MediaStreamSourcesQueryClient> client)
     59void MediaStreamCenterGStreamer::validateRequestConstraints(PassRefPtr<MediaStreamCreationClient>, PassRefPtr<MediaConstraints>, PassRefPtr<MediaConstraints>)
    6060{
    61     MediaStreamSourceVector audioSources, videoSources;
    62     client->didCompleteQuery(audioSources, videoSources);
     61    notImplemented();
     62}
     63   
     64void MediaStreamCenterGStreamer::createMediaStream(PassRefPtr<MediaStreamCreationClient>, PassRefPtr<MediaConstraints>, PassRefPtr<MediaConstraints>)
     65{
     66    notImplemented();
    6367}
    6468
    65 bool MediaStreamCenterMac::getMediaStreamTrackSources(PassRefPtr<MediaStreamTrackSourcesRequestClient>)
     69bool MediaStreamCenterGStreamer::getMediaStreamTrackSources(PassRefPtr<MediaStreamTrackSourcesRequestClient>)
    6670{
     71    notImplemented();
    6772    return false;
    6873}
    6974
    70 void MediaStreamCenterGStreamer::didSetMediaStreamTrackEnabled(MediaStreamDescriptor*, MediaStreamComponent*)
     75void MediaStreamCenterGStreamer::didSetMediaStreamTrackEnabled(MediaStreamSource*)
    7176{
     77    notImplemented();
    7278}
    7379
    74 bool MediaStreamCenterGStreamer::didAddMediaStreamTrack(MediaStreamDescriptor*, MediaStreamComponent*)
     80bool MediaStreamCenterGStreamer::didAddMediaStreamTrack(MediaStreamSource*)
    7581{
     82    notImplemented();
    7683    return false;
    7784}
    7885
    79 bool MediaStreamCenterGStreamer::didRemoveMediaStreamTrack(MediaStreamDescriptor*, MediaStreamComponent*)
     86bool MediaStreamCenterGStreamer::didRemoveMediaStreamTrack(MediaStreamSource*)
    8087{
     88    notImplemented();
    8189    return false;
    8290}
    8391
    84 void MediaStreamCenterGStreamer::didStopLocalMediaStream(MediaStreamDescriptor*)
     92void MediaStreamCenterGStreamer::didStopLocalMediaStream(MediaStreamDescriptor* stream)
    8593{
     94    endLocalMediaStream(stream);
    8695}
    8796
    8897void MediaStreamCenterGStreamer::didCreateMediaStream(MediaStreamDescriptor*)
    8998{
     99    notImplemented();
    90100}
    91101
  • trunk/Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterGStreamer.h

    r155992 r156473  
    4242namespace WebCore {
    4343
    44 class MediaStreamComponent;
    4544class MediaStreamDescriptor;
     45class MediaStreamSource;
    4646class MediaStreamSourcesQueryClient;
    4747
     
    5252
    5353    // MediaStreamCenter
    54     virtual void queryMediaStreamSources(PassRefPtr<MediaStreamSourcesQueryClient>) OVERRIDE;
     54    virtual void validateRequestConstraints(PassRefPtr<MediaStreamCreationClient>, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints);
     55    virtual void createMediaStream(PassRefPtr<MediaStreamCreationClient>, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints);
    5556    virtual bool getMediaStreamTrackSources(PassRefPtr<MediaStreamTrackSourcesRequestClient>) OVERRIDE;
    56     virtual void didSetMediaStreamTrackEnabled(MediaStreamDescriptor*, MediaStreamComponent*) OVERRIDE;
    57     virtual bool didAddMediaStreamTrack(MediaStreamDescriptor*, MediaStreamComponent*) OVERRIDE;
    58     virtual bool didRemoveMediaStreamTrack(MediaStreamDescriptor*, MediaStreamComponent*) OVERRIDE;
     57    virtual void didSetMediaStreamTrackEnabled(MediaStreamSource*) OVERRIDE;
     58    virtual bool didAddMediaStreamTrack(MediaStreamSource*) OVERRIDE;
     59    virtual bool didRemoveMediaStreamTrack(MediaStreamSource*) OVERRIDE;
    5960    virtual void didStopLocalMediaStream(MediaStreamDescriptor*) OVERRIDE;
    6061    virtual void didCreateMediaStream(MediaStreamDescriptor*) OVERRIDE;
  • trunk/Source/WebCore/platform/mediastream/mac/MediaStreamCenterMac.cpp

    r155992 r156473  
    3535#include "MediaStreamCenterMac.h"
    3636
     37#include "MediaStreamCreationClient.h"
    3738#include "MediaStreamDescriptor.h"
    38 #include "MediaStreamSourcesQueryClient.h"
    3939#include "MediaStreamTrackSourcesRequestClient.h"
    4040#include "NotImplemented.h"
     
    4343namespace WebCore {
    4444
    45 MediaStreamCenter& MediaStreamCenter::instance()
     45MediaStreamCenter& MediaStreamCenter::platformCenter()
    4646{
    4747    ASSERT(isMainThread());
     
    5858}
    5959
    60 void MediaStreamCenterMac::queryMediaStreamSources(PassRefPtr<MediaStreamSourcesQueryClient>)
     60void MediaStreamCenterMac::validateRequestConstraints(PassRefPtr<MediaStreamCreationClient>, PassRefPtr<MediaConstraints>, PassRefPtr<MediaConstraints>)
     61{
     62    notImplemented();
     63}
     64   
     65void MediaStreamCenterMac::createMediaStream(PassRefPtr<MediaStreamCreationClient>, PassRefPtr<MediaConstraints>, PassRefPtr<MediaConstraints>)
    6166{
    6267    notImplemented();
     
    6974}
    7075
    71 void MediaStreamCenterMac::didSetMediaStreamTrackEnabled(MediaStreamDescriptor*, MediaStreamComponent*)
     76void MediaStreamCenterMac::didSetMediaStreamTrackEnabled(MediaStreamSource*)
    7277{
    7378    notImplemented();
    7479}
    7580
    76 bool MediaStreamCenterMac::didAddMediaStreamTrack(MediaStreamDescriptor*, MediaStreamComponent*)
     81bool MediaStreamCenterMac::didAddMediaStreamTrack(MediaStreamSource*)
    7782{
    7883    notImplemented();
     
    8085}
    8186
    82 bool MediaStreamCenterMac::didRemoveMediaStreamTrack(MediaStreamDescriptor*, MediaStreamComponent*)
     87bool MediaStreamCenterMac::didRemoveMediaStreamTrack(MediaStreamSource*)
    8388{
    8489    notImplemented();
  • trunk/Source/WebCore/platform/mediastream/mac/MediaStreamCenterMac.h

    r155992 r156473  
    4141namespace WebCore {
    4242
    43 class MediaStreamComponent;
    4443class MediaStreamDescriptor;
     44class MediaStreamSource;
    4545class MediaStreamSourcesQueryClient;
    4646
     
    5151
    5252    // MediaStreamCenter
    53     virtual void queryMediaStreamSources(PassRefPtr<MediaStreamSourcesQueryClient>) OVERRIDE;
    54    
     53    virtual void validateRequestConstraints(PassRefPtr<MediaStreamCreationClient>, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints);
     54    virtual void createMediaStream(PassRefPtr<MediaStreamCreationClient>, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints);
    5555    virtual bool getMediaStreamTrackSources(PassRefPtr<MediaStreamTrackSourcesRequestClient>) OVERRIDE;
    56     virtual void didSetMediaStreamTrackEnabled(MediaStreamDescriptor*, MediaStreamComponent*) OVERRIDE;
    57     virtual bool didAddMediaStreamTrack(MediaStreamDescriptor*, MediaStreamComponent*) OVERRIDE;
    58     virtual bool didRemoveMediaStreamTrack(MediaStreamDescriptor*, MediaStreamComponent*) OVERRIDE;
     56    virtual void didSetMediaStreamTrackEnabled(MediaStreamSource*) OVERRIDE;
     57    virtual bool didAddMediaStreamTrack(MediaStreamSource*) OVERRIDE;
     58    virtual bool didRemoveMediaStreamTrack(MediaStreamSource*) OVERRIDE;
    5959    virtual void didStopLocalMediaStream(MediaStreamDescriptor*) OVERRIDE;
    6060    virtual void didCreateMediaStream(MediaStreamDescriptor*) OVERRIDE;
Note: See TracChangeset for help on using the changeset viewer.