Changeset 124780 in webkit


Ignore:
Timestamp:
Aug 6, 2012 10:28:12 AM (12 years ago)
Author:
annacc@chromium.org
Message:

Create a MediaSource object.
https://bugs.webkit.org/show_bug.cgi?id=91773

Reviewed by Eric Carlson.

MediaSource object is needed in order to implement the new
object-oriented MediaSource API:
http://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html

No new tests - will be able to test after landing:
https://bugs.webkit.org/show_bug.cgi?id=91775

Adding new files to build files:

  • CMakeLists.txt:
  • DerivedSources.cpp:
  • DerivedSources.make:
  • DerivedSources.pri:
  • GNUmakefile.list.am:
  • Target.pri:
  • WebCore.gypi:
  • WebCore.vcproj/WebCore.vcproj:
  • WebCore.xcodeproj/project.pbxproj:

New MediaSource object:

  • Modules/mediasource/MediaSource.cpp: Added.
  • Modules/mediasource/MediaSource.h: Added.
  • Modules/mediasource/MediaSource.idl: Added.

Create a registry for the blob storage and lookup:

  • Modules/mediasource/MediaSourceRegistry.cpp: Added.
  • Modules/mediasource/MediaSourceRegistry.h: Added.

Connect SourceBuffer to MediaSource:

  • Modules/mediasource/SourceBuffer.cpp:

(WebCore::SourceBuffer::SourceBuffer):
(WebCore::SourceBuffer::buffered): Forward call to MediaSource.
(WebCore::SourceBuffer::append): Ditto.
(WebCore::SourceBuffer::abort): Ditto.

  • Modules/mediasource/SourceBuffer.h:

(WebCore::SourceBuffer::create): Add a MediaSource to the constructor.
(WebCore::SourceBuffer::clear): Clear the MediaSource.
(SourceBuffer):

  • Modules/mediasource/SourceBufferList.cpp: include SourceBuffer.h
  • Modules/mediasource/SourceBufferList.h:

Make MediaSource an EventTarget:

  • dom/EventTarget.h:

(WebCore):

  • dom/EventTargetFactory.in:

Enable creation of MediaSource object URL from JavaScript:

  • html/DOMURL.cpp:

(WebCore):
(WebCore::DOMURL::createObjectURL):

  • html/DOMURL.h:

(WebCore):
(DOMURL):

  • html/DOMURL.idl:

New MediaSource constructor:

  • page/DOMWindow.idl:
Location:
trunk/Source/WebCore
Files:
1 added
20 edited
4 copied

Legend:

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

    r124759 r124780  
    195195    Modules/intents/NavigatorIntents.idl
    196196
     197    Modules/mediasource/MediaSource.idl
    197198    Modules/mediasource/SourceBuffer.idl
    198199    Modules/mediasource/SourceBufferList.idl
     
    825826    Modules/intents/NavigatorIntents.cpp
    826827
     828    Modules/mediasource/MediaSource.cpp
    827829    Modules/mediasource/SourceBuffer.cpp
    828830    Modules/mediasource/SourceBufferList.cpp
  • trunk/Source/WebCore/ChangeLog

    r124779 r124780  
     12012-08-06  Anna Cavender  <annacc@chromium.org>
     2
     3        Create a MediaSource object.
     4        https://bugs.webkit.org/show_bug.cgi?id=91773
     5
     6        Reviewed by Eric Carlson.
     7
     8        MediaSource object is needed in order to implement the new
     9        object-oriented MediaSource API:
     10        http://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html
     11
     12        No new tests - will be able to test after landing:
     13        https://bugs.webkit.org/show_bug.cgi?id=91775
     14 
     15        Adding new files to build files:
     16        * CMakeLists.txt:
     17        * DerivedSources.cpp:
     18        * DerivedSources.make:
     19        * DerivedSources.pri:
     20        * GNUmakefile.list.am:
     21        * Target.pri:
     22        * WebCore.gypi:
     23        * WebCore.vcproj/WebCore.vcproj:
     24        * WebCore.xcodeproj/project.pbxproj:
     25
     26        New MediaSource object:
     27        * Modules/mediasource/MediaSource.cpp: Added.
     28        * Modules/mediasource/MediaSource.h: Added.
     29        * Modules/mediasource/MediaSource.idl: Added.
     30
     31        Create a registry for the blob storage and lookup:
     32        * Modules/mediasource/MediaSourceRegistry.cpp: Added.
     33        * Modules/mediasource/MediaSourceRegistry.h: Added.
     34
     35        Connect SourceBuffer to MediaSource:
     36        * Modules/mediasource/SourceBuffer.cpp:
     37        (WebCore::SourceBuffer::SourceBuffer):
     38        (WebCore::SourceBuffer::buffered): Forward call to MediaSource.
     39        (WebCore::SourceBuffer::append): Ditto.
     40        (WebCore::SourceBuffer::abort): Ditto.
     41        * Modules/mediasource/SourceBuffer.h:
     42        (WebCore::SourceBuffer::create): Add a MediaSource to the constructor.
     43        (WebCore::SourceBuffer::clear): Clear the MediaSource.
     44        (SourceBuffer):
     45        * Modules/mediasource/SourceBufferList.cpp: include SourceBuffer.h
     46        * Modules/mediasource/SourceBufferList.h:
     47 
     48        Make MediaSource an EventTarget:
     49        * dom/EventTarget.h:
     50        (WebCore):
     51        * dom/EventTargetFactory.in:
     52
     53        Enable creation of MediaSource object URL from JavaScript:
     54        * html/DOMURL.cpp:
     55        (WebCore):
     56        (WebCore::DOMURL::createObjectURL):
     57        * html/DOMURL.h:
     58        (WebCore):
     59        (DOMURL):
     60        * html/DOMURL.idl:
     61
     62        New MediaSource constructor:
     63        * page/DOMWindow.idl:
     64
    1652012-08-06  Andreas Kling  <kling@webkit.org>
    266
  • trunk/Source/WebCore/DerivedSources.cpp

    r123722 r124780  
    238238#include "JSMediaList.cpp"
    239239#include "JSMediaQueryList.cpp"
     240#if ENABLE(MEDIA_SOURCE)
     241#include "JSMediaSource.cpp"
     242#endif
    240243#include "JSMemoryInfo.cpp"
    241244#include "JSMessageChannel.cpp"
  • trunk/Source/WebCore/DerivedSources.make

    r124389 r124780  
    107107    $(WebCore)/Modules/indexeddb/IDBVersionChangeRequest.idl \
    108108    $(WebCore)/Modules/indexeddb/WorkerContextIndexedDatabase.idl \
     109    $(WebCore)/Modules/mediasource/MediaSource.idl \
    109110    $(WebCore)/Modules/mediasource/SourceBuffer.idl \
    110111    $(WebCore)/Modules/mediasource/SourceBufferList.idl \
  • trunk/Source/WebCore/DerivedSources.pri

    r123773 r124780  
    625625contains(DEFINES, ENABLE_MEDIA_SOURCE=1) {
    626626  IDL_BINDINGS += \
     627    $$PWD/Modules/mediasource/MediaSource.idl \
    627628    $$PWD/Modules/mediasource/SourceBuffer.idl \
    628629    $$PWD/Modules/mediasource/SourceBufferList.idl
  • trunk/Source/WebCore/GNUmakefile.list.am

    r124757 r124780  
    384384        DerivedSources/WebCore/JSMediaList.cpp \
    385385        DerivedSources/WebCore/JSMediaList.h \
     386        DerivedSources/WebCore/JSMediaSource.cpp \
     387        DerivedSources/WebCore/JSMediaSource.h \
    386388        DerivedSources/WebCore/JSMediaStream.cpp \
    387389        DerivedSources/WebCore/JSMediaStream.h \
     
    701703        $(WebCore)/Modules/geolocation/PositionError.idl \
    702704        $(WebCore)/Modules/geolocation/PositionErrorCallback.idl \
     705        $(WebCore)/Modules/mediasource/MediaSource.idl \
    703706        $(WebCore)/Modules/mediasource/SourceBuffer.idl \
    704707        $(WebCore)/Modules/mediasource/SourceBufferList.idl \
     
    11731176        Source/WebCore/Modules/indexeddb/WorkerContextIndexedDatabase.cpp \
    11741177        Source/WebCore/Modules/indexeddb/WorkerContextIndexedDatabase.h \
     1178        Source/WebCore/Modules/mediasource/MediaSource.cpp \
     1179        Source/WebCore/Modules/mediasource/MediaSource.h \
     1180        Source/WebCore/Modules/mediasource/MediaSourceRegistry.cpp \
     1181        Source/WebCore/Modules/mediasource/MediaSourceRegistry.h \
    11751182        Source/WebCore/Modules/mediasource/SourceBuffer.cpp \
    11761183        Source/WebCore/Modules/mediasource/SourceBuffer.h \
  • trunk/Source/WebCore/Modules/mediasource/MediaSource.h

    r124779 r124780  
    2929 */
    3030
    31 #ifndef SourceBufferList_h
    32 #define SourceBufferList_h
     31#ifndef MediaSource_h
     32#define MediaSource_h
    3333
    3434#if ENABLE(MEDIA_SOURCE)
    3535
    36 #include "EventTarget.h"
     36#include "ContextDestructionObserver.h"
     37#include "MediaPlayer.h"
    3738#include "SourceBuffer.h"
     39#include "SourceBufferList.h"
    3840#include <wtf/RefCounted.h>
    39 #include <wtf/Vector.h>
    4041
    4142namespace WebCore {
    4243
    43 class SourceBufferList : public RefCounted<SourceBufferList>, public EventTarget {
     44class MediaSource : public RefCounted<MediaSource>, public EventTarget, public ContextDestructionObserver {
    4445public:
    45     static PassRefPtr<SourceBufferList> create(ScriptExecutionContext* context)
     46    static const String& openKeyword()
    4647    {
    47         return adoptRef(new SourceBufferList(context));
     48        DEFINE_STATIC_LOCAL(const String, open, ("open"));
     49        return open;
    4850    }
    49     virtual ~SourceBufferList() { }
    5051
    51     unsigned long length() const;
    52     SourceBuffer* item(unsigned index) const;
     52    static const String& closedKeyword()
     53    {
     54        DEFINE_STATIC_LOCAL(const String, closed, ("closed"));
     55        return closed;
     56    }
    5357
    54     void add(PassRefPtr<SourceBuffer>);
    55     bool remove(SourceBuffer*);
    56     void clear();
     58    static const String& endedKeyword()
     59    {
     60        DEFINE_STATIC_LOCAL(const String, ended, ("ended"));
     61        return ended;
     62    }
     63
     64    static PassRefPtr<MediaSource> create(ScriptExecutionContext*);
     65    virtual ~MediaSource() { }
     66
     67    SourceBufferList* sourceBuffers();
     68    SourceBufferList* activeSourceBuffers();
     69
     70    SourceBuffer* addSourceBuffer(const String& type, ExceptionCode&);
     71    void removeSourceBuffer(SourceBuffer*, ExceptionCode&);
     72
     73    const String& readyState() const;
     74    void setReadyState(const String&);
     75
     76    void endOfStream(const String& error, ExceptionCode&);
     77
     78    void setMediaPlayer(MediaPlayer* player) { m_player = player; }
     79   
     80    PassRefPtr<TimeRanges> buffered(const String& id, ExceptionCode&) const;
     81    void append(const String& id, PassRefPtr<Uint8Array> data, ExceptionCode&);
     82    void abort(const String& id, ExceptionCode&);
    5783
    5884    // EventTarget interface
     
    6086    virtual ScriptExecutionContext* scriptExecutionContext() const OVERRIDE;
    6187
    62     using RefCounted<SourceBufferList>::ref;
    63     using RefCounted<SourceBufferList>::deref;
     88    using RefCounted<MediaSource>::ref;
     89    using RefCounted<MediaSource>::deref;
    6490
    65 protected:
     91private:
     92    explicit MediaSource(ScriptExecutionContext*);
     93
    6694    virtual EventTargetData* eventTargetData() OVERRIDE;
    6795    virtual EventTargetData* ensureEventTargetData() OVERRIDE;
    68 
    69 private:
    70     explicit SourceBufferList(ScriptExecutionContext*);
    71 
    72     void createAndFireEvent(const AtomicString&);
    7396
    7497    virtual void refEventTarget() OVERRIDE { ref(); }
     
    7699
    77100    EventTargetData m_eventTargetData;
    78     ScriptExecutionContext* m_scriptExecutionContext;
    79101
    80     Vector<RefPtr<SourceBuffer> > m_list;
     102    String m_readyState;
     103    MediaPlayer* m_player;
     104
     105    RefPtr<SourceBufferList> m_sourceBuffers;
     106    RefPtr<SourceBufferList> m_activeSourceBuffers;
     107    int m_nextSourceBufferId;
    81108};
    82109
  • trunk/Source/WebCore/Modules/mediasource/MediaSource.idl

    r124779 r124780  
    2828 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2929 */
     30 
     31module html {
    3032
    31 #include "config.h"
    32 #include "SourceBuffer.h"
     33    interface [
     34        Conditional=MEDIA_SOURCE,
     35        V8EnabledAtRuntime=mediaSource,
     36        EventTarget,
     37        Constructor,
     38        CallWith=ScriptExecutionContext
     39    ] MediaSource {
     40        // All the source buffers created by this object.
     41        readonly attribute SourceBufferList sourceBuffers;
    3342
    34 #if ENABLE(MEDIA_SOURCE)
     43        // Subset of sourceBuffers that provide data for the selected/enabled tracks.
     44        readonly attribute SourceBufferList activeSourceBuffers;
    3545
    36 #include "TimeRanges.h"
    37 #include <wtf/Uint8Array.h>
     46        SourceBuffer addSourceBuffer(in DOMString type) raises (DOMException);
     47        void removeSourceBuffer(in SourceBuffer buffer) raises (DOMException);
    3848
    39 namespace WebCore {
     49        readonly attribute DOMString readyState;
     50       
     51        void endOfStream(in [Optional=DefaultIsNullString] DOMString error)
     52            raises (DOMException);
     53       
     54        // EventTarget interface
     55        void addEventListener(in DOMString type,
     56                              in EventListener listener,
     57                              in [Optional] boolean useCapture);
     58        void removeEventListener(in DOMString type,
     59                                 in EventListener listener,
     60                                 in [Optional] boolean useCapture);
     61        boolean dispatchEvent(in Event event)
     62            raises(EventException);
     63    };
    4064
    41 SourceBuffer::SourceBuffer(const String& id)
    42     : m_id(id)
    43 {
    4465}
    45 
    46 SourceBuffer::~SourceBuffer()
    47 {
    48 }
    49 
    50 PassRefPtr<TimeRanges> SourceBuffer::buffered(ExceptionCode&) const
    51 {
    52     // FIXME(91773): return buffered data from media source.
    53     return 0;
    54 }
    55 
    56 void SourceBuffer::append(PassRefPtr<Uint8Array>, ExceptionCode&)
    57 {
    58     // FIXME(91773): append the data to the media source.
    59 }
    60 
    61 void SourceBuffer::abort(ExceptionCode&)
    62 {
    63     // FIXME(91773): signal the media source to abort this source buffer.
    64 }
    65 
    66 } // namespace WebCore
    67 
    68 #endif
  • trunk/Source/WebCore/Modules/mediasource/MediaSourceRegistry.cpp

    r124779 r124780  
    3030
    3131#include "config.h"
    32 #include "SourceBuffer.h"
     32#include "MediaSourceRegistry.h"
    3333
    3434#if ENABLE(MEDIA_SOURCE)
    3535
    36 #include "TimeRanges.h"
    37 #include <wtf/Uint8Array.h>
     36#include "KURL.h"
     37#include "MediaSource.h"
     38#include <wtf/MainThread.h>
    3839
    3940namespace WebCore {
    4041
    41 SourceBuffer::SourceBuffer(const String& id)
    42     : m_id(id)
     42MediaSourceRegistry& MediaSourceRegistry::registry()
    4343{
     44    // Since WebWorkers cannot obtain MediaSource objects, we should be on the main thread.
     45    ASSERT(isMainThread());
     46    DEFINE_STATIC_LOCAL(MediaSourceRegistry, instance, ());
     47    return instance;
    4448}
    4549
    46 SourceBuffer::~SourceBuffer()
     50void MediaSourceRegistry::registerMediaSourceURL(const KURL& url, PassRefPtr<MediaSource> source)
    4751{
     52    ASSERT(isMainThread());
     53    m_mediaSources.set(url.string(), source);
    4854}
    4955
    50 PassRefPtr<TimeRanges> SourceBuffer::buffered(ExceptionCode&) const
     56void MediaSourceRegistry::unregisterMediaSourceURL(const KURL& url)
    5157{
    52     // FIXME(91773): return buffered data from media source.
    53     return 0;
     58    ASSERT(isMainThread());
     59    m_mediaSources.remove(url.string());
    5460}
    5561
    56 void SourceBuffer::append(PassRefPtr<Uint8Array>, ExceptionCode&)
     62MediaSource* MediaSourceRegistry::lookupMediaSource(const String& url)
    5763{
    58     // FIXME(91773): append the data to the media source.
    59 }
    60 
    61 void SourceBuffer::abort(ExceptionCode&)
    62 {
    63     // FIXME(91773): signal the media source to abort this source buffer.
     64    ASSERT(isMainThread());
     65    return m_mediaSources.get(url).get();
    6466}
    6567
  • trunk/Source/WebCore/Modules/mediasource/MediaSourceRegistry.h

    r124779 r124780  
    2929 */
    3030
    31 #include "config.h"
    32 #include "SourceBuffer.h"
     31#ifndef MediaSourceRegistry_h
     32#define MediaSourceRegistry_h
    3333
    3434#if ENABLE(MEDIA_SOURCE)
    3535
    36 #include "TimeRanges.h"
    37 #include <wtf/Uint8Array.h>
     36#include <wtf/HashMap.h>
     37#include <wtf/PassRefPtr.h>
     38#include <wtf/text/StringHash.h>
    3839
    3940namespace WebCore {
    4041
    41 SourceBuffer::SourceBuffer(const String& id)
    42     : m_id(id)
    43 {
    44 }
     42class KURL;
     43class MediaSource;
    4544
    46 SourceBuffer::~SourceBuffer()
    47 {
    48 }
     45class MediaSourceRegistry {
     46public:
     47    // Returns a single instance of MediaSourceRegistry.
     48    static MediaSourceRegistry& registry();
    4949
    50 PassRefPtr<TimeRanges> SourceBuffer::buffered(ExceptionCode&) const
    51 {
    52     // FIXME(91773): return buffered data from media source.
    53     return 0;
    54 }
     50    // Registers a blob URL referring to the specified media source.
     51    void registerMediaSourceURL(const KURL&, PassRefPtr<MediaSource>);
     52    void unregisterMediaSourceURL(const KURL&);
    5553
    56 void SourceBuffer::append(PassRefPtr<Uint8Array>, ExceptionCode&)
    57 {
    58     // FIXME(91773): append the data to the media source.
    59 }
     54    MediaSource* lookupMediaSource(const String& url);
    6055
    61 void SourceBuffer::abort(ExceptionCode&)
    62 {
    63     // FIXME(91773): signal the media source to abort this source buffer.
    64 }
     56private:
     57    HashMap<String, RefPtr<MediaSource> > m_mediaSources;
     58};
    6559
    6660} // namespace WebCore
    6761
    6862#endif
     63#endif
  • trunk/Source/WebCore/Modules/mediasource/SourceBuffer.cpp

    r123522 r124780  
    3939namespace WebCore {
    4040
    41 SourceBuffer::SourceBuffer(const String& id)
     41SourceBuffer::SourceBuffer(const String& id, PassRefPtr<MediaSource> source)
    4242    : m_id(id)
     43    , m_source(source)
    4344{
    4445}
     
    4849}
    4950
    50 PassRefPtr<TimeRanges> SourceBuffer::buffered(ExceptionCode&) const
     51PassRefPtr<TimeRanges> SourceBuffer::buffered(ExceptionCode& ec) const
    5152{
    52     // FIXME(91773): return buffered data from media source.
    53     return 0;
     53    if (!m_source) {
     54        ec = INVALID_STATE_ERR;
     55        return 0;
     56    }
     57
     58    return m_source->buffered(id(), ec);
    5459}
    5560
    56 void SourceBuffer::append(PassRefPtr<Uint8Array>, ExceptionCode&)
     61void SourceBuffer::append(PassRefPtr<Uint8Array> data, ExceptionCode& ec)
    5762{
    58     // FIXME(91773): append the data to the media source.
     63    if (!m_source) {
     64        ec = INVALID_STATE_ERR;
     65        return;
     66    }
     67
     68    m_source->append(id(), data, ec);
    5969}
    6070
    61 void SourceBuffer::abort(ExceptionCode&)
     71void SourceBuffer::abort(ExceptionCode& ec)
    6272{
    63     // FIXME(91773): signal the media source to abort this source buffer.
     73    if (!m_source) {
     74        ec = INVALID_STATE_ERR;
     75        return;
     76    }
     77
     78    m_source->abort(id(), ec);
    6479}
    6580
  • trunk/Source/WebCore/Modules/mediasource/SourceBuffer.h

    r123522 r124780  
    3535
    3636#include "ExceptionCode.h"
     37#include "MediaSource.h"
    3738#include <wtf/PassRefPtr.h>
    3839#include <wtf/RefCounted.h>
     
    4546class SourceBuffer : public RefCounted<SourceBuffer> {
    4647public:
    47     static PassRefPtr<SourceBuffer> create(const String& id)
     48    static PassRefPtr<SourceBuffer> create(const String& id, PassRefPtr<MediaSource> source)
    4849    {
    49         return adoptRef(new SourceBuffer(id));
     50        return adoptRef(new SourceBuffer(id, source));
    5051    }
    5152
     
    6061    const String& id() const { return m_id; }
    6162
    62     void clear() { }
     63    void clear() { m_source.clear(); }
    6364
    6465private:
    65     explicit SourceBuffer(const String& id);
     66    explicit SourceBuffer(const String& id, PassRefPtr<MediaSource>);
    6667
    6768    String m_id;
     69    RefPtr<MediaSource> m_source;
    6870};
    6971
  • trunk/Source/WebCore/Modules/mediasource/SourceBufferList.cpp

    r123522 r124780  
    3535
    3636#include "Event.h"
     37#include "SourceBuffer.h"
    3738
    3839namespace WebCore {
  • trunk/Source/WebCore/Modules/mediasource/SourceBufferList.h

    r123522 r124780  
    3535
    3636#include "EventTarget.h"
    37 #include "SourceBuffer.h"
    3837#include <wtf/RefCounted.h>
    3938#include <wtf/Vector.h>
    4039
    4140namespace WebCore {
     41
     42class SourceBuffer;
    4243
    4344class SourceBufferList : public RefCounted<SourceBufferList>, public EventTarget {
  • trunk/Source/WebCore/Target.pri

    r124397 r124780  
    30233023contains(DEFINES, ENABLE_MEDIA_SOURCE=1) {
    30243024    HEADERS += \
     3025        Modules/mediasource/MediaSource.h \
     3026        Modules/mediasource/MediaSourceRegistry.h \
    30253027        Modules/mediasource/SourceBuffer.h \
    30263028        Modules/mediasource/SourceBufferList.h
    30273029    SOURCES += \
     3030        Modules/mediasource/MediaSource.cpp \
     3031        Modules/mediasource/MediaSourceRegistry.cpp \
    30283032        Modules/mediasource/SourceBuffer.cpp \
    30293033        Modules/mediasource/SourceBufferList.cpp
  • trunk/Source/WebCore/WebCore.gypi

    r124735 r124780  
    830830            'Modules/intents/IntentResultCallback.idl',
    831831            'Modules/intents/NavigatorIntents.idl',
     832            'Modules/mediasource/MediaSource.idl',
    832833            'Modules/mediasource/SourceBuffer.idl',
    833834            'Modules/mediasource/SourceBufferList.idl',
     
    15441545            'Modules/intents/NavigatorIntents.cpp',
    15451546            'Modules/intents/NavigatorIntents.h',
     1547            'Modules/mediasource/MediaSource.cpp',
     1548            'Modules/mediasource/MediaSource.h',
     1549            'Modules/mediasource/MediaSourceRegistry.cpp',
     1550            'Modules/mediasource/MediaSourceRegistry.h',
    15461551            'Modules/mediasource/SourceBuffer.cpp',
    15471552            'Modules/mediasource/SourceBuffer.h',
  • trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj

    r124638 r124780  
    2508725087                                >
    2508825088                                <File
     25089                                        RelativePath="..\Modules\mediasource\MediaSource.cpp"
     25090                                        >
     25091                                </File>
     25092                                <File
     25093                                        RelativePath="..\Modules\mediasource\MediaSource.h"
     25094                                        >
     25095                                </File>
     25096                                <File
     25097                                        RelativePath="..\Modules\mediasource\MediaSourceRegistry.cpp"
     25098                                        >
     25099                                </File>
     25100                                <File
     25101                                        RelativePath="..\Modules\mediasource\MediaSourceRegistry.h"
     25102                                        >
     25103                                </File>
     25104        <File
    2508925105                                        RelativePath="..\Modules\mediasource\SourceBuffer.cpp"
    2509025106                                        >
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r124517 r124780  
    1161711617                B10B697F140C174000BC1C26 /* WebVTTTokenizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebVTTTokenizer.h; sourceTree = "<group>"; };
    1161811618                B1827492134CA4C100B98C2D /* CallbackFunction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CallbackFunction.cpp; sourceTree = "<group>"; };
     11619                B1A942DE15B5CE2200D525D1 /* MediaSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaSource.cpp; sourceTree = "<group>"; };
     11620                B1A942DF15B5CE2200D525D1 /* MediaSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaSource.h; sourceTree = "<group>"; };
     11621                B1A942E015B5CE2200D525D1 /* MediaSource.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MediaSource.idl; sourceTree = "<group>"; };
     11622                B1A942E115B5CE2200D525D1 /* MediaSourceRegistry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaSourceRegistry.cpp; sourceTree = "<group>"; };
     11623                B1A942E215B5CE2200D525D1 /* MediaSourceRegistry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaSourceRegistry.h; sourceTree = "<group>"; };
    1161911624                B1A942E315B5CE2200D525D1 /* SourceBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SourceBuffer.cpp; sourceTree = "<group>"; };
    1162011625                B1A942E415B5CE2200D525D1 /* SourceBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SourceBuffer.h; sourceTree = "<group>"; };
     
    1905919064                        isa = PBXGroup;
    1906019065                        children = (
     19066                                B1A942DE15B5CE2200D525D1 /* MediaSource.cpp */,
     19067                                B1A942DF15B5CE2200D525D1 /* MediaSource.h */,
     19068                                B1A942E015B5CE2200D525D1 /* MediaSource.idl */,
     19069                                B1A942E115B5CE2200D525D1 /* MediaSourceRegistry.cpp */,
     19070                                B1A942E215B5CE2200D525D1 /* MediaSourceRegistry.h */,
    1906119071                                B1A942E315B5CE2200D525D1 /* SourceBuffer.cpp */,
    1906219072                                B1A942E415B5CE2200D525D1 /* SourceBuffer.h */,
  • trunk/Source/WebCore/dom/EventTarget.h

    r124350 r124780  
    5757    class LocalMediaStream;
    5858    class MediaController;
     59    class MediaSource;
    5960    class MediaStream;
    6061    class MessagePort;
  • trunk/Source/WebCore/dom/EventTargetFactory.in

    r124350 r124780  
    1616LocalMediaStream conditional=MEDIA_STREAM
    1717MediaController conditional=VIDEO
     18MediaSource conditional=MEDIA_SOURCE
    1819MediaStream conditional=MEDIA_STREAM
    1920MediaStreamTrack conditional=MEDIA_STREAM
  • trunk/Source/WebCore/html/DOMURL.cpp

    r120433 r124780  
    4343#include <wtf/MainThread.h>
    4444
     45#if ENABLE(MEDIA_SOURCE)
     46#include "MediaSource.h"
     47#include "MediaSourceRegistry.h"
     48#endif
     49
    4550#if ENABLE(MEDIA_STREAM)
    4651#include "MediaStream.h"
     
    4954
    5055namespace WebCore {
     56
     57#if ENABLE(MEDIA_SOURCE)
     58String DOMURL::createObjectURL(ScriptExecutionContext* scriptExecutionContext, MediaSource* source)
     59{
     60    // Since WebWorkers cannot obtain MediaSource objects, we should be on the main thread.
     61    ASSERT(isMainThread());
     62
     63    if (!scriptExecutionContext || !source)
     64        return String();
     65
     66    KURL publicURL = BlobURL::createPublicURL(scriptExecutionContext->securityOrigin());
     67    if (publicURL.isEmpty())
     68        return String();
     69
     70    MediaSourceRegistry::registry().registerMediaSourceURL(publicURL, source);
     71    scriptExecutionContext->publicURLManager().streamURLs().add(publicURL.string());
     72
     73    return publicURL.string();
     74}
     75#endif
    5176
    5277#if ENABLE(MEDIA_STREAM)
  • trunk/Source/WebCore/html/DOMURL.h

    r107082 r124780  
    3737
    3838class Blob;
     39class MediaSource;
    3940class MediaStream;
    4041class ScriptExecutionContext;
     
    5051    static String createObjectURL(ScriptExecutionContext*, Blob*);
    5152    static void revokeObjectURL(ScriptExecutionContext*, const String&);
     53#if ENABLE(MEDIA_SOURCE)
     54    static String createObjectURL(ScriptExecutionContext*, MediaSource*);
     55#endif
    5256#if ENABLE(MEDIA_STREAM)
    5357    static String createObjectURL(ScriptExecutionContext*, MediaStream*);
  • trunk/Source/WebCore/html/DOMURL.idl

    r121714 r124780  
    3434        InterfaceName=URL
    3535    ] DOMURL {
     36#if defined(ENABLE_MEDIA_SOURCE) && ENABLE_MEDIA_SOURCE
     37        [CallWith=ScriptExecutionContext,TreatReturnedNullStringAs=Null] static DOMString createObjectURL(in MediaSource? source);
     38#endif
    3639#if defined(ENABLE_MEDIA_STREAM) && ENABLE_MEDIA_STREAM
    3740        [CallWith=ScriptExecutionContext,TreatReturnedNullStringAs=Null] static DOMString createObjectURL(in MediaStream? stream);
  • trunk/Source/WebCore/page/DOMWindow.idl

    r124759 r124780  
    786786        attribute [Conditional=MUTATION_OBSERVERS] MutationObserverConstructor WebKitMutationObserver;
    787787
     788        attribute [Conditional=MEDIA_SOURCE, V8EnabledAtRuntime=mediaSource] MediaSourceConstructor MediaSource;
    788789        attribute [Conditional=MEDIA_SOURCE, V8EnabledAtRuntime=mediaSource] SourceBufferConstructor SourceBuffer;
    789790        attribute [Conditional=MEDIA_SOURCE, V8EnabledAtRuntime=mediaSource] SourceBufferListConstructor SourceBufferList;
Note: See TracChangeset for help on using the changeset viewer.