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 |