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 "chrome/browser/renderer_host/download_resource_handler.h" | 5 #include "chrome/browser/renderer_host/download_resource_handler.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "chrome/browser/chrome_thread.h" | 8 #include "chrome/browser/chrome_thread.h" |
9 #include "chrome/browser/download/download_file.h" | 9 #include "chrome/browser/download/download_file.h" |
10 #include "chrome/browser/download/download_manager.h" | 10 #include "chrome/browser/download/download_manager.h" |
11 #include "chrome/browser/renderer_host/global_request_id.h" | 11 #include "chrome/browser/renderer_host/global_request_id.h" |
12 #include "chrome/browser/renderer_host/resource_dispatcher_host.h" | 12 #include "chrome/browser/renderer_host/resource_dispatcher_host.h" |
13 #include "net/base/io_buffer.h" | 13 #include "net/base/io_buffer.h" |
14 #include "net/url_request/url_request_context.h" | 14 #include "net/url_request/url_request_context.h" |
15 | 15 |
16 DownloadResourceHandler::DownloadResourceHandler(ResourceDispatcherHost* rdh, | 16 DownloadResourceHandler::DownloadResourceHandler(ResourceDispatcherHost* rdh, |
17 int render_process_host_id, | 17 int render_process_host_id, |
18 int render_view_id, | 18 int render_view_id, |
19 int request_id, | 19 int request_id, |
20 const GURL& url, | 20 const GURL& url, |
21 DownloadFileManager* manager, | 21 DownloadFileManager* manager, |
22 URLRequest* request, | 22 URLRequest* request, |
23 bool save_as) | 23 bool save_as, |
| 24 const FilePath& save_file_path) |
24 : download_id_(-1), | 25 : download_id_(-1), |
25 global_id_(render_process_host_id, request_id), | 26 global_id_(render_process_host_id, request_id), |
26 render_view_id_(render_view_id), | 27 render_view_id_(render_view_id), |
27 url_(url), | 28 url_(url), |
28 content_length_(0), | 29 content_length_(0), |
29 download_manager_(manager), | 30 download_manager_(manager), |
30 request_(request), | 31 request_(request), |
31 save_as_(save_as), | 32 save_as_(save_as), |
| 33 save_file_path_(save_file_path), |
32 buffer_(new DownloadBuffer), | 34 buffer_(new DownloadBuffer), |
33 rdh_(rdh), | 35 rdh_(rdh), |
34 is_paused_(false) { | 36 is_paused_(false) { |
35 } | 37 } |
36 | 38 |
37 // Not needed, as this event handler ought to be the final resource. | 39 // Not needed, as this event handler ought to be the final resource. |
38 bool DownloadResourceHandler::OnRequestRedirected(int request_id, | 40 bool DownloadResourceHandler::OnRequestRedirected(int request_id, |
39 const GURL& url, | 41 const GURL& url, |
40 ResourceResponse* response, | 42 ResourceResponse* response, |
41 bool* defer) { | 43 bool* defer) { |
(...skipping 18 matching lines...) Expand all Loading... |
60 info->start_time = base::Time::Now(); | 62 info->start_time = base::Time::Now(); |
61 info->received_bytes = 0; | 63 info->received_bytes = 0; |
62 info->total_bytes = content_length_; | 64 info->total_bytes = content_length_; |
63 info->state = DownloadItem::IN_PROGRESS; | 65 info->state = DownloadItem::IN_PROGRESS; |
64 info->download_id = download_id_; | 66 info->download_id = download_id_; |
65 info->child_id = global_id_.child_id; | 67 info->child_id = global_id_.child_id; |
66 info->render_view_id = render_view_id_; | 68 info->render_view_id = render_view_id_; |
67 info->request_id = global_id_.request_id; | 69 info->request_id = global_id_.request_id; |
68 info->content_disposition = content_disposition_; | 70 info->content_disposition = content_disposition_; |
69 info->mime_type = response->response_head.mime_type; | 71 info->mime_type = response->response_head.mime_type; |
70 info->save_as = save_as_; | 72 info->save_as = save_as_ && save_file_path_.empty(); |
71 info->is_dangerous = false; | 73 info->is_dangerous = false; |
72 info->referrer_charset = request_->context()->referrer_charset(); | 74 info->referrer_charset = request_->context()->referrer_charset(); |
| 75 info->save_file_path = save_file_path_; |
73 ChromeThread::PostTask( | 76 ChromeThread::PostTask( |
74 ChromeThread::FILE, FROM_HERE, | 77 ChromeThread::FILE, FROM_HERE, |
75 NewRunnableMethod( | 78 NewRunnableMethod( |
76 download_manager_, &DownloadFileManager::StartDownload, info)); | 79 download_manager_, &DownloadFileManager::StartDownload, info)); |
77 return true; | 80 return true; |
78 } | 81 } |
79 | 82 |
80 // Create a new buffer, which will be handed to the download thread for file | 83 // Create a new buffer, which will be handed to the download thread for file |
81 // writing and deletion. | 84 // writing and deletion. |
82 bool DownloadResourceHandler::OnWillRead(int request_id, net::IOBuffer** buf, | 85 bool DownloadResourceHandler::OnWillRead(int request_id, net::IOBuffer** buf, |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
173 should_pause); | 176 should_pause); |
174 is_paused_ = should_pause; | 177 is_paused_ = should_pause; |
175 } | 178 } |
176 } | 179 } |
177 | 180 |
178 void DownloadResourceHandler::StartPauseTimer() { | 181 void DownloadResourceHandler::StartPauseTimer() { |
179 if (!pause_timer_.IsRunning()) | 182 if (!pause_timer_.IsRunning()) |
180 pause_timer_.Start(base::TimeDelta::FromMilliseconds(kThrottleTimeMs), this, | 183 pause_timer_.Start(base::TimeDelta::FromMilliseconds(kThrottleTimeMs), this, |
181 &DownloadResourceHandler::CheckWriteProgress); | 184 &DownloadResourceHandler::CheckWriteProgress); |
182 } | 185 } |
OLD | NEW |