| 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 | 
|---|