1c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott/* 2c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott * Copyright (C) 2010 The Android Open Source Project 3c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott * 4c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott * Licensed under the Apache License, Version 2.0 (the "License"); 5c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott * you may not use this file except in compliance with the License. 6c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott * You may obtain a copy of the License at 7c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott * 8c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott * http://www.apache.org/licenses/LICENSE-2.0 9c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott * 10c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott * Unless required by applicable law or agreed to in writing, software 11c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott * distributed under the License is distributed on an "AS IS" BASIS, 12c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott * See the License for the specific language governing permissions and 14c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott * limitations under the License. 15c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott */ 16c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott 17c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scottpackage android.webkit; 18c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott 19c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scottimport java.io.InputStream; 203ff073ad0ac6c2206e8eafa3a1aa6e5a80a2d46cPaul Millerimport java.io.StringBufferInputStream; 21d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosibaimport java.util.Map; 22c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott 238d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganovimport android.annotation.SystemApi; 248d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov 25c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott/** 26938d2fbc57f05cc9bab9b551d7a454644208ee07Steve Block * Encapsulates a resource response. Applications can return an instance of this 27938d2fbc57f05cc9bab9b551d7a454644208ee07Steve Block * class from {@link WebViewClient#shouldInterceptRequest} to provide a custom 28938d2fbc57f05cc9bab9b551d7a454644208ee07Steve Block * response when the WebView requests a particular resource. 29c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott */ 3098fe09cba08f39906d632119352b14d0339fff01Selim Gurunpublic class WebResourceResponse { 318d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov private boolean mImmutable; 32c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott private String mMimeType; 33c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott private String mEncoding; 34d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba private int mStatusCode; 35d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba private String mReasonPhrase; 36d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba private Map<String, String> mResponseHeaders; 37c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott private InputStream mInputStream; 38c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott 39c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott /** 40938d2fbc57f05cc9bab9b551d7a454644208ee07Steve Block * Constructs a resource response with the given MIME type, encoding, and 41938d2fbc57f05cc9bab9b551d7a454644208ee07Steve Block * input stream. Callers must implement 42938d2fbc57f05cc9bab9b551d7a454644208ee07Steve Block * {@link InputStream#read(byte[]) InputStream.read(byte[])} for the input 43938d2fbc57f05cc9bab9b551d7a454644208ee07Steve Block * stream. 444e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * 454e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * @param mimeType the resource response's MIME type, for example text/html 464e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * @param encoding the resource response's encoding 473ff073ad0ac6c2206e8eafa3a1aa6e5a80a2d46cPaul Miller * @param data the input stream that provides the resource response's data. Must not be a 483ff073ad0ac6c2206e8eafa3a1aa6e5a80a2d46cPaul Miller * StringBufferInputStream. 49c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott */ 50c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott public WebResourceResponse(String mimeType, String encoding, 51c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott InputStream data) { 52c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott mMimeType = mimeType; 53c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott mEncoding = encoding; 543ff073ad0ac6c2206e8eafa3a1aa6e5a80a2d46cPaul Miller setData(data); 55c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott } 56c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott 57c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott /** 58d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * Constructs a resource response with the given parameters. Callers must 59d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * implement {@link InputStream#read(byte[]) InputStream.read(byte[])} for 60d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * the input stream. 61d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * 62d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * @param mimeType the resource response's MIME type, for example text/html 63d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * @param encoding the resource response's encoding 64d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * @param statusCode the status code needs to be in the ranges [100, 299], [400, 599]. 65d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * Causing a redirect by specifying a 3xx code is not supported. 66d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * @param reasonPhrase the phrase describing the status code, for example "OK". Must be non-null 67d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * and not empty. 68d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * @param responseHeaders the resource response's headers represented as a mapping of header 69d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * name -> header value. 703ff073ad0ac6c2206e8eafa3a1aa6e5a80a2d46cPaul Miller * @param data the input stream that provides the resource response's data. Must not be a 713ff073ad0ac6c2206e8eafa3a1aa6e5a80a2d46cPaul Miller * StringBufferInputStream. 72d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba */ 73d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba public WebResourceResponse(String mimeType, String encoding, int statusCode, 74d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba String reasonPhrase, Map<String, String> responseHeaders, InputStream data) { 75d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba this(mimeType, encoding, data); 76d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba setStatusCodeAndReasonPhrase(statusCode, reasonPhrase); 77d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba setResponseHeaders(responseHeaders); 78d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba } 79d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba 80d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba /** 8125e89545736d62c59d19dd9b9587f7b0cbbee068Mikhail Naganov * Sets the resource response's MIME type, for example "text/html". 824e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * 8325e89545736d62c59d19dd9b9587f7b0cbbee068Mikhail Naganov * @param mimeType The resource response's MIME type 84c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott */ 85c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott public void setMimeType(String mimeType) { 868d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov checkImmutable(); 87c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott mMimeType = mimeType; 88c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott } 89c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott 90c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott /** 918d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov * Gets the resource response's MIME type. 928d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov * 938d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov * @return The resource response's MIME type 94c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott */ 95c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott public String getMimeType() { 96c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott return mMimeType; 97c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott } 98c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott 99c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott /** 10025e89545736d62c59d19dd9b9587f7b0cbbee068Mikhail Naganov * Sets the resource response's encoding, for example "UTF-8". This is used 101938d2fbc57f05cc9bab9b551d7a454644208ee07Steve Block * to decode the data from the input stream. 1024e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * 10325e89545736d62c59d19dd9b9587f7b0cbbee068Mikhail Naganov * @param encoding The resource response's encoding 104c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott */ 105c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott public void setEncoding(String encoding) { 1068d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov checkImmutable(); 107c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott mEncoding = encoding; 108c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott } 109c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott 110c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott /** 1118d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov * Gets the resource response's encoding. 1128d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov * 1138d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov * @return The resource response's encoding 114c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott */ 115c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott public String getEncoding() { 116c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott return mEncoding; 117c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott } 118c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott 119c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott /** 120d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * Sets the resource response's status code and reason phrase. 121d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * 122d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * @param statusCode the status code needs to be in the ranges [100, 299], [400, 599]. 123d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * Causing a redirect by specifying a 3xx code is not supported. 124d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * @param reasonPhrase the phrase describing the status code, for example "OK". Must be non-null 125d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * and not empty. 126d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba */ 127d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba public void setStatusCodeAndReasonPhrase(int statusCode, String reasonPhrase) { 1288d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov checkImmutable(); 129d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba if (statusCode < 100) 130d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba throw new IllegalArgumentException("statusCode can't be less than 100."); 131d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba if (statusCode > 599) 132d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba throw new IllegalArgumentException("statusCode can't be greater than 599."); 133d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba if (statusCode > 299 && statusCode < 400) 134d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba throw new IllegalArgumentException("statusCode can't be in the [300, 399] range."); 135d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba if (reasonPhrase == null) 136d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba throw new IllegalArgumentException("reasonPhrase can't be null."); 137d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba if (reasonPhrase.trim().isEmpty()) 138d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba throw new IllegalArgumentException("reasonPhrase can't be empty."); 139d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba for (int i = 0; i < reasonPhrase.length(); i++) { 140d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba int c = reasonPhrase.charAt(i); 141d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba if (c > 0x7F) { 142d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba throw new IllegalArgumentException( 143d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba "reasonPhrase can't contain non-ASCII characters."); 144d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba } 145d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba } 146d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba mStatusCode = statusCode; 147d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba mReasonPhrase = reasonPhrase; 148d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba } 149d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba 150d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba /** 1518d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov * Gets the resource response's status code. 1528d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov * 1538d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov * @return The resource response's status code. 154d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba */ 155d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba public int getStatusCode() { 156d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba return mStatusCode; 157d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba } 158d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba 159d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba /** 1608d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov * Gets the description of the resource response's status code. 1618d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov * 1628d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov * @return The description of the resource response's status code. 163d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba */ 164d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba public String getReasonPhrase() { 165d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba return mReasonPhrase; 166d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba } 167d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba 168d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba /** 169d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * Sets the headers for the resource response. 170d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * 17125e89545736d62c59d19dd9b9587f7b0cbbee068Mikhail Naganov * @param headers Mapping of header name -> header value. 172d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba */ 173d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba public void setResponseHeaders(Map<String, String> headers) { 1748d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov checkImmutable(); 175d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba mResponseHeaders = headers; 176d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba } 177d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba 178d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba /** 1798d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov * Gets the headers for the resource response. 1808d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov * 1818d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov * @return The headers for the resource response. 182d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba */ 183d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba public Map<String, String> getResponseHeaders() { 184d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba return mResponseHeaders; 185d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba } 186d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba 187d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba /** 188d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * Sets the input stream that provides the resource response's data. Callers 189938d2fbc57f05cc9bab9b551d7a454644208ee07Steve Block * must implement {@link InputStream#read(byte[]) InputStream.read(byte[])}. 1904e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * 1913ff073ad0ac6c2206e8eafa3a1aa6e5a80a2d46cPaul Miller * @param data the input stream that provides the resource response's data. Must not be a 1923ff073ad0ac6c2206e8eafa3a1aa6e5a80a2d46cPaul Miller * StringBufferInputStream. 193c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott */ 194c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott public void setData(InputStream data) { 1958d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov checkImmutable(); 1963ff073ad0ac6c2206e8eafa3a1aa6e5a80a2d46cPaul Miller // If data is (or is a subclass of) StringBufferInputStream 1973ff073ad0ac6c2206e8eafa3a1aa6e5a80a2d46cPaul Miller if (data != null && StringBufferInputStream.class.isAssignableFrom(data.getClass())) { 1983ff073ad0ac6c2206e8eafa3a1aa6e5a80a2d46cPaul Miller throw new IllegalArgumentException("StringBufferInputStream is deprecated and must " + 1993ff073ad0ac6c2206e8eafa3a1aa6e5a80a2d46cPaul Miller "not be passed to a WebResourceResponse"); 2003ff073ad0ac6c2206e8eafa3a1aa6e5a80a2d46cPaul Miller } 201c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott mInputStream = data; 202c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott } 203c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott 204c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott /** 2058d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov * Gets the input stream that provides the resource response's data. 2068d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov * 2078d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov * @return The input stream that provides the resource response's data 208c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott */ 209c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott public InputStream getData() { 210c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott return mInputStream; 211c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott } 2128d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov 2138d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov /** 2148d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov * The internal version of the constructor that doesn't perform arguments checks. 2158d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov * @hide 2168d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov */ 2178d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov @SystemApi 2188d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov public WebResourceResponse(boolean immutable, String mimeType, String encoding, int statusCode, 2198d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov String reasonPhrase, Map<String, String> responseHeaders, InputStream data) { 2208d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov mImmutable = immutable; 2218d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov mMimeType = mimeType; 2228d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov mEncoding = encoding; 2238d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov mStatusCode = statusCode; 2248d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov mReasonPhrase = reasonPhrase; 2258d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov mResponseHeaders = responseHeaders; 2268d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov mInputStream = data; 2278d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov } 2288d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov 2298d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov private void checkImmutable() { 2308d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov if (mImmutable) 2318d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov throw new IllegalStateException("This WebResourceResponse instance is immutable"); 2328d4f07f8d377fc1888879d3ef84c084d3bc5fb5dMikhail Naganov } 233c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott} 234