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

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

Issue 19004: Change URLRequest to use a ref-counted buffer for actual IO.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 11 months 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_throttling_resource_handler.h" 5 #include "chrome/browser/renderer_host/download_throttling_resource_handler.h"
6 6
7 #include "chrome/browser/renderer_host/download_resource_handler.h" 7 #include "chrome/browser/renderer_host/download_resource_handler.h"
8 #include "net/base/io_buffer.h"
8 9
9 DownloadThrottlingResourceHandler::DownloadThrottlingResourceHandler( 10 DownloadThrottlingResourceHandler::DownloadThrottlingResourceHandler(
10 ResourceDispatcherHost* host, 11 ResourceDispatcherHost* host,
11 URLRequest* request, 12 URLRequest* request,
12 const std::string& url, 13 const std::string& url,
13 int render_process_host_id, 14 int render_process_host_id,
14 int render_view_id, 15 int render_view_id,
15 int request_id, 16 int request_id,
16 bool in_complete) 17 bool in_complete)
17 : host_(host), 18 : host_(host),
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 bool DownloadThrottlingResourceHandler::OnResponseStarted( 51 bool DownloadThrottlingResourceHandler::OnResponseStarted(
51 int request_id, 52 int request_id,
52 ResourceResponse* response) { 53 ResourceResponse* response) {
53 if (download_handler_.get()) 54 if (download_handler_.get())
54 return download_handler_->OnResponseStarted(request_id, response); 55 return download_handler_->OnResponseStarted(request_id, response);
55 response_ = response; 56 response_ = response;
56 return true; 57 return true;
57 } 58 }
58 59
59 bool DownloadThrottlingResourceHandler::OnWillRead(int request_id, 60 bool DownloadThrottlingResourceHandler::OnWillRead(int request_id,
60 char** buf, 61 net::IOBuffer** buf,
61 int* buf_size, 62 int* buf_size,
62 int min_size) { 63 int min_size) {
63 if (download_handler_.get()) 64 if (download_handler_.get())
64 return download_handler_->OnWillRead(request_id, buf, buf_size, min_size); 65 return download_handler_->OnWillRead(request_id, buf, buf_size, min_size);
65 66
66 // We should only have this invoked once, as such we only deal with one 67 // We should only have this invoked once, as such we only deal with one
67 // tmp buffer. 68 // tmp buffer.
68 DCHECK(!tmp_buffer_.get()); 69 DCHECK(!tmp_buffer_.get());
69 if (min_size < 0) 70 if (min_size < 0)
70 min_size = 1024; 71 min_size = 1024;
71 tmp_buffer_.reset(new char[min_size]); 72 tmp_buffer_ = new net::IOBuffer(min_size);
72 *buf = tmp_buffer_.get(); 73 *buf = tmp_buffer_.get();
73 *buf_size = min_size; 74 *buf_size = min_size;
74 return true; 75 return true;
75 } 76 }
76 77
77 bool DownloadThrottlingResourceHandler::OnReadCompleted(int request_id, 78 bool DownloadThrottlingResourceHandler::OnReadCompleted(int request_id,
78 int* bytes_read) { 79 int* bytes_read) {
79 if (ignore_on_read_complete_) { 80 if (ignore_on_read_complete_) {
80 // See comments above definition for details on this. 81 // See comments above definition for details on this.
81 ignore_on_read_complete_ = false; 82 ignore_on_read_complete_ = false;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 126
126 if (tmp_buffer_length_) 127 if (tmp_buffer_length_)
127 CopyTmpBufferToDownloadHandler(); 128 CopyTmpBufferToDownloadHandler();
128 129
129 // And let the request continue. 130 // And let the request continue.
130 host_->PauseRequest(render_process_host_id_, request_id_, false); 131 host_->PauseRequest(render_process_host_id_, request_id_, false);
131 } 132 }
132 133
133 void DownloadThrottlingResourceHandler::CopyTmpBufferToDownloadHandler() { 134 void DownloadThrottlingResourceHandler::CopyTmpBufferToDownloadHandler() {
134 // Copy over the tmp buffer. 135 // Copy over the tmp buffer.
135 char* buffer; 136 net::IOBuffer* buffer;
136 int buf_size; 137 int buf_size;
137 if (download_handler_->OnWillRead(request_id_, &buffer, &buf_size, 138 if (download_handler_->OnWillRead(request_id_, &buffer, &buf_size,
138 tmp_buffer_length_)) { 139 tmp_buffer_length_)) {
139 CHECK(buf_size >= tmp_buffer_length_); 140 CHECK(buf_size >= tmp_buffer_length_);
140 memcpy(buffer, tmp_buffer_.get(), tmp_buffer_length_); 141 memcpy(buffer->data(), tmp_buffer_->data(), tmp_buffer_length_);
141 download_handler_->OnReadCompleted(request_id_, &tmp_buffer_length_); 142 download_handler_->OnReadCompleted(request_id_, &tmp_buffer_length_);
142 } 143 }
143 tmp_buffer_length_ = 0; 144 tmp_buffer_length_ = 0;
144 tmp_buffer_.reset(); 145 tmp_buffer_ = NULL;
145 } 146 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698