summaryrefslogtreecommitdiffstats
path: root/content/browser/loader/async_resource_handler.cc
diff options
context:
space:
mode:
authorcreis@chromium.org <creis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-15 19:38:18 +0000
committercreis@chromium.org <creis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-15 19:38:18 +0000
commitef5306ef2dc2460f0a0af8498f80d712ab3ec0b6 (patch)
tree329dce616f82e857d3c323822d446e1ef6e657ce /content/browser/loader/async_resource_handler.cc
parent0de673b86444c59ad7e45021a4cbc911afdaeffc (diff)
downloadchromium_src-ef5306ef2dc2460f0a0af8498f80d712ab3ec0b6.zip
chromium_src-ef5306ef2dc2460f0a0af8498f80d712ab3ec0b6.tar.gz
chromium_src-ef5306ef2dc2460f0a0af8498f80d712ab3ec0b6.tar.bz2
Clean up ResourceHandler API.
1. Move URLRequest member to ResourceHandler base class and add convenience functions for subclasses. 2. Make OnWillRead take a scoped_refptr to avoid leaking the buffer. (Attempt 2, after being reverted for possibly unrelated crashes.) BUG=295239 TEST=No behavior change. TBR=darin Review URL: https://codereview.chromium.org/26420005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@228741 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/loader/async_resource_handler.cc')
-rw-r--r--content/browser/loader/async_resource_handler.cc85
1 files changed, 40 insertions, 45 deletions
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;
}