Add ability to set Cronet request priority
PiperOrigin-RevId: 381833403
This commit is contained in:
parent
8588bdb02a
commit
ea99c3fa94
@ -112,6 +112,9 @@
|
|||||||
* OkHttp extension:
|
* OkHttp extension:
|
||||||
* Switch to OkHttp 4.9.1. This increases the extension's minimum SDK
|
* Switch to OkHttp 4.9.1. This increases the extension's minimum SDK
|
||||||
version requirement from 16 to 21.
|
version requirement from 16 to 21.
|
||||||
|
* Cronet extension:
|
||||||
|
* Add `CronetDataSource.Factory.setRequestPriority` to allow setting the
|
||||||
|
priority of requests made by `CronetDataSource` instances.
|
||||||
|
|
||||||
### 2.14.1 (2021-06-11)
|
### 2.14.1 (2021-06-11)
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@ package com.google.android.exoplayer2.ext.cronet;
|
|||||||
|
|
||||||
import static com.google.android.exoplayer2.upstream.HttpUtil.buildRangeRequestHeader;
|
import static com.google.android.exoplayer2.upstream.HttpUtil.buildRangeRequestHeader;
|
||||||
import static com.google.android.exoplayer2.util.Util.castNonNull;
|
import static com.google.android.exoplayer2.util.Util.castNonNull;
|
||||||
|
import static org.chromium.net.UrlRequest.Builder.REQUEST_PRIORITY_MEDIUM;
|
||||||
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
@ -86,6 +87,7 @@ public class CronetDataSource extends BaseDataSource implements HttpDataSource {
|
|||||||
@Nullable private Predicate<String> contentTypePredicate;
|
@Nullable private Predicate<String> contentTypePredicate;
|
||||||
@Nullable private TransferListener transferListener;
|
@Nullable private TransferListener transferListener;
|
||||||
@Nullable private String userAgent;
|
@Nullable private String userAgent;
|
||||||
|
private int requestPriority;
|
||||||
private int connectTimeoutMs;
|
private int connectTimeoutMs;
|
||||||
private int readTimeoutMs;
|
private int readTimeoutMs;
|
||||||
private boolean resetTimeoutOnRedirects;
|
private boolean resetTimeoutOnRedirects;
|
||||||
@ -109,6 +111,7 @@ public class CronetDataSource extends BaseDataSource implements HttpDataSource {
|
|||||||
this.executor = executor;
|
this.executor = executor;
|
||||||
defaultRequestProperties = new RequestProperties();
|
defaultRequestProperties = new RequestProperties();
|
||||||
internalFallbackFactory = null;
|
internalFallbackFactory = null;
|
||||||
|
requestPriority = REQUEST_PRIORITY_MEDIUM;
|
||||||
connectTimeoutMs = DEFAULT_CONNECT_TIMEOUT_MILLIS;
|
connectTimeoutMs = DEFAULT_CONNECT_TIMEOUT_MILLIS;
|
||||||
readTimeoutMs = DEFAULT_READ_TIMEOUT_MILLIS;
|
readTimeoutMs = DEFAULT_READ_TIMEOUT_MILLIS;
|
||||||
}
|
}
|
||||||
@ -170,6 +173,21 @@ public class CronetDataSource extends BaseDataSource implements HttpDataSource {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the priority of requests made by {@link CronetDataSource} instances created by this
|
||||||
|
* factory.
|
||||||
|
*
|
||||||
|
* <p>The default is {@link UrlRequest.Builder#REQUEST_PRIORITY_MEDIUM}.
|
||||||
|
*
|
||||||
|
* @param requestPriority The request priority, which should be one of Cronet's {@code
|
||||||
|
* UrlRequest.Builder#REQUEST_PRIORITY_*} constants.
|
||||||
|
* @return This factory.
|
||||||
|
*/
|
||||||
|
public Factory setRequestPriority(int requestPriority) {
|
||||||
|
this.requestPriority = requestPriority;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the connect timeout, in milliseconds.
|
* Sets the connect timeout, in milliseconds.
|
||||||
*
|
*
|
||||||
@ -306,6 +324,7 @@ public class CronetDataSource extends BaseDataSource implements HttpDataSource {
|
|||||||
new CronetDataSource(
|
new CronetDataSource(
|
||||||
cronetEngine,
|
cronetEngine,
|
||||||
executor,
|
executor,
|
||||||
|
requestPriority,
|
||||||
connectTimeoutMs,
|
connectTimeoutMs,
|
||||||
readTimeoutMs,
|
readTimeoutMs,
|
||||||
resetTimeoutOnRedirects,
|
resetTimeoutOnRedirects,
|
||||||
@ -353,6 +372,7 @@ public class CronetDataSource extends BaseDataSource implements HttpDataSource {
|
|||||||
|
|
||||||
private final CronetEngine cronetEngine;
|
private final CronetEngine cronetEngine;
|
||||||
private final Executor executor;
|
private final Executor executor;
|
||||||
|
private final int requestPriority;
|
||||||
private final int connectTimeoutMs;
|
private final int connectTimeoutMs;
|
||||||
private final int readTimeoutMs;
|
private final int readTimeoutMs;
|
||||||
private final boolean resetTimeoutOnRedirects;
|
private final boolean resetTimeoutOnRedirects;
|
||||||
@ -413,6 +433,7 @@ public class CronetDataSource extends BaseDataSource implements HttpDataSource {
|
|||||||
this(
|
this(
|
||||||
cronetEngine,
|
cronetEngine,
|
||||||
executor,
|
executor,
|
||||||
|
REQUEST_PRIORITY_MEDIUM,
|
||||||
connectTimeoutMs,
|
connectTimeoutMs,
|
||||||
readTimeoutMs,
|
readTimeoutMs,
|
||||||
resetTimeoutOnRedirects,
|
resetTimeoutOnRedirects,
|
||||||
@ -436,6 +457,7 @@ public class CronetDataSource extends BaseDataSource implements HttpDataSource {
|
|||||||
this(
|
this(
|
||||||
cronetEngine,
|
cronetEngine,
|
||||||
executor,
|
executor,
|
||||||
|
REQUEST_PRIORITY_MEDIUM,
|
||||||
connectTimeoutMs,
|
connectTimeoutMs,
|
||||||
readTimeoutMs,
|
readTimeoutMs,
|
||||||
resetTimeoutOnRedirects,
|
resetTimeoutOnRedirects,
|
||||||
@ -499,6 +521,7 @@ public class CronetDataSource extends BaseDataSource implements HttpDataSource {
|
|||||||
this(
|
this(
|
||||||
cronetEngine,
|
cronetEngine,
|
||||||
executor,
|
executor,
|
||||||
|
REQUEST_PRIORITY_MEDIUM,
|
||||||
connectTimeoutMs,
|
connectTimeoutMs,
|
||||||
readTimeoutMs,
|
readTimeoutMs,
|
||||||
resetTimeoutOnRedirects,
|
resetTimeoutOnRedirects,
|
||||||
@ -512,6 +535,7 @@ public class CronetDataSource extends BaseDataSource implements HttpDataSource {
|
|||||||
protected CronetDataSource(
|
protected CronetDataSource(
|
||||||
CronetEngine cronetEngine,
|
CronetEngine cronetEngine,
|
||||||
Executor executor,
|
Executor executor,
|
||||||
|
int requestPriority,
|
||||||
int connectTimeoutMs,
|
int connectTimeoutMs,
|
||||||
int readTimeoutMs,
|
int readTimeoutMs,
|
||||||
boolean resetTimeoutOnRedirects,
|
boolean resetTimeoutOnRedirects,
|
||||||
@ -523,6 +547,7 @@ public class CronetDataSource extends BaseDataSource implements HttpDataSource {
|
|||||||
super(/* isNetwork= */ true);
|
super(/* isNetwork= */ true);
|
||||||
this.cronetEngine = Assertions.checkNotNull(cronetEngine);
|
this.cronetEngine = Assertions.checkNotNull(cronetEngine);
|
||||||
this.executor = Assertions.checkNotNull(executor);
|
this.executor = Assertions.checkNotNull(executor);
|
||||||
|
this.requestPriority = requestPriority;
|
||||||
this.connectTimeoutMs = connectTimeoutMs;
|
this.connectTimeoutMs = connectTimeoutMs;
|
||||||
this.readTimeoutMs = readTimeoutMs;
|
this.readTimeoutMs = readTimeoutMs;
|
||||||
this.resetTimeoutOnRedirects = resetTimeoutOnRedirects;
|
this.resetTimeoutOnRedirects = resetTimeoutOnRedirects;
|
||||||
@ -860,6 +885,7 @@ public class CronetDataSource extends BaseDataSource implements HttpDataSource {
|
|||||||
UrlRequest.Builder requestBuilder =
|
UrlRequest.Builder requestBuilder =
|
||||||
cronetEngine
|
cronetEngine
|
||||||
.newUrlRequestBuilder(dataSpec.uri.toString(), urlRequestCallback, executor)
|
.newUrlRequestBuilder(dataSpec.uri.toString(), urlRequestCallback, executor)
|
||||||
|
.setPriority(requestPriority)
|
||||||
.allowDirectExecutor();
|
.allowDirectExecutor();
|
||||||
|
|
||||||
// Set the headers.
|
// Set the headers.
|
||||||
|
@ -21,6 +21,7 @@ import static java.util.concurrent.TimeUnit.SECONDS;
|
|||||||
import static org.chromium.net.NetworkException.ERROR_HOSTNAME_NOT_RESOLVED;
|
import static org.chromium.net.NetworkException.ERROR_HOSTNAME_NOT_RESOLVED;
|
||||||
import static org.junit.Assert.fail;
|
import static org.junit.Assert.fail;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
import static org.mockito.ArgumentMatchers.anyString;
|
import static org.mockito.ArgumentMatchers.anyString;
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
import static org.mockito.Mockito.doAnswer;
|
import static org.mockito.Mockito.doAnswer;
|
||||||
@ -128,6 +129,7 @@ public final class CronetDataSourceTest {
|
|||||||
when(mockCronetEngine.newUrlRequestBuilder(
|
when(mockCronetEngine.newUrlRequestBuilder(
|
||||||
anyString(), any(UrlRequest.Callback.class), any(Executor.class)))
|
anyString(), any(UrlRequest.Callback.class), any(Executor.class)))
|
||||||
.thenReturn(mockUrlRequestBuilder);
|
.thenReturn(mockUrlRequestBuilder);
|
||||||
|
when(mockUrlRequestBuilder.setPriority(anyInt())).thenReturn(mockUrlRequestBuilder);
|
||||||
when(mockUrlRequestBuilder.allowDirectExecutor()).thenReturn(mockUrlRequestBuilder);
|
when(mockUrlRequestBuilder.allowDirectExecutor()).thenReturn(mockUrlRequestBuilder);
|
||||||
when(mockUrlRequestBuilder.build()).thenReturn(mockUrlRequest);
|
when(mockUrlRequestBuilder.build()).thenReturn(mockUrlRequest);
|
||||||
mockStatusResponse();
|
mockStatusResponse();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user