summaryrefslogtreecommitdiffstats
path: root/content/browser
diff options
context:
space:
mode:
Diffstat (limited to 'content/browser')
-rw-r--r--content/browser/download/download_resource_handler.cc45
-rw-r--r--content/browser/download/download_resource_handler.h3
-rw-r--r--content/browser/download/save_file_resource_handler.cc9
-rw-r--r--content/browser/download/save_file_resource_handler.h2
-rw-r--r--content/browser/loader/async_resource_handler.cc85
-rw-r--r--content/browser/loader/async_resource_handler.h3
-rw-r--r--content/browser/loader/buffered_resource_handler.cc48
-rw-r--r--content/browser/loader/buffered_resource_handler.h3
-rw-r--r--content/browser/loader/certificate_resource_handler.cc8
-rw-r--r--content/browser/loader/certificate_resource_handler.h3
-rw-r--r--content/browser/loader/cross_site_resource_handler.cc24
-rw-r--r--content/browser/loader/cross_site_resource_handler.h1
-rw-r--r--content/browser/loader/layered_resource_handler.cc10
-rw-r--r--content/browser/loader/layered_resource_handler.h11
-rw-r--r--content/browser/loader/redirect_to_file_resource_handler.cc25
-rw-r--r--content/browser/loader/redirect_to_file_resource_handler.h3
-rw-r--r--content/browser/loader/resource_handler.cc19
-rw-r--r--content/browser/loader/resource_handler.h18
-rw-r--r--content/browser/loader/resource_loader.cc12
-rw-r--r--content/browser/loader/resource_loader_unittest.cc4
-rw-r--r--content/browser/loader/stream_resource_handler.cc4
-rw-r--r--content/browser/loader/stream_resource_handler.h3
-rw-r--r--content/browser/loader/sync_resource_handler.cc41
-rw-r--r--content/browser/loader/sync_resource_handler.h3
-rw-r--r--content/browser/loader/throttling_resource_handler.cc15
-rw-r--r--content/browser/loader/throttling_resource_handler.h2
26 files changed, 211 insertions, 193 deletions
diff --git a/content/browser/download/download_resource_handler.cc b/content/browser/download/download_resource_handler.cc
index 6fae0c7..fded1eb 100644
--- a/content/browser/download/download_resource_handler.cc
+++ b/content/browser/download/download_resource_handler.cc
@@ -74,9 +74,9 @@ DownloadResourceHandler::DownloadResourceHandler(
net::URLRequest* request,
const DownloadUrlParameters::OnStartedCallback& started_cb,
scoped_ptr<DownloadSaveInfo> save_info)
- : download_id_(id),
+ : ResourceHandler(request),
+ download_id_(id),
content_length_(0),
- request_(request),
started_cb_(started_cb),
save_info_(save_info.Pass()),
last_buffer_size_(0),
@@ -100,7 +100,7 @@ bool DownloadResourceHandler::OnRequestRedirected(
bool* defer) {
// We treat a download as a main frame load, and thus update the policy URL
// on redirects.
- request_->set_first_party_for_cookies(url);
+ request()->set_first_party_for_cookies(url);
return true;
}
@@ -119,25 +119,24 @@ bool DownloadResourceHandler::OnResponseStarted(
download_start_time_ = base::TimeTicks::Now();
// If it's a download, we don't want to poison the cache with it.
- request_->StopCaching();
+ request()->StopCaching();
// Lower priority as well, so downloads don't contend for resources
// with main frames.
- request_->SetPriority(net::IDLE);
+ request()->SetPriority(net::IDLE);
std::string content_disposition;
- request_->GetResponseHeaderByName("content-disposition",
- &content_disposition);
+ request()->GetResponseHeaderByName("content-disposition",
+ &content_disposition);
SetContentDisposition(content_disposition);
SetContentLength(response->head.content_length);
- const ResourceRequestInfoImpl* request_info =
- ResourceRequestInfoImpl::ForRequest(request_);
+ const ResourceRequestInfoImpl* request_info = GetRequestInfo();
// Deleted in DownloadManager.
scoped_ptr<DownloadCreateInfo> info(new DownloadCreateInfo(
base::Time::Now(), content_length_,
- request_->net_log(), request_info->HasUserGesture(),
+ request()->net_log(), request_info->HasUserGesture(),
request_info->GetPageTransition()));
// Create the ByteStream for sending data to the download sink.
@@ -150,14 +149,14 @@ bool DownloadResourceHandler::OnResponseStarted(
base::Bind(&DownloadResourceHandler::ResumeRequest, AsWeakPtr()));
info->download_id = download_id_;
- info->url_chain = request_->url_chain();
- info->referrer_url = GURL(request_->referrer());
+ info->url_chain = request()->url_chain();
+ info->referrer_url = GURL(request()->referrer());
info->start_time = base::Time::Now();
info->total_bytes = content_length_;
info->has_user_gesture = request_info->HasUserGesture();
info->content_disposition = content_disposition_;
info->mime_type = response->head.mime_type;
- info->remote_address = request_->GetSocketAddress().host();
+ info->remote_address = request()->GetSocketAddress().host();
RecordDownloadMimeType(info->mime_type);
RecordDownloadContentDisposition(info->content_disposition);
@@ -167,7 +166,7 @@ bool DownloadResourceHandler::OnResponseStarted(
request_info->GetRequestID());
// Get the last modified time and etag.
- const net::HttpResponseHeaders* headers = request_->response_headers();
+ const net::HttpResponseHeaders* headers = request()->response_headers();
if (headers) {
std::string last_modified_hdr;
if (headers->EnumerateHeader(NULL, "Last-Modified", &last_modified_hdr))
@@ -232,8 +231,10 @@ bool DownloadResourceHandler::OnWillStart(int request_id,
// Create a new buffer, which will be handed to the download thread for file
// writing and deletion.
-bool DownloadResourceHandler::OnWillRead(int request_id, net::IOBuffer** buf,
- int* buf_size, int min_size) {
+bool DownloadResourceHandler::OnWillRead(int request_id,
+ scoped_refptr<net::IOBuffer>* buf,
+ int* buf_size,
+ int min_size) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
DCHECK(buf && buf_size);
DCHECK(!read_buffer_.get());
@@ -291,7 +292,7 @@ bool DownloadResourceHandler::OnResponseCompleted(
const net::URLRequestStatus& status,
const std::string& security_info) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- int response_code = status.is_success() ? request_->GetResponseCode() : 0;
+ int response_code = status.is_success() ? request()->GetResponseCode() : 0;
VLOG(20) << __FUNCTION__ << "()" << DebugString()
<< " request_id = " << request_id
<< " status.status() = " << status.status()
@@ -335,7 +336,7 @@ bool DownloadResourceHandler::OnResponseCompleted(
if (status.is_success() &&
reason == DOWNLOAD_INTERRUPT_REASON_NONE &&
- request_->response_headers()) {
+ request()->response_headers()) {
// Handle server's response codes.
switch(response_code) {
case -1: // Non-HTTP request.
@@ -447,7 +448,7 @@ void DownloadResourceHandler::ResumeRequest() {
void DownloadResourceHandler::CancelRequest() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request_);
+ const ResourceRequestInfo* info = GetRequestInfo();
ResourceDispatcherHostImpl::Get()->CancelRequest(
info->GetChildID(),
info->GetRequestID(),
@@ -455,7 +456,7 @@ void DownloadResourceHandler::CancelRequest() {
}
std::string DownloadResourceHandler::DebugString() const {
- const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request_);
+ const ResourceRequestInfo* info = GetRequestInfo();
return base::StringPrintf("{"
" url_ = " "\"%s\""
" info = {"
@@ -464,8 +465,8 @@ std::string DownloadResourceHandler::DebugString() const {
" route_id = " "%d"
" }"
" }",
- request_ ?
- request_->url().spec().c_str() :
+ request() ?
+ request()->url().spec().c_str() :
"<NULL request>",
info->GetChildID(),
info->GetRequestID(),
diff --git a/content/browser/download/download_resource_handler.h b/content/browser/download/download_resource_handler.h
index ffbd92b..11982d7 100644
--- a/content/browser/download/download_resource_handler.h
+++ b/content/browser/download/download_resource_handler.h
@@ -67,7 +67,7 @@ class CONTENT_EXPORT DownloadResourceHandler
// Create a new buffer, which will be handed to the download thread for file
// writing and deletion.
virtual bool OnWillRead(int request_id,
- net::IOBuffer** buf,
+ scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) OVERRIDE;
@@ -105,7 +105,6 @@ class CONTENT_EXPORT DownloadResourceHandler
uint32 download_id_;
std::string content_disposition_;
int64 content_length_;
- net::URLRequest* request_;
// This is read only on the IO thread, but may only
// be called on the UI thread.
DownloadUrlParameters::OnStartedCallback started_cb_;
diff --git a/content/browser/download/save_file_resource_handler.cc b/content/browser/download/save_file_resource_handler.cc
index ee72e0b..b71be48 100644
--- a/content/browser/download/save_file_resource_handler.cc
+++ b/content/browser/download/save_file_resource_handler.cc
@@ -19,7 +19,8 @@ SaveFileResourceHandler::SaveFileResourceHandler(int render_process_host_id,
int render_view_id,
const GURL& url,
SaveFileManager* manager)
- : save_id_(-1),
+ : ResourceHandler(NULL),
+ save_id_(-1),
render_process_id_(render_process_host_id),
render_view_id_(render_view_id),
url_(url),
@@ -73,8 +74,10 @@ bool SaveFileResourceHandler::OnWillStart(int request_id,
return true;
}
-bool SaveFileResourceHandler::OnWillRead(int request_id, net::IOBuffer** buf,
- int* buf_size, int min_size) {
+bool SaveFileResourceHandler::OnWillRead(int request_id,
+ scoped_refptr<net::IOBuffer>* buf,
+ int* buf_size,
+ int min_size) {
DCHECK(buf && buf_size);
if (!read_buffer_.get()) {
*buf_size = min_size < 0 ? kReadBufSize : min_size;
diff --git a/content/browser/download/save_file_resource_handler.h b/content/browser/download/save_file_resource_handler.h
index 8dad4f8..5813d52 100644
--- a/content/browser/download/save_file_resource_handler.h
+++ b/content/browser/download/save_file_resource_handler.h
@@ -48,7 +48,7 @@ class SaveFileResourceHandler : public ResourceHandler {
// Creates a new buffer, which will be handed to the download thread for file
// writing and deletion.
virtual bool OnWillRead(int request_id,
- net::IOBuffer** buf,
+ scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) OVERRIDE;
diff --git a/content/browser/loader/async_resource_handler.cc b/content/browser/loader/async_resource_handler.cc
index f007a41..28447a5 100644
--- a/content/browser/loader/async_resource_handler.cc
+++ b/content/browser/loader/async_resource_handler.cc
@@ -79,8 +79,8 @@ class DependentIOBuffer : public net::WrappedIOBuffer {
AsyncResourceHandler::AsyncResourceHandler(
net::URLRequest* request,
ResourceDispatcherHostImpl* rdh)
- : ResourceMessageDelegate(request),
- request_(request),
+ : ResourceHandler(request),
+ ResourceMessageDelegate(request),
rdh_(rdh),
pending_data_count_(0),
allocation_size_(0),
@@ -93,7 +93,7 @@ AsyncResourceHandler::AsyncResourceHandler(
AsyncResourceHandler::~AsyncResourceHandler() {
if (has_checked_for_sufficient_resources_)
- rdh_->FinishedWithResourcesForRequest(request_);
+ rdh_->FinishedWithResourcesForRequest(request());
}
bool AsyncResourceHandler::OnMessageReceived(const IPC::Message& message,
@@ -111,13 +111,13 @@ void AsyncResourceHandler::OnFollowRedirect(
int request_id,
bool has_new_first_party_for_cookies,
const GURL& new_first_party_for_cookies) {
- if (!request_->status().is_success()) {
+ if (!request()->status().is_success()) {
DVLOG(1) << "OnFollowRedirect for invalid request";
return;
}
if (has_new_first_party_for_cookies)
- request_->set_first_party_for_cookies(new_first_party_for_cookies);
+ request()->set_first_party_for_cookies(new_first_party_for_cookies);
ResumeIfDeferred();
}
@@ -135,11 +135,10 @@ void AsyncResourceHandler::OnDataReceivedACK(int request_id) {
bool AsyncResourceHandler::OnUploadProgress(int request_id,
uint64 position,
uint64 size) {
- const ResourceRequestInfoImpl* info =
- ResourceRequestInfoImpl::ForRequest(request_);
- if (!info->filter())
+ ResourceMessageFilter* filter = GetFilter();
+ if (!filter)
return false;
- return info->filter()->Send(
+ return filter->Send(
new ResourceMsg_UploadProgress(request_id, position, size));
}
@@ -147,8 +146,7 @@ bool AsyncResourceHandler::OnRequestRedirected(int request_id,
const GURL& new_url,
ResourceResponse* response,
bool* defer) {
- const ResourceRequestInfoImpl* info =
- ResourceRequestInfoImpl::ForRequest(request_);
+ const ResourceRequestInfoImpl* info = GetRequestInfo();
if (!info->filter())
return false;
@@ -156,11 +154,11 @@ bool AsyncResourceHandler::OnRequestRedirected(int request_id,
if (rdh_->delegate()) {
rdh_->delegate()->OnRequestRedirected(
- new_url, request_, info->GetContext(), response);
+ new_url, request(), info->GetContext(), response);
}
- DevToolsNetLogObserver::PopulateResponseInfo(request_, response);
- response->head.request_start = request_->creation_time();
+ DevToolsNetLogObserver::PopulateResponseInfo(request(), response);
+ response->head.request_start = request()->creation_time();
response->head.response_start = TimeTicks::Now();
return info->filter()->Send(new ResourceMsg_ReceivedRedirect(
request_id, new_url, response->head));
@@ -175,23 +173,22 @@ bool AsyncResourceHandler::OnResponseStarted(int request_id,
// request commits, avoiding the possibility of e.g. zooming the old content
// or of having to layout the new content twice.
- const ResourceRequestInfoImpl* info =
- ResourceRequestInfoImpl::ForRequest(request_);
+ const ResourceRequestInfoImpl* info = GetRequestInfo();
if (!info->filter())
return false;
if (rdh_->delegate()) {
rdh_->delegate()->OnResponseStarted(
- request_, info->GetContext(), response, info->filter());
+ request(), info->GetContext(), response, info->filter());
}
- DevToolsNetLogObserver::PopulateResponseInfo(request_, response);
+ DevToolsNetLogObserver::PopulateResponseInfo(request(), response);
HostZoomMap* host_zoom_map =
GetHostZoomMapForResourceContext(info->GetContext());
if (info->GetResourceType() == ResourceType::MAIN_FRAME && host_zoom_map) {
- const GURL& request_url = request_->url();
+ const GURL& request_url = request()->url();
info->filter()->Send(new ViewMsg_SetZoomLevelForLoadingURL(
info->GetRouteID(),
request_url, host_zoom_map->GetZoomLevelForHostAndScheme(
@@ -199,16 +196,16 @@ bool AsyncResourceHandler::OnResponseStarted(int request_id,
net::GetHostOrSpecFromURL(request_url))));
}
- response->head.request_start = request_->creation_time();
+ response->head.request_start = request()->creation_time();
response->head.response_start = TimeTicks::Now();
info->filter()->Send(new ResourceMsg_ReceivedResponse(request_id,
response->head));
sent_received_response_msg_ = true;
- if (request_->response_info().metadata.get()) {
- std::vector<char> copy(request_->response_info().metadata->data(),
- request_->response_info().metadata->data() +
- request_->response_info().metadata->size());
+ if (request()->response_info().metadata.get()) {
+ std::vector<char> copy(request()->response_info().metadata->data(),
+ request()->response_info().metadata->data() +
+ request()->response_info().metadata->size());
info->filter()->Send(new ResourceMsg_ReceivedCachedMetadata(request_id,
copy));
}
@@ -222,8 +219,10 @@ bool AsyncResourceHandler::OnWillStart(int request_id,
return true;
}
-bool AsyncResourceHandler::OnWillRead(int request_id, net::IOBuffer** buf,
- int* buf_size, int min_size) {
+bool AsyncResourceHandler::OnWillRead(int request_id,
+ scoped_refptr<net::IOBuffer>* buf,
+ int* buf_size,
+ int min_size) {
DCHECK_EQ(-1, min_size);
if (!EnsureResourceBufferIsInitialized())
@@ -247,9 +246,8 @@ bool AsyncResourceHandler::OnReadCompleted(int request_id, int bytes_read,
if (!bytes_read)
return true;
- const ResourceRequestInfoImpl* info =
- ResourceRequestInfoImpl::ForRequest(request_);
- if (!info->filter())
+ ResourceMessageFilter* filter = GetFilter();
+ if (!filter)
return false;
buffer_->ShrinkLastAllocation(bytes_read);
@@ -264,18 +262,18 @@ bool AsyncResourceHandler::OnReadCompleted(int request_id, int bytes_read,
if (!sent_first_data_msg_) {
base::SharedMemoryHandle handle;
int size;
- if (!buffer_->ShareToProcess(info->filter()->PeerHandle(), &handle, &size))
+ if (!buffer_->ShareToProcess(filter->PeerHandle(), &handle, &size))
return false;
- info->filter()->Send(new ResourceMsg_SetDataBuffer(
- request_id, handle, size, info->filter()->peer_pid()));
+ filter->Send(new ResourceMsg_SetDataBuffer(
+ request_id, handle, size, filter->peer_pid()));
sent_first_data_msg_ = true;
}
int data_offset = buffer_->GetLastAllocationOffset();
int encoded_data_length =
- DevToolsNetLogObserver::GetAndResetEncodedDataLength(request_);
+ DevToolsNetLogObserver::GetAndResetEncodedDataLength(request());
- info->filter()->Send(new ResourceMsg_DataReceived(
+ filter->Send(new ResourceMsg_DataReceived(
request_id, data_offset, bytes_read, encoded_data_length));
++pending_data_count_;
UMA_HISTOGRAM_CUSTOM_COUNTS(
@@ -295,12 +293,11 @@ bool AsyncResourceHandler::OnReadCompleted(int request_id, int bytes_read,
void AsyncResourceHandler::OnDataDownloaded(
int request_id, int bytes_downloaded) {
int encoded_data_length =
- DevToolsNetLogObserver::GetAndResetEncodedDataLength(request_);
+ DevToolsNetLogObserver::GetAndResetEncodedDataLength(request());
- const ResourceRequestInfoImpl* info =
- ResourceRequestInfoImpl::ForRequest(request_);
- if (info->filter()) {
- info->filter()->Send(new ResourceMsg_DataDownloaded(
+ ResourceMessageFilter* filter = GetFilter();
+ if (filter) {
+ filter->Send(new ResourceMsg_DataDownloaded(
request_id, bytes_downloaded, encoded_data_length));
}
}
@@ -309,15 +306,14 @@ bool AsyncResourceHandler::OnResponseCompleted(
int request_id,
const net::URLRequestStatus& status,
const std::string& security_info) {
- const ResourceRequestInfoImpl* info =
- ResourceRequestInfoImpl::ForRequest(request_);
+ const ResourceRequestInfoImpl* info = GetRequestInfo();
if (!info->filter())
return false;
// If we crash here, figure out what URL the renderer was requesting.
// http://crbug.com/107692
char url_buf[128];
- base::strlcpy(url_buf, request_->url().spec().c_str(), arraysize(url_buf));
+ base::strlcpy(url_buf, request()->url().spec().c_str(), arraysize(url_buf));
base::debug::Alias(url_buf);
// TODO(gavinp): Remove this CHECK when we figure out the cause of
@@ -331,8 +327,7 @@ bool AsyncResourceHandler::OnResponseCompleted(
TimeTicks completion_time = TimeTicks::Now();
int error_code = status.error();
- bool was_ignored_by_handler =
- ResourceRequestInfoImpl::ForRequest(request_)->WasIgnoredByHandler();
+ bool was_ignored_by_handler = info->WasIgnoredByHandler();
DCHECK(status.status() != net::URLRequestStatus::IO_PENDING);
// If this check fails, then we're in an inconsistent state because all
@@ -365,7 +360,7 @@ bool AsyncResourceHandler::EnsureResourceBufferIsInitialized() {
if (!has_checked_for_sufficient_resources_) {
has_checked_for_sufficient_resources_ = true;
- if (!rdh_->HasSufficientResourcesForRequest(request_)) {
+ if (!rdh_->HasSufficientResourcesForRequest(request())) {
controller()->CancelWithError(net::ERR_INSUFFICIENT_RESOURCES);
return false;
}
diff --git a/content/browser/loader/async_resource_handler.h b/content/browser/loader/async_resource_handler.h
index 0992841..4d980d2 100644
--- a/content/browser/loader/async_resource_handler.h
+++ b/content/browser/loader/async_resource_handler.h
@@ -50,7 +50,7 @@ class AsyncResourceHandler : public ResourceHandler,
const GURL& url,
bool* defer) OVERRIDE;
virtual bool OnWillRead(int request_id,
- net::IOBuffer** buf,
+ scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) OVERRIDE;
virtual bool OnReadCompleted(int request_id,
@@ -73,7 +73,6 @@ class AsyncResourceHandler : public ResourceHandler,
void ResumeIfDeferred();
scoped_refptr<ResourceBuffer> buffer_;
- net::URLRequest* request_;
ResourceDispatcherHostImpl* rdh_;
// Number of messages we've sent to the renderer that we haven't gotten an
diff --git a/content/browser/loader/buffered_resource_handler.cc b/content/browser/loader/buffered_resource_handler.cc
index beb3228..0d7ad70 100644
--- a/content/browser/loader/buffered_resource_handler.cc
+++ b/content/browser/loader/buffered_resource_handler.cc
@@ -80,10 +80,9 @@ BufferedResourceHandler::BufferedResourceHandler(
scoped_ptr<ResourceHandler> next_handler,
ResourceDispatcherHostImpl* host,
net::URLRequest* request)
- : LayeredResourceHandler(next_handler.Pass()),
+ : LayeredResourceHandler(request, next_handler.Pass()),
state_(STATE_STARTING),
host_(host),
- request_(request),
read_buffer_size_(0),
bytes_read_(0),
must_download_(false),
@@ -147,8 +146,10 @@ bool BufferedResourceHandler::OnResponseStarted(
// 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, net::IOBuffer** buf,
- int* buf_size, int min_size) {
+bool BufferedResourceHandler::OnWillRead(int request_id,
+ scoped_refptr<net::IOBuffer>* buf,
+ int* buf_size,
+ int min_size) {
if (state_ == STATE_STREAMING)
return next_handler_->OnWillRead(request_id, buf, buf_size, min_size);
@@ -240,8 +241,7 @@ bool BufferedResourceHandler::ProcessResponse(bool* defer) {
state_ = STATE_REPLAYING;
- int request_id = ResourceRequestInfo::ForRequest(request_)->GetRequestID();
- if (!next_handler_->OnResponseStarted(request_id, response_.get(), defer))
+ if (!next_handler_->OnResponseStarted(GetRequestID(), response_.get(), defer))
return false;
if (!read_buffer_.get()) {
@@ -259,13 +259,13 @@ bool BufferedResourceHandler::ShouldSniffContent() {
const std::string& mime_type = response_->head.mime_type;
std::string content_type_options;
- request_->GetResponseHeaderByName("x-content-type-options",
- &content_type_options);
+ request()->GetResponseHeaderByName("x-content-type-options",
+ &content_type_options);
bool sniffing_blocked =
LowerCaseEqualsASCII(content_type_options, "nosniff");
bool we_would_like_to_sniff =
- net::ShouldSniffMimeType(request_->url(), mime_type);
+ net::ShouldSniffMimeType(request()->url(), mime_type);
RecordSnifferMetrics(sniffing_blocked, we_would_like_to_sniff, mime_type);
@@ -273,7 +273,7 @@ bool BufferedResourceHandler::ShouldSniffContent() {
// We're going to look at the data before deciding what the content type
// is. That means we need to delay sending the ResponseStarted message
// over the IPC channel.
- VLOG(1) << "To buffer: " << request_->url().spec();
+ VLOG(1) << "To buffer: " << request()->url().spec();
return true;
}
@@ -287,7 +287,7 @@ bool BufferedResourceHandler::DetermineMimeType() {
std::string new_type;
bool made_final_decision =
- net::SniffMimeType(read_buffer_->data(), bytes_read_, request_->url(),
+ net::SniffMimeType(read_buffer_->data(), bytes_read_, request()->url(),
type_hint, &new_type);
// SniffMimeType() returns false if there is not enough data to determine
@@ -301,13 +301,13 @@ bool BufferedResourceHandler::DetermineMimeType() {
bool BufferedResourceHandler::SelectNextHandler(bool* defer) {
DCHECK(!response_->head.mime_type.empty());
- ResourceRequestInfoImpl* info = ResourceRequestInfoImpl::ForRequest(request_);
+ ResourceRequestInfoImpl* info = GetRequestInfo();
const std::string& mime_type = response_->head.mime_type;
if (net::IsSupportedCertificateMimeType(mime_type)) {
// Install certificate file.
scoped_ptr<ResourceHandler> handler(
- new CertificateResourceHandler(request_));
+ new CertificateResourceHandler(request()));
return UseAlternateNextHandler(handler.Pass());
}
@@ -320,7 +320,7 @@ bool BufferedResourceHandler::SelectNextHandler(bool* defer) {
return true;
scoped_ptr<ResourceHandler> handler(
- host_->MaybeInterceptAsStream(request_, response_.get()));
+ host_->MaybeInterceptAsStream(request(), response_.get()));
if (handler)
return UseAlternateNextHandler(handler.Pass());
@@ -344,7 +344,7 @@ bool BufferedResourceHandler::SelectNextHandler(bool* defer) {
info->set_is_download(true);
scoped_ptr<ResourceHandler> handler(
host_->CreateResourceHandlerForDownload(
- request_,
+ request(),
true, // is_content_initiated
must_download,
content::DownloadItem::kInvalidId,
@@ -362,11 +362,11 @@ bool BufferedResourceHandler::UseAlternateNextHandler(
// own error page instead of triggering a download.
// TODO(abarth): We should abstract the response_code test, but this kind
// of check is scattered throughout our codebase.
- request_->CancelWithError(net::ERR_FILE_NOT_FOUND);
+ request()->CancelWithError(net::ERR_FILE_NOT_FOUND);
return false;
}
- int request_id = ResourceRequestInfo::ForRequest(request_)->GetRequestID();
+ int request_id = GetRequestID();
// Inform the original ResourceHandler that this will be handled entirely by
// the new ResourceHandler.
@@ -389,8 +389,8 @@ bool BufferedResourceHandler::UseAlternateNextHandler(
bool BufferedResourceHandler::ReplayReadCompleted(bool* defer) {
DCHECK(read_buffer_.get());
- int request_id = ResourceRequestInfo::ForRequest(request_)->GetRequestID();
- bool result = next_handler_->OnReadCompleted(request_id, bytes_read_, defer);
+ bool result = next_handler_->OnReadCompleted(GetRequestID(), bytes_read_,
+ defer);
read_buffer_ = NULL;
read_buffer_size_ = 0;
@@ -418,13 +418,13 @@ bool BufferedResourceHandler::MustDownload() {
must_download_is_set_ = true;
std::string disposition;
- request_->GetResponseHeaderByName("content-disposition", &disposition);
+ request()->GetResponseHeaderByName("content-disposition", &disposition);
if (!disposition.empty() &&
net::HttpContentDisposition(disposition, std::string()).is_attachment()) {
must_download_ = true;
} else if (host_->delegate() &&
host_->delegate()->ShouldForceDownloadResource(
- request_->url(), response_->head.mime_type)) {
+ request()->url(), response_->head.mime_type)) {
must_download_ = true;
} else {
must_download_ = false;
@@ -434,13 +434,13 @@ bool BufferedResourceHandler::MustDownload() {
}
bool BufferedResourceHandler::HasSupportingPlugin(bool* stale) {
- ResourceRequestInfoImpl* info = ResourceRequestInfoImpl::ForRequest(request_);
+ ResourceRequestInfoImpl* info = GetRequestInfo();
bool allow_wildcard = false;
WebPluginInfo plugin;
return PluginServiceImpl::GetInstance()->GetPluginInfo(
info->GetChildID(), info->GetRouteID(), info->GetContext(),
- request_->url(), GURL(), response_->head.mime_type, allow_wildcard,
+ request()->url(), GURL(), response_->head.mime_type, allow_wildcard,
stale, &plugin, NULL);
}
@@ -448,7 +448,7 @@ bool BufferedResourceHandler::CopyReadBufferToNextHandler(int request_id) {
if (!bytes_read_)
return true;
- net::IOBuffer* buf = NULL;
+ scoped_refptr<net::IOBuffer> buf;
int buf_len = 0;
if (!next_handler_->OnWillRead(request_id, &buf, &buf_len, bytes_read_))
return false;
diff --git a/content/browser/loader/buffered_resource_handler.h b/content/browser/loader/buffered_resource_handler.h
index c1a7a6e..9a53b36 100644
--- a/content/browser/loader/buffered_resource_handler.h
+++ b/content/browser/loader/buffered_resource_handler.h
@@ -37,7 +37,7 @@ class BufferedResourceHandler
ResourceResponse* response,
bool* defer) OVERRIDE;
virtual bool OnWillRead(int request_id,
- net::IOBuffer** buf,
+ scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) OVERRIDE;
virtual bool OnReadCompleted(int request_id, int bytes_read,
@@ -95,7 +95,6 @@ class BufferedResourceHandler
scoped_refptr<ResourceResponse> response_;
ResourceDispatcherHostImpl* host_;
- net::URLRequest* request_;
scoped_refptr<net::IOBuffer> read_buffer_;
int read_buffer_size_;
int bytes_read_;
diff --git a/content/browser/loader/certificate_resource_handler.cc b/content/browser/loader/certificate_resource_handler.cc
index d850b19..1688d72 100644
--- a/content/browser/loader/certificate_resource_handler.cc
+++ b/content/browser/loader/certificate_resource_handler.cc
@@ -19,7 +19,7 @@ namespace content {
CertificateResourceHandler::CertificateResourceHandler(
net::URLRequest* request)
- : request_(request),
+ : ResourceHandler(request),
content_length_(0),
read_buffer_(NULL),
resource_buffer_(NULL),
@@ -57,7 +57,7 @@ bool CertificateResourceHandler::OnWillStart(int request_id,
}
bool CertificateResourceHandler::OnWillRead(int request_id,
- net::IOBuffer** buf,
+ scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) {
static const int kReadBufSize = 32768;
@@ -108,9 +108,9 @@ bool CertificateResourceHandler::OnResponseCompleted(
// Note that it's up to the browser to verify that the certificate
// data is well-formed.
- const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request_);
+ const ResourceRequestInfo* info = GetRequestInfo();
GetContentClient()->browser()->AddCertificate(
- request_, cert_type_, content_bytes, content_length_,
+ request(), cert_type_, content_bytes, content_length_,
info->GetChildID(), info->GetRouteID());
return true;
diff --git a/content/browser/loader/certificate_resource_handler.h b/content/browser/loader/certificate_resource_handler.h
index 12a7f67..0480250 100644
--- a/content/browser/loader/certificate_resource_handler.h
+++ b/content/browser/loader/certificate_resource_handler.h
@@ -56,7 +56,7 @@ class CertificateResourceHandler : public ResourceHandler {
// Create a new buffer to store received data.
virtual bool OnWillRead(int request_id,
- net::IOBuffer** buf,
+ scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) OVERRIDE;
@@ -80,7 +80,6 @@ class CertificateResourceHandler : public ResourceHandler {
void AssembleResource();
GURL url_;
- net::URLRequest* request_;
size_t content_length_;
ContentVector buffer_;
scoped_refptr<net::IOBuffer> read_buffer_;
diff --git a/content/browser/loader/cross_site_resource_handler.cc b/content/browser/loader/cross_site_resource_handler.cc
index 6bac75a..657791f 100644
--- a/content/browser/loader/cross_site_resource_handler.cc
+++ b/content/browser/loader/cross_site_resource_handler.cc
@@ -49,8 +49,7 @@ void OnCrossSiteResponseHelper(int render_process_id,
CrossSiteResourceHandler::CrossSiteResourceHandler(
scoped_ptr<ResourceHandler> next_handler,
net::URLRequest* request)
- : LayeredResourceHandler(next_handler.Pass()),
- request_(request),
+ : LayeredResourceHandler(request, next_handler.Pass()),
has_started_response_(false),
in_cross_site_transition_(false),
completed_during_transition_(false),
@@ -61,7 +60,7 @@ CrossSiteResourceHandler::CrossSiteResourceHandler(
CrossSiteResourceHandler::~CrossSiteResourceHandler() {
// Cleanup back-pointer stored on the request info.
- ResourceRequestInfoImpl::ForRequest(request_)->set_cross_site_handler(NULL);
+ GetRequestInfo()->set_cross_site_handler(NULL);
}
bool CrossSiteResourceHandler::OnRequestRedirected(
@@ -86,7 +85,7 @@ bool CrossSiteResourceHandler::OnResponseStarted(
DCHECK(!in_cross_site_transition_);
has_started_response_ = true;
- ResourceRequestInfoImpl* info = ResourceRequestInfoImpl::ForRequest(request_);
+ ResourceRequestInfoImpl* info = GetRequestInfo();
// We will need to swap processes if either (1) a redirect that requires a
// transfer occurred before we got here, or (2) a pending cross-site request
@@ -94,7 +93,7 @@ bool CrossSiteResourceHandler::OnResponseStarted(
// transferred back into the original process due to a redirect.
bool should_transfer =
GetContentClient()->browser()->ShouldSwapProcessesForRedirect(
- info->GetContext(), request_->original_url(), request_->url());
+ info->GetContext(), request()->original_url(), request()->url());
bool swap_needed = should_transfer ||
CrossSiteRequestManager::GetInstance()->
HasPendingCrossSiteRequest(info->GetChildID(), info->GetRouteID());
@@ -139,8 +138,7 @@ bool CrossSiteResourceHandler::OnResponseCompleted(
const net::URLRequestStatus& status,
const std::string& security_info) {
if (!in_cross_site_transition_) {
- ResourceRequestInfoImpl* info =
- ResourceRequestInfoImpl::ForRequest(request_);
+ ResourceRequestInfoImpl* info = GetRequestInfo();
// If we've already completed the transition, or we're canceling the
// request, or an error occurred with no cross-process navigation in
// progress, then we should just pass this through.
@@ -173,11 +171,10 @@ bool CrossSiteResourceHandler::OnResponseCompleted(
// We can now send the response to the new renderer, which will cause
// WebContentsImpl to swap in the new renderer and destroy the old one.
void CrossSiteResourceHandler::ResumeResponse() {
- DCHECK(request_);
+ DCHECK(request());
DCHECK(in_cross_site_transition_);
in_cross_site_transition_ = false;
- ResourceRequestInfoImpl* info =
- ResourceRequestInfoImpl::ForRequest(request_);
+ ResourceRequestInfoImpl* info = GetRequestInfo();
if (has_started_response_) {
// Send OnResponseStarted to the new renderer.
@@ -218,8 +215,7 @@ void CrossSiteResourceHandler::StartCrossSiteTransition(
// Store this handler on the ExtraRequestInfo, so that RDH can call our
// ResumeResponse method when we are ready to resume.
- ResourceRequestInfoImpl* info =
- ResourceRequestInfoImpl::ForRequest(request_);
+ ResourceRequestInfoImpl* info = GetRequestInfo();
info->set_cross_site_handler(this);
DCHECK_EQ(request_id, info->GetRequestID());
@@ -233,8 +229,8 @@ void CrossSiteResourceHandler::StartCrossSiteTransition(
Referrer referrer;
int frame_id = -1;
if (should_transfer) {
- transfer_url = request_->url();
- referrer = Referrer(GURL(request_->referrer()), info->GetReferrerPolicy());
+ transfer_url = request()->url();
+ referrer = Referrer(GURL(request()->referrer()), info->GetReferrerPolicy());
frame_id = info->GetFrameID();
ResourceDispatcherHostImpl::Get()->MarkAsTransferredNavigation(
diff --git a/content/browser/loader/cross_site_resource_handler.h b/content/browser/loader/cross_site_resource_handler.h
index 5c08f7e..3534107 100644
--- a/content/browser/loader/cross_site_resource_handler.h
+++ b/content/browser/loader/cross_site_resource_handler.h
@@ -53,7 +53,6 @@ class CrossSiteResourceHandler : public LayeredResourceHandler {
void ResumeIfDeferred();
- net::URLRequest* request_;
bool has_started_response_;
bool in_cross_site_transition_;
bool completed_during_transition_;
diff --git a/content/browser/loader/layered_resource_handler.cc b/content/browser/loader/layered_resource_handler.cc
index 872bc7a..0ad0ceb 100644
--- a/content/browser/loader/layered_resource_handler.cc
+++ b/content/browser/loader/layered_resource_handler.cc
@@ -9,8 +9,10 @@
namespace content {
LayeredResourceHandler::LayeredResourceHandler(
+ net::URLRequest* request,
scoped_ptr<ResourceHandler> next_handler)
- : next_handler_(next_handler.Pass()) {
+ : ResourceHandler(request),
+ next_handler_(next_handler.Pass()) {
}
LayeredResourceHandler::~LayeredResourceHandler() {
@@ -54,8 +56,10 @@ bool LayeredResourceHandler::OnWillStart(int request_id, const GURL& url,
return next_handler_->OnWillStart(request_id, url, defer);
}
-bool LayeredResourceHandler::OnWillRead(int request_id, net::IOBuffer** buf,
- int* buf_size, int min_size) {
+bool LayeredResourceHandler::OnWillRead(int request_id,
+ scoped_refptr<net::IOBuffer>* buf,
+ int* buf_size,
+ int min_size) {
DCHECK(next_handler_.get());
return next_handler_->OnWillRead(request_id, buf, buf_size, min_size);
}
diff --git a/content/browser/loader/layered_resource_handler.h b/content/browser/loader/layered_resource_handler.h
index d41f747..1e406d3 100644
--- a/content/browser/loader/layered_resource_handler.h
+++ b/content/browser/loader/layered_resource_handler.h
@@ -9,13 +9,18 @@
#include "content/browser/loader/resource_handler.h"
#include "content/common/content_export.h"
+namespace net {
+class URLRequest;
+} // namespace net
+
namespace content {
// A ResourceHandler that simply delegates all calls to a next handler. This
// class is intended to be subclassed.
class CONTENT_EXPORT LayeredResourceHandler : public ResourceHandler {
public:
- explicit LayeredResourceHandler(scoped_ptr<ResourceHandler> next_handler);
+ LayeredResourceHandler(net::URLRequest* request,
+ scoped_ptr<ResourceHandler> next_handler);
virtual ~LayeredResourceHandler();
// ResourceHandler implementation:
@@ -30,7 +35,9 @@ class CONTENT_EXPORT LayeredResourceHandler : public ResourceHandler {
bool* defer) OVERRIDE;
virtual bool OnWillStart(int request_id, const GURL& url,
bool* defer) OVERRIDE;
- virtual bool OnWillRead(int request_id, net::IOBuffer** buf, int* buf_size,
+ virtual bool OnWillRead(int request_id,
+ scoped_refptr<net::IOBuffer>* buf,
+ int* buf_size,
int min_size) OVERRIDE;
virtual bool OnReadCompleted(int request_id, int bytes_read,
bool* defer) OVERRIDE;
diff --git a/content/browser/loader/redirect_to_file_resource_handler.cc b/content/browser/loader/redirect_to_file_resource_handler.cc
index 74dc08a..45cf934 100644
--- a/content/browser/loader/redirect_to_file_resource_handler.cc
+++ b/content/browser/loader/redirect_to_file_resource_handler.cc
@@ -11,8 +11,8 @@
#include "base/platform_file.h"
#include "base/threading/thread_restrictions.h"
#include "content/browser/loader/resource_dispatcher_host_impl.h"
+#include "content/browser/loader/resource_request_info_impl.h"
#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/resource_request_info.h"
#include "content/public/common/resource_response.h"
#include "net/base/file_stream.h"
#include "net/base/io_buffer.h"
@@ -57,10 +57,9 @@ RedirectToFileResourceHandler::RedirectToFileResourceHandler(
scoped_ptr<ResourceHandler> next_handler,
net::URLRequest* request,
ResourceDispatcherHostImpl* host)
- : LayeredResourceHandler(next_handler.Pass()),
+ : LayeredResourceHandler(request, next_handler.Pass()),
weak_factory_(this),
host_(host),
- request_(request),
buf_(new net::GrowableIOBuffer()),
buf_write_pending_(false),
write_cursor_(0),
@@ -103,10 +102,11 @@ bool RedirectToFileResourceHandler::OnWillStart(int request_id,
return next_handler_->OnWillStart(request_id, url, defer);
}
-bool RedirectToFileResourceHandler::OnWillRead(int request_id,
- net::IOBuffer** buf,
- int* buf_size,
- int min_size) {
+bool RedirectToFileResourceHandler::OnWillRead(
+ int request_id,
+ scoped_refptr<net::IOBuffer>* buf,
+ int* buf_size,
+ int min_size) {
DCHECK_EQ(-1, min_size);
if (buf_->capacity() < next_buffer_size_)
@@ -171,7 +171,7 @@ void RedirectToFileResourceHandler::DidCreateTemporaryFile(
new net::FileStream(file_handle.ReleaseValue(),
base::PLATFORM_FILE_WRITE | base::PLATFORM_FILE_ASYNC,
NULL));
- const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request_);
+ const ResourceRequestInfo* info = GetRequestInfo();
host_->RegisterDownloadedTempFile(
info->GetChildID(), info->GetRequestID(), deletable_file_.get());
ResumeIfDeferred();
@@ -179,11 +179,11 @@ void RedirectToFileResourceHandler::DidCreateTemporaryFile(
void RedirectToFileResourceHandler::DidWriteToFile(int result) {
write_callback_pending_ = false;
- const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request_);
+ int request_id = GetRequestID();
bool failed = false;
if (result > 0) {
- next_handler_->OnDataDownloaded(info->GetRequestID(), result);
+ next_handler_->OnDataDownloaded(request_id, result);
write_cursor_ += result;
failed = !WriteMore();
} else {
@@ -193,7 +193,7 @@ void RedirectToFileResourceHandler::DidWriteToFile(int result) {
if (failed) {
ResumeIfDeferred();
} else if (completed_during_write_) {
- if (next_handler_->OnResponseCompleted(info->GetRequestID(),
+ if (next_handler_->OnResponseCompleted(request_id,
completed_status_,
completed_security_info_)) {
ResumeIfDeferred();
@@ -248,8 +248,7 @@ bool RedirectToFileResourceHandler::WriteMore() {
}
if (rv <= 0)
return false;
- const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request_);
- next_handler_->OnDataDownloaded(info->GetRequestID(), rv);
+ next_handler_->OnDataDownloaded(GetRequestID(), rv);
write_cursor_ += rv;
}
}
diff --git a/content/browser/loader/redirect_to_file_resource_handler.h b/content/browser/loader/redirect_to_file_resource_handler.h
index 1af25df..89b1bdf 100644
--- a/content/browser/loader/redirect_to_file_resource_handler.h
+++ b/content/browser/loader/redirect_to_file_resource_handler.h
@@ -44,7 +44,7 @@ class RedirectToFileResourceHandler : public LayeredResourceHandler {
const GURL& url,
bool* defer) OVERRIDE;
virtual bool OnWillRead(int request_id,
- net::IOBuffer** buf,
+ scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) OVERRIDE;
virtual bool OnReadCompleted(int request_id,
@@ -66,7 +66,6 @@ class RedirectToFileResourceHandler : public LayeredResourceHandler {
base::WeakPtrFactory<RedirectToFileResourceHandler> weak_factory_;
ResourceDispatcherHostImpl* host_;
- net::URLRequest* request_;
// We allocate a single, fixed-size IO buffer (buf_) used to read from the
// network (buf_write_pending_ is true while the system is copying data into
diff --git a/content/browser/loader/resource_handler.cc b/content/browser/loader/resource_handler.cc
index 2a5d85ee2..358dd65 100644
--- a/content/browser/loader/resource_handler.cc
+++ b/content/browser/loader/resource_handler.cc
@@ -4,10 +4,29 @@
#include "content/browser/loader/resource_handler.h"
+#include "content/browser/loader/resource_request_info_impl.h"
+
namespace content {
+ResourceHandler::ResourceHandler(net::URLRequest* request)
+ : controller_(NULL),
+ request_(request) {
+}
+
void ResourceHandler::SetController(ResourceController* controller) {
controller_ = controller;
}
+ResourceRequestInfoImpl* ResourceHandler::GetRequestInfo() const {
+ return ResourceRequestInfoImpl::ForRequest(request_);
+}
+
+int ResourceHandler::GetRequestID() const {
+ return GetRequestInfo()->GetRequestID();
+}
+
+ResourceMessageFilter* ResourceHandler::GetFilter() const {
+ return GetRequestInfo()->filter();
+}
+
} // namespace content
diff --git a/content/browser/loader/resource_handler.h b/content/browser/loader/resource_handler.h
index de8bd9d..8ec4117 100644
--- a/content/browser/loader/resource_handler.h
+++ b/content/browser/loader/resource_handler.h
@@ -14,6 +14,7 @@
#include <string>
+#include "base/memory/ref_counted.h"
#include "base/sequenced_task_runner_helpers.h"
#include "base/threading/non_thread_safe.h"
#include "content/common/content_export.h"
@@ -22,11 +23,14 @@ class GURL;
namespace net {
class IOBuffer;
+class URLRequest;
class URLRequestStatus;
} // namespace net
namespace content {
class ResourceController;
+class ResourceMessageFilter;
+class ResourceRequestInfoImpl;
struct ResourceResponse;
// The resource dispatcher host uses this interface to process network events
@@ -77,7 +81,7 @@ class CONTENT_EXPORT ResourceHandler
// If the handler returns false, then the request is cancelled. Otherwise,
// once data is available, OnReadCompleted will be called.
virtual bool OnWillRead(int request_id,
- net::IOBuffer** buf,
+ scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) = 0;
@@ -102,11 +106,19 @@ class CONTENT_EXPORT ResourceHandler
virtual void OnDataDownloaded(int request_id, int bytes_downloaded) = 0;
protected:
- ResourceHandler() : controller_(NULL) {}
- ResourceController* controller() { return controller_; }
+ ResourceHandler(net::URLRequest* request);
+
+ ResourceController* controller() const { return controller_; }
+ net::URLRequest* request() const { return request_; }
+
+ // Convenience functions.
+ ResourceRequestInfoImpl* GetRequestInfo() const;
+ int GetRequestID() const;
+ ResourceMessageFilter* GetFilter() const;
private:
ResourceController* controller_;
+ net::URLRequest* request_;
};
} // namespace content
diff --git a/content/browser/loader/resource_loader.cc b/content/browser/loader/resource_loader.cc
index 88c9c85..55add72 100644
--- a/content/browser/loader/resource_loader.cc
+++ b/content/browser/loader/resource_loader.cc
@@ -597,7 +597,10 @@ void ResourceLoader::ReadMore(int* bytes_read) {
ResourceRequestInfoImpl* info = GetRequestInfo();
DCHECK(!is_deferred());
- net::IOBuffer* buf;
+ // Make sure we track the buffer in at least one place. This ensures it gets
+ // deleted even in the case the request has already finished its job and
+ // doesn't use the buffer.
+ scoped_refptr<net::IOBuffer> buf;
int buf_size;
if (!handler_->OnWillRead(info->GetRequestID(), &buf, &buf_size, -1)) {
Cancel();
@@ -607,12 +610,7 @@ void ResourceLoader::ReadMore(int* bytes_read) {
DCHECK(buf);
DCHECK(buf_size > 0);
- // Make sure we track the buffer in at least one place. This ensures it gets
- // deleted even in the case the request has already finished its job and
- // doesn't use the buffer.
- scoped_refptr<net::IOBuffer> tracked_buf(buf);
-
- request_->Read(tracked_buf.get(), buf_size, bytes_read);
+ request_->Read(buf.get(), buf_size, bytes_read);
// No need to check the return value here as we'll detect errors by
// inspecting the URLRequest's status.
diff --git a/content/browser/loader/resource_loader_unittest.cc b/content/browser/loader/resource_loader_unittest.cc
index 81307ce..bf4f52f 100644
--- a/content/browser/loader/resource_loader_unittest.cc
+++ b/content/browser/loader/resource_loader_unittest.cc
@@ -66,6 +66,8 @@ class ClientCertStoreStub : public net::ClientCertStore {
// initialize ResourceLoader.
class ResourceHandlerStub : public ResourceHandler {
public:
+ ResourceHandlerStub() : ResourceHandler(NULL) {}
+
virtual bool OnUploadProgress(int request_id,
uint64 position,
uint64 size) OVERRIDE {
@@ -90,7 +92,7 @@ class ResourceHandlerStub : public ResourceHandler {
}
virtual bool OnWillRead(int request_id,
- net::IOBuffer** buf,
+ scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) OVERRIDE {
return true;
diff --git a/content/browser/loader/stream_resource_handler.cc b/content/browser/loader/stream_resource_handler.cc
index 1e2acc8..8c8aae0 100644
--- a/content/browser/loader/stream_resource_handler.cc
+++ b/content/browser/loader/stream_resource_handler.cc
@@ -19,7 +19,7 @@ StreamResourceHandler::StreamResourceHandler(
net::URLRequest* request,
StreamRegistry* registry,
const GURL& origin)
- : request_(request),
+ : ResourceHandler(request),
read_buffer_(NULL) {
// TODO(tyoshino): Find a way to share this with the blob URL creation in
// WebKit.
@@ -58,7 +58,7 @@ bool StreamResourceHandler::OnWillStart(int request_id,
}
bool StreamResourceHandler::OnWillRead(int request_id,
- net::IOBuffer** buf,
+ scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) {
static const int kReadBufSize = 32768;
diff --git a/content/browser/loader/stream_resource_handler.h b/content/browser/loader/stream_resource_handler.h
index 037ebdc..1dfd3aa 100644
--- a/content/browser/loader/stream_resource_handler.h
+++ b/content/browser/loader/stream_resource_handler.h
@@ -51,7 +51,7 @@ class StreamResourceHandler : public StreamWriteObserver,
// Create a new buffer to store received data.
virtual bool OnWillRead(int request_id,
- net::IOBuffer** buf,
+ scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) OVERRIDE;
@@ -72,7 +72,6 @@ class StreamResourceHandler : public StreamWriteObserver,
virtual void OnSpaceAvailable(Stream* stream) OVERRIDE;
virtual void OnClose(Stream* stream) OVERRIDE;
- net::URLRequest* request_;
scoped_refptr<Stream> stream_;
scoped_refptr<net::IOBuffer> read_buffer_;
DISALLOW_COPY_AND_ASSIGN(StreamResourceHandler);
diff --git a/content/browser/loader/sync_resource_handler.cc b/content/browser/loader/sync_resource_handler.cc
index 1608fc4..7321f81 100644
--- a/content/browser/loader/sync_resource_handler.cc
+++ b/content/browser/loader/sync_resource_handler.cc
@@ -22,22 +22,21 @@ SyncResourceHandler::SyncResourceHandler(
net::URLRequest* request,
IPC::Message* result_message,
ResourceDispatcherHostImpl* resource_dispatcher_host)
- : read_buffer_(new net::IOBuffer(kReadBufSize)),
- request_(request),
+ : ResourceHandler(request),
+ read_buffer_(new net::IOBuffer(kReadBufSize)),
result_message_(result_message),
rdh_(resource_dispatcher_host) {
- result_.final_url = request_->url();
+ result_.final_url = request->url();
}
SyncResourceHandler::~SyncResourceHandler() {
if (result_message_) {
result_message_->set_reply_error();
- const ResourceRequestInfoImpl* info =
- ResourceRequestInfoImpl::ForRequest(request_);
+ ResourceMessageFilter* filter = GetFilter();
// If the filter doesn't exist at this point, the process has died and isn't
// waiting for the result message anymore.
- if (info->filter())
- info->filter()->Send(result_message_);
+ if (filter)
+ filter->Send(result_message_);
}
}
@@ -53,13 +52,11 @@ bool SyncResourceHandler::OnRequestRedirected(
ResourceResponse* response,
bool* defer) {
if (rdh_->delegate()) {
- const ResourceRequestInfoImpl* info =
- ResourceRequestInfoImpl::ForRequest(request_);
rdh_->delegate()->OnRequestRedirected(
- new_url, request_, info->GetContext(), response);
+ new_url, request(), GetRequestInfo()->GetContext(), response);
}
- DevToolsNetLogObserver::PopulateResponseInfo(request_, response);
+ DevToolsNetLogObserver::PopulateResponseInfo(request(), response);
// TODO(darin): It would be much better if this could live in WebCore, but
// doing so requires API changes at all levels. Similar code exists in
// WebCore/platform/network/cf/ResourceHandleCFNet.cpp :-(
@@ -75,17 +72,16 @@ bool SyncResourceHandler::OnResponseStarted(
int request_id,
ResourceResponse* response,
bool* defer) {
- const ResourceRequestInfoImpl* info =
- ResourceRequestInfoImpl::ForRequest(request_);
+ const ResourceRequestInfoImpl* info = GetRequestInfo();
if (!info->filter())
return false;
if (rdh_->delegate()) {
rdh_->delegate()->OnResponseStarted(
- request_, info->GetContext(), response, info->filter());
+ request(), info->GetContext(), response, info->filter());
}
- DevToolsNetLogObserver::PopulateResponseInfo(request_, response);
+ DevToolsNetLogObserver::PopulateResponseInfo(request(), response);
// We don't care about copying the status here.
result_.headers = response->head.headers;
@@ -105,8 +101,10 @@ bool SyncResourceHandler::OnWillStart(int request_id,
return true;
}
-bool SyncResourceHandler::OnWillRead(int request_id, net::IOBuffer** buf,
- int* buf_size, int min_size) {
+bool SyncResourceHandler::OnWillRead(int request_id,
+ scoped_refptr<net::IOBuffer>* buf,
+ int* buf_size,
+ int min_size) {
DCHECK(min_size == -1);
*buf = read_buffer_.get();
*buf_size = kReadBufSize;
@@ -125,18 +123,17 @@ bool SyncResourceHandler::OnResponseCompleted(
int request_id,
const net::URLRequestStatus& status,
const std::string& security_info) {
- const ResourceRequestInfoImpl* info =
- ResourceRequestInfoImpl::ForRequest(request_);
- if (!info->filter())
+ ResourceMessageFilter* filter = GetFilter();
+ if (!filter)
return false;
result_.error_code = status.error();
result_.encoded_data_length =
- DevToolsNetLogObserver::GetAndResetEncodedDataLength(request_);
+ DevToolsNetLogObserver::GetAndResetEncodedDataLength(request());
ResourceHostMsg_SyncLoad::WriteReplyParams(result_message_, result_);
- info->filter()->Send(result_message_);
+ filter->Send(result_message_);
result_message_ = NULL;
return true;
}
diff --git a/content/browser/loader/sync_resource_handler.h b/content/browser/loader/sync_resource_handler.h
index 358d92a..41c51f2 100644
--- a/content/browser/loader/sync_resource_handler.h
+++ b/content/browser/loader/sync_resource_handler.h
@@ -47,7 +47,7 @@ class SyncResourceHandler : public ResourceHandler {
const GURL& url,
bool* defer) OVERRIDE;
virtual bool OnWillRead(int request_id,
- net::IOBuffer** buf,
+ scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) OVERRIDE;
virtual bool OnReadCompleted(int request_id,
@@ -64,7 +64,6 @@ class SyncResourceHandler : public ResourceHandler {
scoped_refptr<net::IOBuffer> read_buffer_;
SyncLoadResult result_;
- net::URLRequest* request_;
IPC::Message* result_message_;
ResourceDispatcherHostImpl* rdh_;
};
diff --git a/content/browser/loader/throttling_resource_handler.cc b/content/browser/loader/throttling_resource_handler.cc
index 8bb5446..23f77da 100644
--- a/content/browser/loader/throttling_resource_handler.cc
+++ b/content/browser/loader/throttling_resource_handler.cc
@@ -4,7 +4,7 @@
#include "content/browser/loader/throttling_resource_handler.h"
-#include "content/public/browser/resource_request_info.h"
+#include "content/browser/loader/resource_request_info_impl.h"
#include "content/public/browser/resource_throttle.h"
#include "content/public/common/resource_response.h"
@@ -14,9 +14,8 @@ ThrottlingResourceHandler::ThrottlingResourceHandler(
scoped_ptr<ResourceHandler> next_handler,
net::URLRequest* request,
ScopedVector<ResourceThrottle> throttles)
- : LayeredResourceHandler(next_handler.Pass()),
+ : LayeredResourceHandler(request, next_handler.Pass()),
deferred_stage_(DEFERRED_NONE),
- request_(request),
throttles_(throttles.Pass()),
index_(0),
cancelled_by_resource_throttle_(false) {
@@ -141,8 +140,7 @@ void ThrottlingResourceHandler::ResumeStart() {
deferred_url_ = GURL();
bool defer = false;
- const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request_);
- if (!OnWillStart(info->GetRequestID(), url, &defer)) {
+ if (!OnWillStart(GetRequestID(), url, &defer)) {
controller()->Cancel();
} else if (!defer) {
controller()->Resume();
@@ -158,9 +156,7 @@ void ThrottlingResourceHandler::ResumeRedirect() {
deferred_response_.swap(response);
bool defer = false;
- const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request_);
- if (!OnRequestRedirected(info->GetRequestID(), new_url, response.get(),
- &defer)) {
+ if (!OnRequestRedirected(GetRequestID(), new_url, response.get(), &defer)) {
controller()->Cancel();
} else if (!defer) {
controller()->Resume();
@@ -174,8 +170,7 @@ void ThrottlingResourceHandler::ResumeResponse() {
deferred_response_.swap(response);
bool defer = false;
- const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request_);
- if (!OnResponseStarted(info->GetRequestID(), response.get(), &defer)) {
+ if (!OnResponseStarted(GetRequestID(), response.get(), &defer)) {
controller()->Cancel();
} else if (!defer) {
controller()->Resume();
diff --git a/content/browser/loader/throttling_resource_handler.h b/content/browser/loader/throttling_resource_handler.h
index 168dc56..65117bc 100644
--- a/content/browser/loader/throttling_resource_handler.h
+++ b/content/browser/loader/throttling_resource_handler.h
@@ -59,8 +59,6 @@ class ThrottlingResourceHandler : public LayeredResourceHandler,
};
DeferredStage deferred_stage_;
- net::URLRequest* request_;
-
ScopedVector<ResourceThrottle> throttles_;
size_t index_;