diff options
author | creis@chromium.org <creis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-15 19:38:18 +0000 |
---|---|---|
committer | creis@chromium.org <creis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-15 19:38:18 +0000 |
commit | ef5306ef2dc2460f0a0af8498f80d712ab3ec0b6 (patch) | |
tree | 329dce616f82e857d3c323822d446e1ef6e657ce /content/browser/loader/async_resource_handler.cc | |
parent | 0de673b86444c59ad7e45021a4cbc911afdaeffc (diff) | |
download | chromium_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.cc | 85 |
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; } |