Add LayeredResourceHandler for eliminating duplication of code in
ResourceHandler subclasses that just delegate to the next handler.
Review URL: http://codereview.chromium.org/9113032
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@116655 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/content/browser/renderer_host/buffered_resource_handler.cc b/content/browser/renderer_host/buffered_resource_handler.cc
index e1ecc9b..19909412 100644
--- a/content/browser/renderer_host/buffered_resource_handler.cc
+++ b/content/browser/renderer_host/buffered_resource_handler.cc
@@ -29,6 +29,8 @@
#include "net/http/http_response_headers.h"
#include "webkit/plugins/webplugininfo.h"
+namespace content {
+
namespace {
void RecordSnifferMetrics(bool sniffing_blocked,
@@ -61,7 +63,7 @@
BufferedResourceHandler::BufferedResourceHandler(ResourceHandler* handler,
ResourceDispatcherHost* host,
net::URLRequest* request)
- : real_handler_(handler),
+ : LayeredResourceHandler(handler),
host_(host),
request_(request),
read_buffer_size_(0),
@@ -72,46 +74,18 @@
finished_(false) {
}
-bool BufferedResourceHandler::OnUploadProgress(int request_id,
- uint64 position,
- uint64 size) {
- return real_handler_->OnUploadProgress(request_id, position, size);
-}
-
-bool BufferedResourceHandler::OnRequestRedirected(
- int request_id,
- const GURL& new_url,
- content::ResourceResponse* response,
- bool* defer) {
- return real_handler_->OnRequestRedirected(
- request_id, new_url, response, defer);
-}
-
bool BufferedResourceHandler::OnResponseStarted(
int request_id,
- content::ResourceResponse* response) {
+ ResourceResponse* response) {
response_ = response;
if (!DelayResponse())
return CompleteResponseStarted(request_id);
return true;
}
-bool BufferedResourceHandler::OnResponseCompleted(
- int request_id,
- const net::URLRequestStatus& status,
- const std::string& security_info) {
- return real_handler_->OnResponseCompleted(request_id, status, security_info);
-}
-
void BufferedResourceHandler::OnRequestClosed() {
request_ = NULL;
- real_handler_->OnRequestClosed();
-}
-
-bool BufferedResourceHandler::OnWillStart(int request_id,
- const GURL& url,
- bool* defer) {
- return real_handler_->OnWillStart(request_id, url, defer);
+ next_handler_->OnRequestClosed();
}
// We'll let the original event handler provide a buffer, and reuse it for
@@ -129,7 +103,7 @@
if (finished_)
return false;
- if (!real_handler_->OnWillRead(request_id, buf, buf_size, min_size)) {
+ if (!next_handler_->OnWillRead(request_id, buf, buf_size, min_size)) {
return false;
}
read_buffer_ = *buf;
@@ -161,7 +135,7 @@
// Release the reference that we acquired at OnWillRead.
read_buffer_ = NULL;
- return real_handler_->OnReadCompleted(request_id, bytes_read);
+ return next_handler_->OnReadCompleted(request_id, bytes_read);
}
BufferedResourceHandler::~BufferedResourceHandler() {}
@@ -342,7 +316,7 @@
UseAlternateResourceHandler(request_id, handler);
}
- return real_handler_->OnResponseStarted(request_id, response_);
+ return next_handler_->OnResponseStarted(request_id, response_);
}
bool BufferedResourceHandler::ShouldWaitForPlugins() {
@@ -449,9 +423,9 @@
// Inform the original ResourceHandler that this will be handled entirely by
// the new ResourceHandler.
- real_handler_->OnResponseStarted(info->request_id(), response_);
+ next_handler_->OnResponseStarted(info->request_id(), response_);
net::URLRequestStatus status(net::URLRequestStatus::HANDLED_EXTERNALLY, 0);
- real_handler_->OnResponseCompleted(info->request_id(), status, std::string());
+ next_handler_->OnResponseCompleted(info->request_id(), status, std::string());
// Remove the non-owning pointer to the CrossSiteResourceHandler, if any,
// from the extra request info because the CrossSiteResourceHandler (part of
@@ -460,7 +434,7 @@
// This is handled entirely within the new ResourceHandler, so just reset the
// original ResourceHandler.
- real_handler_ = handler;
+ next_handler_ = handler;
}
void BufferedResourceHandler::OnPluginsLoaded(
@@ -475,3 +449,5 @@
if (!CompleteResponseStarted(info->request_id()))
host_->CancelRequest(info->child_id(), info->request_id(), false);
}
+
+} // namespace content