| Index: components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/AbstractDataChannel.java
|
| diff --git a/components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/AbstractDataChannel.java b/components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/AbstractDataChannel.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e92c6db73126aef45f655d96e5f0f3705091634e
|
| --- /dev/null
|
| +++ b/components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/AbstractDataChannel.java
|
| @@ -0,0 +1,77 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +package org.chromium.components.devtools_bridge;
|
| +
|
| +import java.nio.ByteBuffer;
|
| +
|
| +/**
|
| + * Limited view on org.webrtc.DataChannel. Abstraction layer helps with:
|
| + * 1. Mocking in tests. There is no need to emulate full set of features of the DataChannel.
|
| + * 2. Allows both native and Java API implementation for WebRTC data channel.
|
| + * 3. Hides unused features.
|
| + * Only SCTP data channels supported.
|
| + * Data channel is thread safe (except the dispose method).
|
| + */
|
| +public abstract class AbstractDataChannel {
|
| + /**
|
| + * Observer's callbacks are called on WebRTC signaling thread (or it's equivalent in tests).
|
| + */
|
| + public interface Observer {
|
| + void onStateChange(State state);
|
| +
|
| + /**
|
| + * TEXT and BINARY messages should be handled equally. Size of the message is
|
| + * |message|.remaining(). |message| may reference to a native buffer on stack so
|
| + * the reference to the buffer must not outlive the invocation.
|
| + */
|
| + void onMessage(ByteBuffer message);
|
| + }
|
| +
|
| + /**
|
| + * Type is only significant for JavaScript-based counterpart. TEXT messages will
|
| + * be observed as strings, BINARY as ByteArray's.
|
| + */
|
| + public enum MessageType {
|
| + TEXT, BINARY
|
| + }
|
| +
|
| + /**
|
| + * State of the data channel.
|
| + * Only 2 states of channel are important here: OPEN and everything else.
|
| + */
|
| + public enum State {
|
| + OPEN, CLOSED
|
| + }
|
| +
|
| + /**
|
| + * Registers an observer.
|
| + */
|
| + public abstract void registerObserver(Observer observer);
|
| +
|
| + /**
|
| + * Unregisters the previously registered observer.
|
| + * Observer unregistration synchronized with signaling thread. If some data modified
|
| + * in observer callbacks without additional synchronization it's safe to access
|
| + * this data on the current thread after calling this method.
|
| + */
|
| + public abstract void unregisterObserver();
|
| +
|
| + /**
|
| + * Sending message to the data channel.
|
| + * Message size is |message|.remaining().
|
| + */
|
| + public abstract void send(ByteBuffer message, MessageType type);
|
| +
|
| + /**
|
| + * Closing data channel. Both channels in the pair will change state to CLOSED.
|
| + */
|
| + public abstract void close();
|
| +
|
| + /**
|
| + * Releases native objects (if any). Closes data channel. No other methods are allowed after it
|
| + * (in multithread scenario needs synchronization with access to the data channel).
|
| + */
|
| + public abstract void dispose();
|
| +}
|
|
|