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

Unified Diff: components/devtools_bridge/test/android/javatests/src/org/chromium/components/devtools_bridge/DataChannelMock.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/test/android/javatests/src/org/chromium/components/devtools_bridge/DataChannelMock.java
diff --git a/components/devtools_bridge/test/android/javatests/src/org/chromium/components/devtools_bridge/DataChannelMock.java b/components/devtools_bridge/test/android/javatests/src/org/chromium/components/devtools_bridge/DataChannelMock.java
new file mode 100644
index 0000000000000000000000000000000000000000..9821de1f91b5f86309369f12fdd45c782fd648dc
--- /dev/null
+++ b/components/devtools_bridge/test/android/javatests/src/org/chromium/components/devtools_bridge/DataChannelMock.java
@@ -0,0 +1,135 @@
+// 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 junit.framework.Assert;
+
+import java.nio.ByteBuffer;
+import java.util.concurrent.LinkedBlockingQueue;
+
+/**
+ * Mock of AbstractDataChannel tests. Also base class for DataPipe channels.
+ */
+public class DataChannelMock extends AbstractDataChannel {
+ private final SignalingThreadMock mSignalingThread;
+ private Observer mObserver;
+ private boolean mOpen = false;
+ private final LinkedBlockingQueue<ByteBuffer> mQueue = new LinkedBlockingQueue<ByteBuffer>();
+
+ // |signalingThread| will be disposed in the |dispose| method. If successor needs
+ // to control it's lifetime it must override |disposeSignalingThread| and not to invoke super's
+ // implementation.
+ protected DataChannelMock(SignalingThreadMock signalingThread) {
+ mSignalingThread = signalingThread;
+ }
+
+ public DataChannelMock() {
+ this(new SignalingThreadMock());
+ }
+
+ public void open() {
+ onStateChange(AbstractDataChannel.State.OPEN);
+ }
+
+ @Override
+ public void close() {
+ onStateChange(AbstractDataChannel.State.CLOSED);
+ }
+
+ private void onStateChange(final State state) {
+ mSignalingThread.invoke(new Runnable() {
+ @Override
+ public void run() {
+ mObserver.onStateChange(state);
+ }
+ });
+ }
+
+ // Sends onMessage to the observer.
+ public void notifyMessage(ByteBuffer data) {
+ final byte[] bytes = toByteArray(data);
+ mSignalingThread.invoke(new Runnable() {
+ @Override
+ public void run() {
+ notifyMessageOnSignalingThread(ByteBuffer.wrap(bytes));
+ }
+ });
+ }
+
+ protected void notifyMessageOnSignalingThread(ByteBuffer buffer) {
+ mObserver.onMessage(buffer);
+ }
+
+ // Blocks until message received. Removes it from the queue and returns.
+ public ByteBuffer receive() {
+ try {
+ return mQueue.take();
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public void registerObserver(final Observer observer) {
+ mSignalingThread.invoke(new Runnable() {
+ @Override
+ public void run() {
+ Assert.assertNull(mObserver);
+ mObserver = observer;
+ Assert.assertNotNull(mObserver);
+ }
+ });
+ }
+
+ @Override
+ public void unregisterObserver() {
+ mSignalingThread.invoke(new Runnable() {
+ @Override
+ public void run() {
+ Assert.assertNotNull(mObserver);
+ mObserver = null;
+ }
+ });
+ }
+
+ private byte[] toByteArray(ByteBuffer data) {
+ final byte[] result = new byte[data.remaining()];
+ data.get(result);
+ return result;
+ }
+
+ @Override
+ public void send(ByteBuffer message, MessageType type) {
+ final byte[] data = toByteArray(message);
+ assert data.length > 0;
+ mSignalingThread.post(new Runnable() {
+ @Override
+ public void run() {
+ sendOnSignalingThread(ByteBuffer.wrap(data));
+ android.util.Log.d("DataChannelMock", "Packet sent.");
+ }
+ });
+ }
+
+ protected void sendOnSignalingThread(ByteBuffer message) {
+ boolean success = mQueue.offer(message);
+ assert success;
+ }
+
+ @Override
+ public void dispose() {
+ mSignalingThread.invoke(new Runnable() {
+ @Override
+ public void run() {
+ Assert.assertNull(mObserver);
+ }
+ });
+ disposeSignalingThread();
+ }
+
+ protected void disposeSignalingThread() {
+ mSignalingThread.dispose();
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698