Changeset 150905 in webkit


Ignore:
Timestamp:
May 29, 2013 10:11:53 AM (11 years ago)
Author:
jer.noble@apple.com
Message:

Support the 'onended' EventListener property for AudioBufferSourceNode and OscillatorNode.
https://bugs.webkit.org/show_bug.cgi?id=116798

Reviewed by Eric Carlson.

Source/WebCore:

Tests: webaudio/audiobuffersource-ended.html

webaudio/oscillator-ended.html

  • Modules/webaudio/AudioScheduledSourceNode.cpp:

(WebCore::AudioScheduledSourceNode::AudioScheduledSourceNode):
(WebCore::AudioScheduledSourceNode::setOnended): Set m_hasEndedListener.
(WebCore::AudioScheduledSourceNode::finish): Call notifyEndedDispatch on the main thread.
(WebCore::AudioScheduledSourceNode::notifyEndedDispatch): Call notifyEnded().
(WebCore::AudioScheduledSourceNode::notifyEnded): Call the onended event listener.

  • Modules/webaudio/AudioScheduledSourceNode.h:

(WebCore::AudioScheduledSourceNode::onended): Added boilerplate.

  • Modules/webaudio/AudioBufferSourceNode.idl: Added the onerror attribute.
  • Modules/webaudio/OscillatorNode.idl: Ditto.

LayoutTests:

  • webaudio/audiobuffersource-ended-expected.txt: Added.
  • webaudio/audiobuffersource-ended.html: Added.
  • webaudio/oscillator-ended-expected.txt: Added.
  • webaudio/oscillator-ended.html: Added.
Location:
trunk
Files:
4 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r150904 r150905  
     12013-05-26  Jer Noble  <jer.noble@apple.com>
     2
     3        Support the 'onended' EventListener property for AudioBufferSourceNode and OscillatorNode.
     4        https://bugs.webkit.org/show_bug.cgi?id=116798
     5
     6        Reviewed by Eric Carlson.
     7
     8        * webaudio/audiobuffersource-ended-expected.txt: Added.
     9        * webaudio/audiobuffersource-ended.html: Added.
     10        * webaudio/oscillator-ended-expected.txt: Added.
     11        * webaudio/oscillator-ended.html: Added.
     12
    1132013-05-29  Bem Jones-Bey  <bjonesbe@adobe.com>
    214
  • trunk/Source/WebCore/ChangeLog

    r150904 r150905  
     12013-05-28  Jer Noble  <jer.noble@apple.com>
     2
     3        Support the 'onended' EventListener property for AudioBufferSourceNode and OscillatorNode.
     4        https://bugs.webkit.org/show_bug.cgi?id=116798
     5
     6        Reviewed by Eric Carlson.
     7
     8        Tests: webaudio/audiobuffersource-ended.html
     9               webaudio/oscillator-ended.html
     10
     11        * Modules/webaudio/AudioScheduledSourceNode.cpp:
     12        (WebCore::AudioScheduledSourceNode::AudioScheduledSourceNode):
     13        (WebCore::AudioScheduledSourceNode::setOnended): Set m_hasEndedListener.
     14        (WebCore::AudioScheduledSourceNode::finish): Call notifyEndedDispatch on the main thread.
     15        (WebCore::AudioScheduledSourceNode::notifyEndedDispatch): Call notifyEnded().
     16        (WebCore::AudioScheduledSourceNode::notifyEnded): Call the onended event listener.
     17        * Modules/webaudio/AudioScheduledSourceNode.h:
     18        (WebCore::AudioScheduledSourceNode::onended): Added boilerplate.
     19        * Modules/webaudio/AudioBufferSourceNode.idl: Added the onerror attribute.
     20        * Modules/webaudio/OscillatorNode.idl: Ditto.
     21
    1222013-05-29  Bem Jones-Bey  <bjonesbe@adobe.com>
    223
  • trunk/Source/WebCore/Modules/webaudio/AudioBufferSourceNode.idl

    r149920 r150905  
    5656    [Conditional=LEGACY_WEB_AUDIO] void noteGrainOn(double when, double grainOffset, double grainDuration);
    5757    [Conditional=LEGACY_WEB_AUDIO] void noteOff(double when);
     58   
     59    attribute EventListener onended;
    5860};
  • trunk/Source/WebCore/Modules/webaudio/AudioScheduledSourceNode.cpp

    r140879 r150905  
    3131#include "AudioContext.h"
    3232#include "AudioUtilities.h"
     33#include "Event.h"
    3334#include <algorithm>
    3435#include <wtf/MathExtras.h>
     
    4546    , m_startTime(0)
    4647    , m_endTime(UnknownTime)
     48    , m_hasEndedListener(false)
    4749{
    4850}
     
    165167#endif
    166168
     169void AudioScheduledSourceNode::setOnended(PassRefPtr<EventListener> listener)
     170{
     171    setAttributeEventListener(eventNames().endedEvent, listener);
     172    m_hasEndedListener = listener;
     173}
     174
    167175void AudioScheduledSourceNode::finish()
    168176{
     
    173181        context()->decrementActiveSourceCount();
    174182    }
     183
     184    if (m_hasEndedListener);
     185        callOnMainThread(&AudioScheduledSourceNode::notifyEndedDispatch, this);
     186}
     187
     188void AudioScheduledSourceNode::notifyEndedDispatch(void* userData)
     189{
     190    static_cast<AudioScheduledSourceNode*>(userData)->notifyEnded();
     191}
     192
     193void AudioScheduledSourceNode::notifyEnded()
     194{
     195    EventListener* listener = onended();
     196    if (!listener)
     197        return;
     198
     199    RefPtr<Event> event = Event::create(eventNames().endedEvent, FALSE, FALSE);
     200    event->setTarget(this);
     201    listener->handleEvent(context()->scriptExecutionContext(), event.get());
    175202}
    176203
  • trunk/Source/WebCore/Modules/webaudio/AudioScheduledSourceNode.h

    r146040 r150905  
    7070    bool hasFinished() const { return m_playbackState == FINISHED_STATE; }
    7171
     72    EventListener* onended() { return getAttributeEventListener(eventNames().endedEvent); }
     73    void setOnended(PassRefPtr<EventListener> listener);
     74
    7275protected:
    7376    // Get frame information for the current time quantum.
     
    8689    virtual void finish();
    8790
     91    static void notifyEndedDispatch(void*);
     92    void notifyEnded();
     93
    8894    PlaybackState m_playbackState;
    8995
     
    96102    double m_endTime; // in seconds
    97103
     104    bool m_hasEndedListener;
     105
    98106    static const double UnknownTime;
    99107};
  • trunk/Source/WebCore/Modules/webaudio/OscillatorNode.idl

    r149920 r150905  
    5757    void setWaveTable(WaveTable waveTable);
    5858
     59    attribute EventListener onended;
    5960};
Note: See TracChangeset for help on using the changeset viewer.