1d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi// Copyright 2014 The Chromium Authors. All rights reserved.
2d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi// Use of this source code is governed by a BSD-style license that can be
3d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi// found in the LICENSE file.
4d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
5d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshipackage org.chromium.android_webview;
6d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
7d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiimport org.chromium.base.CalledByNative;
8d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiimport org.chromium.base.JNINamespace;
9d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiimport org.chromium.base.VisibleForTesting;
10d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
11d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiimport java.io.InputStream;
12d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiimport java.util.Map;
13d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
14d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi/**
15d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * The response information that is to be returned for a particular resource fetch.
16d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */
17dc549d60f98d809f626c99de614960409a847054Takeshi Aimi@JNINamespace("android_webview")
18c7b3ccc564448cb4b918728421f9402bc18278c5Takeshi Aimipublic class AwWebResourceResponse {
19d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    private String mMimeType;
20d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    private String mCharset;
21d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    private InputStream mData;
22d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    private int mStatusCode;
23d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    private String mReasonPhrase;
24d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    private String[] mResponseHeaderNames;
25d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    private String[] mResponseHeaderValues;
26d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
27d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public AwWebResourceResponse(String mimeType, String encoding, InputStream data) {
28d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        mMimeType = mimeType;
29d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        mCharset = encoding;
30d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        mData = data;
31d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
32d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
33d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public AwWebResourceResponse(String mimeType, String encoding, InputStream data,
34d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi            int statusCode, String reasonPhrase, Map<String, String> responseHeaders) {
35d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        this(mimeType, encoding, data);
36d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
37d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        mStatusCode = statusCode;
38d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        mReasonPhrase = reasonPhrase;
39d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
40d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        if (responseHeaders != null) {
41d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi            mResponseHeaderNames = new String[responseHeaders.size()];
42d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi            mResponseHeaderValues = new String[responseHeaders.size()];
43d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi            int i = 0;
44d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi            for (Map.Entry<String, String> entry : responseHeaders.entrySet()) {
45d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi                mResponseHeaderNames[i] = entry.getKey();
46d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi                mResponseHeaderValues[i] = entry.getValue();
47d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi                i++;
48d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi            }
49d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        }
50d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
51d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
52d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    @VisibleForTesting
53d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    @CalledByNative
54d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public String getMimeType() {
55d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        return mMimeType;
56d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
57d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
58d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    @CalledByNative
59d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    private String getCharset() {
60d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        return mCharset;
61d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
62d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
63d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    @VisibleForTesting
64d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    @CalledByNative
65d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public InputStream getData() {
66d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        return mData;
67d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
68d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
69d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    @CalledByNative
70d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    private int getStatusCode() {
71d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        return mStatusCode;
72d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
73d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
74d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    @CalledByNative
75d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    private String getReasonPhrase() {
76d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        return mReasonPhrase;
77d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
78d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
79dc549d60f98d809f626c99de614960409a847054Takeshi Aimi    @CalledByNative
80d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    private String[] getResponseHeaderNames() {
81d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        return mResponseHeaderNames;
82d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
83d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
84d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    @CalledByNative
85d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    private String[] getResponseHeaderValues() {
86d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        return mResponseHeaderValues;
87d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
88d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi}
89d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi