| 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_android_impl.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" |
| 11 #include "base/memory/scoped_ptr.h" | 11 #include "base/memory/scoped_ptr.h" |
| 12 #include "content/browser/android/content_view_core_impl.h" | 12 #include "content/browser/android/content_view_core_impl.h" |
| 13 #include "content/browser/download/download_item_impl.h" | 13 #include "content/browser/download/download_item_impl.h" |
| 14 #include "content/browser/renderer_host/render_process_host_impl.h" | 14 #include "content/browser/renderer_host/render_process_host_impl.h" |
| 15 #include "content/browser/renderer_host/render_view_host_delegate.h" | 15 #include "content/browser/renderer_host/render_view_host_delegate.h" |
| (...skipping 17 matching lines...) Expand all Loading... |
| 33 | 33 |
| 34 namespace { | 34 namespace { |
| 35 const char kDownloadControllerClassPathName[] = | 35 const char kDownloadControllerClassPathName[] = |
| 36 "org/chromium/content/browser/DownloadController"; | 36 "org/chromium/content/browser/DownloadController"; |
| 37 } // namespace | 37 } // namespace |
| 38 | 38 |
| 39 namespace content { | 39 namespace content { |
| 40 | 40 |
| 41 // JNI methods | 41 // JNI methods |
| 42 static void Init(JNIEnv* env, jobject obj) { | 42 static void Init(JNIEnv* env, jobject obj) { |
| 43 DownloadController::GetInstance()->Init(env, obj); | 43 DownloadControllerAndroidImpl::GetInstance()->Init(env, obj); |
| 44 } | 44 } |
| 45 | 45 |
| 46 struct DownloadController::JavaObject { | 46 struct DownloadControllerAndroidImpl::JavaObject { |
| 47 ScopedJavaLocalRef<jobject> Controller(JNIEnv* env) { | 47 ScopedJavaLocalRef<jobject> Controller(JNIEnv* env) { |
| 48 return GetRealObject(env, obj); | 48 return GetRealObject(env, obj); |
| 49 } | 49 } |
| 50 jweak obj; | 50 jweak obj; |
| 51 }; | 51 }; |
| 52 | 52 |
| 53 // static | 53 // static |
| 54 bool DownloadController::RegisterDownloadController(JNIEnv* env) { | 54 bool DownloadControllerAndroidImpl::RegisterDownloadController(JNIEnv* env) { |
| 55 return RegisterNativesImpl(env); | 55 return RegisterNativesImpl(env); |
| 56 } | 56 } |
| 57 | 57 |
| 58 DownloadController* DownloadController::GetInstance() { | 58 // static |
| 59 return Singleton<DownloadController>::get(); | 59 DownloadControllerAndroid* DownloadControllerAndroid::Get() { |
| 60 return DownloadControllerAndroidImpl::GetInstance(); |
| 60 } | 61 } |
| 61 | 62 |
| 62 DownloadController::DownloadController() | 63 // static |
| 64 DownloadControllerAndroidImpl* DownloadControllerAndroidImpl::GetInstance() { |
| 65 return Singleton<DownloadControllerAndroidImpl>::get(); |
| 66 } |
| 67 |
| 68 DownloadControllerAndroidImpl::DownloadControllerAndroidImpl() |
| 63 : java_object_(NULL) { | 69 : java_object_(NULL) { |
| 64 } | 70 } |
| 65 | 71 |
| 66 DownloadController::~DownloadController() { | 72 DownloadControllerAndroidImpl::~DownloadControllerAndroidImpl() { |
| 67 if (java_object_) { | 73 if (java_object_) { |
| 68 JNIEnv* env = AttachCurrentThread(); | 74 JNIEnv* env = AttachCurrentThread(); |
| 69 env->DeleteWeakGlobalRef(java_object_->obj); | 75 env->DeleteWeakGlobalRef(java_object_->obj); |
| 70 delete java_object_; | 76 delete java_object_; |
| 71 CheckException(env); | 77 CheckException(env); |
| 72 } | 78 } |
| 73 } | 79 } |
| 74 | 80 |
| 75 // Initialize references to Java object. | 81 // Initialize references to Java object. |
| 76 void DownloadController::Init(JNIEnv* env, jobject obj) { | 82 void DownloadControllerAndroidImpl::Init(JNIEnv* env, jobject obj) { |
| 77 java_object_ = new JavaObject; | 83 java_object_ = new JavaObject; |
| 78 java_object_->obj = env->NewWeakGlobalRef(obj); | 84 java_object_->obj = env->NewWeakGlobalRef(obj); |
| 79 } | 85 } |
| 80 | 86 |
| 81 void DownloadController::CreateGETDownload( | 87 void DownloadControllerAndroidImpl::CreateGETDownload( |
| 82 RenderViewHost* render_view_host, | 88 RenderViewHost* render_view_host, |
| 83 int request_id) { | 89 int request_id) { |
| 84 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 90 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 85 int render_process_id = render_view_host->GetProcess()->GetID(); | 91 int render_process_id = render_view_host->GetProcess()->GetID(); |
| 86 GlobalRequestID global_id(render_process_id, request_id); | 92 GlobalRequestID global_id(render_process_id, request_id); |
| 87 | 93 |
| 88 // We are yielding the UI thread and render_view_host may go away by | 94 // We are yielding the UI thread and render_view_host may go away by |
| 89 // the time we come back. Pass along render_process_id and render_view_id | 95 // the time we come back. Pass along render_process_id and render_view_id |
| 90 // to retrieve it later (if it still exists). | 96 // to retrieve it later (if it still exists). |
| 91 BrowserThread::PostTask( | 97 BrowserThread::PostTask( |
| 92 BrowserThread::IO, FROM_HERE, | 98 BrowserThread::IO, FROM_HERE, |
| 93 base::Bind(&DownloadController::PrepareDownloadInfo, | 99 base::Bind(&DownloadControllerAndroidImpl::PrepareDownloadInfo, |
| 94 base::Unretained(this), global_id, | 100 base::Unretained(this), global_id, |
| 95 render_process_id, | 101 render_process_id, |
| 96 render_view_host->GetRoutingID())); | 102 render_view_host->GetRoutingID())); |
| 97 } | 103 } |
| 98 | 104 |
| 99 void DownloadController::PrepareDownloadInfo( | 105 void DownloadControllerAndroidImpl::PrepareDownloadInfo( |
| 100 const GlobalRequestID& global_id, | 106 const GlobalRequestID& global_id, |
| 101 int render_process_id, int render_view_id) { | 107 int render_process_id, int render_view_id) { |
| 102 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 108 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 103 | 109 |
| 104 net::URLRequest* request = | 110 net::URLRequest* request = |
| 105 ResourceDispatcherHostImpl::Get()->GetURLRequest(global_id); | 111 ResourceDispatcherHostImpl::Get()->GetURLRequest(global_id); |
| 106 DCHECK(request) << "Request to download not found."; | 112 DCHECK(request) << "Request to download not found."; |
| 107 | 113 |
| 108 DownloadInfoAndroid info_android(request); | 114 DownloadInfoAndroid info_android(request); |
| 109 | 115 |
| 110 net::CookieStore* cookie_store = request->context()->cookie_store(); | 116 net::CookieStore* cookie_store = request->context()->cookie_store(); |
| 111 if (cookie_store) { | 117 if (cookie_store) { |
| 112 net::CookieMonster* cookie_monster = cookie_store->GetCookieMonster(); | 118 net::CookieMonster* cookie_monster = cookie_store->GetCookieMonster(); |
| 113 if (cookie_monster) { | 119 if (cookie_monster) { |
| 114 cookie_monster->GetAllCookiesForURLAsync( | 120 cookie_monster->GetAllCookiesForURLAsync( |
| 115 request->url(), | 121 request->url(), |
| 116 base::Bind(&DownloadController::CheckPolicyAndLoadCookies, | 122 base::Bind(&DownloadControllerAndroidImpl::CheckPolicyAndLoadCookies, |
| 117 base::Unretained(this), info_android, render_process_id, | 123 base::Unretained(this), info_android, render_process_id, |
| 118 render_view_id, global_id)); | 124 render_view_id, global_id)); |
| 119 } else { | 125 } else { |
| 120 DoLoadCookies( | 126 DoLoadCookies( |
| 121 info_android, render_process_id, render_view_id, global_id); | 127 info_android, render_process_id, render_view_id, global_id); |
| 122 } | 128 } |
| 123 } else { | 129 } else { |
| 124 // Can't get any cookies, start android download. | 130 // Can't get any cookies, start android download. |
| 125 StartAndroidDownload(info_android, render_process_id, render_view_id); | 131 StartAndroidDownload(info_android, render_process_id, render_view_id); |
| 126 } | 132 } |
| 127 } | 133 } |
| 128 | 134 |
| 129 void DownloadController::CheckPolicyAndLoadCookies( | 135 void DownloadControllerAndroidImpl::CheckPolicyAndLoadCookies( |
| 130 const DownloadInfoAndroid& info, int render_process_id, | 136 const DownloadInfoAndroid& info, int render_process_id, |
| 131 int render_view_id, const GlobalRequestID& global_id, | 137 int render_view_id, const GlobalRequestID& global_id, |
| 132 const net::CookieList& cookie_list) { | 138 const net::CookieList& cookie_list) { |
| 133 net::URLRequest* request = | 139 net::URLRequest* request = |
| 134 ResourceDispatcherHostImpl::Get()->GetURLRequest(global_id); | 140 ResourceDispatcherHostImpl::Get()->GetURLRequest(global_id); |
| 135 DCHECK(request) << "Request to download not found."; | 141 DCHECK(request) << "Request to download not found."; |
| 136 | 142 |
| 137 if (request->context()->network_delegate()->CanGetCookies( | 143 if (request->context()->network_delegate()->CanGetCookies( |
| 138 *request, cookie_list)) { | 144 *request, cookie_list)) { |
| 139 DoLoadCookies(info, render_process_id, render_view_id, global_id); | 145 DoLoadCookies(info, render_process_id, render_view_id, global_id); |
| 140 } else { | 146 } else { |
| 141 StartAndroidDownload(info, render_process_id, render_view_id); | 147 StartAndroidDownload(info, render_process_id, render_view_id); |
| 142 } | 148 } |
| 143 } | 149 } |
| 144 | 150 |
| 145 void DownloadController::DoLoadCookies( | 151 void DownloadControllerAndroidImpl::DoLoadCookies( |
| 146 const DownloadInfoAndroid& info, int render_process_id, | 152 const DownloadInfoAndroid& info, int render_process_id, |
| 147 int render_view_id, const GlobalRequestID& global_id) { | 153 int render_view_id, const GlobalRequestID& global_id) { |
| 148 net::CookieOptions options; | 154 net::CookieOptions options; |
| 149 options.set_include_httponly(); | 155 options.set_include_httponly(); |
| 150 | 156 |
| 151 net::URLRequest* request = | 157 net::URLRequest* request = |
| 152 ResourceDispatcherHostImpl::Get()->GetURLRequest(global_id); | 158 ResourceDispatcherHostImpl::Get()->GetURLRequest(global_id); |
| 153 DCHECK(request) << "Request to download not found."; | 159 DCHECK(request) << "Request to download not found."; |
| 154 | 160 |
| 155 request->context()->cookie_store()->GetCookiesWithOptionsAsync( | 161 request->context()->cookie_store()->GetCookiesWithOptionsAsync( |
| 156 info.url, options, | 162 info.url, options, |
| 157 base::Bind(&DownloadController::OnCookieResponse, | 163 base::Bind(&DownloadControllerAndroidImpl::OnCookieResponse, |
| 158 base::Unretained(this), info, render_process_id, | 164 base::Unretained(this), info, render_process_id, |
| 159 render_view_id)); | 165 render_view_id)); |
| 160 } | 166 } |
| 161 | 167 |
| 162 void DownloadController::OnCookieResponse(DownloadInfoAndroid download_info, | 168 void DownloadControllerAndroidImpl::OnCookieResponse( |
| 163 int render_process_id, | 169 DownloadInfoAndroid download_info, |
| 164 int render_view_id, | 170 int render_process_id, |
| 165 const std::string& cookie) { | 171 int render_view_id, |
| 172 const std::string& cookie) { |
| 166 download_info.cookie = cookie; | 173 download_info.cookie = cookie; |
| 167 | 174 |
| 168 // We have everything we need, start Android download. | 175 // We have everything we need, start Android download. |
| 169 StartAndroidDownload(download_info, render_process_id, render_view_id); | 176 StartAndroidDownload(download_info, render_process_id, render_view_id); |
| 170 } | 177 } |
| 171 | 178 |
| 172 void DownloadController::StartAndroidDownload( | 179 void DownloadControllerAndroidImpl::StartAndroidDownload( |
| 173 const DownloadInfoAndroid& info, | 180 const DownloadInfoAndroid& info, |
| 174 int render_process_id, | 181 int render_process_id, |
| 175 int render_view_id) { | 182 int render_view_id) { |
| 176 // Call ourself on the UI thread if not already on it. | 183 // Call ourself on the UI thread if not already on it. |
| 177 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { | 184 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { |
| 178 BrowserThread::PostTask( | 185 BrowserThread::PostTask( |
| 179 BrowserThread::UI, FROM_HERE, | 186 BrowserThread::UI, FROM_HERE, |
| 180 base::Bind(&DownloadController::StartAndroidDownload, | 187 base::Bind(&DownloadControllerAndroidImpl::StartAndroidDownload, |
| 181 base::Unretained(this), info, render_process_id, | 188 base::Unretained(this), info, render_process_id, |
| 182 render_view_id)); | 189 render_view_id)); |
| 183 return; | 190 return; |
| 184 } | 191 } |
| 185 | 192 |
| 186 JNIEnv* env = AttachCurrentThread(); | 193 JNIEnv* env = AttachCurrentThread(); |
| 187 | 194 |
| 188 // Call newHttpGetDownload | 195 // Call newHttpGetDownload |
| 189 ScopedJavaLocalRef<jobject> view = GetContentView(render_process_id, | 196 ScopedJavaLocalRef<jobject> view = GetContentView(render_process_id, |
| 190 render_view_id); | 197 render_view_id); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 206 ConvertUTF8ToJavaString(env, info.cookie); | 213 ConvertUTF8ToJavaString(env, info.cookie); |
| 207 ScopedJavaLocalRef<jstring> jreferer = | 214 ScopedJavaLocalRef<jstring> jreferer = |
| 208 ConvertUTF8ToJavaString(env, info.referer); | 215 ConvertUTF8ToJavaString(env, info.referer); |
| 209 | 216 |
| 210 Java_DownloadController_newHttpGetDownload( | 217 Java_DownloadController_newHttpGetDownload( |
| 211 env, GetJavaObject()->Controller(env).obj(), view.obj(), jurl.obj(), | 218 env, GetJavaObject()->Controller(env).obj(), view.obj(), jurl.obj(), |
| 212 juser_agent.obj(), jcontent_disposition.obj(), jmime_type.obj(), | 219 juser_agent.obj(), jcontent_disposition.obj(), jmime_type.obj(), |
| 213 jcookie.obj(), jreferer.obj(), info.total_bytes); | 220 jcookie.obj(), jreferer.obj(), info.total_bytes); |
| 214 } | 221 } |
| 215 | 222 |
| 216 void DownloadController::OnPostDownloadStarted( | 223 void DownloadControllerAndroidImpl::OnPostDownloadStarted( |
| 217 WebContents* web_contents, | 224 WebContents* web_contents, |
| 218 DownloadItem* download_item) { | 225 DownloadItem* download_item) { |
| 219 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 226 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 220 JNIEnv* env = AttachCurrentThread(); | 227 JNIEnv* env = AttachCurrentThread(); |
| 221 | 228 |
| 222 // Register for updates to the DownloadItem. | 229 // Register for updates to the DownloadItem. |
| 223 download_item->AddObserver(this); | 230 download_item->AddObserver(this); |
| 224 | 231 |
| 225 ScopedJavaLocalRef<jobject> view = | 232 ScopedJavaLocalRef<jobject> view = |
| 226 GetContentViewCoreFromWebContents(web_contents); | 233 GetContentViewCoreFromWebContents(web_contents); |
| 227 if(view.is_null()) { | 234 if(view.is_null()) { |
| 228 // The view went away. Can't proceed. | 235 // The view went away. Can't proceed. |
| 229 return; | 236 return; |
| 230 } | 237 } |
| 231 | 238 |
| 232 Java_DownloadController_onHttpPostDownloadStarted( | 239 Java_DownloadController_onHttpPostDownloadStarted( |
| 233 env, GetJavaObject()->Controller(env).obj(), view.obj()); | 240 env, GetJavaObject()->Controller(env).obj(), view.obj()); |
| 234 } | 241 } |
| 235 | 242 |
| 236 void DownloadController::OnDownloadUpdated(DownloadItem* item) { | 243 void DownloadControllerAndroidImpl::OnDownloadUpdated(DownloadItem* item) { |
| 237 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 244 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 238 | 245 |
| 239 if (item->GetState() != DownloadItem::COMPLETE) | 246 if (item->GetState() != DownloadItem::COMPLETE) |
| 240 return; | 247 return; |
| 241 | 248 |
| 242 // Call onHttpPostDownloadCompleted | 249 // Call onHttpPostDownloadCompleted |
| 243 JNIEnv* env = AttachCurrentThread(); | 250 JNIEnv* env = AttachCurrentThread(); |
| 244 ScopedJavaLocalRef<jstring> jurl = | 251 ScopedJavaLocalRef<jstring> jurl = |
| 245 ConvertUTF8ToJavaString(env, item->GetURL().spec()); | 252 ConvertUTF8ToJavaString(env, item->GetURL().spec()); |
| 246 ScopedJavaLocalRef<jstring> jcontent_disposition = | 253 ScopedJavaLocalRef<jstring> jcontent_disposition = |
| 247 ConvertUTF8ToJavaString(env, item->GetContentDisposition()); | 254 ConvertUTF8ToJavaString(env, item->GetContentDisposition()); |
| 248 ScopedJavaLocalRef<jstring> jmime_type = | 255 ScopedJavaLocalRef<jstring> jmime_type = |
| 249 ConvertUTF8ToJavaString(env, item->GetMimeType()); | 256 ConvertUTF8ToJavaString(env, item->GetMimeType()); |
| 250 ScopedJavaLocalRef<jstring> jpath = | 257 ScopedJavaLocalRef<jstring> jpath = |
| 251 ConvertUTF8ToJavaString(env, item->GetFullPath().value()); | 258 ConvertUTF8ToJavaString(env, item->GetFullPath().value()); |
| 252 | 259 |
| 253 ScopedJavaLocalRef<jobject> view_core = GetContentViewCoreFromWebContents( | 260 ScopedJavaLocalRef<jobject> view_core = GetContentViewCoreFromWebContents( |
| 254 item->GetWebContents()); | 261 item->GetWebContents()); |
| 255 if (view_core.is_null()) { | 262 if (view_core.is_null()) { |
| 256 // We can get NULL WebContents from the DownloadItem. | 263 // We can get NULL WebContents from the DownloadItem. |
| 257 return; | 264 return; |
| 258 } | 265 } |
| 259 | 266 |
| 260 Java_DownloadController_onHttpPostDownloadCompleted(env, | 267 Java_DownloadController_onHttpPostDownloadCompleted(env, |
| 261 GetJavaObject()->Controller(env).obj(), view_core.obj(), jurl.obj(), | 268 GetJavaObject()->Controller(env).obj(), view_core.obj(), jurl.obj(), |
| 262 jcontent_disposition.obj(), jmime_type.obj(), jpath.obj(), | 269 jcontent_disposition.obj(), jmime_type.obj(), jpath.obj(), |
| 263 item->GetReceivedBytes(), true); | 270 item->GetReceivedBytes(), true); |
| 264 } | 271 } |
| 265 | 272 |
| 266 void DownloadController::OnDownloadOpened(DownloadItem* item) { | 273 void DownloadControllerAndroidImpl::OnDownloadOpened(DownloadItem* item) { |
| 267 } | 274 } |
| 268 | 275 |
| 269 ScopedJavaLocalRef<jobject> DownloadController::GetContentView( | 276 ScopedJavaLocalRef<jobject> DownloadControllerAndroidImpl::GetContentView( |
| 270 int render_process_id, int render_view_id) { | 277 int render_process_id, int render_view_id) { |
| 271 RenderViewHost* render_view_host = | 278 RenderViewHost* render_view_host = |
| 272 RenderViewHost::FromID(render_process_id, render_view_id); | 279 RenderViewHost::FromID(render_process_id, render_view_id); |
| 273 | 280 |
| 274 if (!render_view_host) | 281 if (!render_view_host) |
| 275 return ScopedJavaLocalRef<jobject>(); | 282 return ScopedJavaLocalRef<jobject>(); |
| 276 | 283 |
| 277 WebContents* web_contents = | 284 WebContents* web_contents = |
| 278 render_view_host->GetDelegate()->GetAsWebContents(); | 285 render_view_host->GetDelegate()->GetAsWebContents(); |
| 279 | 286 |
| 280 if (!web_contents) | 287 if (!web_contents) |
| 281 return ScopedJavaLocalRef<jobject>(); | 288 return ScopedJavaLocalRef<jobject>(); |
| 282 | 289 |
| 283 return GetContentViewCoreFromWebContents(web_contents); | 290 return GetContentViewCoreFromWebContents(web_contents); |
| 284 } | 291 } |
| 285 | 292 |
| 286 ScopedJavaLocalRef<jobject> | 293 ScopedJavaLocalRef<jobject> |
| 287 DownloadController::GetContentViewCoreFromWebContents( | 294 DownloadControllerAndroidImpl::GetContentViewCoreFromWebContents( |
| 288 WebContents* web_contents) { | 295 WebContents* web_contents) { |
| 289 if (!web_contents) | 296 if (!web_contents) |
| 290 return ScopedJavaLocalRef<jobject>(); | 297 return ScopedJavaLocalRef<jobject>(); |
| 291 | 298 |
| 292 ContentViewCore* view_core = web_contents->GetContentNativeView(); | 299 ContentViewCore* view_core = web_contents->GetContentNativeView(); |
| 293 return view_core ? view_core->GetJavaObject() : | 300 return view_core ? view_core->GetJavaObject() : |
| 294 ScopedJavaLocalRef<jobject>(); | 301 ScopedJavaLocalRef<jobject>(); |
| 295 } | 302 } |
| 296 | 303 |
| 297 DownloadController::JavaObject* DownloadController::GetJavaObject() { | 304 DownloadControllerAndroidImpl::JavaObject* |
| 305 DownloadControllerAndroidImpl::GetJavaObject() { |
| 298 if (!java_object_) { | 306 if (!java_object_) { |
| 299 // Initialize Java DownloadController by calling | 307 // Initialize Java DownloadController by calling |
| 300 // DownloadController.getInstance(), which will call Init() | 308 // DownloadController.getInstance(), which will call Init() |
| 301 // if Java DownloadController is not instantiated already. | 309 // if Java DownloadController is not instantiated already. |
| 302 JNIEnv* env = AttachCurrentThread(); | 310 JNIEnv* env = AttachCurrentThread(); |
| 303 ScopedJavaLocalRef<jclass> clazz = | 311 ScopedJavaLocalRef<jclass> clazz = |
| 304 GetClass(env, kDownloadControllerClassPathName); | 312 GetClass(env, kDownloadControllerClassPathName); |
| 305 jmethodID get_instance = GetStaticMethodID(env, clazz, "getInstance", | 313 jmethodID get_instance = GetStaticMethodID(env, clazz, "getInstance", |
| 306 "()Lorg/chromium/content/browser/DownloadController;"); | 314 "()Lorg/chromium/content/browser/DownloadController;"); |
| 307 ScopedJavaLocalRef<jobject> jobj(env, | 315 ScopedJavaLocalRef<jobject> jobj(env, |
| 308 env->CallStaticObjectMethod(clazz.obj(), get_instance)); | 316 env->CallStaticObjectMethod(clazz.obj(), get_instance)); |
| 309 CheckException(env); | 317 CheckException(env); |
| 310 } | 318 } |
| 311 | 319 |
| 312 DCHECK(java_object_); | 320 DCHECK(java_object_); |
| 313 return java_object_; | 321 return java_object_; |
| 314 } | 322 } |
| 315 | 323 |
| 316 DownloadController::DownloadInfoAndroid::DownloadInfoAndroid( | 324 DownloadControllerAndroidImpl::DownloadInfoAndroid::DownloadInfoAndroid( |
| 317 net::URLRequest* request) { | 325 net::URLRequest* request) { |
| 318 request->GetResponseHeaderByName("content-disposition", &content_disposition); | 326 request->GetResponseHeaderByName("content-disposition", &content_disposition); |
| 319 request->GetMimeType(&original_mime_type); | 327 request->GetResponseHeaderByName("mime-type", &original_mime_type); |
| 320 request->extra_request_headers().GetHeader( | 328 request->extra_request_headers().GetHeader( |
| 321 net::HttpRequestHeaders::kUserAgent, &user_agent); | 329 net::HttpRequestHeaders::kUserAgent, &user_agent); |
| 322 GURL referer_url(request->GetSanitizedReferrer()); | 330 GURL referer_url(request->GetSanitizedReferrer()); |
| 323 if (referer_url.is_valid()) | 331 if (referer_url.is_valid()) |
| 324 referer = referer_url.spec(); | 332 referer = referer_url.spec(); |
| 325 if (!request->url_chain().empty()) { | 333 if (!request->url_chain().empty()) { |
| 326 original_url = request->url_chain().front(); | 334 original_url = request->url_chain().front(); |
| 327 url = request->url_chain().back(); | 335 url = request->url_chain().back(); |
| 328 } | 336 } |
| 329 } | 337 } |
| 330 | 338 |
| 331 DownloadController::DownloadInfoAndroid::~DownloadInfoAndroid() {} | 339 DownloadControllerAndroidImpl::DownloadInfoAndroid::~DownloadInfoAndroid() {} |
| 332 | 340 |
| 333 } // namespace content | 341 } // namespace content |
| OLD | NEW |