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

Unified Diff: net/cronet/android/java/src/org/chromium/net/HttpUrlRequestFactory.java

Issue 183333002: Cronet Java wrappers to fallback to HttpUrlConnection if Cronet is not available. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address formatting comments. Created 6 years, 9 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: net/cronet/android/java/src/org/chromium/net/HttpUrlRequestFactory.java
diff --git a/net/cronet/android/java/src/org/chromium/net/HttpUrlRequestFactory.java b/net/cronet/android/java/src/org/chromium/net/HttpUrlRequestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..9ffd306b8376d36fd65e9b9db1c2cdab643f1ce5
--- /dev/null
+++ b/net/cronet/android/java/src/org/chromium/net/HttpUrlRequestFactory.java
@@ -0,0 +1,105 @@
+// Copyright 2014 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 android.content.Context;
+import android.util.Log;
+
+import java.lang.reflect.Constructor;
+import java.nio.channels.WritableByteChannel;
+import java.util.Map;
+
+/**
+ * A factory for {@link HttpUrlRequest}'s, which uses the best HTTP stack
+ * available on the current platform.
+ */
+public abstract class HttpUrlRequestFactory {
+ private static final Object sLock = new Object();
+
+ private static final String TAG = "HttpUrlRequestFactory";
+
+ private static final String CHROMIUM_URL_REQUEST_FACTORY =
+ "org.chromium.net.ChromiumUrlRequestFactory";
+
+ private static HttpUrlRequestFactory sFactory;
+
+ private static HttpUrlRequestFactory getFactory(
+ Context context) {
+ synchronized (sLock) {
+ if (sFactory == null) {
+ try {
+ Class<? extends HttpUrlRequestFactory> factoryClass =
+ HttpUrlRequestFactory.class.getClassLoader().
+ loadClass(CHROMIUM_URL_REQUEST_FACTORY).
+ asSubclass(HttpUrlRequestFactory.class);
+ Constructor<? extends HttpUrlRequestFactory> constructor =
+ factoryClass.getConstructor(Context.class);
+ HttpUrlRequestFactory chromiumFactory =
+ constructor.newInstance(context);
+ if (chromiumFactory.isEnabled()) {
+ sFactory = chromiumFactory;
+ }
+ } catch (ClassNotFoundException e) {
+ // Leave as null
+ } catch (Exception e) {
+ throw new IllegalStateException(
+ "Cannot instantiate: " +
+ CHROMIUM_URL_REQUEST_FACTORY,
+ e);
+ }
+ if (sFactory == null) {
+ // Default to HttpUrlConnection-based networking.
+ sFactory = new HttpUrlConnectionUrlRequestFactory(context);
+ }
+ Log.i(TAG, "Using network stack: " + sFactory.getName());
+ }
+ return sFactory;
+ }
+ }
+
+ /**
+ * Creates a new request intended for full-response buffering.
+ */
+ public static HttpUrlRequest newRequest(Context context, String url,
+ int requestPriority, Map<String, String> headers,
+ HttpUrlRequestListener listener) {
+ return getFactory(context).createRequest(url, requestPriority, headers,
+ listener);
+ }
+
+ /**
+ * Creates a new request intended for streaming the response.
+ */
+ public static HttpUrlRequest newRequest(Context context, String url,
+ int requestPriority, Map<String, String> headers,
+ WritableByteChannel channel, HttpUrlRequestListener listener) {
+ return getFactory(context).createRequest(url, requestPriority, headers,
+ channel, listener);
+ }
+
+ /**
+ * Returns true if the factory is enabled.
+ */
+ protected abstract boolean isEnabled();
+
+ /**
+ * Returns a human-readable name of the factory.
+ */
+ protected abstract String getName();
+
+ /**
+ * Creates a new request intended for full-response buffering.
+ */
+ protected abstract HttpUrlRequest createRequest(String url,
+ int requestPriority, Map<String, String> headers,
+ HttpUrlRequestListener listener);
+
+ /**
+ * Creates a new request intended for streaming.
+ */
+ protected abstract HttpUrlRequest createRequest(String url,
+ int requestPriority, Map<String, String> headers,
+ WritableByteChannel channel, HttpUrlRequestListener listener);
+}

Powered by Google App Engine
This is Rietveld 408576698