| Index: content/browser/loader/throttling_resource_handler.cc
|
| diff --git a/content/browser/loader/throttling_resource_handler.cc b/content/browser/loader/throttling_resource_handler.cc
|
| index cf8ad2247c1f47a9dceb633080ab22195ab27a2f..53ac66a86be03386ff646c160e04c02ade46b054 100644
|
| --- a/content/browser/loader/throttling_resource_handler.cc
|
| +++ b/content/browser/loader/throttling_resource_handler.cc
|
| @@ -33,77 +33,91 @@ ThrottlingResourceHandler::ThrottlingResourceHandler(
|
| ThrottlingResourceHandler::~ThrottlingResourceHandler() {
|
| }
|
|
|
| -bool ThrottlingResourceHandler::OnRequestRedirected(
|
| +void ThrottlingResourceHandler::OnRequestRedirected(
|
| const net::RedirectInfo& redirect_info,
|
| ResourceResponse* response,
|
| - bool* defer) {
|
| + bool* defer_or_cancel) {
|
| DCHECK(!cancelled_by_resource_throttle_);
|
|
|
| - *defer = false;
|
| + *defer_or_cancel = false;
|
| while (next_index_ < throttles_.size()) {
|
| int index = next_index_;
|
| - throttles_[index]->WillRedirectRequest(redirect_info, defer);
|
| + throttles_[index]->WillRedirectRequest(redirect_info, defer_or_cancel);
|
| next_index_++;
|
| - if (cancelled_by_resource_throttle_)
|
| - return false;
|
| - if (*defer) {
|
| + if (cancelled_by_resource_throttle_) {
|
| + // Nothing else to do here, already told controller() to cancel the
|
| + // request.
|
| + *defer_or_cancel = true;
|
| + return;
|
| + }
|
| + if (*defer_or_cancel) {
|
| OnRequestDefered(index);
|
| deferred_stage_ = DEFERRED_REDIRECT;
|
| deferred_redirect_ = redirect_info;
|
| deferred_response_ = response;
|
| - return true; // Do not cancel.
|
| + return;
|
| }
|
| }
|
|
|
| next_index_ = 0; // Reset for next time.
|
|
|
| - return next_handler_->OnRequestRedirected(redirect_info, response, defer);
|
| + return next_handler_->OnRequestRedirected(redirect_info, response,
|
| + defer_or_cancel);
|
| }
|
|
|
| -bool ThrottlingResourceHandler::OnWillStart(const GURL& url, bool* defer) {
|
| +void ThrottlingResourceHandler::OnWillStart(const GURL& url,
|
| + bool* defer_or_cancel) {
|
| DCHECK(!cancelled_by_resource_throttle_);
|
|
|
| - *defer = false;
|
| + *defer_or_cancel = false;
|
| while (next_index_ < throttles_.size()) {
|
| int index = next_index_;
|
| - throttles_[index]->WillStartRequest(defer);
|
| + throttles_[index]->WillStartRequest(defer_or_cancel);
|
| next_index_++;
|
| - if (cancelled_by_resource_throttle_)
|
| - return false;
|
| - if (*defer) {
|
| + if (cancelled_by_resource_throttle_) {
|
| + // Nothing else to do here, already told controller() to cancel the
|
| + // request.
|
| + *defer_or_cancel = true;
|
| + return;
|
| + }
|
| + if (*defer_or_cancel) {
|
| OnRequestDefered(index);
|
| deferred_stage_ = DEFERRED_START;
|
| deferred_url_ = url;
|
| - return true; // Do not cancel.
|
| + return;
|
| }
|
| }
|
|
|
| next_index_ = 0; // Reset for next time.
|
|
|
| - return next_handler_->OnWillStart(url, defer);
|
| + next_handler_->OnWillStart(url, defer_or_cancel);
|
| }
|
|
|
| -bool ThrottlingResourceHandler::OnResponseStarted(ResourceResponse* response,
|
| - bool* defer) {
|
| +void ThrottlingResourceHandler::OnResponseStarted(ResourceResponse* response,
|
| + bool* defer_or_cancel) {
|
| DCHECK(!cancelled_by_resource_throttle_);
|
|
|
| while (next_index_ < throttles_.size()) {
|
| int index = next_index_;
|
| - throttles_[index]->WillProcessResponse(defer);
|
| + throttles_[index]->WillProcessResponse(defer_or_cancel);
|
| next_index_++;
|
| - if (cancelled_by_resource_throttle_)
|
| - return false;
|
| - if (*defer) {
|
| + if (cancelled_by_resource_throttle_) {
|
| + // Nothing else to do here, already told controller() to cancel the
|
| + // request.
|
| + *defer_or_cancel = true;
|
| + return;
|
| + }
|
| + if (*defer_or_cancel) {
|
| OnRequestDefered(index);
|
| deferred_stage_ = DEFERRED_RESPONSE;
|
| deferred_response_ = response;
|
| - return true; // Do not cancel.
|
| + return;
|
| }
|
| }
|
|
|
| next_index_ = 0; // Reset for next time.
|
|
|
| - return next_handler_->OnResponseStarted(response, defer);
|
| + return next_handler_->OnResponseStarted(response, defer_or_cancel);
|
| }
|
|
|
| void ThrottlingResourceHandler::Cancel() {
|
| @@ -150,12 +164,10 @@ void ThrottlingResourceHandler::ResumeStart() {
|
| GURL url = deferred_url_;
|
| deferred_url_ = GURL();
|
|
|
| - bool defer = false;
|
| - if (!OnWillStart(url, &defer)) {
|
| - controller()->Cancel();
|
| - } else if (!defer) {
|
| + bool defer_or_cancel = false;
|
| + OnWillStart(url, &defer_or_cancel);
|
| + if (!defer_or_cancel)
|
| controller()->Resume();
|
| - }
|
| }
|
|
|
| void ThrottlingResourceHandler::ResumeRedirect() {
|
| @@ -166,12 +178,10 @@ void ThrottlingResourceHandler::ResumeRedirect() {
|
| scoped_refptr<ResourceResponse> response;
|
| deferred_response_.swap(response);
|
|
|
| - bool defer = false;
|
| - if (!OnRequestRedirected(redirect_info, response.get(), &defer)) {
|
| - controller()->Cancel();
|
| - } else if (!defer) {
|
| + bool defer_or_cancel = false;
|
| + OnRequestRedirected(redirect_info, response.get(), &defer_or_cancel);
|
| + if (!defer_or_cancel)
|
| controller()->Resume();
|
| - }
|
| }
|
|
|
| void ThrottlingResourceHandler::ResumeResponse() {
|
| @@ -180,12 +190,10 @@ void ThrottlingResourceHandler::ResumeResponse() {
|
| scoped_refptr<ResourceResponse> response;
|
| deferred_response_.swap(response);
|
|
|
| - bool defer = false;
|
| - if (!OnResponseStarted(response.get(), &defer)) {
|
| - controller()->Cancel();
|
| - } else if (!defer) {
|
| + bool defer_or_cancel = false;
|
| + OnResponseStarted(response.get(), &defer_or_cancel);
|
| + if (!defer_or_cancel)
|
| controller()->Resume();
|
| - }
|
| }
|
|
|
| void ThrottlingResourceHandler::OnRequestDefered(int throttle_index) {
|
|
|