// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_COMMON_PRERENDER_URL_LOADER_THROTTLE_H_
#define CHROME_COMMON_PRERENDER_URL_LOADER_THROTTLE_H_

#include "base/callback.h"
#include "base/memory/weak_ptr.h"
#include "base/optional.h"
#include "base/sequenced_task_runner.h"
#include "base/timer/timer.h"
#include "chrome/common/prerender.mojom.h"
#include "chrome/common/prerender_types.h"
#include "content/public/common/resource_type.h"
#include "content/public/common/url_loader_throttle.h"
#include "net/base/request_priority.h"

namespace prerender {

class PrerenderURLLoaderThrottle
    : public content::URLLoaderThrottle,
      public base::SupportsWeakPtr<PrerenderURLLoaderThrottle> {
 public:
  // If the throttle needs to cancel the prerender, it will run
  // |canceler_getter| on |canceler_getter_task_runner| to do so.
  using CancelerGetterCallback =
      base::OnceCallback<chrome::mojom::PrerenderCanceler*()>;
  PrerenderURLLoaderThrottle(
      PrerenderMode mode,
      const std::string& histogram_prefix,
      CancelerGetterCallback canceler_getter,
      scoped_refptr<base::SequencedTaskRunner> canceler_getter_task_runner);
  ~PrerenderURLLoaderThrottle() override;

  // Called when the prerender is used. This will unpaused requests and set the
  // priorities to the original value.
  void PrerenderUsed();

  void set_destruction_closure(base::OnceClosure closure) {
    destruction_closure_ = std::move(closure);
  }

 private:
  // content::URLLoaderThrottle implementation.
  void DetachFromCurrentSequence() override;
  void WillStartRequest(network::ResourceRequest* request,
                        bool* defer) override;
  void WillRedirectRequest(net::RedirectInfo* redirect_info,
                           const network::ResourceResponseHead& response_head,
                           bool* defer,
                           std::vector<std::string>* to_be_removed_headers,
                           net::HttpRequestHeaders* modified_headers) override;
  void WillProcessResponse(const GURL& response_url,
                           network::ResourceResponseHead* response_head,
                           bool* defer) override;

  void OnTimedOut();

  PrerenderMode mode_;
  std::string histogram_prefix_;

  bool deferred_ = false;
  bool sync_xhr_ = false;
  int redirect_count_ = 0;
  content::ResourceType resource_type_;

  CancelerGetterCallback canceler_getter_;
  scoped_refptr<base::SequencedTaskRunner> canceler_getter_task_runner_;

  // The throttle changes most request priorities to IDLE during prerendering.
  // The priority is reset back to the original priority when prerendering is
  // finished.
  base::Optional<net::RequestPriority> original_request_priority_;

  base::OnceClosure destruction_closure_;

  base::OneShotTimer detached_timer_;
};

}  // namespace prerender

#endif  // CHROME_COMMON_PRERENDER_URL_LOADER_THROTTLE_H_
