| Index: components/cronet/android/test/javatests/src/org/chromium/cronet_test_apk/CronetUrlTest.java
|
| diff --git a/components/cronet/android/test/javatests/src/org/chromium/cronet_test_apk/CronetUrlTest.java b/components/cronet/android/test/javatests/src/org/chromium/cronet_test_apk/CronetUrlTest.java
|
| index 8cc6313a1ff2151de14f0e9c2d79c1a8f98cad6a..d25f3253bf06d68597ac0da250f8e4807474c816 100644
|
| --- a/components/cronet/android/test/javatests/src/org/chromium/cronet_test_apk/CronetUrlTest.java
|
| +++ b/components/cronet/android/test/javatests/src/org/chromium/cronet_test_apk/CronetUrlTest.java
|
| @@ -4,15 +4,20 @@
|
|
|
| package org.chromium.cronet_test_apk;
|
|
|
| +import android.test.suitebuilder.annotation.LargeTest;
|
| import android.test.suitebuilder.annotation.SmallTest;
|
|
|
| import org.chromium.base.PathUtils;
|
| import org.chromium.base.test.util.Feature;
|
| +import org.chromium.net.ChunkedWritableByteChannel;
|
| import org.chromium.net.HttpUrlRequest;
|
| import org.chromium.net.HttpUrlRequestFactoryConfig;
|
|
|
| import java.io.File;
|
| +import java.io.IOException;
|
| +import java.nio.ByteBuffer;
|
| import java.util.HashMap;
|
| +import java.util.concurrent.Executors;
|
|
|
| /**
|
| * Example test that just starts the cronet sample.
|
| @@ -244,4 +249,60 @@ public class CronetUrlTest extends CronetTestBase {
|
| // ignored.
|
| assertEquals(0, listener.mResponseAsBytes.length);
|
| }
|
| +
|
| + static class TestByteChannel extends ChunkedWritableByteChannel {
|
| + boolean mIsOpen = true;
|
| +
|
| + @Override
|
| + public int write(ByteBuffer byteBuffer) throws IOException {
|
| + assertTrue(isOpen());
|
| + return super.write(byteBuffer);
|
| + }
|
| +
|
| + @Override
|
| + public void close() {
|
| + assertTrue(isOpen());
|
| + mIsOpen = false;
|
| + super.close();
|
| + }
|
| +
|
| + @Override
|
| + public boolean isOpen() {
|
| + return mIsOpen;
|
| + }
|
| + }
|
| +
|
| + @LargeTest
|
| + @Feature({"Cronet"})
|
| + public void testWriteAfterCancel() throws Exception {
|
| + CronetTestActivity activity = launchCronetTestAppWithUrl(URL);
|
| +
|
| + // Make sure the activity was created as expected.
|
| + waitForActiveShellToBeDoneLoading();
|
| +
|
| + // This test verifies that WritableByteChannel.write is not called after
|
| + // WritableByteChannel.close if if request is canceled from another
|
| + // thread.
|
| + for (int i = 0; i < 100; ++i) {
|
| + HashMap<String, String> headers = new HashMap<String, String>();
|
| + TestByteChannel channel = new TestByteChannel();
|
| + TestHttpUrlRequestListener listener =
|
| + new TestHttpUrlRequestListener();
|
| +
|
| + // Create request.
|
| + final HttpUrlRequest request =
|
| + activity.mRequestFactory.createRequest(
|
| + URL, HttpUrlRequest.REQUEST_PRIORITY_LOW, headers,
|
| + channel, listener);
|
| + request.start();
|
| + listener.blockForStart();
|
| + Runnable cancelTask = new Runnable() {
|
| + public void run() {
|
| + request.cancel();
|
| + }
|
| + };
|
| + Executors.newCachedThreadPool().execute(cancelTask);
|
| + listener.blockForComplete();
|
| + }
|
| + }
|
| }
|
|
|