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

Side by Side Diff: components/cronet/android/java/src/org/chromium/net/UrlRequestContext.java

Issue 1363723002: [Cronet] Create Builders, rename UrlRequestContext to CronetEngine (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: update Ben's tests Created 5 years, 2 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.net;
6
7 import android.content.Context;
8 import android.util.Log;
9
10 import java.lang.reflect.Constructor;
11 import java.util.concurrent.Executor;
12
13 /**
14 * A context for {@link UrlRequest}'s, which uses the best HTTP stack
15 * available on the current platform.
16 */
17 public abstract class UrlRequestContext {
18 private static final String TAG = "UrlRequestFactory";
19 private static final String CRONET_URL_REQUEST_CONTEXT =
20 "org.chromium.net.CronetUrlRequestContext";
21
22 /**
23 * Creates a {@link UrlRequest} object. All callbacks will
24 * be called on {@code executor}'s thread. {@code executor} must not run
25 * tasks on the current thread to prevent blocking networking operations
26 * and causing exceptions during shutdown. Request is given medium priority,
27 * see {@link UrlRequest#REQUEST_PRIORITY_MEDIUM}. To specify other
28 * priorities see {@link #createRequest(String, UrlRequestListener,
29 * Executor, int priority)}.
30 *
31 * @param url {@link java.net.URL} for the request.
32 * @param listener callback class that gets called on different events.
33 * @param executor {@link Executor} on which all callbacks will be called.
34 * @return new request.
35 */
36 public abstract UrlRequest createRequest(String url,
37 UrlRequestListener listener, Executor executor);
38
39 /**
40 * Creates a {@link UrlRequest} object. All callbacks will
41 * be called on {@code executor}'s thread. {@code executor} must not run
42 * tasks on the current thread to prevent blocking networking operations
43 * and causing exceptions during shutdown.
44 *
45 * @param url {@link java.net.URL} for the request.
46 * @param listener callback class that gets called on different events.
47 * @param executor {@link Executor} on which all callbacks will be called.
48 * @param priority priority of the request which should be one of the
49 * {@link UrlRequest#REQUEST_PRIORITY_IDLE REQUEST_PRIORITY_*}
50 * values.
51 * @return new request.
52 */
53 public abstract UrlRequest createRequest(String url,
54 UrlRequestListener listener, Executor executor, int priority);
55
56 /**
57 * @return {@code true} if the context is enabled.
58 */
59 abstract boolean isEnabled();
60
61 /**
62 * @return a human-readable version string of the context.
63 */
64 public abstract String getVersionString();
65
66 /**
67 * Shuts down the {@link UrlRequestContext} if there are no active requests,
68 * otherwise throws an exception.
69 *
70 * Cannot be called on network thread - the thread Cronet calls into
71 * Executor on (which is different from the thread the Executor invokes
72 * callbacks on). May block until all the {@code UrlRequestContext}'s
73 * resources have been cleaned up.
74 */
75 public abstract void shutdown();
76
77 /**
78 * Starts NetLog logging to a file. The NetLog is useful for debugging.
79 * The file can be viewed using a Chrome browser navigated to
80 * chrome://net-internals/#import
81 * @param fileName the complete file path. It must not be empty. If the file
82 * exists, it is truncated before starting. If actively logging,
83 * this method is ignored.
84 * @param logAll {@code true} to include basic events, user cookies,
85 * credentials and all transferred bytes in the log.
86 * {@code false} to just include basic events.
87 */
88 public abstract void startNetLogToFile(String fileName, boolean logAll);
89
90 /**
91 * Stops NetLog logging and flushes file to disk. If a logging session is
92 * not in progress, this call is ignored.
93 */
94 public abstract void stopNetLog();
95
96 /**
97 * Enables the network quality estimator, which collects and reports
98 * measurements of round trip time (RTT) and downstream throughput at
99 * various layers of the network stack. After enabling the estimator,
100 * listeners of RTT and throughput can be added with
101 * {@link #addRttListener} and {@link #addThroughputListener} and
102 * removed with {@link #removeRttListener} and
103 * {@link #removeThroughputListener}. The estimator uses memory and CPU
104 * only when enabled.
105 * @param executor an executor that will be used to notified all
106 * added RTT and throughput listeners.
107 * @deprecated not really deprecated but hidden for now as it's a prototype.
108 */
109 @Deprecated public abstract void enableNetworkQualityEstimator(Executor exec utor);
110
111 /**
112 * Enables the network quality estimator for testing. This must be called
113 * before round trip time and throughput listeners are added. Set both
114 * boolean parameters to false for default behavior.
115 * @param useLocalHostRequests include requests to localhost in estimates.
116 * @param useSmallerResponses include small responses in throughput estimate s.
117 * @param executor an {@link java.util.concurrent.Executor} on which all
118 * listeners will be called.
119 * @deprecated not really deprecated but hidden for now as it's a prototype.
120 */
121 @Deprecated
122 abstract void enableNetworkQualityEstimatorForTesting(
123 boolean useLocalHostRequests, boolean useSmallerResponses, Executor executor);
124
125 /**
126 * Registers a listener that gets called whenever the network quality
127 * estimator witnesses a sample round trip time. This must be called
128 * after {@link #enableNetworkQualityEstimator}, and with throw an
129 * exception otherwise. Round trip times may be recorded at various layers
130 * of the network stack, including TCP, QUIC, and at the URL request layer.
131 * The listener is called on the {@link java.util.concurrent.Executor} that
132 * is passed to {@link #enableNetworkQualityEstimator}.
133 * @param listener the listener of round trip times.
134 * @deprecated not really deprecated but hidden for now as it's a prototype.
135 */
136 @Deprecated public abstract void addRttListener(NetworkQualityRttListener li stener);
137
138 /**
139 * Removes a listener of round trip times if previously registered with
140 * {@link #addRttListener}. This should be called after a
141 * {@link NetworkQualityRttListener} is added in order to stop receiving
142 * observations.
143 * @param listener the listener of round trip times.
144 * @deprecated not really deprecated but hidden for now as it's a prototype.
145 */
146 @Deprecated public abstract void removeRttListener(NetworkQualityRttListener listener);
147
148 /**
149 * Registers a listener that gets called whenever the network quality
150 * estimator witnesses a sample throughput measurement. This must be called
151 * after {@link #enableNetworkQualityEstimator}. Throughput observations
152 * are computed by measuring bytes read over the active network interface
153 * at times when at least one URL response is being received. The listener
154 * is called on the {@link java.util.concurrent.Executor} that is passed to
155 * {@link #enableNetworkQualityEstimator}.
156 * @param listener the listener of throughput.
157 * @deprecated not really deprecated but hidden for now as it's a prototype.
158 */
159 @Deprecated
160 public abstract void addThroughputListener(NetworkQualityThroughputListener listener);
161
162 /**
163 * Removes a listener of throughput. This should be called after a
164 * {@link NetworkQualityThroughputListener} is added with
165 * {@link #addThroughputListener} in order to stop receiving observations.
166 * @param listener the listener of throughput.
167 * @deprecated not really deprecated but hidden for now as it's a prototype.
168 */
169 @Deprecated
170 public abstract void removeThroughputListener(NetworkQualityThroughputListen er listener);
171
172 /**
173 * Creates a {@link UrlRequestContext} with the given
174 * {@link UrlRequestContextConfig}.
175 * @param context Android {@link Context}.
176 * @param config context configuration.
177 */
178 public static UrlRequestContext createContext(Context context,
179 UrlRequestContextConfig config) {
180 UrlRequestContext urlRequestContext = null;
181 if (config.userAgent().isEmpty()) {
182 config.setUserAgent(UserAgent.from(context));
183 }
184 if (!config.legacyMode()) {
185 urlRequestContext = createCronetContext(context, config);
186 }
187 if (urlRequestContext == null) {
188 // TODO(mef): Fallback to stub implementation. Once stub
189 // implementation is available merge with createCronetFactory.
190 urlRequestContext = createCronetContext(context, config);
191 }
192 Log.i(TAG, "Using network stack: "
193 + urlRequestContext.getVersionString());
194 return urlRequestContext;
195 }
196
197 private static UrlRequestContext createCronetContext(Context context,
198 UrlRequestContextConfig config) {
199 UrlRequestContext urlRequestContext = null;
200 try {
201 Class<? extends UrlRequestContext> contextClass =
202 UrlRequestContext.class.getClassLoader()
203 .loadClass(CRONET_URL_REQUEST_CONTEXT)
204 .asSubclass(UrlRequestContext.class);
205 Constructor<? extends UrlRequestContext> constructor =
206 contextClass.getConstructor(
207 Context.class, UrlRequestContextConfig.class);
208 UrlRequestContext cronetContext =
209 constructor.newInstance(context, config);
210 if (cronetContext.isEnabled()) {
211 urlRequestContext = cronetContext;
212 }
213 } catch (ClassNotFoundException e) {
214 // Leave as null.
215 } catch (Exception e) {
216 throw new IllegalStateException(
217 "Cannot instantiate: " + CRONET_URL_REQUEST_CONTEXT,
218 e);
219 }
220 return urlRequestContext;
221 }
222 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698