diff options
Diffstat (limited to 'content/browser')
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_; |