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

Side by Side Diff: chrome/browser/renderer_host/download_resource_handler.cc

Issue 342020: First of several patches to get rid of MessageLoop caching now that we have C... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 1 month 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) 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/download/download_file.h" 9 #include "chrome/browser/download/download_file.h"
9 #include "chrome/browser/download/download_manager.h" 10 #include "chrome/browser/download/download_manager.h"
10 #include "chrome/browser/renderer_host/resource_dispatcher_host.h" 11 #include "chrome/browser/renderer_host/resource_dispatcher_host.h"
11 #include "net/base/io_buffer.h" 12 #include "net/base/io_buffer.h"
12 #include "net/url_request/url_request_context.h" 13 #include "net/url_request/url_request_context.h"
13 14
14 DownloadResourceHandler::DownloadResourceHandler(ResourceDispatcherHost* rdh, 15 DownloadResourceHandler::DownloadResourceHandler(ResourceDispatcherHost* rdh,
15 int render_process_host_id, 16 int render_process_host_id,
16 int render_view_id, 17 int render_view_id,
17 int request_id, 18 int request_id,
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 info->state = DownloadItem::IN_PROGRESS; 63 info->state = DownloadItem::IN_PROGRESS;
63 info->download_id = download_id_; 64 info->download_id = download_id_;
64 info->child_id = global_id_.child_id; 65 info->child_id = global_id_.child_id;
65 info->render_view_id = render_view_id_; 66 info->render_view_id = render_view_id_;
66 info->request_id = global_id_.request_id; 67 info->request_id = global_id_.request_id;
67 info->content_disposition = content_disposition_; 68 info->content_disposition = content_disposition_;
68 info->mime_type = response->response_head.mime_type; 69 info->mime_type = response->response_head.mime_type;
69 info->save_as = save_as_; 70 info->save_as = save_as_;
70 info->is_dangerous = false; 71 info->is_dangerous = false;
71 info->referrer_charset = request_->context()->referrer_charset(); 72 info->referrer_charset = request_->context()->referrer_charset();
72 download_manager_->file_loop()->PostTask(FROM_HERE, 73 ChromeThread::PostTask(
73 NewRunnableMethod(download_manager_, 74 ChromeThread::FILE, FROM_HERE,
74 &DownloadFileManager::StartDownload, 75 NewRunnableMethod(
75 info)); 76 download_manager_, &DownloadFileManager::StartDownload, info));
76 return true; 77 return true;
77 } 78 }
78 79
79 // Create a new buffer, which will be handed to the download thread for file 80 // Create a new buffer, which will be handed to the download thread for file
80 // writing and deletion. 81 // writing and deletion.
81 bool DownloadResourceHandler::OnWillRead(int request_id, net::IOBuffer** buf, 82 bool DownloadResourceHandler::OnWillRead(int request_id, net::IOBuffer** buf,
82 int* buf_size, int min_size) { 83 int* buf_size, int min_size) {
83 DCHECK(buf && buf_size); 84 DCHECK(buf && buf_size);
84 if (!read_buffer_) { 85 if (!read_buffer_) {
85 *buf_size = min_size < 0 ? kReadBufSize : min_size; 86 *buf_size = min_size < 0 ? kReadBufSize : min_size;
(...skipping 11 matching lines...) Expand all
97 return true; 98 return true;
98 DCHECK(read_buffer_); 99 DCHECK(read_buffer_);
99 AutoLock auto_lock(buffer_->lock); 100 AutoLock auto_lock(buffer_->lock);
100 bool need_update = buffer_->contents.empty(); 101 bool need_update = buffer_->contents.empty();
101 102
102 // We are passing ownership of this buffer to the download file manager. 103 // We are passing ownership of this buffer to the download file manager.
103 net::IOBuffer* buffer = NULL; 104 net::IOBuffer* buffer = NULL;
104 read_buffer_.swap(&buffer); 105 read_buffer_.swap(&buffer);
105 buffer_->contents.push_back(std::make_pair(buffer, *bytes_read)); 106 buffer_->contents.push_back(std::make_pair(buffer, *bytes_read));
106 if (need_update) { 107 if (need_update) {
107 download_manager_->file_loop()->PostTask(FROM_HERE, 108 ChromeThread::PostTask(
109 ChromeThread::FILE, FROM_HERE,
108 NewRunnableMethod(download_manager_, 110 NewRunnableMethod(download_manager_,
109 &DownloadFileManager::UpdateDownload, 111 &DownloadFileManager::UpdateDownload,
110 download_id_, 112 download_id_,
111 buffer_)); 113 buffer_));
112 } 114 }
113 115
114 // We schedule a pause outside of the read loop if there is too much file 116 // We schedule a pause outside of the read loop if there is too much file
115 // writing work to do. 117 // writing work to do.
116 if (buffer_->contents.size() > kLoadsToWrite) 118 if (buffer_->contents.size() > kLoadsToWrite)
117 StartPauseTimer(); 119 StartPauseTimer();
118 120
119 return true; 121 return true;
120 } 122 }
121 123
122 bool DownloadResourceHandler::OnResponseCompleted( 124 bool DownloadResourceHandler::OnResponseCompleted(
123 int request_id, 125 int request_id,
124 const URLRequestStatus& status, 126 const URLRequestStatus& status,
125 const std::string& security_info) { 127 const std::string& security_info) {
126 download_manager_->file_loop()->PostTask(FROM_HERE, 128 ChromeThread::PostTask(
129 ChromeThread::FILE, FROM_HERE,
127 NewRunnableMethod(download_manager_, 130 NewRunnableMethod(download_manager_,
128 &DownloadFileManager::DownloadFinished, 131 &DownloadFileManager::DownloadFinished,
129 download_id_, 132 download_id_,
130 buffer_)); 133 buffer_));
131 read_buffer_ = NULL; 134 read_buffer_ = NULL;
132 135
133 // 'buffer_' is deleted by the DownloadFileManager. 136 // 'buffer_' is deleted by the DownloadFileManager.
134 buffer_ = NULL; 137 buffer_ = NULL;
135 return true; 138 return true;
136 } 139 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 should_pause); 173 should_pause);
171 is_paused_ = should_pause; 174 is_paused_ = should_pause;
172 } 175 }
173 } 176 }
174 177
175 void DownloadResourceHandler::StartPauseTimer() { 178 void DownloadResourceHandler::StartPauseTimer() {
176 if (!pause_timer_.IsRunning()) 179 if (!pause_timer_.IsRunning())
177 pause_timer_.Start(base::TimeDelta::FromMilliseconds(kThrottleTimeMs), this, 180 pause_timer_.Start(base::TimeDelta::FromMilliseconds(kThrottleTimeMs), this,
178 &DownloadResourceHandler::CheckWriteProgress); 181 &DownloadResourceHandler::CheckWriteProgress);
179 } 182 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698