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

#ifndef IOS_CHROME_BROWSER_PRERENDER_MODEL_PRERENDER_SERVICE_H_
#define IOS_CHROME_BROWSER_PRERENDER_MODEL_PRERENDER_SERVICE_H_

#include "components/keyed_service/core/keyed_service.h"
#include "ios/web/public/navigation/referrer.h"
#include "ui/base/page_transition_types.h"
#include "url/gurl.h"

@protocol PreloadControllerDelegate;

namespace web {
class WebState;
}
class Browser;

// PrerenderService manages a prerendered WebState.
class PrerenderService : public KeyedService {
 public:
  // Sets the delegate that will provide information to this service.
  virtual void SetDelegate(id<PreloadControllerDelegate> delegate) = 0;

  // Prerenders the given `url` with the given `transition`.  Normally,
  // prerender requests are fulfilled after a short delay, to prevent
  // unnecessary prerenders while the user is typing.  If `immediately` is YES,
  // this method starts prerendering immediately, with no delay.
  // `web_state_to_replace` is provided so that the new prerendered web state
  // can have the same session data.  `immediately` should be set to YES only
  // when there is a very high confidence that the user will navigate to the
  // given `url`.
  // TODO(crbug.com/40726702): passing `web_state_to_replace` is a workaround
  // for not having prerender service per browser, remove it once
  // prerenderService is a browser agent.
  //
  // If there is already an existing request for `url`, this method does nothing
  // and does not reset the delay timer.  If there is an existing request for a
  // different URL, this method cancels that request and queues this request
  // instead.
  virtual void StartPrerender(const GURL& url,
                              const web::Referrer& referrer,
                              ui::PageTransition transition,
                              web::WebState* web_state_to_replace,
                              bool immediately) = 0;

  // If `url` is prerendered, loads the prerendered web state into
  // `browser`'s WebStateList at the active index, replacing the existing active
  // WebState and saving the session. If not, or if it isn't possible to replace
  // the active web state, cancels the active preload. Metrics and snapshots are
  // appropriately updated. Returns true if the active webstate was replaced,
  // false otherwise.
  virtual bool MaybeLoadPrerenderedURL(const GURL& url,
                                       ui::PageTransition transition,
                                       Browser* browser) = 0;

  // `true` while a prerendered webstate is being inserted into a webStateList.
  virtual bool IsLoadingPrerender() = 0;

  // Cancels any outstanding prerender requests and destroys any prerendered
  // pages.
  virtual void CancelAllPrerenders() = 0;

  // Returns true if there is a prerender for the given `url`.
  virtual bool HasPrerenderForUrl(const GURL& url) = 0;
};

#endif  // IOS_CHROME_BROWSER_PRERENDER_MODEL_PRERENDER_SERVICE_H_
