How to create XWalkWebResourceResponse?

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 {
    // other fields and constructor

    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();


        // ??? how to create response object?
        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);
    }
}
+4
1

, Crosswalk.

XWalkWebResourceResponse, createXWalkWebResourceResponse XWalkResourceClient, . . , .

, : https://github.com/crosswalk-project/crosswalk/pull/3454/files

 class MyResourceClient extends XWalkResourceClientInternal {
 MyResourceClient(XWalkViewInternal view) {
     super(view);
 }
 @Override
 XWalkWebResourceResponseInternal shouldInterceptLoadRequest(XWalkViewInternal view,
         XWalkWebResourceRequestInternal request) {
     // Handle it here.
     // Use createXWalkWebResourceResponse instead of "new XWalkWebResourceResponse"
     // to create the response.
     // Similar with before, there are two function to use:
     // 1) createXWalkWebResourceResponse(String mimeType, String encoding, InputStream data)
     // 2) createXWalkWebResourceResponse(String mimeType, String encoding, InputStream data,
     //             int statusCode, String reasonPhrase, Map<String, String> responseHeaders)
     ...
 }

}

XWalkView API.

+4

All Articles