| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 <Windows.h> | 5 #include <Windows.h> |
| 6 #include <objbase.h> | 6 #include <objbase.h> |
| 7 | 7 |
| 8 #include "chrome/browser/download/download_file.h" | 8 #include "chrome/browser/download/download_file.h" |
| 9 | 9 |
| 10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
| 11 #include "base/path_service.h" | 11 #include "base/path_service.h" |
| 12 #include "base/scoped_ptr.h" | 12 #include "base/scoped_ptr.h" |
| 13 #include "base/string_util.h" | 13 #include "base/string_util.h" |
| 14 #include "base/task.h" | 14 #include "base/task.h" |
| 15 #include "chrome/browser/browser_process.h" | 15 #include "chrome/browser/browser_process.h" |
| 16 #include "chrome/browser/download/download_manager.h" | 16 #include "chrome/browser/download/download_manager.h" |
| 17 #include "chrome/browser/profile.h" | 17 #include "chrome/browser/profile.h" |
| 18 #include "chrome/browser/renderer_host/resource_dispatcher_host.h" | 18 #include "chrome/browser/renderer_host/resource_dispatcher_host.h" |
| 19 #include "chrome/browser/tab_contents/tab_util.h" | 19 #include "chrome/browser/tab_contents/tab_util.h" |
| 20 #include "chrome/browser/tab_contents/web_contents.h" | 20 #include "chrome/browser/tab_contents/web_contents.h" |
| 21 #include "chrome/common/chrome_paths.h" | 21 #include "chrome/common/chrome_paths.h" |
| 22 #include "chrome/common/stl_util-inl.h" | 22 #include "chrome/common/stl_util-inl.h" |
| 23 #include "chrome/common/win_util.h" | 23 #include "chrome/common/win_util.h" |
| 24 #include "chrome/common/win_safe_util.h" | 24 #include "chrome/common/win_safe_util.h" |
| 25 #include "googleurl/src/gurl.h" | 25 #include "googleurl/src/gurl.h" |
| 26 #include "net/base/io_buffer.h" |
| 26 #include "net/base/net_util.h" | 27 #include "net/base/net_util.h" |
| 27 #include "net/url_request/url_request_context.h" | 28 #include "net/url_request/url_request_context.h" |
| 28 | 29 |
| 29 using base::TimeDelta; | 30 using base::TimeDelta; |
| 30 | 31 |
| 31 // Throttle updates to the UI thread so that a fast moving download doesn't | 32 // Throttle updates to the UI thread so that a fast moving download doesn't |
| 32 // cause it to become unresponsive (ins milliseconds). | 33 // cause it to become unresponsive (ins milliseconds). |
| 33 static const int kUpdatePeriodMs = 500; | 34 static const int kUpdatePeriodMs = 500; |
| 34 | 35 |
| 35 // Timer task for posting UI updates. This task is created and maintained by | 36 // Timer task for posting UI updates. This task is created and maintained by |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 258 void DownloadFileManager::UpdateDownload(int id, DownloadBuffer* buffer) { | 259 void DownloadFileManager::UpdateDownload(int id, DownloadBuffer* buffer) { |
| 259 DCHECK(MessageLoop::current() == file_loop_); | 260 DCHECK(MessageLoop::current() == file_loop_); |
| 260 std::vector<DownloadBuffer::Contents> contents; | 261 std::vector<DownloadBuffer::Contents> contents; |
| 261 { | 262 { |
| 262 AutoLock auto_lock(buffer->lock); | 263 AutoLock auto_lock(buffer->lock); |
| 263 contents.swap(buffer->contents); | 264 contents.swap(buffer->contents); |
| 264 } | 265 } |
| 265 | 266 |
| 266 DownloadFile* download = LookupDownload(id); | 267 DownloadFile* download = LookupDownload(id); |
| 267 for (size_t i = 0; i < contents.size(); ++i) { | 268 for (size_t i = 0; i < contents.size(); ++i) { |
| 268 char* data = contents[i].first; | 269 net::IOBuffer* data = contents[i].first; |
| 269 const int data_len = contents[i].second; | 270 const int data_len = contents[i].second; |
| 270 if (download) | 271 if (download) |
| 271 download->AppendDataToFile(data, data_len); | 272 download->AppendDataToFile(data->data(), data_len); |
| 272 delete [] data; | 273 data->Release(); |
| 273 } | 274 } |
| 274 | 275 |
| 275 if (download) { | 276 if (download) { |
| 276 AutoLock lock(progress_lock_); | 277 AutoLock lock(progress_lock_); |
| 277 ui_progress_[download->id()] = download->bytes_so_far(); | 278 ui_progress_[download->id()] = download->bytes_so_far(); |
| 278 } | 279 } |
| 279 } | 280 } |
| 280 | 281 |
| 281 void DownloadFileManager::DownloadFinished(int id, DownloadBuffer* buffer) { | 282 void DownloadFileManager::DownloadFinished(int id, DownloadBuffer* buffer) { |
| 282 DCHECK(MessageLoop::current() == file_loop_); | 283 DCHECK(MessageLoop::current() == file_loop_); |
| (...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 572 ui_loop_->PostTask(FROM_HERE, NewRunnableMethod( | 573 ui_loop_->PostTask(FROM_HERE, NewRunnableMethod( |
| 573 this, &DownloadFileManager::StopUpdateTimer)); | 574 this, &DownloadFileManager::StopUpdateTimer)); |
| 574 } | 575 } |
| 575 | 576 |
| 576 // static | 577 // static |
| 577 void DownloadFileManager::DeleteFile(const FilePath& path) { | 578 void DownloadFileManager::DeleteFile(const FilePath& path) { |
| 578 // Make sure we only delete files. | 579 // Make sure we only delete files. |
| 579 if (!file_util::DirectoryExists(path)) | 580 if (!file_util::DirectoryExists(path)) |
| 580 file_util::Delete(path, false); | 581 file_util::Delete(path, false); |
| 581 } | 582 } |
| OLD | NEW |