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

Side by Side Diff: content/browser/download/base_file.cc

Issue 10915180: Make DownloadHistory observe manager, items (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 3 months 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 | Annotate | Revision Log
OLDNEW
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/file_util.h" 8 #include "base/file_util.h"
9 #include "base/format_macros.h" 9 #include "base/format_macros.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 return LOG_ERROR("unable to create", net::ERR_FILE_NOT_FOUND); 258 return LOG_ERROR("unable to create", net::ERR_FILE_NOT_FOUND);
259 } 259 }
260 full_path_ = temp_file; 260 full_path_ = temp_file;
261 } 261 }
262 262
263 return Open(); 263 return Open();
264 } 264 }
265 265
266 net::Error BaseFile::AppendDataToFile(const char* data, size_t data_len) { 266 net::Error BaseFile::AppendDataToFile(const char* data, size_t data_len) {
267 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 267 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
268 DCHECK(!detached_); 268 if (detached_) return net::ERR_INVALID_HANDLE;
Randy Smith (Not in Mondays) 2012/09/11 18:36:53 You didn't respond on the other CL, so I'll ask ag
benjhayden 2012/09/13 15:18:16 I had found a race that meant that there might be
269 269
270 // NOTE(benwells): The above DCHECK won't be present in release builds, 270 // NOTE(benwells): The above DCHECK won't be present in release builds,
271 // so we log any occurences to see how common this error is in the wild. 271 // so we log any occurences to see how common this error is in the wild.
272 if (detached_) { 272 if (detached_) {
273 download_stats::RecordDownloadCount( 273 download_stats::RecordDownloadCount(
274 download_stats::APPEND_TO_DETACHED_FILE_COUNT); 274 download_stats::APPEND_TO_DETACHED_FILE_COUNT);
275 } 275 }
276 276
277 if (!file_stream_.get()) 277 if (!file_stream_.get())
278 return LOG_ERROR("get", net::ERR_INVALID_HANDLE); 278 return LOG_ERROR("get", net::ERR_INVALID_HANDLE);
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 return Open(); 395 return Open();
396 } 396 }
397 397
398 void BaseFile::Detach() { 398 void BaseFile::Detach() {
399 detached_ = true; 399 detached_ = true;
400 bound_net_log_.AddEvent(net::NetLog::TYPE_DOWNLOAD_FILE_DETACHED); 400 bound_net_log_.AddEvent(net::NetLog::TYPE_DOWNLOAD_FILE_DETACHED);
401 } 401 }
402 402
403 void BaseFile::Cancel() { 403 void BaseFile::Cancel() {
404 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 404 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
405 DCHECK(!detached_); 405 if (detached_) return;
406 406
407 bound_net_log_.AddEvent(net::NetLog::TYPE_CANCELLED); 407 bound_net_log_.AddEvent(net::NetLog::TYPE_CANCELLED);
408 408
409 Close(); 409 Close();
410 410
411 if (!full_path_.empty()) { 411 if (!full_path_.empty()) {
412 bound_net_log_.AddEvent(net::NetLog::TYPE_DOWNLOAD_FILE_DELETED); 412 bound_net_log_.AddEvent(net::NetLog::TYPE_DOWNLOAD_FILE_DELETED);
413 413
414 file_util::Delete(full_path_, false); 414 file_util::Delete(full_path_, false);
415 } 415 }
416 } 416 }
417 417
418 void BaseFile::Finish() { 418 void BaseFile::Finish() {
419 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 419 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
420 420
421 if (calculate_hash_) 421 if (calculate_hash_)
422 secure_hash_->Finish(sha256_hash_, kSha256HashLen); 422 secure_hash_->Finish(sha256_hash_, kSha256HashLen);
423 423
424 Close(); 424 Close();
425 } 425 }
426 426
427 bool BaseFile::GetHash(std::string* hash) { 427 bool BaseFile::GetHash(std::string* hash) {
428 DCHECK(!detached_); 428 if (detached_) return false;
429 hash->assign(reinterpret_cast<const char*>(sha256_hash_), 429 hash->assign(reinterpret_cast<const char*>(sha256_hash_),
430 sizeof(sha256_hash_)); 430 sizeof(sha256_hash_));
431 return (calculate_hash_ && !in_progress()); 431 return (calculate_hash_ && !in_progress());
432 } 432 }
433 433
434 std::string BaseFile::GetHashState() { 434 std::string BaseFile::GetHashState() {
435 if (!calculate_hash_) 435 if (!calculate_hash_)
436 return ""; 436 return "";
437 437
438 Pickle hash_state; 438 Pickle hash_state;
(...skipping 14 matching lines...) Expand all
453 return secure_hash_->Deserialize(&data_iterator); 453 return secure_hash_->Deserialize(&data_iterator);
454 } 454 }
455 455
456 bool BaseFile::IsEmptyHash(const std::string& hash) { 456 bool BaseFile::IsEmptyHash(const std::string& hash) {
457 return (hash.size() == kSha256HashLen && 457 return (hash.size() == kSha256HashLen &&
458 0 == memcmp(hash.data(), kEmptySha256Hash, sizeof(kSha256HashLen))); 458 0 == memcmp(hash.data(), kEmptySha256Hash, sizeof(kSha256HashLen)));
459 } 459 }
460 460
461 void BaseFile::AnnotateWithSourceInformation() { 461 void BaseFile::AnnotateWithSourceInformation() {
462 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 462 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
463 DCHECK(!detached_); 463 if (detached_) return;
464 464
465 #if defined(OS_WIN) 465 #if defined(OS_WIN)
466 // Sets the Zone to tell Windows that this file comes from the internet. 466 // Sets the Zone to tell Windows that this file comes from the internet.
467 // We ignore the return value because a failure is not fatal. 467 // We ignore the return value because a failure is not fatal.
468 win_util::SetInternetZoneIdentifier(full_path_, 468 win_util::SetInternetZoneIdentifier(full_path_,
469 UTF8ToWide(source_url_.spec())); 469 UTF8ToWide(source_url_.spec()));
470 #elif defined(OS_MACOSX) 470 #elif defined(OS_MACOSX)
471 content::AddQuarantineMetadataToFile(full_path_, source_url_, referrer_url_); 471 content::AddQuarantineMetadataToFile(full_path_, source_url_, referrer_url_);
472 content::AddOriginMetadataToFile(full_path_, source_url_, referrer_url_); 472 content::AddOriginMetadataToFile(full_path_, source_url_, referrer_url_);
473 #elif defined(OS_LINUX) 473 #elif defined(OS_LINUX)
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
551 base::TimeDelta diff = current_time - start_tick_; 551 base::TimeDelta diff = current_time - start_tick_;
552 int64 diff_ms = diff.InMilliseconds(); 552 int64 diff_ms = diff.InMilliseconds();
553 return diff_ms == 0 ? 0 : bytes_so_far() * 1000 / diff_ms; 553 return diff_ms == 0 ? 0 : bytes_so_far() * 1000 / diff_ms;
554 } 554 }
555 555
556 int64 BaseFile::CurrentSpeed() const { 556 int64 BaseFile::CurrentSpeed() const {
557 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 557 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
558 return CurrentSpeedAtTime(base::TimeTicks::Now()); 558 return CurrentSpeedAtTime(base::TimeTicks::Now());
559 } 559 }
560 560
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698