Changeset 87150 in webkit


Ignore:
Timestamp:
May 24, 2011 8:11:48 AM (13 years ago)
Author:
commit-queue@webkit.org
Message:

2011-05-24 Leandro Gracia Gil <leandrogracia@chromium.org>

Reviewed by Tony Gentilcore.

Media Stream API: adding Stream and GeneratedStream classes.
https://bugs.webkit.org/show_bug.cgi?id=56666

Add the code for the Stream and GeneratedStream classes and integrate it
with the existing stream generation requests.

Tests for the Media Stream API will be provided by the bug 56587.

  • CMakeLists.txt:
  • CodeGenerators.pri:
  • DerivedSources.cpp:
  • DerivedSources.make:
  • GNUmakefile.list.am:
  • WebCore.gypi:
  • WebCore.pro:
  • WebCore.vcproj/WebCore.vcproj:
  • WebCore.xcodeproj/project.pbxproj:
  • bindings/js/JSEventTarget.cpp: (WebCore::toJS):
  • bindings/v8/V8DOMWrapper.cpp: (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
  • dom/DOMAllInOne.cpp:
  • dom/EventTarget.cpp: (WebCore::EventTarget::toStream): (WebCore::EventTarget::toGeneratedStream):
  • dom/EventTarget.h:
  • dom/GeneratedStream.cpp: Added. (WebCore::GeneratedStream::DispatchUpdateTask::create): (WebCore::GeneratedStream::DispatchUpdateTask::performTask): (WebCore::GeneratedStream::DispatchUpdateTask::DispatchUpdateTask): (WebCore::GeneratedStream::create): (WebCore::GeneratedStream::GeneratedStream): (WebCore::GeneratedStream::~GeneratedStream): (WebCore::GeneratedStream::toGeneratedStream): (WebCore::GeneratedStream::detachEmbedder): (WebCore::GeneratedStream::stop): (WebCore::GeneratedStream::onStop):
  • dom/GeneratedStream.h: Added.
  • dom/GeneratedStream.idl: Added.
  • dom/Stream.cpp: Added. (WebCore::Stream::create): (WebCore::Stream::Stream): (WebCore::Stream::~Stream): (WebCore::Stream::toStream): (WebCore::Stream::streamEnded): (WebCore::Stream::scriptExecutionContext): (WebCore::Stream::eventTargetData): (WebCore::Stream::ensureEventTargetData):
  • dom/Stream.h: Added. (WebCore::Stream::readyState): (WebCore::Stream::label): (WebCore::Stream::refEventTarget): (WebCore::Stream::derefEventTarget):
  • dom/Stream.idl: Added.
  • page/CallbackTask.h: (WebCore::CallbackTask1::Scheduler::~Scheduler):
  • page/MediaStreamClient.h:
  • page/MediaStreamController.cpp: (WebCore::MediaStreamController::stopGeneratedStream): (WebCore::MediaStreamController::streamFailed):
  • page/MediaStreamController.h:
  • page/MediaStreamFrameController.cpp: (WebCore::MediaStreamFrameController::Request::Request): (WebCore::MediaStreamFrameController::GenerateStreamRequest::create): (WebCore::MediaStreamFrameController::GenerateStreamRequest::abort): (WebCore::MediaStreamFrameController::GenerateStreamRequest::GenerateStreamRequest): (WebCore::MediaStreamFrameController::unregister): (WebCore::MediaStreamFrameController::getStreamFromLabel): (WebCore::MediaStreamFrameController::generateStream): (WebCore::MediaStreamFrameController::stopGeneratedStream): (WebCore::MediaStreamFrameController::streamGenerated): (WebCore::MediaStreamFrameController::streamGenerationFailed): (WebCore::MediaStreamFrameController::streamFailed):
  • page/MediaStreamFrameController.h: (WebCore::MediaStreamFrameController::StreamClient::StreamClient): (WebCore::MediaStreamFrameController::StreamClient::isGeneratedStream):
  • page/NavigatorUserMediaError.h: (WebCore::NavigatorUserMediaError::create): (WebCore::NavigatorUserMediaError::NavigatorUserMediaError):
  • page/NavigatorUserMediaSuccessCallback.h:
  • page/NavigatorUserMediaSuccessCallback.idl:
Location:
trunk/Source/WebCore
Files:
2 added
24 edited
4 copied

Legend:

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

    r87143 r87150  
    19411941    LIST(APPEND WebCore_SOURCES
    19421942        bindings/js/JSNavigatorCustom.cpp
     1943        dom/GeneratedStream.cpp
     1944        dom/Stream.cpp
    19431945        page/MediaStreamController.cpp
    19441946        page/MediaStreamFrameController.cpp
     
    19461948
    19471949    LIST(APPEND WebCore_IDL_FILES
     1950        dom/GeneratedStream.idl
     1951        dom/Stream.idl
    19481952        page/NavigatorUserMediaError.idl
    19491953    )
  • trunk/Source/WebCore/ChangeLog

    r87147 r87150  
     12011-05-24  Leandro Gracia Gil  <leandrogracia@chromium.org>
     2
     3        Reviewed by Tony Gentilcore.
     4
     5        Media Stream API: adding Stream and GeneratedStream classes.
     6        https://bugs.webkit.org/show_bug.cgi?id=56666
     7
     8        Add the code for the Stream and GeneratedStream classes and integrate it
     9        with the existing stream generation requests.
     10
     11        Tests for the Media Stream API will be provided by the bug 56587.
     12
     13        * CMakeLists.txt:
     14        * CodeGenerators.pri:
     15        * DerivedSources.cpp:
     16        * DerivedSources.make:
     17        * GNUmakefile.list.am:
     18        * WebCore.gypi:
     19        * WebCore.pro:
     20        * WebCore.vcproj/WebCore.vcproj:
     21        * WebCore.xcodeproj/project.pbxproj:
     22        * bindings/js/JSEventTarget.cpp:
     23        (WebCore::toJS):
     24        * bindings/v8/V8DOMWrapper.cpp:
     25        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
     26        * dom/DOMAllInOne.cpp:
     27        * dom/EventTarget.cpp:
     28        (WebCore::EventTarget::toStream):
     29        (WebCore::EventTarget::toGeneratedStream):
     30        * dom/EventTarget.h:
     31        * dom/GeneratedStream.cpp: Added.
     32        (WebCore::GeneratedStream::DispatchUpdateTask::create):
     33        (WebCore::GeneratedStream::DispatchUpdateTask::performTask):
     34        (WebCore::GeneratedStream::DispatchUpdateTask::DispatchUpdateTask):
     35        (WebCore::GeneratedStream::create):
     36        (WebCore::GeneratedStream::GeneratedStream):
     37        (WebCore::GeneratedStream::~GeneratedStream):
     38        (WebCore::GeneratedStream::toGeneratedStream):
     39        (WebCore::GeneratedStream::detachEmbedder):
     40        (WebCore::GeneratedStream::stop):
     41        (WebCore::GeneratedStream::onStop):
     42        * dom/GeneratedStream.h: Added.
     43        * dom/GeneratedStream.idl: Added.
     44        * dom/Stream.cpp: Added.
     45        (WebCore::Stream::create):
     46        (WebCore::Stream::Stream):
     47        (WebCore::Stream::~Stream):
     48        (WebCore::Stream::toStream):
     49        (WebCore::Stream::streamEnded):
     50        (WebCore::Stream::scriptExecutionContext):
     51        (WebCore::Stream::eventTargetData):
     52        (WebCore::Stream::ensureEventTargetData):
     53        * dom/Stream.h: Added.
     54        (WebCore::Stream::readyState):
     55        (WebCore::Stream::label):
     56        (WebCore::Stream::refEventTarget):
     57        (WebCore::Stream::derefEventTarget):
     58        * dom/Stream.idl: Added.
     59        * page/CallbackTask.h:
     60        (WebCore::CallbackTask1::Scheduler::~Scheduler):
     61        * page/MediaStreamClient.h:
     62        * page/MediaStreamController.cpp:
     63        (WebCore::MediaStreamController::stopGeneratedStream):
     64        (WebCore::MediaStreamController::streamFailed):
     65        * page/MediaStreamController.h:
     66        * page/MediaStreamFrameController.cpp:
     67        (WebCore::MediaStreamFrameController::Request::Request):
     68        (WebCore::MediaStreamFrameController::GenerateStreamRequest::create):
     69        (WebCore::MediaStreamFrameController::GenerateStreamRequest::abort):
     70        (WebCore::MediaStreamFrameController::GenerateStreamRequest::GenerateStreamRequest):
     71        (WebCore::MediaStreamFrameController::unregister):
     72        (WebCore::MediaStreamFrameController::getStreamFromLabel):
     73        (WebCore::MediaStreamFrameController::generateStream):
     74        (WebCore::MediaStreamFrameController::stopGeneratedStream):
     75        (WebCore::MediaStreamFrameController::streamGenerated):
     76        (WebCore::MediaStreamFrameController::streamGenerationFailed):
     77        (WebCore::MediaStreamFrameController::streamFailed):
     78        * page/MediaStreamFrameController.h:
     79        (WebCore::MediaStreamFrameController::StreamClient::StreamClient):
     80        (WebCore::MediaStreamFrameController::StreamClient::isGeneratedStream):
     81        * page/NavigatorUserMediaError.h:
     82        (WebCore::NavigatorUserMediaError::create):
     83        (WebCore::NavigatorUserMediaError::NavigatorUserMediaError):
     84        * page/NavigatorUserMediaSuccessCallback.h:
     85        * page/NavigatorUserMediaSuccessCallback.idl:
     86
    1872011-05-23  Antti Koivisto  <antti@apple.com>
    288
  • trunk/Source/WebCore/CodeGenerators.pri

    r87143 r87150  
    133133#    dom/EventListener.idl \
    134134#    dom/EventTarget.idl \
     135    dom/GeneratedStream.idl \
    135136    dom/HashChangeEvent.idl \
    136137    dom/KeyboardEvent.idl \
     
    153154    dom/RangeException.idl \
    154155    dom/Range.idl \
     156    dom/Stream.idl \
    155157    dom/StringCallback.idl \
    156158    dom/Text.idl \
  • trunk/Source/WebCore/DerivedSources.cpp

    r87143 r87150  
    130130#include "JSWebKitFlags.cpp"
    131131#include "JSFloat32Array.cpp"
     132#include "JSGeneratedStream.cpp"
    132133#include "JSGeolocation.cpp"
    133134#include "JSGeoposition.cpp"
     
    287288#include "JSStorageInfoQuotaCallback.cpp"
    288289#include "JSStorageInfoUsageCallback.cpp"
     290#include "JSStream.cpp"
    289291#include "JSStringCallback.cpp"
    290292#include "JSStyleMedia.cpp"
  • trunk/Source/WebCore/DerivedSources.make

    r87143 r87150  
    198198    FileSystemCallback \
    199199    WebKitFlags \
     200    GeneratedStream \
    200201    Geolocation \
    201202    Geoposition \
     
    358359    StorageInfoQuotaCallback \
    359360    StorageInfoUsageCallback \
     361    Stream \
    360362    StringCallback \
    361363    SVGAElement \
  • trunk/Source/WebCore/GNUmakefile.list.am

    r87143 r87150  
    175175        DerivedSources/WebCore/JSFloat32Array.cpp \
    176176        DerivedSources/WebCore/JSFloat32Array.h \
     177        DerivedSources/WebCore/JSGeneratedStream.cpp \
     178        DerivedSources/WebCore/JSGeneratedStream.h \
    177179        DerivedSources/WebCore/JSGeolocation.cpp \
    178180        DerivedSources/WebCore/JSGeolocation.h \
     
    450452        DerivedSources/WebCore/JSStorageInfoQuotaCallback.h \
    451453        DerivedSources/WebCore/JSStorageInfoUsageCallback.h \
     454        DerivedSources/WebCore/JSStream.cpp \
     455        DerivedSources/WebCore/JSStream.h \
    452456        DerivedSources/WebCore/JSStyleMedia.cpp \
    453457        DerivedSources/WebCore/JSStyleMedia.h \
     
    11531157        Source/WebCore/dom/ExceptionCode.h \
    11541158        Source/WebCore/dom/FragmentScriptingPermission.h \
     1159        Source/WebCore/dom/GeneratedStream.cpp \
     1160        Source/WebCore/dom/GeneratedStream.h \
    11551161        Source/WebCore/dom/IgnoreDestructiveWriteCountIncrementer.h \
    11561162        Source/WebCore/dom/IconURL.cpp \
     
    12501256        Source/WebCore/dom/StaticNodeList.cpp \
    12511257        Source/WebCore/dom/StaticNodeList.h \
     1258        Source/WebCore/dom/Stream.cpp \
     1259        Source/WebCore/dom/Stream.h \
    12521260        Source/WebCore/dom/StyledElement.cpp \
    12531261        Source/WebCore/dom/StyledElement.h \
  • trunk/Source/WebCore/WebCore.gypi

    r87143 r87150  
    11411141            'dom/EventListener.idl',
    11421142            'dom/EventTarget.idl',
     1143            'dom/GeneratedStream.idl',
    11431144            'dom/HashChangeEvent.idl',
    11441145            'dom/KeyboardEvent.idl',
     
    11621163            'dom/RangeException.idl',
    11631164            'dom/RequestAnimationFrameCallback.idl',
     1165            'dom/Stream.idl',
    11641166            'dom/StringCallback.idl',
    11651167            'dom/Text.idl',
     
    24722474            'dom/ExceptionBase.h',
    24732475            'dom/ExceptionCode.cpp',
     2476            'dom/GeneratedStream.cpp',
     2477            'dom/GeneratedStream.h',
    24742478            'dom/HashChangeEvent.h',
    24752479            'dom/IgnoreDestructiveWriteCountIncrementer.h',
     
    25542558            'dom/StaticNodeList.cpp',
    25552559            'dom/StaticNodeList.h',
     2560            'dom/Stream.cpp',
     2561            'dom/Stream.h',
    25562562            'dom/StringCallback.cpp',
    25572563            'dom/StringCallback.h',
  • trunk/Source/WebCore/WebCore.pro

    r87143 r87150  
    31053105contains(DEFINES, ENABLE_MEDIA_STREAM=1) {
    31063106    HEADERS += \
     3107        dom/GeneratedStream.h \
     3108        dom/Stream.h \
    31073109        page/CallbackTask.h \
    31083110        page/MediaStreamClient.h \
     
    31143116
    31153117    SOURCES += \
     3118        dom/GeneratedStream.cpp \
     3119        dom/Stream.cpp \
    31163120        page/MediaStreamController.cpp \
    31173121        page/MediaStreamFrameController.cpp
  • trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj

    r87143 r87150  
    53195319                        </File>
    53205320                        <File
     5321                                RelativePath="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\JSGeneratedStream.cpp"
     5322                                >
     5323                                <FileConfiguration
     5324                                        Name="Debug|Win32"
     5325                                        ExcludedFromBuild="true"
     5326                                        >
     5327                                        <Tool
     5328                                                Name="VCCLCompilerTool"
     5329                                        />
     5330                                </FileConfiguration>
     5331                                <FileConfiguration
     5332                                        Name="Release|Win32"
     5333                                        ExcludedFromBuild="true"
     5334                                        >
     5335                                        <Tool
     5336                                                Name="VCCLCompilerTool"
     5337                                        />
     5338                                </FileConfiguration>
     5339                                <FileConfiguration
     5340                                        Name="Debug_Cairo_CFLite|Win32"
     5341                                        ExcludedFromBuild="true"
     5342                                        >
     5343                                        <Tool
     5344                                                Name="VCCLCompilerTool"
     5345                                        />
     5346                                </FileConfiguration>
     5347                                <FileConfiguration
     5348                                        Name="Release_Cairo_CFLite|Win32"
     5349                                        ExcludedFromBuild="true"
     5350                                        >
     5351                                        <Tool
     5352                                                Name="VCCLCompilerTool"
     5353                                        />
     5354                                </FileConfiguration>
     5355                                <FileConfiguration
     5356                                        Name="Debug_All|Win32"
     5357                                        ExcludedFromBuild="true"
     5358                                        >
     5359                                        <Tool
     5360                                                Name="VCCLCompilerTool"
     5361                                        />
     5362                                </FileConfiguration>
     5363                                <FileConfiguration
     5364                                        Name="Production|Win32"
     5365                                        ExcludedFromBuild="true"
     5366                                        >
     5367                                        <Tool
     5368                                                Name="VCCLCompilerTool"
     5369                                        />
     5370                                </FileConfiguration>
     5371                        </File>
     5372                        <File
     5373                                RelativePath="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\JSGeneratedStream.h"
     5374                                >
     5375                        </File>
     5376                        <File
    53215377                                RelativePath="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\JSGeolocation.cpp"
    53225378                                >
     
    1342013476                        <File
    1342113477                                RelativePath="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\JSStorageInfoUsageCallback.h"
     13478                                >
     13479                        </File>
     13480                        <File
     13481                                RelativePath="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\JSStream.cpp"
     13482                                >
     13483                                <FileConfiguration
     13484                                        Name="Debug|Win32"
     13485                                        ExcludedFromBuild="true"
     13486                                        >
     13487                                        <Tool
     13488                                                Name="VCCLCompilerTool"
     13489                                        />
     13490                                </FileConfiguration>
     13491                                <FileConfiguration
     13492                                        Name="Release|Win32"
     13493                                        ExcludedFromBuild="true"
     13494                                        >
     13495                                        <Tool
     13496                                                Name="VCCLCompilerTool"
     13497                                        />
     13498                                </FileConfiguration>
     13499                                <FileConfiguration
     13500                                        Name="Debug_Cairo_CFLite|Win32"
     13501                                        ExcludedFromBuild="true"
     13502                                        >
     13503                                        <Tool
     13504                                                Name="VCCLCompilerTool"
     13505                                        />
     13506                                </FileConfiguration>
     13507                                <FileConfiguration
     13508                                        Name="Release_Cairo_CFLite|Win32"
     13509                                        ExcludedFromBuild="true"
     13510                                        >
     13511                                        <Tool
     13512                                                Name="VCCLCompilerTool"
     13513                                        />
     13514                                </FileConfiguration>
     13515                                <FileConfiguration
     13516                                        Name="Debug_All|Win32"
     13517                                        ExcludedFromBuild="true"
     13518                                        >
     13519                                        <Tool
     13520                                                Name="VCCLCompilerTool"
     13521                                        />
     13522                                </FileConfiguration>
     13523                                <FileConfiguration
     13524                                        Name="Production|Win32"
     13525                                        ExcludedFromBuild="true"
     13526                                        >
     13527                                        <Tool
     13528                                                Name="VCCLCompilerTool"
     13529                                        />
     13530                                </FileConfiguration>
     13531                        </File>
     13532                        <File
     13533                                RelativePath="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\JSStream.h"
    1342213534                                >
    1342313535                        </File>
     
    4469944811                        </File>
    4470044812                        <File
     44813                                RelativePath="..\dom\GeneratedStream.cpp"
     44814                                >
     44815                                <FileConfiguration
     44816                                        Name="Debug|Win32"
     44817                                        ExcludedFromBuild="true"
     44818                                        >
     44819                                        <Tool
     44820                                                Name="VCCLCompilerTool"
     44821                                        />
     44822                                </FileConfiguration>
     44823                                <FileConfiguration
     44824                                        Name="Release|Win32"
     44825                                        ExcludedFromBuild="true"
     44826                                        >
     44827                                        <Tool
     44828                                                Name="VCCLCompilerTool"
     44829                                        />
     44830                                </FileConfiguration>
     44831                                <FileConfiguration
     44832                                        Name="Debug_Cairo_CFLite|Win32"
     44833                                        ExcludedFromBuild="true"
     44834                                        >
     44835                                        <Tool
     44836                                                Name="VCCLCompilerTool"
     44837                                        />
     44838                                </FileConfiguration>
     44839                                <FileConfiguration
     44840                                        Name="Release_Cairo_CFLite|Win32"
     44841                                        ExcludedFromBuild="true"
     44842                                        >
     44843                                        <Tool
     44844                                                Name="VCCLCompilerTool"
     44845                                        />
     44846                                </FileConfiguration>
     44847                                <FileConfiguration
     44848                                        Name="Debug_All|Win32"
     44849                                        ExcludedFromBuild="true"
     44850                                        >
     44851                                        <Tool
     44852                                                Name="VCCLCompilerTool"
     44853                                        />
     44854                                </FileConfiguration>
     44855                                <FileConfiguration
     44856                                        Name="Production|Win32"
     44857                                        ExcludedFromBuild="true"
     44858                                        >
     44859                                        <Tool
     44860                                                Name="VCCLCompilerTool"
     44861                                        />
     44862                                </FileConfiguration>
     44863                        </File>
     44864                        <File
     44865                                RelativePath="..\dom\GeneratedStream.h"
     44866                                >
     44867                        </File>
     44868                        <File
    4470144869                                RelativePath="..\dom\HashChangeEvent.h"
    4470244870                                >
     
    4704847216                        <File
    4704947217                                RelativePath="..\dom\StaticNodeList.h"
     47218                                >
     47219                        </File>
     47220                        <File
     47221                                RelativePath="..\dom\Stream.cpp"
     47222                                >
     47223                                <FileConfiguration
     47224                                        Name="Debug|Win32"
     47225                                        ExcludedFromBuild="true"
     47226                                        >
     47227                                        <Tool
     47228                                                Name="VCCLCompilerTool"
     47229                                        />
     47230                                </FileConfiguration>
     47231                                <FileConfiguration
     47232                                        Name="Release|Win32"
     47233                                        ExcludedFromBuild="true"
     47234                                        >
     47235                                        <Tool
     47236                                                Name="VCCLCompilerTool"
     47237                                        />
     47238                                </FileConfiguration>
     47239                                <FileConfiguration
     47240                                        Name="Debug_Cairo_CFLite|Win32"
     47241                                        ExcludedFromBuild="true"
     47242                                        >
     47243                                        <Tool
     47244                                                Name="VCCLCompilerTool"
     47245                                        />
     47246                                </FileConfiguration>
     47247                                <FileConfiguration
     47248                                        Name="Release_Cairo_CFLite|Win32"
     47249                                        ExcludedFromBuild="true"
     47250                                        >
     47251                                        <Tool
     47252                                                Name="VCCLCompilerTool"
     47253                                        />
     47254                                </FileConfiguration>
     47255                                <FileConfiguration
     47256                                        Name="Debug_All|Win32"
     47257                                        ExcludedFromBuild="true"
     47258                                        >
     47259                                        <Tool
     47260                                                Name="VCCLCompilerTool"
     47261                                        />
     47262                                </FileConfiguration>
     47263                                <FileConfiguration
     47264                                        Name="Production|Win32"
     47265                                        ExcludedFromBuild="true"
     47266                                        >
     47267                                        <Tool
     47268                                                Name="VCCLCompilerTool"
     47269                                        />
     47270                                </FileConfiguration>
     47271                        </File>
     47272                        <File
     47273                                RelativePath="..\dom\Stream.h"
    4705047274                                >
    4705147275                        </File>
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r87143 r87150  
    41064106                B1E5459B134629C10092A545 /* NavigatorUserMediaErrorCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = B1E5458F134629C10092A545 /* NavigatorUserMediaErrorCallback.h */; };
    41074107                B1E5459D134629C10092A545 /* NavigatorUserMediaSuccessCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = B1E54591134629C10092A545 /* NavigatorUserMediaSuccessCallback.h */; };
     4108                B1E5457A1346291F0092A545 /* GeneratedStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B1E545711346291F0092A545 /* GeneratedStream.cpp */; };
     4109                B1E5457B1346291F0092A545 /* GeneratedStream.h in Headers */ = {isa = PBXBuildFile; fileRef = B1E545721346291F0092A545 /* GeneratedStream.h */; };
     4110                B1E5457D1346291F0092A545 /* Stream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B1E545741346291F0092A545 /* Stream.cpp */; };
     4111                B1E5457E1346291F0092A545 /* Stream.h in Headers */ = {isa = PBXBuildFile; fileRef = B1E545751346291F0092A545 /* Stream.h */; };
    41084112                B1E545DF13462B0B0092A545 /* JSNavigatorUserMediaError.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B1E545D113462B0B0092A545 /* JSNavigatorUserMediaError.cpp */; };
    41094113                B1E545E013462B0B0092A545 /* JSNavigatorUserMediaError.h in Headers */ = {isa = PBXBuildFile; fileRef = B1E545D213462B0B0092A545 /* JSNavigatorUserMediaError.h */; };
     
    41124116                B1E545E313462B0B0092A545 /* JSNavigatorUserMediaSuccessCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B1E545D513462B0B0092A545 /* JSNavigatorUserMediaSuccessCallback.cpp */; };
    41134117                B1E545E413462B0B0092A545 /* JSNavigatorUserMediaSuccessCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = B1E545D613462B0B0092A545 /* JSNavigatorUserMediaSuccessCallback.h */; };
     4118                B1E545DD13462B0B0092A545 /* JSGeneratedStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B1E545CF13462B0B0092A545 /* JSGeneratedStream.cpp */; };
     4119                B1E545DE13462B0B0092A545 /* JSGeneratedStream.h in Headers */ = {isa = PBXBuildFile; fileRef = B1E545D013462B0B0092A545 /* JSGeneratedStream.h */; };
     4120                B1E545E513462B0B0092A545 /* JSStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B1E545D713462B0B0092A545 /* JSStream.cpp */; };
     4121                B1E545E613462B0B0092A545 /* JSStream.h in Headers */ = {isa = PBXBuildFile; fileRef = B1E545D813462B0B0092A545 /* JSStream.h */; };
    41144122                B20111070AB7740500DB0E68 /* JSSVGAElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B20111050AB7740500DB0E68 /* JSSVGAElement.cpp */; };
    41154123                B20111080AB7740500DB0E68 /* JSSVGAElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B20111060AB7740500DB0E68 /* JSSVGAElement.h */; };
     
    1037910387                B1E5458B134629C10092A545 /* MediaStreamController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaStreamController.cpp; sourceTree = "<group>"; };
    1038010388                B1E5458C134629C10092A545 /* MediaStreamController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaStreamController.h; sourceTree = "<group>"; };
     10389                B1E545711346291F0092A545 /* GeneratedStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GeneratedStream.cpp; sourceTree = "<group>"; };
     10390                B1E545721346291F0092A545 /* GeneratedStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeneratedStream.h; sourceTree = "<group>"; };
     10391                B1E545731346291F0092A545 /* GeneratedStream.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = GeneratedStream.idl; sourceTree = "<group>"; };
     10392                B1E545741346291F0092A545 /* Stream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Stream.cpp; sourceTree = "<group>"; };
     10393                B1E545751346291F0092A545 /* Stream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Stream.h; sourceTree = "<group>"; };
     10394                B1E545761346291F0092A545 /* Stream.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Stream.idl; sourceTree = "<group>"; };
    1038110395                B1E5458D134629C10092A545 /* NavigatorUserMediaError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NavigatorUserMediaError.h; sourceTree = "<group>"; };
    1038210396                B1E5458E134629C10092A545 /* NavigatorUserMediaError.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = NavigatorUserMediaError.idl; sourceTree = "<group>"; };
     
    1038510399                B1E54591134629C10092A545 /* NavigatorUserMediaSuccessCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NavigatorUserMediaSuccessCallback.h; sourceTree = "<group>"; };
    1038610400                B1E54592134629C10092A545 /* NavigatorUserMediaSuccessCallback.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = NavigatorUserMediaSuccessCallback.idl; sourceTree = "<group>"; };
     10401                B1E545CF13462B0B0092A545 /* JSGeneratedStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSGeneratedStream.cpp; sourceTree = "<group>"; };
     10402                B1E545D013462B0B0092A545 /* JSGeneratedStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSGeneratedStream.h; sourceTree = "<group>"; };
     10403                B1E545D713462B0B0092A545 /* JSStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSStream.cpp; sourceTree = "<group>"; };
     10404                B1E545D813462B0B0092A545 /* JSStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSStream.h; sourceTree = "<group>"; };
    1038710405                B1E545D113462B0B0092A545 /* JSNavigatorUserMediaError.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSNavigatorUserMediaError.cpp; sourceTree = "<group>"; };
    1038810406                B1E545D213462B0B0092A545 /* JSNavigatorUserMediaError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSNavigatorUserMediaError.h; sourceTree = "<group>"; };
     
    1687716895                                93F9B7720BA5FDDC00854064 /* JSEntityReference.cpp */,
    1687816896                                93F9B7730BA5FDDC00854064 /* JSEntityReference.h */,
     16897                                B1E545CF13462B0B0092A545 /* JSGeneratedStream.cpp */,
     16898                                B1E545D013462B0B0092A545 /* JSGeneratedStream.h */,
    1687916899                                FE80DA5F0E9C4703000D6F75 /* JSGeolocation.cpp */,
    1688016900                                FE80DA600E9C4703000D6F75 /* JSGeolocation.h */,
     
    1690116921                                75415D53129AB2D2003AD669 /* JSSpeechInputResultList.cpp */,
    1690216922                                75415D54129AB2D2003AD669 /* JSSpeechInputResultList.h */,
     16923                                B1E545D713462B0B0092A545 /* JSStream.cpp */,
     16924                                B1E545D813462B0B0092A545 /* JSStream.h */,
    1690316925                                65DF31EF09D1CC60000BE325 /* JSText.cpp */,
    1690416926                                65DF31F009D1CC60000BE325 /* JSText.h */,
     
    1931319335                                935FBCF109BA143B00E230B1 /* ExceptionCode.h */,
    1931419336                                A853123C11D0471B00D4D077 /* FragmentScriptingPermission.h */,
     19337                                B1E545711346291F0092A545 /* GeneratedStream.cpp */,
     19338                                B1E545721346291F0092A545 /* GeneratedStream.h */,
     19339                                B1E545731346291F0092A545 /* GeneratedStream.idl */,
    1931519340                                2442BBF81194C9D300D49469 /* HashChangeEvent.h */,
    1931619341                                8482B7441198C32E00BFB005 /* HashChangeEvent.idl */,
     
    1943219457                                BC7FA62C0D1F0EFF00DB22A9 /* StaticNodeList.cpp */,
    1943319458                                BC7FA62B0D1F0EFF00DB22A9 /* StaticNodeList.h */,
     19459                                B1E545741346291F0092A545 /* Stream.cpp */,
     19460                                B1E545751346291F0092A545 /* Stream.h */,
     19461                                B1E545761346291F0092A545 /* Stream.idl */,
    1943419462                                8102C5871325BB1100DDE67A /* StringCallback.cpp */,
    1943519463                                81AC6C35131C57D30009A7E0 /* StringCallback.h */,
     
    2284022868                                598365DD1355F557001B185D /* JSPositionCallback.h in Headers */,
    2284122869                                598365DF1355F562001B185D /* JSPositionErrorCallback.h in Headers */,
     22870                                B1E5457B1346291F0092A545 /* GeneratedStream.h in Headers */,
     22871                                B1E5457E1346291F0092A545 /* Stream.h in Headers */,
     22872                                B1E545DE13462B0B0092A545 /* JSGeneratedStream.h in Headers */,
     22873                                B1E545E613462B0B0092A545 /* JSStream.h in Headers */,
    2284222874                        );
    2284322875                        runOnlyForDeploymentPostprocessing = 0;
     
    2551525547                                598365E41355F604001B185D /* JSPositionCallback.cpp in Sources */,
    2551625548                                598365E61355F60D001B185D /* JSPositionErrorCallback.cpp in Sources */,
     25549                                B1E5457A1346291F0092A545 /* GeneratedStream.cpp in Sources */,
     25550                                B1E5457D1346291F0092A545 /* Stream.cpp in Sources */,
     25551                                B1E545DD13462B0B0092A545 /* JSGeneratedStream.cpp in Sources */,
     25552                                B1E545E513462B0B0092A545 /* JSStream.cpp in Sources */,
    2551725553                        );
    2551825554                        runOnlyForDeploymentPostprocessing = 0;
  • trunk/Source/WebCore/bindings/js/JSEventTarget.cpp

    r84641 r87150  
    101101#endif
    102102
     103#if ENABLE(MEDIA_STREAM)
     104#include "GeneratedStream.h"
     105#include "Stream.h"
     106#endif
     107
    103108using namespace JSC;
    104109
     
    190195#endif
    191196
     197#if ENABLE(MEDIA_STREAM)
     198    if (GeneratedStream* generatedStream = target->toGeneratedStream())
     199        return toJS(exec, globalObject, generatedStream);
     200
     201    if (Stream* stream = target->toStream())
     202        return toJS(exec, globalObject, stream);
     203#endif
     204
    192205    ASSERT_NOT_REACHED();
    193206    return jsNull();
  • trunk/Source/WebCore/bindings/v8/V8DOMWrapper.cpp

    r84371 r87150  
    4949#include "V8FileReader.h"
    5050#include "V8FileWriter.h"
     51#include "V8GeneratedStream.h"
    5152#include "V8HTMLCollection.h"
    5253#include "V8HTMLDocument.h"
     
    6566#include "V8SharedWorker.h"
    6667#include "V8SharedWorkerContext.h"
     68#include "V8Stream.h"
    6769#include "V8StyleSheet.h"
    6870#include "V8WebSocket.h"
     
    449451#endif   
    450452
     453#if ENABLE(MEDIA_STREAM)
     454    if (GeneratedStream* generatedStream = target->toGeneratedStream())
     455        return toV8(generatedStream);
     456
     457    if (Stream* stream = target->toStream())
     458        return toV8(stream);
     459#endif
     460
    451461    ASSERT(0);
    452462    return notHandledByInterceptor();
  • trunk/Source/WebCore/dom/DOMAllInOne.cpp

    r87125 r87150  
    7676#include "ExceptionBase.cpp"
    7777#include "ExceptionCode.cpp"
     78#include "GeneratedStream.cpp"
    7879#include "IconURL.cpp"
    7980#include "KeyboardEvent.cpp"
     
    116117#include "StaticHashSetNodeList.cpp"
    117118#include "StaticNodeList.cpp"
     119#include "Stream.cpp"
    118120#include "StyleElement.cpp"
    119121#include "StyledElement.cpp"
  • trunk/Source/WebCore/dom/EventTarget.cpp

    r84741 r87150  
    206206#endif
    207207
     208#if ENABLE(MEDIA_STREAM)
     209Stream* EventTarget::toStream()
     210{
     211    return 0;
     212}
     213
     214GeneratedStream* EventTarget::toGeneratedStream()
     215{
     216    return 0;
     217}
     218#endif
     219
    208220bool EventTarget::addEventListener(const AtomicString& eventType, PassRefPtr<EventListener> listener, bool useCapture)
    209221{
  • trunk/Source/WebCore/dom/EventTarget.h

    r86135 r87150  
    5050    class FileReader;
    5151    class FileWriter;
     52    class GeneratedStream;
    5253    class IDBDatabase;
    5354    class IDBRequest;
     
    6263    class SharedWorker;
    6364    class SharedWorkerContext;
     65    class Stream;
    6466    class WebSocket;
    6567    class Worker;
     
    148150#endif
    149151
     152#if ENABLE(MEDIA_STREAM)
     153        virtual Stream* toStream();
     154        virtual GeneratedStream* toGeneratedStream();
     155#endif
     156
    150157        virtual ScriptExecutionContext* scriptExecutionContext() const = 0;
    151158
  • trunk/Source/WebCore/dom/GeneratedStream.h

    r87149 r87150  
    2323 */
    2424
    25 #ifndef MediaStreamClient_h
    26 #define MediaStreamClient_h
     25#ifndef GeneratedStream_h
     26#define GeneratedStream_h
    2727
    2828#if ENABLE(MEDIA_STREAM)
    2929
     30#include "Stream.h"
    3031#include <wtf/Forward.h>
    3132
    3233namespace WebCore {
    3334
    34 class SecurityOrigin;
     35class GeneratedStream : public Stream {
     36public:
     37    // FIXME: add audio and video tracks when available.
     38    static PassRefPtr<GeneratedStream> create(MediaStreamFrameController*, const String& label);
     39    virtual ~GeneratedStream();
    3540
    36 enum GenerateStreamOptionFlag {
    37     GenerateStreamRequestAudio = 1,
    38     GenerateStreamRequestVideoFacingUser = 1 << 1,
    39     GenerateStreamRequestVideoFacingEnvironment = 1 << 2,
    40 };
     41    void stop();
    4142
    42 typedef unsigned GenerateStreamOptionFlags;
     43    // MediaStreamFrameController::StreamClient implementation.
     44    virtual void detachEmbedder();
    4345
    44 class MediaStreamClient {
    45 public:
    46     // Notify the embedder client about the page controller being destroyed.
    47     virtual void mediaStreamDestroyed() = 0;
     46    // EventTarget.
     47    virtual GeneratedStream* toGeneratedStream();
    4848
    49     // Generate a new local stream.
    50     virtual void generateStream(int requestId, GenerateStreamOptionFlags, PassRefPtr<SecurityOrigin>) = 0;
     49private:
     50    GeneratedStream(MediaStreamFrameController*, const String& label);
     51    class DispatchUpdateTask;
     52    friend class DispatchUpdateTask;
    5153
    52 protected:
    53     virtual ~MediaStreamClient() { }
     54    void onStop();
    5455};
    5556
     
    5859#endif // ENABLE(MEDIA_STREAM)
    5960
    60 #endif // MediaStreamClient_h
     61#endif // GeneratedStream_h
  • trunk/Source/WebCore/dom/GeneratedStream.idl

    r87149 r87150  
    2323 */
    2424
    25 module window {
     25module core {
    2626    interface [
    2727        Conditional=MEDIA_STREAM,
    28         Callback=FunctionOnly
    29     ] NavigatorUserMediaSuccessCallback {
    30         // FIXME: implement the correct type when the GeneratedStream class is available.
    31         // boolean handleEvent(in GeneratedStream stream);
    32         boolean handleEvent(in int dummy);
     28        GenerateNativeConverter,
     29        EventTarget
     30    ] GeneratedStream : Stream {
     31        void stop();
     32
     33        // FIXME: implement audio and video tracks when available.
    3334    };
    3435
  • trunk/Source/WebCore/dom/Stream.cpp

    r87149 r87150  
    2323 */
    2424
    25 #ifndef MediaStreamClient_h
    26 #define MediaStreamClient_h
     25#include "config.h"
     26#include "Stream.h"
    2727
    2828#if ENABLE(MEDIA_STREAM)
    2929
    30 #include <wtf/Forward.h>
     30#include "Event.h"
     31#include "ScriptExecutionContext.h"
    3132
    3233namespace WebCore {
    3334
    34 class SecurityOrigin;
     35PassRefPtr<Stream> Stream::create(MediaStreamFrameController* frameController, const String& label)
     36{
     37    return adoptRef(new Stream(frameController, label));
     38}
    3539
    36 enum GenerateStreamOptionFlag {
    37     GenerateStreamRequestAudio = 1,
    38     GenerateStreamRequestVideoFacingUser = 1 << 1,
    39     GenerateStreamRequestVideoFacingEnvironment = 1 << 2,
    40 };
     40Stream::Stream(MediaStreamFrameController* frameController, const String& label, bool isGeneratedStream)
     41    : StreamClient(frameController, label, isGeneratedStream)
     42    , m_readyState(LIVE)
     43{
     44}
    4145
    42 typedef unsigned GenerateStreamOptionFlags;
     46Stream::~Stream()
     47{
     48}
    4349
    44 class MediaStreamClient {
    45 public:
    46     // Notify the embedder client about the page controller being destroyed.
    47     virtual void mediaStreamDestroyed() = 0;
     50Stream* Stream::toStream()
     51{
     52    return this;
     53}
    4854
    49     // Generate a new local stream.
    50     virtual void generateStream(int requestId, GenerateStreamOptionFlags, PassRefPtr<SecurityOrigin>) = 0;
     55void Stream::streamEnded()
     56{
     57    ASSERT(m_readyState != ENDED);
     58    m_readyState = ENDED;
     59    dispatchEvent(Event::create(eventNames().endedEvent, false, false));
     60}
    5161
    52 protected:
    53     virtual ~MediaStreamClient() { }
    54 };
     62ScriptExecutionContext* Stream::scriptExecutionContext() const
     63{
     64    return mediaStreamFrameController() ? mediaStreamFrameController()->scriptExecutionContext() : 0;
     65}
     66
     67EventTargetData* Stream::eventTargetData()
     68{
     69    return &m_eventTargetData;
     70}
     71
     72EventTargetData* Stream::ensureEventTargetData()
     73{
     74    return &m_eventTargetData;
     75}
    5576
    5677} // namespace WebCore
    5778
    5879#endif // ENABLE(MEDIA_STREAM)
    59 
    60 #endif // MediaStreamClient_h
  • trunk/Source/WebCore/dom/Stream.idl

    r87149 r87150  
    2323 */
    2424
    25 module window {
     25module core {
    2626    interface [
    2727        Conditional=MEDIA_STREAM,
    28         Callback=FunctionOnly
    29     ] NavigatorUserMediaSuccessCallback {
    30         // FIXME: implement the correct type when the GeneratedStream class is available.
    31         // boolean handleEvent(in GeneratedStream stream);
    32         boolean handleEvent(in int dummy);
     28        EventTarget
     29    ] Stream {
     30        readonly attribute DOMString label;
     31        // FIXME: implement the record method when StreamRecorder is available.
     32
     33        const unsigned short LIVE = 1;
     34        const unsigned short ENDED = 2;
     35        readonly attribute unsigned short readyState;
     36                 attribute EventListener onended;
     37
     38        // EventTarget interface
     39        void addEventListener(in DOMString type,
     40                              in EventListener listener,
     41                              in boolean useCapture);
     42        void removeEventListener(in DOMString type,
     43                                 in EventListener listener,
     44                                 in boolean useCapture);
     45        boolean dispatchEvent(in Event event)
     46            raises(EventException);
    3347    };
    3448
  • trunk/Source/WebCore/page/CallbackTask.h

    r86583 r87150  
    5252    class Scheduler {
    5353    public:
     54        virtual ~Scheduler() { }
     55
    5456        bool scheduleCallback(ScriptExecutionContext* context, PassRefPtr<ArgumentType> data)
    5557        {
  • trunk/Source/WebCore/page/MediaStreamClient.h

    r86583 r87150  
    5050    virtual void generateStream(int requestId, GenerateStreamOptionFlags, PassRefPtr<SecurityOrigin>) = 0;
    5151
     52    // Stop a generated stream.
     53    virtual void stopGeneratedStream(const String& streamLabel) = 0;
     54
    5255protected:
    5356    virtual ~MediaStreamClient() { }
  • trunk/Source/WebCore/page/MediaStreamController.cpp

    r86583 r87150  
    113113}
    114114
     115void MediaStreamController::stopGeneratedStream(const String& streamLabel)
     116{
     117    m_client->stopGeneratedStream(streamLabel);
     118}
     119
    115120void MediaStreamController::streamGenerated(int controllerRequestId, const String& streamLabel)
    116121{
     
    135140}
    136141
     142void MediaStreamController::streamFailed(const String& streamLabel)
     143{
     144    // Don't assert since the frame controller can have been destroyed by the time this is called.
     145    if (m_streams.contains(streamLabel))
     146        m_streams.get(streamLabel)->streamFailed(streamLabel);
     147}
     148
    137149} // namespace WebCore
    138150
  • trunk/Source/WebCore/page/MediaStreamController.h

    r86583 r87150  
    5151
    5252    void generateStream(MediaStreamFrameController*, int requestId, GenerateStreamOptionFlags, PassRefPtr<SecurityOrigin>);
     53    void stopGeneratedStream(const String& streamLabel);
    5354
    5455    void streamGenerated(int requestId, const String& streamLabel);
    5556    void streamGenerationFailed(int requestId, NavigatorUserMediaError::ErrorCode);
     57    void streamFailed(const String& streamLabel);
    5658
    5759private:
  • trunk/Source/WebCore/page/MediaStreamFrameController.cpp

    r86583 r87150  
    3131#include "Document.h"
    3232#include "Frame.h"
     33#include "GeneratedStream.h"
    3334#include "MediaStreamController.h"
    3435#include "NavigatorUserMediaErrorCallback.h"
     
    4344    WTF_MAKE_NONCOPYABLE(Request);
    4445public:
    45     Request(ScriptExecutionContext* scriptExecutionContext)
    46         : m_scriptExecutionContext(scriptExecutionContext) { }
    47 
    4846    virtual ~Request() { }
    4947
     
    5351
    5452    virtual void abort() = 0;
     53
     54protected:
     55    Request(ScriptExecutionContext* scriptExecutionContext)
     56        : m_scriptExecutionContext(scriptExecutionContext) { }
    5557
    5658private:
     
    6365    WTF_MAKE_NONCOPYABLE(GenerateStreamRequest);
    6466public:
     67    static PassRefPtr<GenerateStreamRequest> create(ScriptExecutionContext* scriptExecutionContext,
     68                                                    PassRefPtr<NavigatorUserMediaSuccessCallback> successCallback,
     69                                                    PassRefPtr<NavigatorUserMediaErrorCallback> errorCallback)
     70    {
     71        return adoptRef(new GenerateStreamRequest(scriptExecutionContext, successCallback, errorCallback));
     72    }
     73
     74    virtual ~GenerateStreamRequest() { }
     75
     76    virtual bool isGenerateStreamRequest() const { return true; }
     77
     78    virtual void abort()
     79    {
     80        if (m_errorCallback) {
     81            RefPtr<NavigatorUserMediaError> error = NavigatorUserMediaError::create(NavigatorUserMediaError::PERMISSION_DENIED);
     82            // The callback itself is made with the JS callback's context, not with the frame's context.
     83            m_errorCallback->scheduleCallback(scriptExecutionContext(), error);
     84        }
     85    }
     86
     87    PassRefPtr<NavigatorUserMediaSuccessCallback> successCallback() const { return m_successCallback; }
     88    PassRefPtr<NavigatorUserMediaErrorCallback> errorCallback() const { return m_errorCallback; }
     89
     90private:
    6591    GenerateStreamRequest(ScriptExecutionContext* scriptExecutionContext,
    6692                          PassRefPtr<NavigatorUserMediaSuccessCallback> successCallback,
     
    7096        , m_errorCallback(errorCallback) { }
    7197
    72     virtual ~GenerateStreamRequest() { }
    73 
    74     virtual bool isGenerateStreamRequest() const { return true; }
    75 
    76     virtual void abort()
    77     {
    78         if (m_errorCallback) {
    79             RefPtr<NavigatorUserMediaError> error = adoptRef(new NavigatorUserMediaError(NavigatorUserMediaError::PERMISSION_DENIED));
    80             // The callback itself is made with the JS callback's context, not with the frame's context.
    81             m_errorCallback->scheduleCallback(scriptExecutionContext(), error);
    82         }
    83     }
    84 
    85     PassRefPtr<NavigatorUserMediaSuccessCallback> successCallback() const { return m_successCallback; }
    86     PassRefPtr<NavigatorUserMediaErrorCallback> errorCallback() const { return m_errorCallback; }
    87 
    88 private:
    8998    RefPtr<NavigatorUserMediaSuccessCallback> m_successCallback;
    9099    RefPtr<NavigatorUserMediaErrorCallback> m_errorCallback;
     
    153162{
    154163    ASSERT(m_streams.contains(client->clientId()));
     164
     165    // Assuming we should stop any live streams when losing access to the embedder.
     166    if (client->isGeneratedStream()) {
     167        GeneratedStream* stream = static_cast<GeneratedStream*>(client);
     168        if (stream->readyState() == Stream::LIVE)
     169            stopGeneratedStream(stream->label());
     170    }
     171
    155172    m_streams.remove(client->clientId());
     173}
     174
     175Stream* MediaStreamFrameController::getStreamFromLabel(const String& label) const
     176{
     177    ASSERT(m_streams.contains(label));
     178    ASSERT(m_streams.get(label)->isStream());
     179    return static_cast<Stream*>(m_streams.get(label));
    156180}
    157181
     
    254278
    255279    int requestId = m_requests.getNextId();
    256     m_requests.add(requestId, adoptRef(new GenerateStreamRequest(scriptExecutionContext(), successCallback, errorCallback)));
     280    m_requests.add(requestId, GenerateStreamRequest::create(scriptExecutionContext(), successCallback, errorCallback));
    257281
    258282    if (!isClientAvailable()) {
     
    265289}
    266290
     291void MediaStreamFrameController::stopGeneratedStream(const String& streamLabel)
     292{
     293    ASSERT(m_streams.contains(streamLabel));
     294    ASSERT(m_streams.get(streamLabel)->isGeneratedStream());
     295
     296    if (isClientAvailable())
     297        pageController()->stopGeneratedStream(streamLabel);
     298}
     299
    267300void MediaStreamFrameController::streamGenerated(int requestId, const String& label)
    268301{
    269302    // Don't assert since the request can have been aborted as a result of embedder detachment.
    270     if (m_requests.contains(requestId)) {
    271         ASSERT(m_requests.get(requestId)->isGenerateStreamRequest());
    272         ASSERT(!label.isNull());
    273 
    274         // FIXME: create a GeneratedStream object and invoke the callback when the class is available.
    275         m_requests.remove(requestId);
    276     }
     303    if (!m_requests.contains(requestId))
     304        return;
     305
     306    ASSERT(m_requests.get(requestId)->isGenerateStreamRequest());
     307    ASSERT(!label.isNull());
     308
     309    RefPtr<GenerateStreamRequest> streamRequest = static_cast<GenerateStreamRequest*>(m_requests.get(requestId).get());
     310    RefPtr<GeneratedStream> generatedStream = GeneratedStream::create(this, label);
     311    m_streams.add(label, generatedStream.get());
     312    m_requests.remove(requestId);
     313    streamRequest->successCallback()->handleEvent(generatedStream.get());
    277314}
    278315
     
    280317{
    281318    // Don't assert since the request can have been aborted as a result of embedder detachment.
    282     if (m_requests.contains(requestId)) {
    283         ASSERT(m_requests.get(requestId)->isGenerateStreamRequest());
    284 
    285         RefPtr<GenerateStreamRequest> streamRequest = static_cast<GenerateStreamRequest*>(m_requests.get(requestId).get());
    286         m_requests.remove(requestId);
    287 
    288         if (streamRequest->errorCallback()) {
    289             RefPtr<NavigatorUserMediaError> error = adoptRef(new NavigatorUserMediaError(code));
    290             streamRequest->errorCallback()->handleEvent(error.get());
    291         }
    292     }
    293 }
     319    if (!m_requests.contains(requestId))
     320        return;
     321
     322    ASSERT(m_requests.get(requestId)->isGenerateStreamRequest());
     323
     324    RefPtr<GenerateStreamRequest> streamRequest = static_cast<GenerateStreamRequest*>(m_requests.get(requestId).get());
     325    m_requests.remove(requestId);
     326
     327    if (streamRequest->errorCallback()) {
     328        RefPtr<NavigatorUserMediaError> error = NavigatorUserMediaError::create(code);
     329        streamRequest->errorCallback()->handleEvent(error.get());
     330    }
     331}
     332
     333void MediaStreamFrameController::streamFailed(const String& label)
     334{
     335    getStreamFromLabel(label)->streamEnded();
     336}
     337
    294338
    295339} // namespace WebCore
  • trunk/Source/WebCore/page/MediaStreamFrameController.h

    r86583 r87150  
    3939
    4040class Frame;
     41class GeneratedStream;
    4142class MediaStreamController;
    4243class NavigatorUserMediaErrorCallback;
     
    4546class ScriptExecutionContext;
    4647class SecurityOrigin;
     48class Stream;
    4749
    4850class MediaStreamFrameController {
     
    102104    class StreamClient : public ClientBase<String> {
    103105    public:
    104         StreamClient(MediaStreamFrameController* frameController, const String& label) : ClientBase<String>(frameController, label) { }
     106        StreamClient(MediaStreamFrameController* frameController, const String& label, bool isGeneratedStream)
     107            : ClientBase<String>(frameController, label)
     108            , m_isGeneratedStream(isGeneratedStream) { }
     109
    105110        virtual ~StreamClient() { unregister(); }
    106111
    107112        virtual bool isStream() const { return true; }
     113
     114        // Accessed by the destructor.
     115        virtual bool isGeneratedStream() const { return m_isGeneratedStream; }
    108116
    109117        // Stream has ended for some external reason.
     
    112120    private:
    113121        virtual void unregister() { unregisterClient(this); }
     122        bool m_isGeneratedStream;
    114123    };
    115124
     
    131140    void generateStream(const String& options, PassRefPtr<NavigatorUserMediaSuccessCallback>, PassRefPtr<NavigatorUserMediaErrorCallback>, ExceptionCode&);
    132141
     142    // Stop a generated stream.
     143    void stopGeneratedStream(const String& streamLabel);
     144
    133145    // --- Calls coming back from the controller. --- //
    134146
     
    138150    // Report a failure in the generation of a new stream.
    139151    void streamGenerationFailed(int requestId, NavigatorUserMediaError::ErrorCode);
     152
     153    // Report the end of a stream for external reasons.
     154    void streamFailed(const String& streamLabel);
    140155
    141156private:
     
    178193    void unregister(StreamClient*);
    179194    MediaStreamController* pageController() const;
     195    Stream* getStreamFromLabel(const String&) const;
    180196
    181197    RequestMap m_requests;
  • trunk/Source/WebCore/page/NavigatorUserMediaError.h

    r83287 r87150  
    2626#define NavigatorUserMediaError_h
    2727
     28#include <wtf/PassRefPtr.h>
    2829#include <wtf/RefCounted.h>
    2930
     
    3940    };
    4041
    41     NavigatorUserMediaError(ErrorCode code) : m_code(code) { }
     42    static PassRefPtr<NavigatorUserMediaError> create(ErrorCode code)
     43    {
     44        return adoptRef(new NavigatorUserMediaError(code));
     45    }
     46
    4247    virtual ~NavigatorUserMediaError() { }
    4348
     
    4550
    4651private:
     52    NavigatorUserMediaError(ErrorCode code) : m_code(code) { }
     53
    4754    ErrorCode m_code;
    4855};
  • trunk/Source/WebCore/page/NavigatorUserMediaSuccessCallback.h

    r83287 r87150  
    3232namespace WebCore {
    3333
     34class GeneratedStream;
     35
    3436class NavigatorUserMediaSuccessCallback : public RefCounted<NavigatorUserMediaSuccessCallback> {
    3537public:
    3638    virtual ~NavigatorUserMediaSuccessCallback() { }
    37     // FIXME: set correct type when the GeneratedStream class is available.
    38     // virtual bool handleEvent(GeneratedStream*) = 0;
    39     virtual bool handleEvent(int dummy) = 0;
     39    virtual bool handleEvent(GeneratedStream*) = 0;
    4040};
    4141
  • trunk/Source/WebCore/page/NavigatorUserMediaSuccessCallback.idl

    r83287 r87150  
    2828        Callback=FunctionOnly
    2929    ] NavigatorUserMediaSuccessCallback {
    30         // FIXME: implement the correct type when the GeneratedStream class is available.
    31         // boolean handleEvent(in GeneratedStream stream);
    32         boolean handleEvent(in int dummy);
     30        boolean handleEvent(in GeneratedStream stream);
    3331    };
    3432
Note: See TracChangeset for help on using the changeset viewer.