I am looking for a way to create an XWalkWebResourceResponse . My case is as follows.
I create a client XWalkResourceClient that will intercept all network requests. All the request that needs to be intercepted is returned as an abstract wrapper - AppWebResourceResponse .
public final class CrossWebViewClient extends XWalkResourceClient {
CrossWebResourceResponseMapper responseMapper;
@Override
public XWalkWebResourceResponse shouldInterceptLoadRequest(XWalkView view, XWalkWebResourceRequest request) {
AppWebResourceRequest mappedRequest = requestMapper.toGenericRequest(request);
AppWebResourceResponse interceptedResponse = requestInterceptor.shouldInterceptRequest(mappedRequest);
if (interceptedResponse == null) {
return super.shouldInterceptLoadRequest(view, request);
}
return responseMapper.toTargetResponse(interceptedResponse);
}
}
Last step. I have to adapt AppWebResourceResponse to XWalkWebResourceResponse , and here I have a problem.
public class CrossWebResourceResponseMapper implements AppWebResourceResponse.Mapper<XWalkWebResourceResponse> {
@Override
public XWalkWebResourceResponse toTargetResponse(final AppWebResourceResponse appResponse) {
String mimeType = appResponse.getMimeType();
String encoding = appResponse.getEncoding();
int statusCode = appResponse.getStatusCode();
String reasonPhrase = appResponse.getReasonPhrase();
Map<String, String> headers = appResponse.getResponseHeaders();
InputStream data = appResponse.getData();
XWalkWebResourceResponse response;
response.setMimeType(mimeType);
response.setEncoding(encoding);
response.setStatusCodeAndReasonPhrase(statusCode, reasonPhrase);
response.setResponseHeaders(headers);
response.setData(data);
return response;
}
}
The API has an open constructor new XWalkWebResourceResponse(bridge)that consumes a bridge object, although I could not find a way to get a specific bridge (org.xwalk.core.internal.XWalkWebResourceResponseBridge).
XWalkWebResourceResponseBridge?
, .
25/04/2016:
Xiaofeng XWalkWebResourceResponse, XWalkResourceClient.
public class XWalkWebResourceResponseMapper {
public XWalkWebResourceResponse toTargetResponse(XWalkResourceClient client, AppWebResourceResponse appResponse) {
String mimeType = appResponse.getMimeType();
String encoding = appResponse.getEncoding();
int statusCode = appResponse.getStatusCode();
String reasonPhrase = appResponse.getReasonPhrase();
Map<String, String> headers = appResponse.getResponseHeaders();
InputStream data = appResponse.getData();
return client.createXWalkWebResourceResponse(mimeType, encoding, data, statusCode, reasonPhrase, headers);
}
}
public final class CrossWebViewClient extends XWalkResourceClient {
@Override
public XWalkWebResourceResponse shouldInterceptLoadRequest(XWalkView view, XWalkWebResourceRequest request) {
AppWebResourceRequest mappedRequest = requestMapper.toGenericRequest(request);
AppWebResourceResponse interceptedResponse = requestInterceptor.shouldInterceptRequest(mappedRequest);
if (interceptedResponse == null) {
return super.shouldInterceptLoadRequest(view, request);
}
return responseMapper.toTargetResponse(this, interceptedResponse);
}
}