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 #ifndef CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_FILE_IMPL_H_ | 5 #ifndef CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_FILE_IMPL_H_ |
6 #define CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_FILE_IMPL_H_ | 6 #define CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_FILE_IMPL_H_ |
7 | 7 |
8 #include "content/browser/download/download_file.h" | 8 #include "content/browser/download/download_file.h" |
9 | 9 |
10 #include <stddef.h> | 10 #include <stddef.h> |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
42 // | 42 // |
43 // Note that the DownloadFileImpl automatically reads from the passed in | 43 // Note that the DownloadFileImpl automatically reads from the passed in |
44 // stream, and sends updates and status of those reads to the | 44 // stream, and sends updates and status of those reads to the |
45 // DownloadDestinationObserver. | 45 // DownloadDestinationObserver. |
46 DownloadFileImpl( | 46 DownloadFileImpl( |
47 std::unique_ptr<DownloadSaveInfo> save_info, | 47 std::unique_ptr<DownloadSaveInfo> save_info, |
48 const base::FilePath& default_downloads_directory, | 48 const base::FilePath& default_downloads_directory, |
49 std::unique_ptr<ByteStreamReader> stream_reader, | 49 std::unique_ptr<ByteStreamReader> stream_reader, |
50 const std::vector<DownloadItem::ReceivedSlice>& received_slices, | 50 const std::vector<DownloadItem::ReceivedSlice>& received_slices, |
51 const net::NetLogWithSource& net_log, | 51 const net::NetLogWithSource& net_log, |
52 bool is_sparse_file, | |
53 base::WeakPtr<DownloadDestinationObserver> observer); | 52 base::WeakPtr<DownloadDestinationObserver> observer); |
54 | 53 |
55 ~DownloadFileImpl() override; | 54 ~DownloadFileImpl() override; |
56 | 55 |
57 // DownloadFile functions. | 56 // DownloadFile functions. |
58 void Initialize(const InitializeCallback& callback) override; | 57 void Initialize(const InitializeCallback& callback) override; |
59 | 58 |
60 void AddByteStream(std::unique_ptr<ByteStreamReader> stream_reader, | 59 void AddByteStream(std::unique_ptr<ByteStreamReader> stream_reader, |
61 int64_t offset, | 60 int64_t offset, |
62 int64_t length) override; | 61 int64_t length) override; |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
215 | 214 |
216 // Return the total valid bytes received in the target file. | 215 // Return the total valid bytes received in the target file. |
217 // If the file is a sparse file, return the total number of valid bytes. | 216 // If the file is a sparse file, return the total number of valid bytes. |
218 // Otherwise, return the current file size. | 217 // Otherwise, return the current file size. |
219 int64_t TotalBytesReceived() const; | 218 int64_t TotalBytesReceived() const; |
220 | 219 |
221 // Helper method to handle stream error | 220 // Helper method to handle stream error |
222 void HandleStreamError(SourceStream* source_stream, | 221 void HandleStreamError(SourceStream* source_stream, |
223 DownloadInterruptReason reason); | 222 DownloadInterruptReason reason); |
224 | 223 |
| 224 // Check whether this file is potentially sparse. |
| 225 bool IsSparseFile() const; |
| 226 |
225 // Given a SourceStream object, returns its neighbor that preceds it if | 227 // Given a SourceStream object, returns its neighbor that preceds it if |
226 // SourceStreams are ordered by their offsets | 228 // SourceStreams are ordered by their offsets |
227 SourceStream* FindPrecedingNeighbor(SourceStream* source_stream); | 229 SourceStream* FindPrecedingNeighbor(SourceStream* source_stream); |
228 | 230 |
229 // Print the internal states for debugging. | 231 // Print the internal states for debugging. |
230 void DebugStates() const; | 232 void DebugStates() const; |
231 | 233 |
232 net::NetLogWithSource net_log_; | 234 net::NetLogWithSource net_log_; |
233 | 235 |
234 // The base file instance. | 236 // The base file instance. |
235 BaseFile file_; | 237 BaseFile file_; |
236 | 238 |
237 // DownloadSaveInfo provided during construction. Since the DownloadFileImpl | 239 // DownloadSaveInfo provided during construction. Since the DownloadFileImpl |
238 // can be created on any thread, this holds the save_info_ until it can be | 240 // can be created on any thread, this holds the save_info_ until it can be |
239 // used to initialize file_ on the FILE thread. | 241 // used to initialize file_ on the FILE thread. |
240 std::unique_ptr<DownloadSaveInfo> save_info_; | 242 std::unique_ptr<DownloadSaveInfo> save_info_; |
241 | 243 |
242 // The default directory for creating the download file. | 244 // The default directory for creating the download file. |
243 base::FilePath default_download_directory_; | 245 base::FilePath default_download_directory_; |
244 | 246 |
245 // Map of the offset and the source stream that represents the slice | 247 // Map of the offset and the source stream that represents the slice |
246 // starting from offset. | 248 // starting from offset. |
247 SourceStreams source_streams_; | 249 SourceStreams source_streams_; |
248 | 250 |
249 // Used to trigger progress updates. | 251 // Used to trigger progress updates. |
250 std::unique_ptr<base::RepeatingTimer> update_timer_; | 252 std::unique_ptr<base::RepeatingTimer> update_timer_; |
251 | 253 |
252 // Set to true when multiple byte streams write to the same file. | |
253 // The file may contain null bytes(holes) in between of valid data slices. | |
254 // TODO(xingliu): Remove this variable. We can use size of |received_slices_| | |
255 // to determine if the file is sparse | |
256 bool is_sparse_file_; | |
257 | |
258 // Statistics | 254 // Statistics |
259 size_t bytes_seen_; | 255 size_t bytes_seen_; |
260 base::TimeDelta disk_writes_time_; | 256 base::TimeDelta disk_writes_time_; |
261 base::TimeTicks download_start_; | 257 base::TimeTicks download_start_; |
262 RateEstimator rate_estimator_; | 258 RateEstimator rate_estimator_; |
263 int num_active_streams_; | 259 int num_active_streams_; |
264 bool record_stream_bandwidth_; | 260 bool record_stream_bandwidth_; |
265 base::TimeTicks last_update_time_; | 261 base::TimeTicks last_update_time_; |
266 size_t bytes_seen_with_parallel_streams_; | 262 size_t bytes_seen_with_parallel_streams_; |
267 size_t bytes_seen_without_parallel_streams_; | 263 size_t bytes_seen_without_parallel_streams_; |
268 base::TimeDelta download_time_with_parallel_streams_; | 264 base::TimeDelta download_time_with_parallel_streams_; |
269 base::TimeDelta download_time_without_parallel_streams_; | 265 base::TimeDelta download_time_without_parallel_streams_; |
270 | 266 |
271 std::vector<DownloadItem::ReceivedSlice> received_slices_; | 267 std::vector<DownloadItem::ReceivedSlice> received_slices_; |
272 | 268 |
273 base::WeakPtr<DownloadDestinationObserver> observer_; | 269 base::WeakPtr<DownloadDestinationObserver> observer_; |
274 base::WeakPtrFactory<DownloadFileImpl> weak_factory_; | 270 base::WeakPtrFactory<DownloadFileImpl> weak_factory_; |
275 | 271 |
276 DISALLOW_COPY_AND_ASSIGN(DownloadFileImpl); | 272 DISALLOW_COPY_AND_ASSIGN(DownloadFileImpl); |
277 }; | 273 }; |
278 | 274 |
279 } // namespace content | 275 } // namespace content |
280 | 276 |
281 #endif // CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_FILE_IMPL_H_ | 277 #endif // CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_FILE_IMPL_H_ |
OLD | NEW |