Index: components/cronet/android/api/src/org/chromium/net/JavaCronetEngine.java |
diff --git a/components/cronet/android/api/src/org/chromium/net/JavaCronetEngine.java b/components/cronet/android/api/src/org/chromium/net/JavaCronetEngine.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4f76b36e2163f38209b8b09bb2c61738509c11b8 |
--- /dev/null |
+++ b/components/cronet/android/api/src/org/chromium/net/JavaCronetEngine.java |
@@ -0,0 +1,131 @@ |
+// Copyright 2015 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.net; |
+ |
+import static android.os.Process.THREAD_PRIORITY_BACKGROUND; |
+import static android.os.Process.THREAD_PRIORITY_MORE_FAVORABLE; |
+ |
+import java.io.IOException; |
+import java.net.Proxy; |
+import java.net.URL; |
+import java.net.URLConnection; |
+import java.net.URLStreamHandler; |
+import java.net.URLStreamHandlerFactory; |
+import java.util.List; |
+import java.util.Map; |
+import java.util.concurrent.Executor; |
+import java.util.concurrent.ExecutorService; |
+import java.util.concurrent.Executors; |
+import java.util.concurrent.ThreadFactory; |
+ |
+/** |
+ * {@link java.net.HttpURLConnection} backed CronetEngine. |
+ */ |
+final class JavaCronetEngine extends CronetEngine { |
+ private final String mUserAgent; |
+ |
+ private final ExecutorService mExecutorService = |
+ Executors.newCachedThreadPool(new ThreadFactory() { |
+ @Override |
+ public Thread newThread(final Runnable r) { |
+ return Executors.defaultThreadFactory().newThread(new Runnable() { |
+ @Override |
+ public void run() { |
+ Thread.currentThread().setName("JavaCronetEngine"); |
+ android.os.Process.setThreadPriority( |
+ THREAD_PRIORITY_BACKGROUND + THREAD_PRIORITY_MORE_FAVORABLE); |
pauljensen
2015/12/08 19:49:52
why one above background? I think Cronet's networ
Charles
2015/12/11 16:45:39
Added comment explaining priority selection.
|
+ r.run(); |
+ } |
+ }); |
+ } |
+ }); |
+ |
+ JavaCronetEngine(String userAgent) { |
+ this.mUserAgent = userAgent; |
+ } |
+ |
+ @Override |
+ public UrlRequest createRequest(String url, UrlRequest.Callback callback, Executor executor) { |
+ return new JavaUrlRequest(callback, mExecutorService, executor, url, mUserAgent); |
+ } |
+ |
+ @Override |
+ public UrlRequest createRequest( |
+ String url, UrlRequest.Callback callback, Executor executor, int priority) { |
pauljensen
2015/12/08 19:49:52
I see you're ignoring priority. That's probably f
Charles
2015/12/11 16:45:39
Done.
|
+ return new JavaUrlRequest(callback, mExecutorService, executor, url, mUserAgent); |
+ } |
+ |
+ @Override |
+ BidirectionalStream createBidirectionalStream(String url, BidirectionalStream.Callback callback, |
+ Executor executor, String httpMethod, List<Map.Entry<String, String>> requestHeaders) { |
+ throw new UnsupportedOperationException( |
+ "Can't create a bidi stream - httpurlconnection doesn't have those APIs"); |
+ } |
+ |
+ @Override |
+ boolean isEnabled() { |
+ return true; |
+ } |
+ |
+ @Override |
+ public String getVersionString() { |
+ return "HttpUrlConnection"; |
pauljensen
2015/12/08 19:49:52
This should really include a version string so we
Charles
2015/12/11 16:45:39
Done.
|
+ } |
+ |
+ @Override |
+ public void shutdown() { |
+ mExecutorService.shutdown(); |
+ } |
+ |
+ @Override |
+ public void startNetLogToFile(String fileName, boolean logAll) {} |
+ |
+ @Override |
+ public void stopNetLog() {} |
+ |
+ @Override |
+ public byte[] getGlobalMetricsDeltas() { |
+ return new byte[0]; |
+ } |
+ |
+ @Override |
+ public void enableNetworkQualityEstimator(Executor executor) {} |
+ |
+ @Override |
+ void enableNetworkQualityEstimatorForTesting( |
+ boolean useLocalHostRequests, boolean useSmallerResponses, Executor executor) {} |
+ |
+ @Override |
+ public void addRttListener(NetworkQualityRttListener listener) {} |
+ |
+ @Override |
+ public void removeRttListener(NetworkQualityRttListener listener) {} |
+ |
+ @Override |
+ public void addThroughputListener(NetworkQualityThroughputListener listener) {} |
+ |
+ @Override |
+ public void removeThroughputListener(NetworkQualityThroughputListener listener) {} |
+ |
+ @Override |
+ public URLConnection openConnection(URL url) throws IOException { |
+ return url.openConnection(); |
+ } |
+ |
+ @Override |
+ public URLConnection openConnection(URL url, Proxy proxy) throws IOException { |
+ return url.openConnection(proxy); |
+ } |
+ |
+ @Override |
+ public URLStreamHandlerFactory createURLStreamHandlerFactory() { |
+ return new URLStreamHandlerFactory() { |
+ @Override |
+ public URLStreamHandler createURLStreamHandler(String protocol) { |
+ return null; |
pauljensen
2015/12/08 19:49:52
perhaps instead of returning null, return:
new URL
Charles
2015/12/11 16:45:39
That causes infinite recursion. Added a comment.
|
+ } |
+ }; |
+ } |
+} |