Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(25)

Side by Side Diff: content/browser/android/download_controller.cc

Issue 10827125: Use JavaObjectWeakGlobalRef in ContentViewCore. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « content/browser/android/download_controller.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « content/browser/android/download_controller.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698