| 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..54274091c798c693c28ee0cbb4ac6324dab652e6 100644
|
| --- a/content/browser/loader/throttling_resource_handler.cc
|
| +++ b/content/browser/loader/throttling_resource_handler.cc
|
| @@ -33,96 +33,108 @@ ThrottlingResourceHandler::ThrottlingResourceHandler(
|
| ThrottlingResourceHandler::~ThrottlingResourceHandler() {
|
| }
|
|
|
| -bool ThrottlingResourceHandler::OnRequestRedirected(
|
| +void ThrottlingResourceHandler::OnRequestRedirected(
|
| const net::RedirectInfo& redirect_info,
|
| ResourceResponse* response,
|
| - bool* defer) {
|
| + std::unique_ptr<ResourceController> controller) {
|
| + DCHECK(!has_controller());
|
| DCHECK(!cancelled_by_resource_throttle_);
|
|
|
| - *defer = false;
|
| + set_controller(std::move(controller));
|
| while (next_index_ < throttles_.size()) {
|
| int index = next_index_;
|
| - throttles_[index]->WillRedirectRequest(redirect_info, defer);
|
| + bool defer = false;
|
| + throttles_[index]->WillRedirectRequest(redirect_info, &defer);
|
| next_index_++;
|
| if (cancelled_by_resource_throttle_)
|
| - return false;
|
| - if (*defer) {
|
| + return;
|
| + if (defer) {
|
| 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,
|
| + TakeController());
|
| }
|
|
|
| -bool ThrottlingResourceHandler::OnWillStart(const GURL& url, bool* defer) {
|
| +void ThrottlingResourceHandler::OnWillStart(
|
| + const GURL& url,
|
| + std::unique_ptr<ResourceController> controller) {
|
| DCHECK(!cancelled_by_resource_throttle_);
|
| + DCHECK(!has_controller());
|
|
|
| - *defer = false;
|
| + set_controller(std::move(controller));
|
| while (next_index_ < throttles_.size()) {
|
| int index = next_index_;
|
| - throttles_[index]->WillStartRequest(defer);
|
| + bool defer = false;
|
| + throttles_[index]->WillStartRequest(&defer);
|
| next_index_++;
|
| if (cancelled_by_resource_throttle_)
|
| - return false;
|
| - if (*defer) {
|
| + return;
|
| + if (defer) {
|
| 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);
|
| + return next_handler_->OnWillStart(url, TakeController());
|
| }
|
|
|
| -bool ThrottlingResourceHandler::OnResponseStarted(ResourceResponse* response,
|
| - bool* defer) {
|
| +void ThrottlingResourceHandler::OnResponseStarted(
|
| + ResourceResponse* response,
|
| + std::unique_ptr<ResourceController> controller) {
|
| DCHECK(!cancelled_by_resource_throttle_);
|
| + DCHECK(!has_controller());
|
|
|
| + set_controller(std::move(controller));
|
| while (next_index_ < throttles_.size()) {
|
| int index = next_index_;
|
| - throttles_[index]->WillProcessResponse(defer);
|
| + bool defer = false;
|
| + throttles_[index]->WillProcessResponse(&defer);
|
| next_index_++;
|
| if (cancelled_by_resource_throttle_)
|
| - return false;
|
| - if (*defer) {
|
| + return;
|
| + if (defer) {
|
| 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, TakeController());
|
| }
|
|
|
| void ThrottlingResourceHandler::Cancel() {
|
| cancelled_by_resource_throttle_ = true;
|
| - controller()->Cancel();
|
| + ResourceHandler::Cancel();
|
| }
|
|
|
| void ThrottlingResourceHandler::CancelAndIgnore() {
|
| cancelled_by_resource_throttle_ = true;
|
| - controller()->CancelAndIgnore();
|
| + ResourceHandler::CancelAndIgnore();
|
| }
|
|
|
| void ThrottlingResourceHandler::CancelWithError(int error_code) {
|
| cancelled_by_resource_throttle_ = true;
|
| - controller()->CancelWithError(error_code);
|
| + ResourceHandler::CancelWithError(error_code);
|
| }
|
|
|
| void ThrottlingResourceHandler::Resume() {
|
| DCHECK(!cancelled_by_resource_throttle_);
|
| + DCHECK(has_controller());
|
|
|
| DeferredStage last_deferred_stage = deferred_stage_;
|
| deferred_stage_ = DEFERRED_NONE;
|
| @@ -146,46 +158,34 @@ void ThrottlingResourceHandler::Resume() {
|
|
|
| void ThrottlingResourceHandler::ResumeStart() {
|
| DCHECK(!cancelled_by_resource_throttle_);
|
| + DCHECK(has_controller());
|
|
|
| GURL url = deferred_url_;
|
| deferred_url_ = GURL();
|
|
|
| - bool defer = false;
|
| - if (!OnWillStart(url, &defer)) {
|
| - controller()->Cancel();
|
| - } else if (!defer) {
|
| - controller()->Resume();
|
| - }
|
| + OnWillStart(url, TakeController());
|
| }
|
|
|
| void ThrottlingResourceHandler::ResumeRedirect() {
|
| DCHECK(!cancelled_by_resource_throttle_);
|
| + DCHECK(has_controller());
|
|
|
| net::RedirectInfo redirect_info = deferred_redirect_;
|
| deferred_redirect_ = net::RedirectInfo();
|
| scoped_refptr<ResourceResponse> response;
|
| deferred_response_.swap(response);
|
|
|
| - bool defer = false;
|
| - if (!OnRequestRedirected(redirect_info, response.get(), &defer)) {
|
| - controller()->Cancel();
|
| - } else if (!defer) {
|
| - controller()->Resume();
|
| - }
|
| + OnRequestRedirected(redirect_info, response.get(), TakeController());
|
| }
|
|
|
| void ThrottlingResourceHandler::ResumeResponse() {
|
| DCHECK(!cancelled_by_resource_throttle_);
|
| + DCHECK(has_controller());
|
|
|
| scoped_refptr<ResourceResponse> response;
|
| deferred_response_.swap(response);
|
|
|
| - bool defer = false;
|
| - if (!OnResponseStarted(response.get(), &defer)) {
|
| - controller()->Cancel();
|
| - } else if (!defer) {
|
| - controller()->Resume();
|
| - }
|
| + OnResponseStarted(response.get(), TakeController());
|
| }
|
|
|
| void ThrottlingResourceHandler::OnRequestDefered(int throttle_index) {
|
|
|