Chromium Code Reviews| 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.
|
| + } |
| + }; |
| + } |
| +} |