Changeset 113460 in webkit


Ignore:
Timestamp:
Apr 6, 2012 11:07:10 AM (12 years ago)
Author:
tommyw@google.com
Message:

MediaStream API: MediaStreams stops proper cleanup to take place during a page reload.
https://bugs.webkit.org/show_bug.cgi?id=83143

Reviewed by Adam Barth.

To fix this I have converted MediaStream and LocalMediaStream to be ActiveDOMObjects.

Have no idea how to write a test that succesfully verifies this. I have done manual testing
to verify that proper tear-down now takes place.

  • Modules/mediastream/LocalMediaStream.cpp:

(WebCore::LocalMediaStream::create):
(WebCore::LocalMediaStream::stopFunction):
(WebCore):

  • Modules/mediastream/LocalMediaStream.h:

(LocalMediaStream):

  • Modules/mediastream/LocalMediaStream.idl:
  • Modules/mediastream/MediaStream.cpp:

(WebCore::MediaStream::create):
(WebCore::MediaStream::MediaStream):
(WebCore::MediaStream::scriptExecutionContext):

  • Modules/mediastream/MediaStream.h:

(MediaStream):

Location:
trunk/Source/WebCore
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r113457 r113460  
     12012-04-06  Tommy Widenflycht  <tommyw@google.com>
     2
     3        MediaStream API: MediaStreams stops proper cleanup to take place during a page reload.
     4        https://bugs.webkit.org/show_bug.cgi?id=83143
     5
     6        Reviewed by Adam Barth.
     7
     8        To fix this I have converted MediaStream and LocalMediaStream to be ActiveDOMObjects.
     9
     10        Have no idea how to write a test that succesfully verifies this. I have done manual testing
     11        to verify that proper tear-down now takes place.
     12
     13        * Modules/mediastream/LocalMediaStream.cpp:
     14        (WebCore::LocalMediaStream::create):
     15        (WebCore::LocalMediaStream::stopFunction):
     16        (WebCore):
     17        * Modules/mediastream/LocalMediaStream.h:
     18        (LocalMediaStream):
     19        * Modules/mediastream/LocalMediaStream.idl:
     20        * Modules/mediastream/MediaStream.cpp:
     21        (WebCore::MediaStream::create):
     22        (WebCore::MediaStream::MediaStream):
     23        (WebCore::MediaStream::scriptExecutionContext):
     24        * Modules/mediastream/MediaStream.h:
     25        (MediaStream):
     26
    1272012-04-06  Dan Bernstein  <mitz@apple.com>
    228
  • trunk/Source/WebCore/Modules/mediastream/LocalMediaStream.cpp

    r105774 r113460  
    3636PassRefPtr<LocalMediaStream> LocalMediaStream::create(ScriptExecutionContext* context, const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources)
    3737{
    38     return adoptRef(new LocalMediaStream(context, audioSources, videoSources));
     38    RefPtr<LocalMediaStream> stream = adoptRef(new LocalMediaStream(context, audioSources, videoSources));
     39    stream->suspendIfNeeded();
     40    return stream.release();
    3941}
    4042
     
    4345    , m_stopTimer(this, &LocalMediaStream::stopTimerFired)
    4446{
     47}
     48
     49void LocalMediaStream::stopFunction()
     50{
     51    stop();
    4552}
    4653
  • trunk/Source/WebCore/Modules/mediastream/LocalMediaStream.h

    r105774 r113460  
    3939    virtual ~LocalMediaStream();
    4040
    41     void stop();
     41    void stopFunction();
     42
     43    // ActiveDOMObject
     44    virtual void stop() OVERRIDE;
    4245
    4346    // EventTarget
    44     virtual const AtomicString& interfaceName() const;
     47    virtual const AtomicString& interfaceName() const OVERRIDE;
    4548
    4649private:
  • trunk/Source/WebCore/Modules/mediastream/LocalMediaStream.idl

    r107768 r113460  
    3131        JSGenerateToJSObject
    3232    ] LocalMediaStream : MediaStream {
    33         void stop();
     33        [ImplementedAs=stopFunction] void stop();
    3434    };
    3535
  • trunk/Source/WebCore/Modules/mediastream/MediaStream.cpp

    r105774 r113460  
    7777    RefPtr<MediaStreamDescriptor> descriptor = MediaStreamDescriptor::create(createCanonicalUUIDString(), audioSources, videoSources);
    7878    MediaStreamCenter::instance().didConstructMediaStream(descriptor.get());
    79     return adoptRef(new MediaStream(context, descriptor.release()));
     79
     80    RefPtr<MediaStream> stream = adoptRef(new MediaStream(context, descriptor.release()));
     81    stream->suspendIfNeeded();
     82    return stream.release();
    8083}
    8184
    8285PassRefPtr<MediaStream> MediaStream::create(ScriptExecutionContext* context, PassRefPtr<MediaStreamDescriptor> streamDescriptor)
    8386{
    84     return adoptRef(new MediaStream(context, streamDescriptor));
     87    RefPtr<MediaStream> stream = adoptRef(new MediaStream(context, streamDescriptor));
     88    stream->suspendIfNeeded();
     89    return stream.release();
    8590}
    8691
    8792MediaStream::MediaStream(ScriptExecutionContext* context, PassRefPtr<MediaStreamDescriptor> streamDescriptor)
    88     : m_scriptExecutionContext(context)
     93    : ActiveDOMObject(context, this)
    8994    , m_descriptor(streamDescriptor)
    9095{
     
    133138ScriptExecutionContext* MediaStream::scriptExecutionContext() const
    134139{
    135     return m_scriptExecutionContext.get();
     140    return ActiveDOMObject::scriptExecutionContext();
    136141}
    137142
  • trunk/Source/WebCore/Modules/mediastream/MediaStream.h

    r105774 r113460  
    2929#if ENABLE(MEDIA_STREAM)
    3030
     31#include "ActiveDOMObject.h"
    3132#include "EventTarget.h"
    3233#include "MediaStreamDescriptor.h"
     
    3940class ScriptExecutionContext;
    4041
    41 class MediaStream : public RefCounted<MediaStream>, public MediaStreamDescriptorOwner, public EventTarget {
     42class MediaStream : public RefCounted<MediaStream>, public MediaStreamDescriptorOwner, public EventTarget, public ActiveDOMObject {
    4243public:
    4344    // Must match the constants in the .idl file.
     
    6465
    6566    // EventTarget
    66     virtual const AtomicString& interfaceName() const;
    67     virtual ScriptExecutionContext* scriptExecutionContext() const;
     67    virtual const AtomicString& interfaceName() const OVERRIDE;
     68    virtual ScriptExecutionContext* scriptExecutionContext() const OVERRIDE;
    6869
    6970    using RefCounted<MediaStream>::ref;
     
    7374    MediaStream(ScriptExecutionContext*, PassRefPtr<MediaStreamDescriptor>);
    7475
    75     // EventTarget implementation.
    76     virtual EventTargetData* eventTargetData();
    77     virtual EventTargetData* ensureEventTargetData();
     76    // EventTarget
     77    virtual EventTargetData* eventTargetData() OVERRIDE;
     78    virtual EventTargetData* ensureEventTargetData() OVERRIDE;
    7879
    7980private:
    80     // EventTarget implementation.
    81     virtual void refEventTarget() { ref(); }
    82     virtual void derefEventTarget() { deref(); }
     81    // EventTarget
     82    virtual void refEventTarget() OVERRIDE { ref(); }
     83    virtual void derefEventTarget() OVERRIDE { deref(); }
    8384
    8485    EventTargetData m_eventTargetData;
    85 
    86     RefPtr<ScriptExecutionContext> m_scriptExecutionContext;
    8786
    8887    RefPtr<MediaStreamTrackList> m_audioTracks;
Note: See TracChangeset for help on using the changeset viewer.