# ImplicitFlowControlCallback


```
public abstract class ImplicitFlowControlCallback extends UrlRequest.Callback
```

<br />

|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object.html) |||
| ↳ | [org.chromium.net.UrlRequest.Callback](https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback) ||
|   | ↳ | [org.chromium.net.apihelpers.ImplicitFlowControlCallback](https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/ImplicitFlowControlCallback) |

Known direct subclasses [InMemoryTransformCronetCallback](https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/InMemoryTransformCronetCallback)

|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/InMemoryTransformCronetCallback` | An abstract Cronet callback that reads the entire body to memory and optionally deserializes the body before passing it back to the issuer of the HTTP request. |

Known indirect subclasses [ByteArrayCronetCallback](https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/ByteArrayCronetCallback), [JsonCronetCallback](https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/JsonCronetCallback), [StringCronetCallback](https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/StringCronetCallback)

|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/ByteArrayCronetCallback` | A specialization of `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/InMemoryTransformCronetCallback` which returns the body bytes verbatim without any interpretation. |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/JsonCronetCallback` | A specialization of `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/InMemoryTransformCronetCallback` that interprets the response body as JSON. |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/StringCronetCallback` | A specialization of `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/InMemoryTransformCronetCallback` that interprets the response body as a string. |

*** ** * ** ***

An implementation of `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback` that takes away the difficulty of managing the request lifecycle away, and automatically proceeds to read the response entirely.

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/ImplicitFlowControlCallback#ImplicitFlowControlCallback()()` |

| ### Public methods |
|---|---|
| `final void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/ImplicitFlowControlCallback#onCanceled(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo)(https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest request, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info)` Invoked if request was canceled via `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest#cancel()`. |
| `final void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/ImplicitFlowControlCallback#onFailed(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo,org.chromium.net.CronetException)( https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest request, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetException error )` Invoked if request failed for any reason after `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest#start()`. |
| `final void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/ImplicitFlowControlCallback#onReadCompleted(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo,java.nio.ByteBuffer)( https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest request, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info, https://developer.android.com/reference/java/nio/ByteBuffer.html byteBuffer )` Invoked whenever part of the response body has been read. |
| `final void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/ImplicitFlowControlCallback#onRedirectReceived(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo,java.lang.String)( https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest request, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info, https://developer.android.com/reference/java/lang/String.html newLocationUrl )` Invoked whenever a redirect is encountered. |
| `final void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/ImplicitFlowControlCallback#onResponseStarted(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo)(https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest request, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info)` Invoked when the final set of headers, after all redirects, is received. |
| `final void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/ImplicitFlowControlCallback#onSucceeded(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo)(https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest request, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info)` Invoked when request is completed successfully. |

| ### Protected methods |
|---|---|
| `abstract void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/ImplicitFlowControlCallback#onBodyChunkRead(org.chromium.net.UrlResponseInfo,java.nio.ByteBuffer)(https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info, https://developer.android.com/reference/java/nio/ByteBuffer.html bodyChunk)` Invoked whenever part of the response body has been read. |
| `abstract void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/ImplicitFlowControlCallback#onCanceled(org.chromium.net.UrlResponseInfo)(@https://developer.android.com/reference/androidx/annotation/Nullable.html https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info)` Invoked if request was canceled via `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest#cancel()`. |
| `abstract void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/ImplicitFlowControlCallback#onFailed(org.chromium.net.UrlResponseInfo,org.chromium.net.CronetException)(@https://developer.android.com/reference/androidx/annotation/Nullable.html https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetException exception)` Invoked if request failed for any reason after `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest#start()`. |
| `abstract void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/ImplicitFlowControlCallback#onResponseStarted(org.chromium.net.UrlResponseInfo)(https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info)` Invoked when the final set of headers, after all redirects, is received. |
| `abstract void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/ImplicitFlowControlCallback#onSucceeded(org.chromium.net.UrlResponseInfo)(https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info)` Invoked when request is completed successfully. |
| `abstract boolean` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/ImplicitFlowControlCallback#shouldFollowRedirect(org.chromium.net.UrlResponseInfo,java.lang.String)(https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info, https://developer.android.com/reference/java/lang/String.html newLocationUrl)` Invoked whenever a redirect is encountered. |

## Public constructors

### ImplicitFlowControlCallback

```
public ImplicitFlowControlCallback()
```

## Public methods

### onCanceled

```
public final void onCanceled(UrlRequest request, UrlResponseInfo info)
```

Invoked if request was canceled via `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest#cancel()`. Once invoked, no other `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback` methods will be invoked. Default implementation takes no action.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest request` | Request that was canceled. |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info` | Response information. May be `null` if no response was received. |

### onFailed

```
public final void onFailed(
    UrlRequest request,
    UrlResponseInfo info,
    CronetException error
)
```

Invoked if request failed for any reason after `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest#start()`. Once invoked, no other `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback` methods will be invoked. `error` provides information about the failure.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest request` | Request that failed. |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info` | Response information. May be `null` if no response was received. |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetException error` | information about error. |

### onReadCompleted

```
public final void onReadCompleted(
    UrlRequest request,
    UrlResponseInfo info,
    ByteBuffer byteBuffer
)
```

Invoked whenever part of the response body has been read. Only part of the buffer may be populated, even if the entire response body has not yet been consumed. With the exception of `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback#onCanceled(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo)`, no other `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback` method will be invoked for the request, including `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback#onSucceeded(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo)` and `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback#onFailed(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo,org.chromium.net.CronetException)`, until `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest#read(java.nio.ByteBuffer)` is called to attempt to continue reading the response body.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest request` | Request that received data. |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info` | Response information. |
| `https://developer.android.com/reference/java/nio/ByteBuffer.html byteBuffer` | The buffer that was passed in to `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest#read(java.nio.ByteBuffer)`, now containing the received data. The buffer's position is updated to the end of the received data. The buffer's limit is not changed. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/Exception.html` | if an error occurs while processing a read completion. `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback#onFailed(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo,org.chromium.net.CronetException)` will be called with the thrown exception set as the cause of the `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CallbackException`. |

### onRedirectReceived

```
public final void onRedirectReceived(
    UrlRequest request,
    UrlResponseInfo info,
    String newLocationUrl
)
```

Invoked whenever a redirect is encountered. This will only be invoked between the call to `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest#start()` and `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback#onResponseStarted(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo)`. The body of the redirect response, if it has one, will be ignored. The redirect will not be followed until the URLRequest's `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest#followRedirect()` method is called, either synchronously or asynchronously.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest request` | Request being redirected. |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info` | Response information. |
| `https://developer.android.com/reference/java/lang/String.html newLocationUrl` | Location where request is redirected. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/Exception.html` | if an error occurs while processing a redirect. `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback#onFailed(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo,org.chromium.net.CronetException)` will be called with the thrown exception set as the cause of the `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CallbackException`. |

### onResponseStarted

```
public final void onResponseStarted(UrlRequest request, UrlResponseInfo info)
```

Invoked when the final set of headers, after all redirects, is received. Will only be invoked once for each request. With the exception of `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback#onCanceled(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo)`, no other `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback` method will be invoked for the request, including `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback#onSucceeded(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo)` and `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback#onFailed(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo,org.chromium.net.CronetException)`, until `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest#read(java.nio.ByteBuffer)` is called to attempt to start reading the response body.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest request` | Request that started to get response. |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info` | Response information. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/Exception.html` | if an error occurs while processing response start. `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback#onFailed(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo,org.chromium.net.CronetException)` will be called with the thrown exception set as the cause of the `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CallbackException`. |

### onSucceeded

```
public final void onSucceeded(UrlRequest request, UrlResponseInfo info)
```

Invoked when request is completed successfully. Once invoked, no other `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback` methods will be invoked.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest request` | Request that succeeded. |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info` | Response information. |

## Protected methods

### onBodyChunkRead

```
protected abstract void onBodyChunkRead(UrlResponseInfo info, ByteBuffer bodyChunk)
```

Invoked whenever part of the response body has been read. Only part of the buffer may be populated, even if the entire response body has not yet been consumed. The buffer is ready for reading. Buffers are reused internally so the implementing class shouldn't store the buffer or use it anywhere else than in the implementation of this method.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info` | Response information. |
| `https://developer.android.com/reference/java/nio/ByteBuffer.html bodyChunk` | The buffer that contains the received data, flipped for reading. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/Exception.html` | if an error occurs while processing a read completion. onFailed will be called with the thrown exception set as the cause of the `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CallbackException`. |

### onCanceled

```
protected abstract void onCanceled(@Nullable UrlResponseInfo info)
```

Invoked if request was canceled via `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest#cancel()`. Once invoked, no other `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback` methods will be invoked.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable.html https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info` | Response information. May be `null` if no response was received. |

### onFailed

```
protected abstract void onFailed(@Nullable UrlResponseInfo info, CronetException exception)
```

Invoked if request failed for any reason after `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest#start()`. Once invoked, no other `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback` methods will be invoked. `error` provides information about the failure.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable.html https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info` | Response information. May be `null` if no response was received. |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetException exception` | information about error. |

### onResponseStarted

```
protected abstract void onResponseStarted(UrlResponseInfo info)
```

Invoked when the final set of headers, after all redirects, is received. Will only be invoked once for each request. It's guaranteed that Cronet doesn't start reading the body until this method returns.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info` | Response information. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/Exception.html` | if an error occurs while processing response start. onFailed will be called with the thrown exception set as the cause of the `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CallbackException`. |

### onSucceeded

```
protected abstract void onSucceeded(UrlResponseInfo info)
```

Invoked when request is completed successfully. Once invoked, no other `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback` methods will be invoked.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info` | Response information. |

### shouldFollowRedirect

```
protected abstract boolean shouldFollowRedirect(UrlResponseInfo info, String newLocationUrl)
```

Invoked whenever a redirect is encountered. This will only be invoked between the call to `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest#start()` and `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback#onResponseStarted(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo)`. The body of the redirect response, if it has one, will be ignored.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info` | Response information. |
| `https://developer.android.com/reference/java/lang/String.html newLocationUrl` | Location where request is redirected. |

| Returns |
|---|---|
| `boolean` | true if the redirect should be followed, false if the request should be canceled. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/Exception.html` | if an error occurs while processing a redirect. onFailed will be called with the thrown exception set as the cause of the `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CallbackException`. |