Skip to content
Merged
Show file tree
Hide file tree
Changes from 34 commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
f6a6245
Test for Brotli decompressor
carloseltuerto Feb 18, 2022
d7108fd
Merge branch 'main' into cronvoy063
carloseltuerto Mar 5, 2022
b9d9c10
Rollback config.cc
carloseltuerto Mar 5, 2022
c14bd73
Add BrotliTest
carloseltuerto Mar 6, 2022
db45ff3
Nits
carloseltuerto Mar 6, 2022
1dde551
More nits
carloseltuerto Mar 6, 2022
81128d8
Move includes to extension_registry.cc
carloseltuerto Mar 8, 2022
dc3331f
Merge branch 'main' into cronvoy063
carloseltuerto Mar 9, 2022
3bbdc9a
Nit
carloseltuerto Mar 9, 2022
70bceff
Merge branch 'main' into cronvoy063
carloseltuerto Mar 27, 2022
6fc93ff
Merge branch 'main' into cronvoy063
carloseltuerto Apr 9, 2022
1a1bb9f
Merge branch 'main' into cronvoy063
carloseltuerto Apr 18, 2022
d568d78
CronetBidirectionalStream implementation
carloseltuerto Apr 18, 2022
33e332d
Remove deadline
carloseltuerto Apr 18, 2022
ace3c18
Fix nits
carloseltuerto Apr 18, 2022
d91c2b7
Fix BUILD error
carloseltuerto Apr 18, 2022
2a96f6e
Merge branch 'main' into cronvoy063
carloseltuerto Apr 27, 2022
894a25f
Cleanup and race condition fixes
carloseltuerto Apr 27, 2022
e5e5c07
Remove unwanted file
carloseltuerto Apr 27, 2022
0fe8a89
Nit
carloseltuerto Apr 27, 2022
59a032c
Nit
carloseltuerto Apr 27, 2022
75f0728
Address comments
carloseltuerto Apr 28, 2022
3c25e4b
Always use `mState.nextAction` as the `switch` argument
carloseltuerto Apr 28, 2022
253458c
Nit
carloseltuerto Apr 28, 2022
3a90968
Fix a test
carloseltuerto Apr 28, 2022
cc31877
Merge branch 'main' into cronvoy063
carloseltuerto Apr 28, 2022
2faabcf
Fix some race conditions.
carloseltuerto May 3, 2022
bf03b08
Remove spurious file
carloseltuerto May 3, 2022
5a72f08
Batch of comments addressed.
carloseltuerto May 3, 2022
ccaa901
Nits
carloseltuerto May 4, 2022
e480b4e
Address follow-up batch of comments
carloseltuerto May 5, 2022
bac674c
Temporarily delete files to facilitate the merge.
carloseltuerto May 5, 2022
ab6c804
Merge branch 'main' into cronvoy063
carloseltuerto May 5, 2022
7889921
- Fix race condition occurring on Linux only.
carloseltuerto May 9, 2022
f2f6b6a
Add the Read State diagram
carloseltuerto May 9, 2022
80ce727
Nits
carloseltuerto May 10, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions library/java/org/chromium/net/impl/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,11 @@ android_library(
"Annotations.java",
"AtomicCombinatoryState.java",
"BidirectionalStreamBuilderImpl.java",
"BidirectionalStreamNetworkException.java",
"CallbackExceptionImpl.java",
"CancelProofEnvoyStream.java",
"CronetBidirectionalState.java",
"CronetBidirectionalStream.java",
"CronetEngineBase.java",
"CronetEngineBuilderImpl.java",
"CronetExceptionImpl.java",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
/**
* Used in {@link CronetBidirectionalStream}. Implements {@link NetworkExceptionImpl}.
*/
final class BidirectionalStreamNetworkException extends NetworkExceptionImpl {
public final class BidirectionalStreamNetworkException extends NetworkExceptionImpl {
public BidirectionalStreamNetworkException(String message, int errorCode,
int cronetInternalErrorCode) {
super(message, errorCode, cronetInternalErrorCode);
Expand Down
587 changes: 587 additions & 0 deletions library/java/org/chromium/net/impl/CronetBidirectionalState.java

Large diffs are not rendered by default.

1,224 changes: 719 additions & 505 deletions library/java/org/chromium/net/impl/CronetBidirectionalStream.java

Large diffs are not rendered by default.

14 changes: 4 additions & 10 deletions library/java/org/chromium/net/impl/CronetUrlRequest.java
Original file line number Diff line number Diff line change
Expand Up @@ -94,11 +94,10 @@ public final class CronetUrlRequest extends UrlRequestBase {
}

private static final String X_ENVOY = "x-envoy";
private static final String X_ENVOY_SELECTED_TRANSPORT = "x-android-selected-transport";
Comment thread
RyanTheOptimist marked this conversation as resolved.
private static final String X_ENVOY_UPSTREAM_ALPN = "x-envoy-upstream-alpn";
private static final String TAG = CronetUrlRequest.class.getSimpleName();
private static final String USER_AGENT = "User-Agent";
private static final String CONTENT_TYPE = "Content-Type";
private static final ByteBuffer EMPTY_BYTE_BUFFER = ByteBuffer.allocateDirect(0);
private static final Executor DIRECT_EXECUTOR = new DirectExecutor();

private final String mUserAgent;
Expand Down Expand Up @@ -142,8 +141,6 @@ public final class CronetUrlRequest extends UrlRequestBase {
private final AtomicCombinatoryState mReportState =
new AtomicCombinatoryState(ReportState.REPORT_READY);

private final AtomicBoolean mUploadProviderClosed = new AtomicBoolean(false);

private final boolean mAllowDirectExecutor;

/* These don't change with redirects */
Expand Down Expand Up @@ -183,10 +180,9 @@ public final class CronetUrlRequest extends UrlRequestBase {

/**
* @param executor The executor for orchestrating tasks between envoy-mobile callbacks
* @param userExecutor The executor used to dispatch to Cronet {@code callback}
*/
CronetUrlRequest(CronetUrlRequestContext cronvoyEngine, Callback callback, Executor executor,
String url, String userAgent, boolean allowDirectExecutor,
CronetUrlRequest(CronetUrlRequestContext cronvoyEngine, String url, Callback callback,
Executor executor, String userAgent, boolean allowDirectExecutor,
Collection<Object> connectionAnnotations, boolean trafficStatsTagSet,
int trafficStatsTag, boolean trafficStatsUidSet, int trafficStatsUid,
RequestFinishedInfo.Listener requestFinishedListener) {
Expand Down Expand Up @@ -1051,7 +1047,7 @@ private void setUrlResponseInfo(Map<String, List<String>> responseHeaders, int r
if (headerEntry.getValue().get(0) == null) {
continue;
}
if (X_ENVOY_SELECTED_TRANSPORT.equals(headerKey)) {
if (X_ENVOY_UPSTREAM_ALPN.equals(headerKey)) {
selectedTransport = headerEntry.getValue().get(0);
}
if (!headerKey.startsWith(X_ENVOY) && !headerKey.equals("date") &&
Expand All @@ -1064,9 +1060,7 @@ private void setUrlResponseInfo(Map<String, List<String>> responseHeaders, int r
// Important to copy the list here, because although we never concurrently modify
// the list ourselves, user code might iterate over it while we're redirecting, and
// that would throw ConcurrentModificationException.
// TODO(https://github.com/envoyproxy/envoy-mobile/issues/1426) set receivedByteCount
// TODO(https://github.com/envoyproxy/envoy-mobile/issues/1622) support proxy
// TODO(https://github.com/envoyproxy/envoy-mobile/issues/1546) negotiated protocol
// TODO(https://github.com/envoyproxy/envoy-mobile/issues/1578) http caching
mUrlResponseInfo.setResponseValues(
new ArrayList<>(mUrlChain), responseCode, HttpReason.getReason(responseCode),
Expand Down
25 changes: 17 additions & 8 deletions library/java/org/chromium/net/impl/CronetUrlRequestContext.java
Original file line number Diff line number Diff line change
Expand Up @@ -120,14 +120,17 @@ void setTaskToExecuteWhenInitializationIsCompleted(Runnable runnable) {
@Override
public UrlRequestBase
createRequest(String url, UrlRequest.Callback callback, Executor executor, int priority,
Collection<Object> connectionAnnotations, boolean disableCache,
Collection<Object> requestAnnotations, boolean disableCache,
boolean disableConnectionMigration, boolean allowDirectExecutor,
boolean trafficStatsTagSet, int trafficStatsTag, boolean trafficStatsUidSet,
int trafficStatsUid, RequestFinishedInfo.Listener requestFinishedListener,
int idempotency) {
return new CronetUrlRequest(this, callback, executor, url, mUserAgent, allowDirectExecutor,
connectionAnnotations, trafficStatsTagSet, trafficStatsTag,
trafficStatsUidSet, trafficStatsUid, requestFinishedListener);
synchronized (mLock) {
checkHaveAdapter();
return new CronetUrlRequest(this, url, callback, executor, mUserAgent, allowDirectExecutor,
requestAnnotations, trafficStatsTagSet, trafficStatsTag,
trafficStatsUidSet, trafficStatsUid, requestFinishedListener);
}
}

@Override
Expand All @@ -136,16 +139,22 @@ void setTaskToExecuteWhenInitializationIsCompleted(Runnable runnable) {
String httpMethod, List<Map.Entry<String, String>> requestHeaders,
@StreamPriority int priority,
boolean delayRequestHeadersUntilFirstFlush,
Collection<Object> connectionAnnotations, boolean trafficStatsTagSet,
Collection<Object> requestAnnotations, boolean trafficStatsTagSet,
int trafficStatsTag, boolean trafficStatsUidSet, int trafficStatsUid) {
throw new UnsupportedOperationException("Can't create a bidi stream yet.");
synchronized (mLock) {
checkHaveAdapter();
return new CronetBidirectionalStream(
this, url, priority, callback, executor, mUserAgent, httpMethod, requestHeaders,
delayRequestHeadersUntilFirstFlush, requestAnnotations, trafficStatsTagSet,
trafficStatsTag, trafficStatsUidSet, trafficStatsUid);
}
}

@Override
public ExperimentalBidirectionalStream.Builder
newBidirectionalStreamBuilder(String url, BidirectionalStream.Callback callback,
Executor executor) {
throw new UnsupportedOperationException("Can't create a bidi stream yet.");
return new BidirectionalStreamBuilderImpl(url, callback, executor, this);
}

@Override
Expand Down Expand Up @@ -327,7 +336,7 @@ private static void postObservationTaskToExecutor(Executor executor, Runnable ta
try {
executor.execute(task);
} catch (RejectedExecutionException failException) {
// TODO(carloseltuerto): use Envoy-Mobile logs - this is a hack.
// TODO: use Envoy-Mobile logs - this is a hack.
Comment thread
carloseltuerto marked this conversation as resolved.
Outdated
android.util.Log.e(CronetUrlRequestContext.LOG_TAG, "Exception posting task to executor",
failException);
}
Expand Down
24 changes: 24 additions & 0 deletions test/java/org/chromium/net/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -83,3 +83,27 @@ envoy_mobile_android_test(
"//test/java/org/chromium/net/testing",
],
)

envoy_mobile_android_test(
name = "bidirectional_stream_test",
srcs = [
"BidirectionalStreamTest.java",
],
exec_properties = {
# TODO(lfpino): Remove this once the sandboxNetwork=off works for ipv4 localhost addresses.
"sandboxNetwork": "standard",
},
native_deps = [
"//library/common/jni:libndk_envoy_jni.so",
"//library/common/jni:libndk_envoy_jni.jnilib",
],
deps = [
"//library/java/io/envoyproxy/envoymobile/engine:envoy_base_engine_lib",
"//library/java/io/envoyproxy/envoymobile/engine:envoy_engine_lib",
"//library/java/org/chromium/net",
"//library/java/org/chromium/net/impl:cronvoy",
"//library/kotlin/io/envoyproxy/envoymobile:envoy_interfaces_lib",
"//library/kotlin/io/envoyproxy/envoymobile:envoy_lib",
"//test/java/org/chromium/net/testing",
],
)
Loading