| OLD | NEW |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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/download/download_job.h" | 5 #include "content/browser/download/download_job.h" |
| 6 | 6 |
| 7 #include "base/bind_helpers.h" | 7 #include "base/bind_helpers.h" |
| 8 #include "content/browser/download/download_file.h" | 8 #include "content/browser/download/download_file.h" |
| 9 #include "content/browser/download/download_item_impl.h" | 9 #include "content/browser/download/download_item_impl.h" |
| 10 #include "content/public/browser/browser_thread.h" | 10 #include "content/public/browser/browser_thread.h" |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 | 26 |
| 27 void DownloadJob::StartDownload() const { | 27 void DownloadJob::StartDownload() const { |
| 28 download_item_->StartDownload(); | 28 download_item_->StartDownload(); |
| 29 } | 29 } |
| 30 | 30 |
| 31 void DownloadJob::Interrupt(DownloadInterruptReason reason) { | 31 void DownloadJob::Interrupt(DownloadInterruptReason reason) { |
| 32 download_item_->InterruptAndDiscardPartialState(reason); | 32 download_item_->InterruptAndDiscardPartialState(reason); |
| 33 download_item_->UpdateObservers(); | 33 download_item_->UpdateObservers(); |
| 34 } | 34 } |
| 35 | 35 |
| 36 void DownloadJob::AddByteStream(std::unique_ptr<ByteStreamReader> stream_reader, | 36 bool DownloadJob::AddByteStream(std::unique_ptr<ByteStreamReader> stream_reader, |
| 37 int64_t offset, | 37 int64_t offset, |
| 38 int64_t length) { | 38 int64_t length) { |
| 39 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 39 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 40 DownloadFile* download_file = download_item_->download_file_.get(); | 40 DownloadFile* download_file = download_item_->download_file_.get(); |
| 41 if (!download_file) { | 41 if (!download_file) |
| 42 // TODO(xingliu): Handle early and late incoming streams, see crbug/702683. | 42 return false; |
| 43 VLOG(1) << "Download file is released when byte stream arrived. Discard " | |
| 44 "the byte stream."; | |
| 45 return; | |
| 46 } | |
| 47 | 43 |
| 48 // download_file_ is owned by download_item_ on the UI thread and is always | 44 // download_file_ is owned by download_item_ on the UI thread and is always |
| 49 // deleted on the FILE thread after download_file_ is nulled out. | 45 // deleted on the FILE thread after download_file_ is nulled out. |
| 50 // So it's safe to use base::Unretained here. | 46 // So it's safe to use base::Unretained here. |
| 51 BrowserThread::PostTask( | 47 BrowserThread::PostTask( |
| 52 BrowserThread::FILE, FROM_HERE, | 48 BrowserThread::FILE, FROM_HERE, |
| 53 base::Bind(&DownloadFile::AddByteStream, base::Unretained(download_file), | 49 base::Bind(&DownloadFile::AddByteStream, base::Unretained(download_file), |
| 54 base::Passed(&stream_reader), offset, length)); | 50 base::Passed(&stream_reader), offset, length)); |
| 51 return true; |
| 55 } | 52 } |
| 56 | 53 |
| 57 bool DownloadJob::UsesParallelRequests() const { | 54 bool DownloadJob::UsesParallelRequests() const { |
| 58 return false; | 55 return false; |
| 59 } | 56 } |
| 60 | 57 |
| 61 } // namespace content | 58 } // namespace content |
| OLD | NEW |