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

Unified Diff: components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/AbstractDataChannel.java

Issue 517233002: DevTools socket tunnel. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@glue
Patch Set: Created 6 years, 3 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: 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();
+}

Powered by Google App Engine
This is Rietveld 408576698