base_file.h revision 72a454cd3513ac24fbdd0e0cb9ad70b86a99b801
1// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_DOWNLOAD_BASE_FILE_H_ 6#define CHROME_BROWSER_DOWNLOAD_BASE_FILE_H_ 7#pragma once 8 9#include <string> 10 11#include "base/file_path.h" 12#include "base/linked_ptr.h" 13#include "base/scoped_ptr.h" 14#include "chrome/browser/power_save_blocker.h" 15#include "googleurl/src/gurl.h" 16 17namespace base { 18class SecureHash; 19} 20namespace net { 21class FileStream; 22} 23 24// File being downloaded and saved to disk. This is a base class 25// for DownloadFile and SaveFile, which keep more state information. 26class BaseFile { 27 public: 28 BaseFile(const FilePath& full_path, 29 const GURL& source_url, 30 const GURL& referrer_url, 31 int64 received_bytes, 32 const linked_ptr<net::FileStream>& file_stream); 33 ~BaseFile(); 34 35 // If calculate_hash is true, sha256 hash will be calculated. 36 bool Initialize(bool calculate_hash); 37 38 // Write a new chunk of data to the file. Returns true on success (all bytes 39 // written to the file). 40 bool AppendDataToFile(const char* data, size_t data_len); 41 42 // Rename the download file. Returns true on success. 43 // |path_renamed_| is set to true only if |is_final_rename| is true. 44 // Marked virtual for testing. 45 virtual bool Rename(const FilePath& full_path, bool is_final_rename); 46 47 // Abort the download and automatically close the file. 48 void Cancel(); 49 50 // Indicate that the download has finished. No new data will be received. 51 void Finish(); 52 53 // Informs the OS that this file came from the internet. 54 void AnnotateWithSourceInformation(); 55 56 FilePath full_path() const { return full_path_; } 57 bool path_renamed() const { return path_renamed_; } 58 bool in_progress() const { return file_stream_ != NULL; } 59 int64 bytes_so_far() const { return bytes_so_far_; } 60 61 // Set |hash| with sha256 digest for the file. 62 // Returns true if digest is successfully calculated. 63 virtual bool GetSha256Hash(std::string* hash); 64 65 virtual std::string DebugString() const; 66 67 protected: 68 bool Open(); 69 void Close(); 70 71 // Full path to the file including the file name. 72 FilePath full_path_; 73 74 // Whether the download is still using its initial temporary path. 75 bool path_renamed_; 76 77 private: 78 static const size_t kSha256HashLen = 32; 79 80 // Source URL for the file being downloaded. 81 GURL source_url_; 82 83 // The URL where the download was initiated. 84 GURL referrer_url_; 85 86 // OS file stream for writing 87 linked_ptr<net::FileStream> file_stream_; 88 89 // Amount of data received up so far, in bytes. 90 int64 bytes_so_far_; 91 92 // RAII handle to keep the system from sleeping while we're downloading. 93 PowerSaveBlocker power_save_blocker_; 94 95 // Indicates if sha256 hash should be calculated for the file. 96 bool calculate_hash_; 97 98 // Used to calculate sha256 hash for the file when calculate_hash_ 99 // is set. 100 scoped_ptr<base::SecureHash> secure_hash_; 101 102 unsigned char sha256_hash_[kSha256HashLen]; 103 104 DISALLOW_COPY_AND_ASSIGN(BaseFile); 105}; 106 107#endif // CHROME_BROWSER_DOWNLOAD_BASE_FILE_H_ 108