| Index: components/cronet/android/test/smoketests/src/org/chromium/net/smoke/SmokeTestRequestCallback.java
|
| diff --git a/components/cronet/android/test/smoketests/src/org/chromium/net/smoke/SmokeTestRequestCallback.java b/components/cronet/android/test/smoketests/src/org/chromium/net/smoke/SmokeTestRequestCallback.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fa07bfec34351d60c2d4c4ce041dd2054d8c2403
|
| --- /dev/null
|
| +++ b/components/cronet/android/test/smoketests/src/org/chromium/net/smoke/SmokeTestRequestCallback.java
|
| @@ -0,0 +1,126 @@
|
| +// Copyright 2016 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.smoke;
|
| +
|
| +import static junit.framework.Assert.assertTrue;
|
| +
|
| +import android.os.ConditionVariable;
|
| +
|
| +import org.chromium.net.CronetException;
|
| +import org.chromium.net.UrlRequest;
|
| +import org.chromium.net.UrlResponseInfo;
|
| +
|
| +import java.nio.ByteBuffer;
|
| +import java.util.concurrent.Executor;
|
| +import java.util.concurrent.ExecutorService;
|
| +import java.util.concurrent.Executors;
|
| +
|
| +/**
|
| + * A simple boilerplate implementation of {@link UrlRequest.Callback} that is used by smoke tests.
|
| + */
|
| +class SmokeTestRequestCallback extends UrlRequest.Callback {
|
| + private static final int READ_BUFFER_SIZE = 10000;
|
| +
|
| + // An executor that is used to execute {@link UrlRequest.Callback UrlRequest callbacks}.
|
| + private ExecutorService mExecutor = Executors.newSingleThreadExecutor();
|
| +
|
| + // Signals when the request is done either successfully or not.
|
| + private final ConditionVariable mDone = new ConditionVariable();
|
| +
|
| + // The state of the request.
|
| + public enum State { NotSet, Succeeded, Failed, Canceled }
|
| +
|
| + // The current state of the request.
|
| + private State mState = State.NotSet;
|
| +
|
| + // Response info of the finished request.
|
| + private UrlResponseInfo mResponseInfo;
|
| +
|
| + // Holds an error if the request failed.
|
| + private CronetException mError;
|
| +
|
| + @Override
|
| + public void onRedirectReceived(UrlRequest request, UrlResponseInfo info, String newLocationUrl)
|
| + throws Exception {
|
| + request.followRedirect();
|
| + }
|
| +
|
| + @Override
|
| + public void onResponseStarted(UrlRequest request, UrlResponseInfo info) throws Exception {
|
| + request.read(ByteBuffer.allocateDirect(READ_BUFFER_SIZE));
|
| + }
|
| +
|
| + @Override
|
| + public void onReadCompleted(UrlRequest request, UrlResponseInfo info, ByteBuffer byteBuffer)
|
| + throws Exception {
|
| + request.read(ByteBuffer.allocateDirect(READ_BUFFER_SIZE));
|
| + }
|
| +
|
| + @Override
|
| + public void onSucceeded(UrlRequest request, UrlResponseInfo info) {
|
| + done(State.Succeeded, info);
|
| + }
|
| +
|
| + @Override
|
| + public void onFailed(UrlRequest request, UrlResponseInfo info, CronetException error) {
|
| + mError = error;
|
| + done(State.Failed, info);
|
| + }
|
| +
|
| + @Override
|
| + public void onCanceled(UrlRequest request, UrlResponseInfo info) {
|
| + done(State.Canceled, info);
|
| + }
|
| +
|
| + /**
|
| + * Returns the request executor.
|
| + *
|
| + * @return the executor.
|
| + */
|
| + public Executor getExecutor() {
|
| + return mExecutor;
|
| + }
|
| +
|
| + /**
|
| + * Blocks until the request is either succeeded, failed or canceled.
|
| + */
|
| + public void blockForDone() {
|
| + mDone.block();
|
| + }
|
| +
|
| + /**
|
| + * Returns the final state of the request.
|
| + *
|
| + * @return the state.
|
| + */
|
| + public State getFinalState() {
|
| + return mState;
|
| + }
|
| +
|
| + /**
|
| + * Returns an error that was passed to {@link #onFailed} when the request failed.
|
| + *
|
| + * @return the error if the request failed; {@code null} otherwise.
|
| + */
|
| + public CronetException getFailureError() {
|
| + return mError;
|
| + }
|
| +
|
| + /**
|
| + * Returns {@link UrlResponseInfo} of the finished response.
|
| + *
|
| + * @return the response info. {@code null} if the request hasn't completed yet.
|
| + */
|
| + public UrlResponseInfo getResponseInfo() {
|
| + return mResponseInfo;
|
| + }
|
| +
|
| + private void done(State finalState, UrlResponseInfo responseInfo) {
|
| + assertTrue(mState == State.NotSet);
|
| + mResponseInfo = responseInfo;
|
| + mState = finalState;
|
| + mDone.open();
|
| + }
|
| +}
|
|
|