Index: components/cronet/android/test/javatests/src/org/chromium/net/RequestFinishedInfoTest.java |
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/RequestFinishedInfoTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/RequestFinishedInfoTest.java |
index 1f671a8bff67a8d7c3e4ae8ba1683c6c1d443cbc..c88ff84531aca685ffe7a28908821bc11cd9050d 100644 |
--- a/components/cronet/android/test/javatests/src/org/chromium/net/RequestFinishedInfoTest.java |
+++ b/components/cronet/android/test/javatests/src/org/chromium/net/RequestFinishedInfoTest.java |
@@ -20,6 +20,7 @@ import java.util.Date; |
import java.util.HashSet; |
import java.util.List; |
import java.util.concurrent.Executor; |
+import java.util.concurrent.RejectedExecutionException; |
/** |
* Test RequestFinishedInfo.Listener and the metrics information it provides. |
@@ -292,6 +293,41 @@ public class RequestFinishedInfoTest extends CronetTestBase { |
mTestFramework.mCronetEngine.shutdown(); |
} |
+ private static class RejectAllTasksExecutor implements Executor { |
+ @Override |
+ public void execute(Runnable task) { |
+ throw new RejectedExecutionException(); |
+ } |
+ } |
+ |
+ // Checks that CronetURLRequestAdapter::DestroyOnNetworkThread() doesn't crash when metrics |
+ // collection is enabled and the URLRequest hasn't been created. See http://crbug.com/675629. |
+ @SmallTest |
+ @OnlyRunNativeCronet |
+ @Feature({"Cronet"}) |
+ public void testExceptionInRequestStart() throws Exception { |
+ mTestFramework = startCronetTestFramework(); |
+ // The listener in this test shouldn't get any tasks. |
+ Executor executor = new RejectAllTasksExecutor(); |
+ TestRequestFinishedListener requestFinishedListener = |
+ new TestRequestFinishedListener(executor); |
+ mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedListener); |
+ TestUrlRequestCallback callback = new TestUrlRequestCallback(); |
+ ExperimentalUrlRequest.Builder urlRequestBuilder = |
+ mTestFramework.mCronetEngine.newUrlRequestBuilder( |
+ mUrl, callback, callback.getExecutor()); |
+ // Empty headers are invalid and will cause start() to throw an exception. |
+ UrlRequest request = urlRequestBuilder.addHeader("", "").build(); |
+ try { |
+ request.start(); |
+ fail("UrlRequest.start() should throw IllegalArgumentException"); |
+ } catch (IllegalArgumentException e) { |
+ assertEquals("Invalid header =", e.getMessage()); |
+ } |
+ |
+ mTestFramework.mCronetEngine.shutdown(); |
+ } |
+ |
@SmallTest |
@Feature({"Cronet"}) |
public void testMetricsGetters() throws Exception { |