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

Unified Diff: chrome/browser/renderer_host/buffered_resource_handler.cc

Issue 18390: 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/renderer_host/buffered_resource_handler.cc
===================================================================
--- chrome/browser/renderer_host/buffered_resource_handler.cc (revision 8565)
+++ chrome/browser/renderer_host/buffered_resource_handler.cc (working copy)
@@ -8,9 +8,13 @@
#include "net/base/mime_sniffer.h"
#include "chrome/browser/renderer_host/download_throttling_resource_handler.h"
#include "chrome/browser/renderer_host/resource_dispatcher_host.h"
+#include "net/base/mime_sniffer.h"
+#include "net/base/io_buffer.h"
namespace {
+const int kMaxBytesToSniff = 512;
+
void RecordSnifferMetrics(bool sniffing_blocked,
bool we_would_like_to_sniff,
const std::string& mime_type) {
@@ -71,13 +75,13 @@
// We'll let the original event handler provide a buffer, and reuse it for
// subsequent reads until we're done buffering.
-bool BufferedResourceHandler::OnWillRead(int request_id,
- char** buf, int* buf_size,
- int min_size) {
+bool BufferedResourceHandler::OnWillRead(int request_id, net::IOBuffer** buf,
+ int* buf_size, int min_size) {
if (buffering_) {
- *buf = read_buffer_ + bytes_read_;
- *buf_size = read_buffer_size_ - bytes_read_;
- DCHECK(*buf_size > 0);
+ DCHECK(!my_buffer_.get());
+ my_buffer_ = new net::IOBuffer(kMaxBytesToSniff);
+ *buf = my_buffer_.get();
+ *buf_size = kMaxBytesToSniff;
return true;
}
@@ -87,6 +91,7 @@
bool ret = real_handler_->OnWillRead(request_id, buf, buf_size, min_size);
read_buffer_ = *buf;
read_buffer_size_ = *buf_size;
+ DCHECK(read_buffer_size_ >= kMaxBytesToSniff * 2);
bytes_read_ = 0;
return ret;
}
@@ -168,6 +173,12 @@
bool BufferedResourceHandler::KeepBuffering(int bytes_read) {
DCHECK(read_buffer_);
+ if (my_buffer_) {
+ // We are using our own buffer to read, update the main buffer.
+ CHECK(bytes_read + bytes_read_ < read_buffer_size_);
+ memcpy(read_buffer_->data() + bytes_read_, my_buffer_->data(), bytes_read);
+ my_buffer_ = NULL;
+ }
bytes_read_ += bytes_read;
finished_ = (bytes_read == 0);
@@ -175,12 +186,12 @@
std::string type_hint, new_type;
request_->GetMimeType(&type_hint);
- if (!net::SniffMimeType(read_buffer_, bytes_read_, request_->url(),
- type_hint, &new_type)) {
+ if (!net::SniffMimeType(read_buffer_->data(), bytes_read_,
+ request_->url(), type_hint, &new_type)) {
// SniffMimeType() returns false if there is not enough data to determine
// the mime type. However, even if it returns false, it returns a new type
// that is probably better than the current one.
- DCHECK(bytes_read_ < 512 /*kMaxBytesToSniff*/);
+ DCHECK(bytes_read_ < kMaxBytesToSniff);
if (!finished_) {
buffering_ = true;
return true;
@@ -243,11 +254,11 @@
if (bytes_read_) {
// a Read has already occurred and we need to copy the data into the
// EventHandler.
- char *buf = NULL;
+ net::IOBuffer* buf = NULL;
int buf_len = 0;
download_handler->OnWillRead(request_id, &buf, &buf_len, bytes_read_);
CHECK((buf_len >= bytes_read_) && (bytes_read_ >= 0));
- memcpy(buf, read_buffer_, bytes_read_);
+ memcpy(buf->data(), read_buffer_->data(), bytes_read_);
}
// Update the renderer with the response headers which will cause it to
// cancel the request.
« no previous file with comments | « chrome/browser/renderer_host/buffered_resource_handler.h ('k') | chrome/browser/renderer_host/cross_site_resource_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698