Changeset 126586 in webkit


Ignore:
Timestamp:
Aug 24, 2012 8:10:17 AM (12 years ago)
Author:
tommyw@google.com
Message:

MediaStream API: Add readyState functionality to RTCPeerConnection
https://bugs.webkit.org/show_bug.cgi?id=94813

Reviewed by Adam Barth.

Source/Platform:

  • chromium/public/WebRTCPeerConnectionHandler.h:

(WebRTCPeerConnectionHandler):

  • chromium/public/WebRTCPeerConnectionHandlerClient.h:

(WebRTCPeerConnectionHandlerClient):

Source/WebCore:

This patch adds readyState functionality to RTCPeerConnection together with related callbacks and methods.

Test: fast/mediastream/RTCPeerConnection-state.html

  • Modules/mediastream/RTCPeerConnection.cpp:

(WebCore::RTCPeerConnection::RTCPeerConnection):
(WebCore::RTCPeerConnection::readyState):
(WebCore):
(WebCore::RTCPeerConnection::close):
(WebCore::RTCPeerConnection::didChangeReadyState):
(WebCore::RTCPeerConnection::stop):
(WebCore::RTCPeerConnection::changeReadyState):

  • Modules/mediastream/RTCPeerConnection.h:

(RTCPeerConnection):

  • Modules/mediastream/RTCPeerConnection.idl:
  • platform/mediastream/RTCPeerConnectionHandler.cpp:

(RTCPeerConnectionHandlerDummy):
(WebCore::RTCPeerConnectionHandlerDummy::stop):
(WebCore):

  • platform/mediastream/RTCPeerConnectionHandler.h:

(RTCPeerConnectionHandler):

  • platform/mediastream/RTCPeerConnectionHandlerClient.h:

(RTCPeerConnectionHandlerClient):

  • platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.cpp:

(WebCore::RTCPeerConnectionHandlerChromium::RTCPeerConnectionHandlerChromium):
(WebCore::RTCPeerConnectionHandlerChromium::stop):
(WebCore):
(WebCore::RTCPeerConnectionHandlerChromium::didChangeReadyState):

  • platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.h:

(RTCPeerConnectionHandlerChromium):

Source/WebKit/chromium:

  • src/AssertMatchingEnums.cpp:

Tools:

  • DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:

(MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler):
(MockWebRTCPeerConnectionHandler::stop):

  • DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h:

(MockWebRTCPeerConnectionHandler):

LayoutTests:

  • fast/mediastream/RTCPeerConnection-state-expected.txt: Added.
  • fast/mediastream/RTCPeerConnection-state.html: Added.
Location:
trunk
Files:
2 added
18 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r126584 r126586  
     12012-08-24  Tommy Widenflycht  <tommyw@google.com>
     2
     3        MediaStream API: Add readyState functionality to RTCPeerConnection
     4        https://bugs.webkit.org/show_bug.cgi?id=94813
     5
     6        Reviewed by Adam Barth.
     7
     8        * fast/mediastream/RTCPeerConnection-state-expected.txt: Added.
     9        * fast/mediastream/RTCPeerConnection-state.html: Added.
     10
    1112012-08-24  Vsevolod Vlasov  <vsevik@chromium.org>
    212
  • trunk/Source/Platform/ChangeLog

    r126513 r126586  
     12012-08-24  Tommy Widenflycht  <tommyw@google.com>
     2
     3        MediaStream API: Add readyState functionality to RTCPeerConnection
     4        https://bugs.webkit.org/show_bug.cgi?id=94813
     5
     6        Reviewed by Adam Barth.
     7
     8        * chromium/public/WebRTCPeerConnectionHandler.h:
     9        (WebRTCPeerConnectionHandler):
     10        * chromium/public/WebRTCPeerConnectionHandlerClient.h:
     11        (WebRTCPeerConnectionHandlerClient):
     12
    1132012-08-23  James Robinson  <jamesr@chromium.org>
    214
  • trunk/Source/Platform/chromium/public/WebRTCPeerConnectionHandler.h

    r124460 r126586  
    4040
    4141    virtual bool initialize() = 0;
     42    virtual void stop() = 0;
    4243};
    4344
  • trunk/Source/Platform/chromium/public/WebRTCPeerConnectionHandlerClient.h

    r124460 r126586  
    3636class WebRTCPeerConnectionHandlerClient {
    3737public:
     38    enum ReadyState {
     39        ReadyStateNew = 1,
     40        ReadyStateOpening = 2,
     41        ReadyStateActive = 3,
     42        ReadyStateClosing = 4,
     43        ReadyStateClosed = 5
     44    };
     45
    3846    virtual ~WebRTCPeerConnectionHandlerClient() { }
     47
     48    virtual void didChangeReadyState(ReadyState) = 0;
    3949};
    4050
  • trunk/Source/WebCore/ChangeLog

    r126585 r126586  
     12012-08-24  Tommy Widenflycht  <tommyw@google.com>
     2
     3        MediaStream API: Add readyState functionality to RTCPeerConnection
     4        https://bugs.webkit.org/show_bug.cgi?id=94813
     5
     6        Reviewed by Adam Barth.
     7
     8        This patch adds readyState functionality to RTCPeerConnection together with related callbacks and methods.
     9
     10        Test: fast/mediastream/RTCPeerConnection-state.html
     11
     12        * Modules/mediastream/RTCPeerConnection.cpp:
     13        (WebCore::RTCPeerConnection::RTCPeerConnection):
     14        (WebCore::RTCPeerConnection::readyState):
     15        (WebCore):
     16        (WebCore::RTCPeerConnection::close):
     17        (WebCore::RTCPeerConnection::didChangeReadyState):
     18        (WebCore::RTCPeerConnection::stop):
     19        (WebCore::RTCPeerConnection::changeReadyState):
     20        * Modules/mediastream/RTCPeerConnection.h:
     21        (RTCPeerConnection):
     22        * Modules/mediastream/RTCPeerConnection.idl:
     23        * platform/mediastream/RTCPeerConnectionHandler.cpp:
     24        (RTCPeerConnectionHandlerDummy):
     25        (WebCore::RTCPeerConnectionHandlerDummy::stop):
     26        (WebCore):
     27        * platform/mediastream/RTCPeerConnectionHandler.h:
     28        (RTCPeerConnectionHandler):
     29        * platform/mediastream/RTCPeerConnectionHandlerClient.h:
     30        (RTCPeerConnectionHandlerClient):
     31        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.cpp:
     32        (WebCore::RTCPeerConnectionHandlerChromium::RTCPeerConnectionHandlerChromium):
     33        (WebCore::RTCPeerConnectionHandlerChromium::stop):
     34        (WebCore):
     35        (WebCore::RTCPeerConnectionHandlerChromium::didChangeReadyState):
     36        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.h:
     37        (RTCPeerConnectionHandlerChromium):
     38
    1392012-08-24  Andrey Adaikin  <aandrey@chromium.org>
    240
  • trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp

    r124460 r126586  
    3636
    3737#include "ArrayValue.h"
     38#include "Event.h"
    3839#include "ExceptionCode.h"
    39 #include "KURL.h"
    4040#include "RTCConfiguration.h"
    4141#include "ScriptExecutionContext.h"
     
    107107RTCPeerConnection::RTCPeerConnection(ScriptExecutionContext* context, PassRefPtr<RTCConfiguration>, ExceptionCode& ec)
    108108    : ActiveDOMObject(context, this)
     109    , m_readyState(ReadyStateNew)
    109110{
    110111    m_peerHandler = RTCPeerConnectionHandler::create(this);
     
    117118}
    118119
     120String RTCPeerConnection::readyState() const
     121{
     122    switch (m_readyState) {
     123    case ReadyStateNew:
     124        return "new";
     125    case ReadyStateOpening:
     126        return "opening";
     127    case ReadyStateActive:
     128        return "active";
     129    case ReadyStateClosing:
     130        return "closing";
     131    case ReadyStateClosed:
     132        return "closed";
     133    }
     134
     135    ASSERT_NOT_REACHED();
     136    return "";
     137}
     138
     139void RTCPeerConnection::close(ExceptionCode& ec)
     140{
     141    if (m_readyState == ReadyStateClosing || m_readyState == ReadyStateClosed) {
     142        ec = INVALID_STATE_ERR;
     143        return;
     144    }
     145
     146    changeReadyState(ReadyStateClosed);
     147    stop();
     148}
     149
     150void RTCPeerConnection::didChangeReadyState(ReadyState newState)
     151{
     152    ASSERT(scriptExecutionContext()->isContextThread());
     153    changeReadyState(newState);
     154}
     155
    119156const AtomicString& RTCPeerConnection::interfaceName() const
    120157{
     
    129166void RTCPeerConnection::stop()
    130167{
    131     // FIXME: Make sure that this object stops posting events and releases resources at this stage.
     168    m_readyState = ReadyStateClosed;
     169
     170    if (m_peerHandler) {
     171        m_peerHandler->stop();
     172        m_peerHandler.clear();
     173    }
    132174}
    133175
     
    142184}
    143185
     186void RTCPeerConnection::changeReadyState(ReadyState readyState)
     187{
     188    if (readyState == m_readyState || m_readyState == ReadyStateClosed)
     189        return;
     190
     191    m_readyState = readyState;
     192
     193    switch (m_readyState) {
     194    case ReadyStateOpening:
     195        break;
     196    case ReadyStateActive:
     197        dispatchEvent(Event::create(eventNames().openEvent, false, false));
     198        break;
     199    case ReadyStateClosing:
     200    case ReadyStateClosed:
     201        break;
     202    case ReadyStateNew:
     203        ASSERT_NOT_REACHED();
     204        break;
     205    }
     206
     207    dispatchEvent(Event::create(eventNames().statechangeEvent, false, false));
     208}
     209
    144210} // namespace WebCore
    145211
  • trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.h

    r124460 r126586  
    5050    ~RTCPeerConnection();
    5151
     52    String readyState() const;
     53
     54    void close(ExceptionCode&);
     55
     56    DEFINE_ATTRIBUTE_EVENT_LISTENER(open);
     57    DEFINE_ATTRIBUTE_EVENT_LISTENER(statechange);
     58
     59    // RTCPeerConnectionHandlerClient
     60    virtual void didChangeReadyState(ReadyState) OVERRIDE;
     61
    5262    // EventTarget
    5363    virtual const AtomicString& interfaceName() const OVERRIDE;
     
    7282    EventTargetData m_eventTargetData;
    7383
     84    void changeReadyState(ReadyState);
     85
     86    ReadyState m_readyState;
     87
    7488    OwnPtr<RTCPeerConnectionHandler> m_peerHandler;
    7589};
  • trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.idl

    r124193 r126586  
    3939        EventTarget
    4040    ] RTCPeerConnection {
     41        readonly attribute DOMString readyState;
     42
     43        void close()
     44            raises(DOMException);
     45
     46        attribute EventListener onopen;
     47        attribute EventListener onstatechange;
     48
    4149        // EventTarget interface
    4250        void addEventListener(in DOMString type,
  • trunk/Source/WebCore/platform/mediastream/RTCPeerConnectionHandler.cpp

    r124460 r126586  
    4848
    4949    virtual bool initialize() OVERRIDE;
     50    virtual void stop() OVERRIDE;
    5051
    5152private:
     
    7374}
    7475
     76void RTCPeerConnectionHandlerDummy::stop()
     77{
     78}
     79
    7580} // namespace WebCore
    7681
  • trunk/Source/WebCore/platform/mediastream/RTCPeerConnectionHandler.h

    r124460 r126586  
    4747
    4848    virtual bool initialize() = 0;
     49    virtual void stop() = 0;
    4950
    5051protected:
  • trunk/Source/WebCore/platform/mediastream/RTCPeerConnectionHandlerClient.h

    r124460 r126586  
    3838class RTCPeerConnectionHandlerClient {
    3939public:
     40    enum ReadyState {
     41        ReadyStateNew = 1,
     42        ReadyStateOpening = 2,
     43        ReadyStateActive = 3,
     44        ReadyStateClosing = 4,
     45        ReadyStateClosed = 5
     46    };
     47
    4048    virtual ~RTCPeerConnectionHandlerClient() { }
    4149
     50    virtual void didChangeReadyState(ReadyState) = 0;
    4251};
    4352
  • trunk/Source/WebCore/platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.cpp

    r126341 r126586  
    4646}
    4747
    48 RTCPeerConnectionHandlerChromium::RTCPeerConnectionHandlerChromium(RTCPeerConnectionHandlerClient*)
     48RTCPeerConnectionHandlerChromium::RTCPeerConnectionHandlerChromium(RTCPeerConnectionHandlerClient* client)
     49    : m_client(client)
    4950{
     51    ASSERT(m_client);
    5052}
    5153
     
    6062}
    6163
     64void RTCPeerConnectionHandlerChromium::stop()
     65{
     66    if (!m_webHandler)
     67        return;
     68
     69    m_webHandler->stop();
     70}
     71
     72void RTCPeerConnectionHandlerChromium::didChangeReadyState(WebKit::WebRTCPeerConnectionHandlerClient::ReadyState state)
     73{
     74    m_client->didChangeReadyState(static_cast<RTCPeerConnectionHandlerClient::ReadyState>(state));
     75}
     76
    6277} // namespace WebCore
    6378
  • trunk/Source/WebCore/platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.h

    r124460 r126586  
    4848
    4949    virtual bool initialize() OVERRIDE;
     50    virtual void stop() OVERRIDE;
     51
     52    // WebKit::WebRTCPeerConnectionHandlerClient implementation.
     53    virtual void didChangeReadyState(WebKit::WebRTCPeerConnectionHandlerClient::ReadyState) OVERRIDE;
    5054
    5155private:
    5256    OwnPtr<WebKit::WebRTCPeerConnectionHandler> m_webHandler;
     57    RTCPeerConnectionHandlerClient* m_client;
    5358};
    5459
  • trunk/Source/WebKit/chromium/ChangeLog

    r126566 r126586  
     12012-08-24  Tommy Widenflycht  <tommyw@google.com>
     2
     3        MediaStream API: Add readyState functionality to RTCPeerConnection
     4        https://bugs.webkit.org/show_bug.cgi?id=94813
     5
     6        Reviewed by Adam Barth.
     7
     8        * src/AssertMatchingEnums.cpp:
     9
    1102012-08-24  Dan Carney  <dcarney@google.com>
    211
  • trunk/Source/WebKit/chromium/src/AssertMatchingEnums.cpp

    r126369 r126586  
    6565#include "PeerConnection00.h"
    6666#include "PlatformCursor.h"
     67#include "RTCPeerConnectionHandlerClient.h"
    6768#include "ReferrerPolicy.h"
    6869#include "ResourceResponse.h"
     
    116117#include <public/WebFileSystem.h>
    117118#include <public/WebFilterOperation.h>
     119#include <public/WebRTCPeerConnectionHandler.h>
     120#include <public/WebRTCPeerConnectionHandlerClient.h>
    118121#include <public/WebReferrerPolicy.h>
    119122#include <public/WebScrollbar.h>
     
    593596COMPILE_ASSERT_MATCHING_ENUM(WebPeerConnection00HandlerClient::ICEStateFailed, PeerConnection00::ICE_FAILED);
    594597COMPILE_ASSERT_MATCHING_ENUM(WebPeerConnection00HandlerClient::ICEStateClosed, PeerConnection00::ICE_CLOSED);
     598
     599COMPILE_ASSERT_MATCHING_ENUM(WebRTCPeerConnectionHandlerClient::ReadyStateNew, RTCPeerConnectionHandlerClient::ReadyStateNew);
     600COMPILE_ASSERT_MATCHING_ENUM(WebRTCPeerConnectionHandlerClient::ReadyStateOpening, RTCPeerConnectionHandlerClient::ReadyStateOpening);
     601COMPILE_ASSERT_MATCHING_ENUM(WebRTCPeerConnectionHandlerClient::ReadyStateActive, RTCPeerConnectionHandlerClient::ReadyStateActive);
     602COMPILE_ASSERT_MATCHING_ENUM(WebRTCPeerConnectionHandlerClient::ReadyStateClosing, RTCPeerConnectionHandlerClient::ReadyStateClosing);
     603COMPILE_ASSERT_MATCHING_ENUM(WebRTCPeerConnectionHandlerClient::ReadyStateClosed, RTCPeerConnectionHandlerClient::ReadyStateClosed);
    595604#endif
    596605
  • trunk/Tools/ChangeLog

    r126577 r126586  
     12012-08-24  Tommy Widenflycht  <tommyw@google.com>
     2
     3        MediaStream API: Add readyState functionality to RTCPeerConnection
     4        https://bugs.webkit.org/show_bug.cgi?id=94813
     5
     6        Reviewed by Adam Barth.
     7
     8        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
     9        (MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler):
     10        (MockWebRTCPeerConnectionHandler::stop):
     11        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h:
     12        (MockWebRTCPeerConnectionHandler):
     13
    1142012-08-24  Michael Brüning  <michaelbruening@gmail.com>
    215
  • trunk/Tools/DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp

    r126341 r126586  
    3838using namespace WebKit;
    3939
    40 MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler(WebRTCPeerConnectionHandlerClient* client)
     40MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler(WebRTCPeerConnectionHandlerClient*)
    4141{
    4242}
     
    4747}
    4848
     49void MockWebRTCPeerConnectionHandler::stop()
     50{
     51}
     52
    4953#endif // ENABLE(MEDIA_STREAM)
  • trunk/Tools/DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h

    r126341 r126586  
    4444
    4545    virtual bool initialize() OVERRIDE;
     46    virtual void stop() OVERRIDE;
    4647
    4748private:
Note: See TracChangeset for help on using the changeset viewer.