Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(133)

Unified Diff: third_party/WebKit/Source/modules/mediastream/RTCDataChannel.cpp

Issue 2097563002: Split the mediastream module in Blink into mediastream and peerconnection (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add DEPS file Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/mediastream/RTCDataChannel.cpp
diff --git a/third_party/WebKit/Source/modules/mediastream/RTCDataChannel.cpp b/third_party/WebKit/Source/modules/mediastream/RTCDataChannel.cpp
deleted file mode 100644
index a3e9296d62beed77132f4f9de44078ee1962c726..0000000000000000000000000000000000000000
--- a/third_party/WebKit/Source/modules/mediastream/RTCDataChannel.cpp
+++ /dev/null
@@ -1,400 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "modules/mediastream/RTCDataChannel.h"
-
-#include "bindings/core/v8/ExceptionState.h"
-#include "core/dom/DOMArrayBuffer.h"
-#include "core/dom/DOMArrayBufferView.h"
-#include "core/dom/ExceptionCode.h"
-#include "core/dom/ExecutionContext.h"
-#include "core/events/MessageEvent.h"
-#include "core/fileapi/Blob.h"
-#include "modules/mediastream/RTCPeerConnection.h"
-#include "public/platform/WebRTCPeerConnectionHandler.h"
-#include "wtf/PtrUtil.h"
-#include <memory>
-
-namespace blink {
-
-static void throwNotOpenException(ExceptionState& exceptionState)
-{
- exceptionState.throwDOMException(InvalidStateError, "RTCDataChannel.readyState is not 'open'");
-}
-
-static void throwCouldNotSendDataException(ExceptionState& exceptionState)
-{
- exceptionState.throwDOMException(NetworkError, "Could not send data");
-}
-
-static void throwNoBlobSupportException(ExceptionState& exceptionState)
-{
- exceptionState.throwDOMException(NotSupportedError, "Blob support not implemented yet");
-}
-
-RTCDataChannel* RTCDataChannel::create(ExecutionContext* context, std::unique_ptr<WebRTCDataChannelHandler> handler)
-{
- DCHECK(handler);
- RTCDataChannel* channel = new RTCDataChannel(context, std::move(handler));
- channel->suspendIfNeeded();
-
- return channel;
-}
-
-RTCDataChannel* RTCDataChannel::create(ExecutionContext* context, WebRTCPeerConnectionHandler* peerConnectionHandler, const String& label, const WebRTCDataChannelInit& init, ExceptionState& exceptionState)
-{
- std::unique_ptr<WebRTCDataChannelHandler> handler = wrapUnique(peerConnectionHandler->createDataChannel(label, init));
- if (!handler) {
- exceptionState.throwDOMException(NotSupportedError, "RTCDataChannel is not supported");
- return nullptr;
- }
- RTCDataChannel* channel = new RTCDataChannel(context, std::move(handler));
- channel->suspendIfNeeded();
-
- return channel;
-}
-
-RTCDataChannel::RTCDataChannel(ExecutionContext* context, std::unique_ptr<WebRTCDataChannelHandler> handler)
- : ActiveScriptWrappable(this)
- , ActiveDOMObject(context)
- , m_handler(std::move(handler))
- , m_readyState(ReadyStateConnecting)
- , m_binaryType(BinaryTypeArrayBuffer)
- , m_scheduledEventTimer(this, &RTCDataChannel::scheduledEventTimerFired)
- , m_bufferedAmountLowThreshold(0U)
- , m_stopped(false)
-{
- ThreadState::current()->registerPreFinalizer(this);
- m_handler->setClient(this);
-}
-
-RTCDataChannel::~RTCDataChannel()
-{
-}
-
-void RTCDataChannel::dispose()
-{
- if (m_stopped)
- return;
-
- // Promptly clears a raw reference from content/ to an on-heap object
- // so that content/ doesn't access it in a lazy sweeping phase.
- m_handler->setClient(nullptr);
- m_handler.reset();
-}
-
-RTCDataChannel::ReadyState RTCDataChannel::getHandlerState() const
-{
- return m_handler->state();
-}
-
-String RTCDataChannel::label() const
-{
- return m_handler->label();
-}
-
-bool RTCDataChannel::reliable() const
-{
- return m_handler->isReliable();
-}
-
-bool RTCDataChannel::ordered() const
-{
- return m_handler->ordered();
-}
-
-unsigned short RTCDataChannel::maxRetransmitTime() const
-{
- return m_handler->maxRetransmitTime();
-}
-
-unsigned short RTCDataChannel::maxRetransmits() const
-{
- return m_handler->maxRetransmits();
-}
-
-String RTCDataChannel::protocol() const
-{
- return m_handler->protocol();
-}
-
-bool RTCDataChannel::negotiated() const
-{
- return m_handler->negotiated();
-}
-
-unsigned short RTCDataChannel::id() const
-{
- return m_handler->id();
-}
-
-String RTCDataChannel::readyState() const
-{
- switch (m_readyState) {
- case ReadyStateConnecting:
- return "connecting";
- case ReadyStateOpen:
- return "open";
- case ReadyStateClosing:
- return "closing";
- case ReadyStateClosed:
- return "closed";
- }
-
- NOTREACHED();
- return String();
-}
-
-unsigned RTCDataChannel::bufferedAmount() const
-{
- return m_handler->bufferedAmount();
-}
-
-unsigned RTCDataChannel::bufferedAmountLowThreshold() const
-{
- return m_bufferedAmountLowThreshold;
-}
-
-void RTCDataChannel::setBufferedAmountLowThreshold(unsigned threshold)
-{
- m_bufferedAmountLowThreshold = threshold;
-}
-
-String RTCDataChannel::binaryType() const
-{
- switch (m_binaryType) {
- case BinaryTypeBlob:
- return "blob";
- case BinaryTypeArrayBuffer:
- return "arraybuffer";
- }
- NOTREACHED();
- return String();
-}
-
-void RTCDataChannel::setBinaryType(const String& binaryType, ExceptionState& exceptionState)
-{
- if (binaryType == "blob")
- throwNoBlobSupportException(exceptionState);
- else if (binaryType == "arraybuffer")
- m_binaryType = BinaryTypeArrayBuffer;
- else
- exceptionState.throwDOMException(TypeMismatchError, "Unknown binary type : " + binaryType);
-}
-
-void RTCDataChannel::send(const String& data, ExceptionState& exceptionState)
-{
- if (m_readyState != ReadyStateOpen) {
- throwNotOpenException(exceptionState);
- return;
- }
- if (!m_handler->sendStringData(data)) {
- // FIXME: This should not throw an exception but instead forcefully close the data channel.
- throwCouldNotSendDataException(exceptionState);
- }
-}
-
-void RTCDataChannel::send(DOMArrayBuffer* data, ExceptionState& exceptionState)
-{
- if (m_readyState != ReadyStateOpen) {
- throwNotOpenException(exceptionState);
- return;
- }
-
- size_t dataLength = data->byteLength();
- if (!dataLength)
- return;
-
- if (!m_handler->sendRawData(static_cast<const char*>((data->data())), dataLength)) {
- // FIXME: This should not throw an exception but instead forcefully close the data channel.
- throwCouldNotSendDataException(exceptionState);
- }
-}
-
-void RTCDataChannel::send(DOMArrayBufferView* data, ExceptionState& exceptionState)
-{
- if (!m_handler->sendRawData(static_cast<const char*>(data->baseAddress()), data->byteLength())) {
- // FIXME: This should not throw an exception but instead forcefully close the data channel.
- throwCouldNotSendDataException(exceptionState);
- }
-}
-
-void RTCDataChannel::send(Blob* data, ExceptionState& exceptionState)
-{
- // FIXME: implement
- throwNoBlobSupportException(exceptionState);
-}
-
-void RTCDataChannel::close()
-{
- m_handler->close();
-}
-
-void RTCDataChannel::didChangeReadyState(WebRTCDataChannelHandlerClient::ReadyState newState)
-{
- if (m_readyState == ReadyStateClosed)
- return;
-
- m_readyState = newState;
-
- switch (m_readyState) {
- case ReadyStateOpen:
- scheduleDispatchEvent(Event::create(EventTypeNames::open));
- break;
- case ReadyStateClosed:
- scheduleDispatchEvent(Event::create(EventTypeNames::close));
- break;
- default:
- break;
- }
-}
-
-void RTCDataChannel::didDecreaseBufferedAmount(unsigned previousAmount)
-{
- if (previousAmount > m_bufferedAmountLowThreshold
- && bufferedAmount() <= m_bufferedAmountLowThreshold) {
- scheduleDispatchEvent(Event::create(EventTypeNames::bufferedamountlow));
- }
-}
-
-void RTCDataChannel::didReceiveStringData(const WebString& text)
-{
- scheduleDispatchEvent(MessageEvent::create(text));
-}
-
-void RTCDataChannel::didReceiveRawData(const char* data, size_t dataLength)
-{
- if (m_binaryType == BinaryTypeBlob) {
- // FIXME: Implement.
- return;
- }
- if (m_binaryType == BinaryTypeArrayBuffer) {
- DOMArrayBuffer* buffer = DOMArrayBuffer::create(data, dataLength);
- scheduleDispatchEvent(MessageEvent::create(buffer));
- return;
- }
- NOTREACHED();
-}
-
-void RTCDataChannel::didDetectError()
-{
- scheduleDispatchEvent(Event::create(EventTypeNames::error));
-}
-
-const AtomicString& RTCDataChannel::interfaceName() const
-{
- return EventTargetNames::RTCDataChannel;
-}
-
-ExecutionContext* RTCDataChannel::getExecutionContext() const
-{
- return ActiveDOMObject::getExecutionContext();
-}
-
-// ActiveDOMObject
-void RTCDataChannel::suspend()
-{
- m_scheduledEventTimer.stop();
-}
-
-void RTCDataChannel::resume()
-{
- if (!m_scheduledEvents.isEmpty() && !m_scheduledEventTimer.isActive())
- m_scheduledEventTimer.startOneShot(0, BLINK_FROM_HERE);
-}
-
-void RTCDataChannel::stop()
-{
- if (m_stopped)
- return;
-
- m_stopped = true;
- m_handler->setClient(nullptr);
- m_handler.reset();
-}
-
-// ActiveScriptWrappable
-bool RTCDataChannel::hasPendingActivity() const
-{
- if (m_stopped)
- return false;
-
- // A RTCDataChannel object must not be garbage collected if its
- // * readyState is connecting and at least one event listener is registered
- // for open events, message events, error events, or close events.
- // * readyState is open and at least one event listener is registered for
- // message events, error events, or close events.
- // * readyState is closing and at least one event listener is registered for
- // error events, or close events.
- // * underlying data transport is established and data is queued to be
- // transmitted.
- bool hasValidListeners = false;
- switch (m_readyState) {
- case ReadyStateConnecting:
- hasValidListeners |= hasEventListeners(EventTypeNames::open);
- // fallthrough intended
- case ReadyStateOpen:
- hasValidListeners |= hasEventListeners(EventTypeNames::message);
- // fallthrough intended
- case ReadyStateClosing:
- hasValidListeners |= hasEventListeners(EventTypeNames::error) || hasEventListeners(EventTypeNames::close);
- break;
- default:
- break;
- }
-
- if (hasValidListeners)
- return true;
-
- return m_readyState != ReadyStateClosed && bufferedAmount() > 0;
-}
-
-void RTCDataChannel::scheduleDispatchEvent(Event* event)
-{
- m_scheduledEvents.append(event);
-
- if (!m_scheduledEventTimer.isActive())
- m_scheduledEventTimer.startOneShot(0, BLINK_FROM_HERE);
-}
-
-void RTCDataChannel::scheduledEventTimerFired(Timer<RTCDataChannel>*)
-{
- HeapVector<Member<Event>> events;
- events.swap(m_scheduledEvents);
-
- HeapVector<Member<Event>>::iterator it = events.begin();
- for (; it != events.end(); ++it)
- dispatchEvent((*it).release());
-
- events.clear();
-}
-
-DEFINE_TRACE(RTCDataChannel)
-{
- visitor->trace(m_scheduledEvents);
- EventTargetWithInlineData::trace(visitor);
- ActiveDOMObject::trace(visitor);
-}
-
-} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698