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 #include "content/browser/download/base_file.h" | 5 #include "content/browser/download/base_file.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/files/file.h" | 8 #include "base/files/file.h" |
9 #include "base/files/file_util.h" | 9 #include "base/files/file_util.h" |
10 #include "base/format_macros.h" | 10 #include "base/format_macros.h" |
(...skipping 29 matching lines...) Expand all Loading... |
40 bytes_so_far_(received_bytes), | 40 bytes_so_far_(received_bytes), |
41 start_tick_(base::TimeTicks::Now()), | 41 start_tick_(base::TimeTicks::Now()), |
42 calculate_hash_(calculate_hash), | 42 calculate_hash_(calculate_hash), |
43 detached_(false), | 43 detached_(false), |
44 bound_net_log_(bound_net_log) { | 44 bound_net_log_(bound_net_log) { |
45 memcpy(sha256_hash_, kEmptySha256Hash, crypto::kSHA256Length); | 45 memcpy(sha256_hash_, kEmptySha256Hash, crypto::kSHA256Length); |
46 if (calculate_hash_) { | 46 if (calculate_hash_) { |
47 secure_hash_.reset(crypto::SecureHash::Create(crypto::SecureHash::SHA256)); | 47 secure_hash_.reset(crypto::SecureHash::Create(crypto::SecureHash::SHA256)); |
48 if ((bytes_so_far_ > 0) && // Not starting at the beginning. | 48 if ((bytes_so_far_ > 0) && // Not starting at the beginning. |
49 (!IsEmptyHash(hash_state_bytes))) { | 49 (!IsEmptyHash(hash_state_bytes))) { |
50 Pickle hash_state(hash_state_bytes.c_str(), hash_state_bytes.size()); | 50 base::Pickle hash_state(hash_state_bytes.c_str(), |
51 PickleIterator data_iterator(hash_state); | 51 hash_state_bytes.size()); |
| 52 base::PickleIterator data_iterator(hash_state); |
52 secure_hash_->Deserialize(&data_iterator); | 53 secure_hash_->Deserialize(&data_iterator); |
53 } | 54 } |
54 } | 55 } |
55 } | 56 } |
56 | 57 |
57 BaseFile::~BaseFile() { | 58 BaseFile::~BaseFile() { |
58 DCHECK_CURRENTLY_ON(BrowserThread::FILE); | 59 DCHECK_CURRENTLY_ON(BrowserThread::FILE); |
59 if (detached_) | 60 if (detached_) |
60 Close(); | 61 Close(); |
61 else | 62 else |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 DCHECK(!detached_); | 219 DCHECK(!detached_); |
219 hash->assign(reinterpret_cast<const char*>(sha256_hash_), | 220 hash->assign(reinterpret_cast<const char*>(sha256_hash_), |
220 sizeof(sha256_hash_)); | 221 sizeof(sha256_hash_)); |
221 return (calculate_hash_ && !in_progress()); | 222 return (calculate_hash_ && !in_progress()); |
222 } | 223 } |
223 | 224 |
224 std::string BaseFile::GetHashState() { | 225 std::string BaseFile::GetHashState() { |
225 if (!calculate_hash_) | 226 if (!calculate_hash_) |
226 return std::string(); | 227 return std::string(); |
227 | 228 |
228 Pickle hash_state; | 229 base::Pickle hash_state; |
229 if (!secure_hash_->Serialize(&hash_state)) | 230 if (!secure_hash_->Serialize(&hash_state)) |
230 return std::string(); | 231 return std::string(); |
231 | 232 |
232 return std::string(reinterpret_cast<const char*>(hash_state.data()), | 233 return std::string(reinterpret_cast<const char*>(hash_state.data()), |
233 hash_state.size()); | 234 hash_state.size()); |
234 } | 235 } |
235 | 236 |
236 // static | 237 // static |
237 bool BaseFile::IsEmptyHash(const std::string& hash) { | 238 bool BaseFile::IsEmptyHash(const std::string& hash) { |
238 return (hash.size() == crypto::kSHA256Length && | 239 return (hash.size() == crypto::kSHA256Length && |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
339 const char* operation, | 340 const char* operation, |
340 int os_error, | 341 int os_error, |
341 DownloadInterruptReason reason) { | 342 DownloadInterruptReason reason) { |
342 bound_net_log_.AddEvent( | 343 bound_net_log_.AddEvent( |
343 net::NetLog::TYPE_DOWNLOAD_FILE_ERROR, | 344 net::NetLog::TYPE_DOWNLOAD_FILE_ERROR, |
344 base::Bind(&FileInterruptedNetLogCallback, operation, os_error, reason)); | 345 base::Bind(&FileInterruptedNetLogCallback, operation, os_error, reason)); |
345 return reason; | 346 return reason; |
346 } | 347 } |
347 | 348 |
348 } // namespace content | 349 } // namespace content |
OLD | NEW |