diff options
Diffstat (limited to 'chromium/content/browser/loader/throttling_resource_handler.cc')
-rw-r--r-- | chromium/content/browser/loader/throttling_resource_handler.cc | 64 |
1 files changed, 50 insertions, 14 deletions
diff --git a/chromium/content/browser/loader/throttling_resource_handler.cc b/chromium/content/browser/loader/throttling_resource_handler.cc index 36c595fbf1b..a302f1da797 100644 --- a/chromium/content/browser/loader/throttling_resource_handler.cc +++ b/chromium/content/browser/loader/throttling_resource_handler.cc @@ -31,8 +31,7 @@ ThrottlingResourceHandler::ThrottlingResourceHandler( ThrottlingResourceHandler::~ThrottlingResourceHandler() { } -bool ThrottlingResourceHandler::OnRequestRedirected(int request_id, - const GURL& new_url, +bool ThrottlingResourceHandler::OnRequestRedirected(const GURL& new_url, ResourceResponse* response, bool* defer) { DCHECK(!cancelled_by_resource_throttle_); @@ -55,13 +54,10 @@ bool ThrottlingResourceHandler::OnRequestRedirected(int request_id, next_index_ = 0; // Reset for next time. - return next_handler_->OnRequestRedirected(request_id, new_url, response, - defer); + return next_handler_->OnRequestRedirected(new_url, response, defer); } -bool ThrottlingResourceHandler::OnWillStart(int request_id, - const GURL& url, - bool* defer) { +bool ThrottlingResourceHandler::OnWillStart(const GURL& url, bool* defer) { DCHECK(!cancelled_by_resource_throttle_); *defer = false; @@ -81,11 +77,34 @@ bool ThrottlingResourceHandler::OnWillStart(int request_id, next_index_ = 0; // Reset for next time. - return next_handler_->OnWillStart(request_id, url, defer); + return next_handler_->OnWillStart(url, defer); } -bool ThrottlingResourceHandler::OnResponseStarted(int request_id, - ResourceResponse* response, +bool ThrottlingResourceHandler::OnBeforeNetworkStart(const GURL& url, + bool* defer) { + DCHECK(!cancelled_by_resource_throttle_); + + *defer = false; + while (next_index_ < throttles_.size()) { + int index = next_index_; + throttles_[index]->OnBeforeNetworkStart(defer); + next_index_++; + if (cancelled_by_resource_throttle_) + return false; + if (*defer) { + OnRequestDefered(index); + deferred_stage_ = DEFERRED_NETWORK_START; + deferred_url_ = url; + return true; // Do not cancel. + } + } + + next_index_ = 0; // Reset for next time. + + return next_handler_->OnBeforeNetworkStart(url, defer); +} + +bool ThrottlingResourceHandler::OnResponseStarted(ResourceResponse* response, bool* defer) { DCHECK(!cancelled_by_resource_throttle_); @@ -105,7 +124,7 @@ bool ThrottlingResourceHandler::OnResponseStarted(int request_id, next_index_ = 0; // Reset for next time. - return next_handler_->OnResponseStarted(request_id, response, defer); + return next_handler_->OnResponseStarted(response, defer); } void ThrottlingResourceHandler::Cancel() { @@ -137,6 +156,9 @@ void ThrottlingResourceHandler::Resume() { case DEFERRED_START: ResumeStart(); break; + case DEFERRED_NETWORK_START: + ResumeNetworkStart(); + break; case DEFERRED_REDIRECT: ResumeRedirect(); break; @@ -153,7 +175,21 @@ void ThrottlingResourceHandler::ResumeStart() { deferred_url_ = GURL(); bool defer = false; - if (!OnWillStart(GetRequestID(), url, &defer)) { + if (!OnWillStart(url, &defer)) { + controller()->Cancel(); + } else if (!defer) { + controller()->Resume(); + } +} + +void ThrottlingResourceHandler::ResumeNetworkStart() { + DCHECK(!cancelled_by_resource_throttle_); + + GURL url = deferred_url_; + deferred_url_ = GURL(); + + bool defer = false; + if (!OnBeforeNetworkStart(url, &defer)) { controller()->Cancel(); } else if (!defer) { controller()->Resume(); @@ -169,7 +205,7 @@ void ThrottlingResourceHandler::ResumeRedirect() { deferred_response_.swap(response); bool defer = false; - if (!OnRequestRedirected(GetRequestID(), new_url, response.get(), &defer)) { + if (!OnRequestRedirected(new_url, response.get(), &defer)) { controller()->Cancel(); } else if (!defer) { controller()->Resume(); @@ -183,7 +219,7 @@ void ThrottlingResourceHandler::ResumeResponse() { deferred_response_.swap(response); bool defer = false; - if (!OnResponseStarted(GetRequestID(), response.get(), &defer)) { + if (!OnResponseStarted(response.get(), &defer)) { controller()->Cancel(); } else if (!defer) { controller()->Resume(); |