Chromium Code Reviews| Index: content/browser/download/download_item_impl.cc |
| diff --git a/content/browser/download/download_item_impl.cc b/content/browser/download/download_item_impl.cc |
| index 42c0f778d27b1e9870778bf74eca8dff68291af1..eecd438d940d553e78edc3982ac21289d598b4bd 100644 |
| --- a/content/browser/download/download_item_impl.cc |
| +++ b/content/browser/download/download_item_impl.cc |
| @@ -504,9 +504,8 @@ bool DownloadItemImpl::CanResume() const { |
| if (state_ != INTERRUPTED_INTERNAL) |
| return false; |
| - // Downloads that don't have a WebContents should still be resumable, but this |
| - // isn't currently the case. See ResumeInterruptedDownload(). |
| - if (!GetWebContents()) |
| + // We currently only support HTTP(S) requests for download resumption. |
| + if (!GetURL().SchemeIsHTTPOrHTTPS()) |
| return false; |
| ResumeMode resume_mode = GetResumeMode(); |
| @@ -1693,13 +1692,6 @@ void DownloadItemImpl::ResumeInterruptedDownload() { |
| if (state_ != INTERRUPTED_INTERNAL) |
| return; |
| - // If we can't get a web contents, we can't resume the download. |
| - // TODO(rdsmith): Find some alternative web contents to use--this |
| - // means we can't restart a download if it's a download imported |
| - // from the history. |
| - if (!GetWebContents()) |
| - return; |
| - |
| // Reset the appropriate state if restarting. |
| ResumeMode mode = GetResumeMode(); |
| if (mode == RESUME_MODE_IMMEDIATE_RESTART || |
| @@ -1710,9 +1702,17 @@ void DownloadItemImpl::ResumeInterruptedDownload() { |
| etag_ = ""; |
| } |
| - scoped_ptr<DownloadUrlParameters> download_params( |
| - DownloadUrlParameters::FromWebContents(GetWebContents(), |
| - GetOriginalUrl())); |
| + scoped_ptr<DownloadUrlParameters> download_params; |
| + if (GetWebContents()) { |
| + download_params = DownloadUrlParameters::FromWebContents(GetWebContents(), |
| + GetOriginalUrl()); |
| + } else if (GetBrowserContext()) { |
|
asanka
2015/12/08 16:58:32
This condition must always be true. DownloadItem (
svaldez
2015/12/08 20:39:26
GetBrowserContext is null when doing unittesting.
|
| + download_params = make_scoped_ptr( |
| + new DownloadUrlParameters(GetOriginalUrl(), -1, -1, -1, |
| + GetBrowserContext()->GetResourceContext())); |
| + } else { |
| + return; |
| + } |
| download_params->set_file_path(GetFullPath()); |
| download_params->set_offset(GetReceivedBytes()); |