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

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: Created 6 years, 10 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..145879ac2c16e447f5ce27c746392dae66df0d91
--- /dev/null
+++ b/net/cronet/android/java/src/org/chromium/net/HttpUrlRequestFactory.java
@@ -0,0 +1,95 @@
+// 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 String TAG = "HttpUrlRequestFactory";
+
+ private static final String CHROMIUM_URL_REQUEST_FACTORY =
+ "org.chromium.net.ChromiumUrlRequestFactory";
+
+ private static HttpUrlRequestFactory sFactory;
+
+ private static synchronized HttpUrlRequestFactory getFactory(Context context) {
+ 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