OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package org.chromium.net.impl; | 5 package org.chromium.net.impl; |
6 | 6 |
7 import android.content.Context; | 7 import android.content.Context; |
8 import android.os.Build; | 8 import android.os.Build; |
9 import android.os.ConditionVariable; | 9 import android.os.ConditionVariable; |
10 import android.os.Handler; | 10 import android.os.Handler; |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
56 /** | 56 /** |
57 * Synchronize access to mUrlRequestContextAdapter and shutdown routine. | 57 * Synchronize access to mUrlRequestContextAdapter and shutdown routine. |
58 */ | 58 */ |
59 private final Object mLock = new Object(); | 59 private final Object mLock = new Object(); |
60 private final ConditionVariable mInitCompleted = new ConditionVariable(false
); | 60 private final ConditionVariable mInitCompleted = new ConditionVariable(false
); |
61 private final AtomicInteger mActiveRequestCount = new AtomicInteger(0); | 61 private final AtomicInteger mActiveRequestCount = new AtomicInteger(0); |
62 | 62 |
63 private long mUrlRequestContextAdapter = 0; | 63 private long mUrlRequestContextAdapter = 0; |
64 private Thread mNetworkThread; | 64 private Thread mNetworkThread; |
65 | 65 |
66 private Executor mNetworkQualityExecutor; | |
67 private boolean mNetworkQualityEstimatorEnabled; | 66 private boolean mNetworkQualityEstimatorEnabled; |
68 | 67 |
69 /** | 68 /** |
70 * Locks operations on network quality listeners, because listener | 69 * Locks operations on network quality listeners, because listener |
71 * addition and removal may occur on a different thread from notification. | 70 * addition and removal may occur on a different thread from notification. |
72 */ | 71 */ |
73 private final Object mNetworkQualityLock = new Object(); | 72 private final Object mNetworkQualityLock = new Object(); |
74 | 73 |
75 /** | 74 /** |
76 * Locks operations on the list of RequestFinishedListeners, because operati
ons can happen on | 75 * Locks operations on the list of RequestFinishedListeners, because operati
ons can happen on |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
254 return mCertVerifierData; | 253 return mCertVerifierData; |
255 } | 254 } |
256 | 255 |
257 // This method is intentionally non-static to ensure Cronet native library | 256 // This method is intentionally non-static to ensure Cronet native library |
258 // is loaded by class constructor. | 257 // is loaded by class constructor. |
259 @Override | 258 @Override |
260 public byte[] getGlobalMetricsDeltas() { | 259 public byte[] getGlobalMetricsDeltas() { |
261 return nativeGetHistogramDeltas(); | 260 return nativeGetHistogramDeltas(); |
262 } | 261 } |
263 | 262 |
264 /** | |
265 * TODO(tbansal): http://crbug.com/618034 Remove this API once all | |
266 * embedders have switched to using a request finished listener that | |
267 * provides its own executor. | |
268 */ | |
269 @Override | |
270 public void setRequestFinishedListenerExecutor(Executor executor) { | |
271 if (!mNetworkQualityEstimatorEnabled) { | |
272 throw new IllegalStateException("Network quality estimator not enabl
ed"); | |
273 } | |
274 if (executor == null) { | |
275 throw new NullPointerException("Request finished listener requires a
n executor"); | |
276 } | |
277 if (mNetworkQualityExecutor != null) { | |
278 throw new NullPointerException("Request finished listener executor a
lready set"); | |
279 } | |
280 mNetworkQualityExecutor = executor; | |
281 } | |
282 | |
283 /** | |
284 * TODO(tbansal): http://crbug.com/618034 Remove this API once all | |
285 * embedders have switched to using CronetEngine builder for enabling | |
286 * network quality estimator. | |
287 */ | |
288 @Override | |
289 public void enableNetworkQualityEstimator(Executor executor) { | |
290 if (mNetworkQualityEstimatorEnabled) { | |
291 throw new IllegalStateException("Network quality estimator already e
nabled"); | |
292 } | |
293 mNetworkQualityEstimatorEnabled = true; | |
294 if (executor == null) { | |
295 throw new NullPointerException("Network quality estimator requires a
n executor"); | |
296 } | |
297 mNetworkQualityExecutor = executor; | |
298 synchronized (mLock) { | |
299 checkHaveAdapter(); | |
300 nativeEnableNetworkQualityEstimator(mUrlRequestContextAdapter); | |
301 } | |
302 } | |
303 | |
304 @VisibleForTesting | 263 @VisibleForTesting |
305 @Override | 264 @Override |
306 public void configureNetworkQualityEstimatorForTesting( | 265 public void configureNetworkQualityEstimatorForTesting( |
307 boolean useLocalHostRequests, boolean useSmallerResponses) { | 266 boolean useLocalHostRequests, boolean useSmallerResponses) { |
308 if (!mNetworkQualityEstimatorEnabled) { | 267 if (!mNetworkQualityEstimatorEnabled) { |
309 throw new IllegalStateException("Network quality estimator must be e
nabled"); | 268 throw new IllegalStateException("Network quality estimator must be e
nabled"); |
310 } | 269 } |
311 synchronized (mLock) { | 270 synchronized (mLock) { |
312 checkHaveAdapter(); | 271 checkHaveAdapter(); |
313 nativeConfigureNetworkQualityEstimatorForTesting( | 272 nativeConfigureNetworkQualityEstimatorForTesting( |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
372 mThroughputListenerList.removeObserver(listener); | 331 mThroughputListenerList.removeObserver(listener); |
373 if (mThroughputListenerList.isEmpty()) { | 332 if (mThroughputListenerList.isEmpty()) { |
374 synchronized (mLock) { | 333 synchronized (mLock) { |
375 checkHaveAdapter(); | 334 checkHaveAdapter(); |
376 nativeProvideThroughputObservations(mUrlRequestContextAdapte
r, false); | 335 nativeProvideThroughputObservations(mUrlRequestContextAdapte
r, false); |
377 } | 336 } |
378 } | 337 } |
379 } | 338 } |
380 } | 339 } |
381 | 340 |
382 /** | |
383 * TODO(tbansal): http://crbug.com/618034 Remove this API once all | |
384 * embedders have switched to using a request finished listener that | |
385 * provides its own executor. | |
386 */ | |
387 @Override | 341 @Override |
388 public void addRequestFinishedListener(RequestFinishedListener listener) { | 342 public void addRequestFinishedListener(RequestFinishedListener listener) { |
389 synchronized (mFinishedListenerLock) { | 343 synchronized (mFinishedListenerLock) { |
390 mFinishedListenerList.add(listener); | 344 mFinishedListenerList.add(listener); |
391 } | 345 } |
392 } | 346 } |
393 | 347 |
394 /** | |
395 * TODO(tbansal): http://crbug.com/618034 Remove this API. | |
396 */ | |
397 @Override | 348 @Override |
398 public void removeRequestFinishedListener(RequestFinishedListener listener)
{ | 349 public void removeRequestFinishedListener(RequestFinishedListener listener)
{ |
399 synchronized (mFinishedListenerLock) { | 350 synchronized (mFinishedListenerLock) { |
400 mFinishedListenerList.remove(listener); | 351 mFinishedListenerList.remove(listener); |
401 } | 352 } |
402 } | 353 } |
403 | 354 |
404 @Override | 355 @Override |
405 public URLConnection openConnection(URL url) { | 356 public URLConnection openConnection(URL url) { |
406 return openConnection(url, Proxy.NO_PROXY); | 357 return openConnection(url, Proxy.NO_PROXY); |
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
585 private native void nativeGetCertVerifierData(long nativePtr); | 536 private native void nativeGetCertVerifierData(long nativePtr); |
586 | 537 |
587 @NativeClassQualifiedName("CronetURLRequestContextAdapter") | 538 @NativeClassQualifiedName("CronetURLRequestContextAdapter") |
588 private native void nativeInitRequestContextOnMainThread(long nativePtr); | 539 private native void nativeInitRequestContextOnMainThread(long nativePtr); |
589 | 540 |
590 @NativeClassQualifiedName("CronetURLRequestContextAdapter") | 541 @NativeClassQualifiedName("CronetURLRequestContextAdapter") |
591 private native void nativeConfigureNetworkQualityEstimatorForTesting( | 542 private native void nativeConfigureNetworkQualityEstimatorForTesting( |
592 long nativePtr, boolean useLocalHostRequests, boolean useSmallerResp
onses); | 543 long nativePtr, boolean useLocalHostRequests, boolean useSmallerResp
onses); |
593 | 544 |
594 @NativeClassQualifiedName("CronetURLRequestContextAdapter") | 545 @NativeClassQualifiedName("CronetURLRequestContextAdapter") |
595 private native void nativeEnableNetworkQualityEstimator(long nativePtr); | |
596 | |
597 @NativeClassQualifiedName("CronetURLRequestContextAdapter") | |
598 private native void nativeProvideRTTObservations(long nativePtr, boolean sho
uld); | 546 private native void nativeProvideRTTObservations(long nativePtr, boolean sho
uld); |
599 | 547 |
600 @NativeClassQualifiedName("CronetURLRequestContextAdapter") | 548 @NativeClassQualifiedName("CronetURLRequestContextAdapter") |
601 private native void nativeProvideThroughputObservations(long nativePtr, bool
ean should); | 549 private native void nativeProvideThroughputObservations(long nativePtr, bool
ean should); |
602 } | 550 } |
OLD | NEW |