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

Side by Side Diff: chrome/browser/android/download/download_controller.cc

Issue 2516823002: [Downloads] Consolidate Java DownloadItem/Info creation (Closed)
Patch Set: Rebased Created 4 years, 1 month 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
« no previous file with comments | « chrome/browser/BUILD.gn ('k') | chrome/browser/android/download/download_manager_service.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "chrome/browser/android/download/download_controller.h" 5 #include "chrome/browser/android/download/download_controller.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/android/context_utils.h" 10 #include "base/android/context_utils.h"
11 #include "base/android/jni_android.h" 11 #include "base/android/jni_android.h"
12 #include "base/android/jni_string.h" 12 #include "base/android/jni_string.h"
13 #include "base/bind.h" 13 #include "base/bind.h"
14 #include "base/lazy_instance.h" 14 #include "base/lazy_instance.h"
15 #include "base/logging.h" 15 #include "base/logging.h"
16 #include "base/metrics/histogram_macros.h" 16 #include "base/metrics/histogram_macros.h"
17 #include "base/synchronization/lock.h" 17 #include "base/synchronization/lock.h"
18 #include "base/time/time.h"
19 #include "chrome/browser/android/download/chrome_download_delegate.h" 18 #include "chrome/browser/android/download/chrome_download_delegate.h"
20 #include "chrome/browser/android/download/dangerous_download_infobar_delegate.h" 19 #include "chrome/browser/android/download/dangerous_download_infobar_delegate.h"
20 #include "chrome/browser/android/download/download_manager_service.h"
21 #include "chrome/browser/infobars/infobar_service.h" 21 #include "chrome/browser/infobars/infobar_service.h"
22 #include "chrome/browser/ui/android/view_android_helper.h" 22 #include "chrome/browser/ui/android/view_android_helper.h"
23 #include "content/public/browser/browser_context.h" 23 #include "content/public/browser/browser_context.h"
24 #include "content/public/browser/browser_thread.h" 24 #include "content/public/browser/browser_thread.h"
25 #include "content/public/browser/download_manager.h" 25 #include "content/public/browser/download_manager.h"
26 #include "content/public/browser/download_url_parameters.h" 26 #include "content/public/browser/download_url_parameters.h"
27 #include "content/public/browser/render_process_host.h" 27 #include "content/public/browser/render_process_host.h"
28 #include "content/public/browser/render_view_host.h" 28 #include "content/public/browser/render_view_host.h"
29 #include "content/public/common/referrer.h" 29 #include "content/public/common/referrer.h"
30 #include "jni/DownloadController_jni.h" 30 #include "jni/DownloadController_jni.h"
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 void DownloadController::OnDownloadUpdated(DownloadItem* item) { 253 void DownloadController::OnDownloadUpdated(DownloadItem* item) {
254 DCHECK_CURRENTLY_ON(BrowserThread::UI); 254 DCHECK_CURRENTLY_ON(BrowserThread::UI);
255 if (item->IsDangerous() && (item->GetState() != DownloadItem::CANCELLED)) { 255 if (item->IsDangerous() && (item->GetState() != DownloadItem::CANCELLED)) {
256 // Dont't show notification for a dangerous download, as user can resume 256 // Dont't show notification for a dangerous download, as user can resume
257 // the download after browser crash through notification. 257 // the download after browser crash through notification.
258 OnDangerousDownload(item); 258 OnDangerousDownload(item);
259 return; 259 return;
260 } 260 }
261 261
262 JNIEnv* env = base::android::AttachCurrentThread(); 262 JNIEnv* env = base::android::AttachCurrentThread();
263 ScopedJavaLocalRef<jstring> jguid = 263 ScopedJavaLocalRef<jobject> j_item =
264 ConvertUTF8ToJavaString(env, item->GetGuid()); 264 DownloadManagerService::CreateJavaDownloadInfo(env, item);
265 ScopedJavaLocalRef<jstring> jurl =
266 ConvertUTF8ToJavaString(env, item->GetURL().spec());
267 ScopedJavaLocalRef<jstring> jmime_type =
268 ConvertUTF8ToJavaString(env, item->GetMimeType());
269 ScopedJavaLocalRef<jstring> jpath =
270 ConvertUTF8ToJavaString(env, item->GetTargetFilePath().value());
271 ScopedJavaLocalRef<jstring> jfilename = ConvertUTF8ToJavaString(
272 env, item->GetTargetFilePath().BaseName().value());
273 ScopedJavaLocalRef<jstring> joriginal_url =
274 ConvertUTF8ToJavaString(env, item->GetOriginalUrl().spec());
275 ScopedJavaLocalRef<jstring> jreferrer_url =
276 ConvertUTF8ToJavaString(env, item->GetReferrerUrl().spec());
277
278 ui::PageTransition base_transition =
279 ui::PageTransitionStripQualifier(item->GetTransitionType());
280 bool user_initiated =
281 item->GetTransitionType() & ui::PAGE_TRANSITION_FROM_ADDRESS_BAR ||
282 base_transition == ui::PAGE_TRANSITION_TYPED ||
283 base_transition == ui::PAGE_TRANSITION_AUTO_BOOKMARK ||
284 base_transition == ui::PAGE_TRANSITION_GENERATED ||
285 base_transition == ui::PAGE_TRANSITION_RELOAD ||
286 base_transition == ui::PAGE_TRANSITION_KEYWORD;
287 bool hasUserGesture = item->HasUserGesture() || user_initiated;
288 switch (item->GetState()) { 265 switch (item->GetState()) {
289 case DownloadItem::IN_PROGRESS: { 266 case DownloadItem::IN_PROGRESS: {
290 base::TimeDelta time_delta;
291 item->TimeRemaining(&time_delta);
292 Java_DownloadController_onDownloadUpdated( 267 Java_DownloadController_onDownloadUpdated(
293 env, GetJavaObject()->Controller(env), jurl, jmime_type, jfilename, 268 env, GetJavaObject()->Controller(env), j_item);
294 jpath, item->GetReceivedBytes(), jguid, item->PercentComplete(),
295 time_delta.InMilliseconds(), hasUserGesture, item->IsPaused(),
296 item->GetBrowserContext()->IsOffTheRecord());
297 break; 269 break;
298 } 270 }
299 case DownloadItem::COMPLETE: 271 case DownloadItem::COMPLETE:
300 // Multiple OnDownloadUpdated() notifications may be issued while the 272 // Multiple OnDownloadUpdated() notifications may be issued while the
301 // download is in the COMPLETE state. Only handle one. 273 // download is in the COMPLETE state. Only handle one.
302 item->RemoveObserver(this); 274 item->RemoveObserver(this);
303 275
304 // Call onDownloadCompleted 276 // Call onDownloadCompleted
305 Java_DownloadController_onDownloadCompleted( 277 Java_DownloadController_onDownloadCompleted(
306 env, GetJavaObject()->Controller(env), jurl, jmime_type, jfilename, 278 env, GetJavaObject()->Controller(env), j_item);
307 jpath, item->GetReceivedBytes(), jguid, joriginal_url, jreferrer_url,
308 hasUserGesture);
309 DownloadController::RecordDownloadCancelReason( 279 DownloadController::RecordDownloadCancelReason(
310 DownloadController::CANCEL_REASON_NOT_CANCELED); 280 DownloadController::CANCEL_REASON_NOT_CANCELED);
311 break; 281 break;
312 case DownloadItem::CANCELLED: 282 case DownloadItem::CANCELLED:
313 Java_DownloadController_onDownloadCancelled( 283 Java_DownloadController_onDownloadCancelled(
314 env, GetJavaObject()->Controller(env), jguid); 284 env, GetJavaObject()->Controller(env), j_item);
315 DownloadController::RecordDownloadCancelReason( 285 DownloadController::RecordDownloadCancelReason(
316 DownloadController::CANCEL_REASON_OTHER_NATIVE_RESONS); 286 DownloadController::CANCEL_REASON_OTHER_NATIVE_RESONS);
317 break; 287 break;
318 case DownloadItem::INTERRUPTED: 288 case DownloadItem::INTERRUPTED:
319 // When device loses/changes network, we get a NETWORK_TIMEOUT, 289 // When device loses/changes network, we get a NETWORK_TIMEOUT,
320 // NETWORK_FAILED or NETWORK_DISCONNECTED error. Download should auto 290 // NETWORK_FAILED or NETWORK_DISCONNECTED error. Download should auto
321 // resume in this case. 291 // resume in this case.
322 Java_DownloadController_onDownloadInterrupted( 292 Java_DownloadController_onDownloadInterrupted(
323 env, GetJavaObject()->Controller(env), jurl, jmime_type, jfilename, 293 env, GetJavaObject()->Controller(env), j_item,
324 jpath, item->GetReceivedBytes(), jguid, item->CanResume(), 294 IsInterruptedDownloadAutoResumable(item));
325 IsInterruptedDownloadAutoResumable(item),
326 item->GetBrowserContext()->IsOffTheRecord());
327 item->RemoveObserver(this); 295 item->RemoveObserver(this);
328 break; 296 break;
329 case DownloadItem::MAX_DOWNLOAD_STATE: 297 case DownloadItem::MAX_DOWNLOAD_STATE:
330 NOTREACHED(); 298 NOTREACHED();
331 } 299 }
332 } 300 }
333 301
334 void DownloadController::OnDangerousDownload(DownloadItem* item) { 302 void DownloadController::OnDangerousDownload(DownloadItem* item) {
335 WebContents* web_contents = item->GetWebContents(); 303 WebContents* web_contents = item->GetWebContents();
336 if (!web_contents) { 304 if (!web_contents) {
(...skipping 22 matching lines...) Expand all
359 void DownloadController::StartContextMenuDownload( 327 void DownloadController::StartContextMenuDownload(
360 const ContextMenuParams& params, WebContents* web_contents, bool is_link, 328 const ContextMenuParams& params, WebContents* web_contents, bool is_link,
361 const std::string& extra_headers) { 329 const std::string& extra_headers) {
362 int process_id = web_contents->GetRenderProcessHost()->GetID(); 330 int process_id = web_contents->GetRenderProcessHost()->GetID();
363 int routing_id = web_contents->GetRoutingID(); 331 int routing_id = web_contents->GetRoutingID();
364 AcquireFileAccessPermission( 332 AcquireFileAccessPermission(
365 web_contents, base::Bind(&CreateContextMenuDownload, process_id, 333 web_contents, base::Bind(&CreateContextMenuDownload, process_id,
366 routing_id, params, is_link, extra_headers)); 334 routing_id, params, is_link, extra_headers));
367 } 335 }
368 336
OLDNEW
« no previous file with comments | « chrome/browser/BUILD.gn ('k') | chrome/browser/android/download/download_manager_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698