| Index: chrome/browser/download/save_file.cc
|
| ===================================================================
|
| --- chrome/browser/download/save_file.cc (revision 2786)
|
| +++ chrome/browser/download/save_file.cc (working copy)
|
| @@ -4,12 +4,16 @@
|
|
|
| #include "chrome/browser/download/save_file.h"
|
|
|
| +#include "base/basictypes.h"
|
| #include "base/file_util.h"
|
| #include "base/logging.h"
|
| #include "base/path_service.h"
|
| +#include "base/string_util.h"
|
| #include "chrome/browser/download/save_types.h"
|
| +#if defined(OS_WIN)
|
| #include "chrome/common/win_util.h"
|
| #include "chrome/common/win_safe_util.h"
|
| +#endif
|
|
|
| SaveFile::SaveFile(const SaveFileCreateInfo* info)
|
| : info_(info),
|
| @@ -20,7 +24,7 @@
|
| DCHECK(info);
|
| DCHECK(info->path.empty());
|
| if (file_util::CreateTemporaryFileName(&full_path_))
|
| - Open(L"wb");
|
| + Open("wb");
|
| }
|
|
|
| SaveFile::~SaveFile() {
|
| @@ -30,7 +34,7 @@
|
| // Return false indicate that we got disk error, save file manager will tell
|
| // SavePackage this error, then SavePackage will call its Cancel() method to
|
| // cancel whole save job.
|
| -bool SaveFile::AppendDataToFile(const char* data, int data_len) {
|
| +bool SaveFile::AppendDataToFile(const char* data, size_t data_len) {
|
| if (file_) {
|
| if (data_len == fwrite(data, 1, data_len, file_)) {
|
| bytes_so_far_ += data_len;
|
| @@ -49,7 +53,7 @@
|
| // If this job has been canceled, and it has created file,
|
| // We need to delete this created file.
|
| if (!full_path_.empty()) {
|
| - DeleteFile(full_path_.c_str());
|
| + file_util::Delete(full_path_, false);
|
| }
|
| }
|
|
|
| @@ -60,19 +64,17 @@
|
| DCHECK(!path_renamed());
|
| // We cannot rename because rename will keep the same security descriptor
|
| // on the destination file. We want to recreate the security descriptor
|
| - // with the security that makes sense in the new path. If the last parameter
|
| - // is FALSE and the new file already exists, the function overwrites the
|
| - // existing file and succeeds.
|
| - if (!CopyFile(full_path_.c_str(), new_path.c_str(), FALSE))
|
| + // with the security that makes sense in the new path.
|
| + if (!file_util::CopyFile(full_path_, new_path))
|
| return false;
|
|
|
| - DeleteFile(full_path_.c_str());
|
| + file_util::Delete(full_path_, false);
|
|
|
| full_path_ = new_path;
|
| path_renamed_ = true;
|
|
|
| // Still in saving process, reopen the file.
|
| - if (in_progress_ && !Open(L"a+b"))
|
| + if (in_progress_ && !Open("a+b"))
|
| return false;
|
| return true;
|
| }
|
| @@ -84,20 +86,23 @@
|
|
|
| void SaveFile::Close() {
|
| if (file_) {
|
| - fclose(file_);
|
| + file_util::CloseFile(file_);
|
| file_ = NULL;
|
| }
|
| }
|
|
|
| -bool SaveFile::Open(const wchar_t* open_mode) {
|
| +bool SaveFile::Open(const char* open_mode) {
|
| DCHECK(!full_path_.empty());
|
| - if (_wfopen_s(&file_, full_path_.c_str(), open_mode)) {
|
| - file_ = NULL;
|
| + file_ = file_util::OpenFile(full_path_, open_mode);
|
| + if (!file_) {
|
| return false;
|
| }
|
| +#if defined(OS_WIN)
|
| // Sets the zone to tell Windows that this file comes from the Internet.
|
| // We ignore the return value because a failure is not fatal.
|
| + // TODO(port): Similarly mark on Mac.
|
| win_util::SetInternetZoneIdentifier(full_path_);
|
| +#endif
|
| return true;
|
| }
|
|
|
|
|