OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package org.domokit.oknet; | 5 package org.domokit.oknet; |
6 | 6 |
7 import android.util.Log; | 7 import android.util.Log; |
8 | 8 |
9 import com.squareup.okhttp.Call; | 9 import com.squareup.okhttp.Call; |
10 import com.squareup.okhttp.Callback; | 10 import com.squareup.okhttp.Callback; |
11 import com.squareup.okhttp.Headers; | 11 import com.squareup.okhttp.Headers; |
12 import com.squareup.okhttp.MediaType; | 12 import com.squareup.okhttp.MediaType; |
13 import com.squareup.okhttp.OkHttpClient; | 13 import com.squareup.okhttp.OkHttpClient; |
14 import com.squareup.okhttp.Request; | 14 import com.squareup.okhttp.Request; |
15 import com.squareup.okhttp.Response; | 15 import com.squareup.okhttp.Response; |
16 import com.squareup.okhttp.ResponseBody; | 16 import com.squareup.okhttp.ResponseBody; |
17 | 17 |
18 import org.chromium.base.TraceEvent; | 18 import org.chromium.base.TraceEvent; |
19 import org.chromium.mojo.system.Core; | 19 import org.chromium.mojo.system.Core; |
20 import org.chromium.mojo.system.DataPipe; | 20 import org.chromium.mojo.system.DataPipe; |
21 import org.chromium.mojo.system.MojoException; | 21 import org.chromium.mojo.system.MojoException; |
22 import org.chromium.mojo.system.MojoResult; | 22 import org.chromium.mojo.system.MojoResult; |
23 import org.chromium.mojo.system.Pair; | 23 import org.chromium.mojo.system.Pair; |
| 24 import org.chromium.mojom.mojo.HttpHeader; |
24 import org.chromium.mojom.mojo.NetworkError; | 25 import org.chromium.mojom.mojo.NetworkError; |
25 import org.chromium.mojom.mojo.UrlLoader; | 26 import org.chromium.mojom.mojo.UrlLoader; |
26 import org.chromium.mojom.mojo.UrlLoaderStatus; | 27 import org.chromium.mojom.mojo.UrlLoaderStatus; |
27 import org.chromium.mojom.mojo.UrlRequest; | 28 import org.chromium.mojom.mojo.UrlRequest; |
28 import org.chromium.mojom.mojo.UrlResponse; | 29 import org.chromium.mojom.mojo.UrlResponse; |
29 | 30 |
30 import java.io.IOException; | 31 import java.io.IOException; |
31 import java.nio.ByteBuffer; | 32 import java.nio.ByteBuffer; |
32 import java.nio.charset.Charset; | 33 import java.nio.charset.Charset; |
33 import java.util.concurrent.Executor; | 34 import java.util.concurrent.Executor; |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 @Override | 114 @Override |
114 public void start(UrlRequest request, StartResponse callback) { | 115 public void start(UrlRequest request, StartResponse callback) { |
115 TraceEvent.startAsync("UrlLoaderImpl", mTracingId); | 116 TraceEvent.startAsync("UrlLoaderImpl", mTracingId); |
116 mIsLoading = true; | 117 mIsLoading = true; |
117 mError = null; | 118 mError = null; |
118 | 119 |
119 Request.Builder builder = | 120 Request.Builder builder = |
120 new Request.Builder().url(request.url).method(request.method, nu
ll); | 121 new Request.Builder().url(request.url).method(request.method, nu
ll); |
121 | 122 |
122 if (request.headers != null) { | 123 if (request.headers != null) { |
123 for (String header : request.headers) { | 124 for (HttpHeader header : request.headers) { |
124 String[] parts = header.split(":"); | 125 builder.addHeader(header.name, header.value); |
125 String name = parts[0].trim(); | |
126 String value = parts.length > 1 ? parts[1].trim() : ""; | |
127 builder.addHeader(name, value); | |
128 } | 126 } |
129 } | 127 } |
130 | 128 |
131 // TODO(abarth): body, responseBodyBufferSize, autoFollowRedirects, bypa
ssCache. | 129 // TODO(abarth): body, responseBodyBufferSize, autoFollowRedirects, bypa
ssCache. |
132 final StartResponse responseCallback = callback; | 130 final StartResponse responseCallback = callback; |
133 Call call = mClient.newCall(builder.build()); | 131 Call call = mClient.newCall(builder.build()); |
134 call.enqueue(new Callback() { | 132 call.enqueue(new Callback() { |
135 @Override | 133 @Override |
136 public void onFailure(Request request, IOException e) { | 134 public void onFailure(Request request, IOException e) { |
137 Log.w(TAG, "Network failure loading " + request.urlString()); | 135 Log.w(TAG, "Network failure loading " + request.urlString()); |
(...skipping 15 matching lines...) Expand all Loading... |
153 urlResponse.url = response.request().urlString(); | 151 urlResponse.url = response.request().urlString(); |
154 urlResponse.statusCode = response.code(); | 152 urlResponse.statusCode = response.code(); |
155 urlResponse.statusLine = response.message(); | 153 urlResponse.statusLine = response.message(); |
156 | 154 |
157 if (urlResponse.statusCode >= 400) { | 155 if (urlResponse.statusCode >= 400) { |
158 Log.w(TAG, "Failed to load: " + urlResponse.url + " (" | 156 Log.w(TAG, "Failed to load: " + urlResponse.url + " (" |
159 + urlResponse.statusCode + ")"); | 157 + urlResponse.statusCode + ")"); |
160 } | 158 } |
161 | 159 |
162 Headers headers = response.headers(); | 160 Headers headers = response.headers(); |
163 urlResponse.headers = new String[headers.size()]; | 161 urlResponse.headers = new HttpHeader[headers.size()]; |
164 for (int i = 0; i < headers.size(); ++i) { | 162 for (int i = 0; i < headers.size(); ++i) { |
165 String name = headers.name(i); | 163 HttpHeader header = new HttpHeader(); |
166 String value = headers.value(i); | 164 header.name = headers.name(i); |
167 urlResponse.headers[i] = name + ": " + value; | 165 header.value = headers.value(i); |
| 166 urlResponse.headers[i] = header; |
168 } | 167 } |
169 | 168 |
170 ResponseBody body = response.body(); | 169 ResponseBody body = response.body(); |
171 MediaType mediaType = body.contentType(); | 170 MediaType mediaType = body.contentType(); |
172 if (mediaType != null) { | 171 if (mediaType != null) { |
173 urlResponse.mimeType = mediaType.type() + "/" + mediaType.su
btype(); | 172 urlResponse.mimeType = mediaType.type() + "/" + mediaType.su
btype(); |
174 Charset charset = mediaType.charset(); | 173 Charset charset = mediaType.charset(); |
175 if (charset != null) | 174 if (charset != null) { |
176 urlResponse.charset = charset.displayName(); | 175 urlResponse.charset = charset.displayName(); |
| 176 } |
177 } | 177 } |
178 | 178 |
179 Pair<DataPipe.ProducerHandle, DataPipe.ConsumerHandle> handles = | 179 Pair<DataPipe.ProducerHandle, DataPipe.ConsumerHandle> handles = |
180 mCore.createDataPipe(null); | 180 mCore.createDataPipe(null); |
181 DataPipe.ProducerHandle producerHandle = handles.first; | 181 DataPipe.ProducerHandle producerHandle = handles.first; |
182 DataPipe.ConsumerHandle consumerHandle = handles.second; | 182 DataPipe.ConsumerHandle consumerHandle = handles.second; |
183 urlResponse.body = consumerHandle; | 183 urlResponse.body = consumerHandle; |
184 responseCallback.call(urlResponse); | 184 responseCallback.call(urlResponse); |
185 mExecutor.execute(new CopyToPipeJob(body, producerHandle)); | 185 mExecutor.execute(new CopyToPipeJob(body, producerHandle)); |
186 } | 186 } |
187 }); | 187 }); |
188 } | 188 } |
189 | 189 |
190 @Override | 190 @Override |
191 public void followRedirect(FollowRedirectResponse callback) { | 191 public void followRedirect(FollowRedirectResponse callback) { |
192 // TODO(abarth): Implement redirects. | 192 // TODO(abarth): Implement redirects. |
193 callback.call(new UrlResponse()); | 193 callback.call(new UrlResponse()); |
194 } | 194 } |
195 | 195 |
196 @Override | 196 @Override |
197 public void queryStatus(QueryStatusResponse callback) { | 197 public void queryStatus(QueryStatusResponse callback) { |
198 UrlLoaderStatus status = new UrlLoaderStatus(); | 198 UrlLoaderStatus status = new UrlLoaderStatus(); |
199 status.error = mError; | 199 status.error = mError; |
200 status.isLoading = mIsLoading; | 200 status.isLoading = mIsLoading; |
201 callback.call(status); | 201 callback.call(status); |
202 } | 202 } |
203 } | 203 } |
OLD | NEW |