OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include "content/browser/android/download_controller.h" | 5 #include "content/browser/android/download_controller.h" |
6 | 6 |
7 #include "base/android/jni_android.h" | 7 #include "base/android/jni_android.h" |
8 #include "base/android/jni_string.h" | 8 #include "base/android/jni_string.h" |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
179 BrowserThread::UI, FROM_HERE, | 179 BrowserThread::UI, FROM_HERE, |
180 base::Bind(&DownloadController::StartAndroidDownload, | 180 base::Bind(&DownloadController::StartAndroidDownload, |
181 base::Unretained(this), info, render_process_id, | 181 base::Unretained(this), info, render_process_id, |
182 render_view_id)); | 182 render_view_id)); |
183 return; | 183 return; |
184 } | 184 } |
185 | 185 |
186 JNIEnv* env = AttachCurrentThread(); | 186 JNIEnv* env = AttachCurrentThread(); |
187 | 187 |
188 // Call newHttpGetDownload | 188 // Call newHttpGetDownload |
189 jobject view = GetContentView(render_process_id, render_view_id); | 189 ScopedJavaLocalRef<jobject> view = GetContentView(render_process_id, |
190 if (!view) { | 190 render_view_id); |
| 191 if (view.is_null()) { |
191 // The view went away. Can't proceed. | 192 // The view went away. Can't proceed. |
192 LOG(ERROR) << "Download failed on URL:" << info.url.spec(); | 193 LOG(ERROR) << "Download failed on URL:" << info.url.spec(); |
193 return; | 194 return; |
194 } | 195 } |
195 | 196 |
196 ScopedJavaLocalRef<jstring> jurl = | 197 ScopedJavaLocalRef<jstring> jurl = |
197 ConvertUTF8ToJavaString(env, info.url.spec()); | 198 ConvertUTF8ToJavaString(env, info.url.spec()); |
198 ScopedJavaLocalRef<jstring> juser_agent = | 199 ScopedJavaLocalRef<jstring> juser_agent = |
199 ConvertUTF8ToJavaString(env, info.user_agent); | 200 ConvertUTF8ToJavaString(env, info.user_agent); |
200 ScopedJavaLocalRef<jstring> jcontent_disposition = | 201 ScopedJavaLocalRef<jstring> jcontent_disposition = |
201 ConvertUTF8ToJavaString(env, info.content_disposition); | 202 ConvertUTF8ToJavaString(env, info.content_disposition); |
202 ScopedJavaLocalRef<jstring> jmime_type = | 203 ScopedJavaLocalRef<jstring> jmime_type = |
203 ConvertUTF8ToJavaString(env, info.original_mime_type); | 204 ConvertUTF8ToJavaString(env, info.original_mime_type); |
204 ScopedJavaLocalRef<jstring> jcookie = | 205 ScopedJavaLocalRef<jstring> jcookie = |
205 ConvertUTF8ToJavaString(env, info.cookie); | 206 ConvertUTF8ToJavaString(env, info.cookie); |
206 | 207 |
207 Java_DownloadController_newHttpGetDownload( | 208 Java_DownloadController_newHttpGetDownload( |
208 env, GetJavaObject()->Controller(env).obj(), view, jurl.obj(), | 209 env, GetJavaObject()->Controller(env).obj(), view.obj(), jurl.obj(), |
209 juser_agent.obj(), jcontent_disposition.obj(), jmime_type.obj(), | 210 juser_agent.obj(), jcontent_disposition.obj(), jmime_type.obj(), |
210 jcookie.obj(), info.total_bytes); | 211 jcookie.obj(), info.total_bytes); |
211 } | 212 } |
212 | 213 |
213 void DownloadController::OnPostDownloadStarted( | 214 void DownloadController::OnPostDownloadStarted( |
214 WebContents* web_contents, | 215 WebContents* web_contents, |
215 DownloadItem* download_item) { | 216 DownloadItem* download_item) { |
216 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 217 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
217 JNIEnv* env = AttachCurrentThread(); | 218 JNIEnv* env = AttachCurrentThread(); |
218 | 219 |
219 // Register for updates to the DownloadItem. | 220 // Register for updates to the DownloadItem. |
220 download_item->AddObserver(this); | 221 download_item->AddObserver(this); |
221 | 222 |
222 jobject view = GetContentViewCoreFromWebContents(web_contents); | 223 ScopedJavaLocalRef<jobject> view = |
223 if(!view) { | 224 GetContentViewCoreFromWebContents(web_contents); |
| 225 if(view.is_null()) { |
224 // The view went away. Can't proceed. | 226 // The view went away. Can't proceed. |
225 return; | 227 return; |
226 } | 228 } |
227 | 229 |
228 Java_DownloadController_onHttpPostDownloadStarted( | 230 Java_DownloadController_onHttpPostDownloadStarted( |
229 env, GetJavaObject()->Controller(env).obj(), view); | 231 env, GetJavaObject()->Controller(env).obj(), view.obj()); |
230 } | 232 } |
231 | 233 |
232 void DownloadController::OnDownloadUpdated(DownloadItem* item) { | 234 void DownloadController::OnDownloadUpdated(DownloadItem* item) { |
233 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 235 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
234 | 236 |
235 if (item->GetState() != DownloadItem::COMPLETE) | 237 if (item->GetState() != DownloadItem::COMPLETE) |
236 return; | 238 return; |
237 | 239 |
238 // Call onHttpPostDownloadCompleted | 240 // Call onHttpPostDownloadCompleted |
239 JNIEnv* env = AttachCurrentThread(); | 241 JNIEnv* env = AttachCurrentThread(); |
240 ScopedJavaLocalRef<jstring> jurl = | 242 ScopedJavaLocalRef<jstring> jurl = |
241 ConvertUTF8ToJavaString(env, item->GetURL().spec()); | 243 ConvertUTF8ToJavaString(env, item->GetURL().spec()); |
242 ScopedJavaLocalRef<jstring> jcontent_disposition = | 244 ScopedJavaLocalRef<jstring> jcontent_disposition = |
243 ConvertUTF8ToJavaString(env, item->GetContentDisposition()); | 245 ConvertUTF8ToJavaString(env, item->GetContentDisposition()); |
244 ScopedJavaLocalRef<jstring> jmime_type = | 246 ScopedJavaLocalRef<jstring> jmime_type = |
245 ConvertUTF8ToJavaString(env, item->GetMimeType()); | 247 ConvertUTF8ToJavaString(env, item->GetMimeType()); |
246 ScopedJavaLocalRef<jstring> jpath = | 248 ScopedJavaLocalRef<jstring> jpath = |
247 ConvertUTF8ToJavaString(env, item->GetFullPath().value()); | 249 ConvertUTF8ToJavaString(env, item->GetFullPath().value()); |
248 | 250 |
249 jobject view_core = GetContentViewCoreFromWebContents(item->GetWebContents()); | 251 ScopedJavaLocalRef<jobject> view_core = GetContentViewCoreFromWebContents( |
250 if (!view_core) { | 252 item->GetWebContents()); |
| 253 if (view_core.is_null()) { |
251 // We can get NULL WebContents from the DownloadItem. | 254 // We can get NULL WebContents from the DownloadItem. |
252 return; | 255 return; |
253 } | 256 } |
254 | 257 |
255 Java_DownloadController_onHttpPostDownloadCompleted(env, | 258 Java_DownloadController_onHttpPostDownloadCompleted(env, |
256 GetJavaObject()->Controller(env).obj(), view_core, jurl.obj(), | 259 GetJavaObject()->Controller(env).obj(), view_core.obj(), jurl.obj(), |
257 jcontent_disposition.obj(), jmime_type.obj(), jpath.obj(), | 260 jcontent_disposition.obj(), jmime_type.obj(), jpath.obj(), |
258 item->GetReceivedBytes(), true); | 261 item->GetReceivedBytes(), true); |
259 } | 262 } |
260 | 263 |
261 void DownloadController::OnDownloadOpened(DownloadItem* item) { | 264 void DownloadController::OnDownloadOpened(DownloadItem* item) { |
262 } | 265 } |
263 | 266 |
264 jobject DownloadController::GetContentView(int render_process_id, | 267 ScopedJavaLocalRef<jobject> DownloadController::GetContentView( |
265 int render_view_id) { | 268 int render_process_id, int render_view_id) { |
266 RenderViewHost* render_view_host = | 269 RenderViewHost* render_view_host = |
267 RenderViewHost::FromID(render_process_id, render_view_id); | 270 RenderViewHost::FromID(render_process_id, render_view_id); |
268 | 271 |
269 if (!render_view_host) | 272 if (!render_view_host) |
270 return NULL; | 273 return ScopedJavaLocalRef<jobject>(); |
271 | 274 |
272 WebContents* web_contents = | 275 WebContents* web_contents = |
273 render_view_host->GetDelegate()->GetAsWebContents(); | 276 render_view_host->GetDelegate()->GetAsWebContents(); |
274 | 277 |
275 if (!web_contents) | 278 if (!web_contents) |
276 return NULL; | 279 return ScopedJavaLocalRef<jobject>(); |
277 | 280 |
278 return GetContentViewCoreFromWebContents(web_contents); | 281 return GetContentViewCoreFromWebContents(web_contents); |
279 } | 282 } |
280 | 283 |
281 jobject DownloadController::GetContentViewCoreFromWebContents( | 284 ScopedJavaLocalRef<jobject> |
| 285 DownloadController::GetContentViewCoreFromWebContents( |
282 WebContents* web_contents) { | 286 WebContents* web_contents) { |
| 287 if (!web_contents) |
| 288 return ScopedJavaLocalRef<jobject>(); |
| 289 |
283 NOTIMPLEMENTED(); | 290 NOTIMPLEMENTED(); |
284 return NULL; | 291 return ScopedJavaLocalRef<jobject>(); |
285 } | 292 } |
286 | 293 |
287 DownloadController::JavaObject* DownloadController::GetJavaObject() { | 294 DownloadController::JavaObject* DownloadController::GetJavaObject() { |
288 if (!java_object_) { | 295 if (!java_object_) { |
289 // Initialize Java DownloadController by calling | 296 // Initialize Java DownloadController by calling |
290 // DownloadController.getInstance(), which will call Init() | 297 // DownloadController.getInstance(), which will call Init() |
291 // if Java DownloadController is not instantiated already. | 298 // if Java DownloadController is not instantiated already. |
292 JNIEnv* env = AttachCurrentThread(); | 299 JNIEnv* env = AttachCurrentThread(); |
293 ScopedJavaLocalRef<jclass> clazz = | 300 ScopedJavaLocalRef<jclass> clazz = |
294 GetClass(env, kDownloadControllerClassPathName); | 301 GetClass(env, kDownloadControllerClassPathName); |
(...skipping 15 matching lines...) Expand all Loading... |
310 request->extra_request_headers().GetHeader( | 317 request->extra_request_headers().GetHeader( |
311 net::HttpRequestHeaders::kUserAgent, | 318 net::HttpRequestHeaders::kUserAgent, |
312 &user_agent); | 319 &user_agent); |
313 if (!request->url_chain().empty()) { | 320 if (!request->url_chain().empty()) { |
314 original_url = request->url_chain().front(); | 321 original_url = request->url_chain().front(); |
315 url = request->url_chain().back(); | 322 url = request->url_chain().back(); |
316 } | 323 } |
317 } | 324 } |
318 | 325 |
319 } // namespace content | 326 } // namespace content |
OLD | NEW |