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

Unified Diff: components/cronet/android/api/src/org/chromium/net/JavaCronetEngine.java

Issue 1492583002: Add HttpUrlConnection backed implementation of CronetEngine. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix accidental println Created 4 years, 11 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/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..d97196101196bbd06fee89fa61f18cbcd31dfa3b
--- /dev/null
+++ b/components/cronet/android/api/src/org/chromium/net/JavaCronetEngine.java
@@ -0,0 +1,144 @@
+// 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.Collection;
+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.
+ *
+ * <p>Does not support netlogs, transferred data measurement, bidistream, cache, or priority.
+ */
+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");
+ // On android, all background threads (and all threads that are part
+ // of background processes) are put in a cgroup that is allowed to
+ // consume up to 5% of CPU - these worker threads spend the vast
+ // majority of their time waiting on I/O, so making them contend with
+ // background applications for a slice of CPU doesn't make much sense.
+ // We want to hurry up and get idle.
+ android.os.Process.setThreadPriority(
+ THREAD_PRIORITY_BACKGROUND + THREAD_PRIORITY_MORE_FAVORABLE);
+ r.run();
+ }
+ });
+ }
+ });
+
+ JavaCronetEngine(String userAgent) {
+ this.mUserAgent = userAgent;
+ }
+
+ @Override
+ public UrlRequest createRequest(String url, UrlRequest.Callback callback, Executor executor,
+ int priority, Collection<Object> connectionAnnotations) {
+ 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,
+ @BidirectionalStream.Builder.StreamPriority int priority) {
+ 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 "CronetHttpURLConnection/" + Version.getVersion();
+ }
+
+ @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 void addRequestFinishedListener(RequestFinishedListener listener) {}
+
+ @Override
+ public void removeRequestFinishedListener(RequestFinishedListener 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() {
+ // Returning null causes this factory to pass though, which ends up using the platform's
+ // implementation.
+ return new URLStreamHandlerFactory() {
+ @Override
+ public URLStreamHandler createURLStreamHandler(String protocol) {
+ return null;
+ }
+ };
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698