// Copyright 2014 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 NET_BASE_LAYERED_NETWORK_DELEGATE_H_
#define NET_BASE_LAYERED_NETWORK_DELEGATE_H_

#include <memory>
#include <set>

#include "base/strings/string16.h"
#include "net/base/completion_once_callback.h"
#include "net/base/net_export.h"
#include "net/base/network_delegate.h"
#include "net/cookies/canonical_cookie.h"
#include "net/proxy_resolution/proxy_retry_info.h"
#include "starboard/types.h"

class GURL;

namespace base {
class FilePath;
}

namespace net {

class CookieOptions;
class HttpRequestHeaders;
class HttpResponseHeaders;
class ProxyInfo;
class URLRequest;

// LayeredNetworkDelegate takes a |network_delegate| and extends it. When
// On*() is called, the On*Internal() method of this is first called and then
// the On*() of |network_delegate| is called. On*Internal() methods have no
// return values, and cannot prevent calling into the nested network delegate.
class NET_EXPORT LayeredNetworkDelegate : public NetworkDelegate {
 public:
  explicit LayeredNetworkDelegate(
      std::unique_ptr<NetworkDelegate> nested_network_delegate);
  ~LayeredNetworkDelegate() override;

  // Allows creating a LayeredNetworkDelegate that passes through calls to a
  // NetworkDelegate it does not own.
  // TODO(mmenke): Remove this once no longer needed.
  static std::unique_ptr<NetworkDelegate> CreatePassThroughNetworkDelegate(
      NetworkDelegate* unowned_nested_network_delegate);

  // NetworkDelegate implementation:
  int OnBeforeURLRequest(URLRequest* request,
                         CompletionOnceCallback callback,
                         GURL* new_url) final;
  int OnBeforeStartTransaction(URLRequest* request,
                               CompletionOnceCallback callback,
                               HttpRequestHeaders* headers) final;
  void OnBeforeSendHeaders(URLRequest* request,
                           const ProxyInfo& proxy_info,
                           const ProxyRetryInfoMap& proxy_retry_info,
                           HttpRequestHeaders* headers) final;
  void OnStartTransaction(URLRequest* request,
                          const HttpRequestHeaders& headers) final;
  int OnHeadersReceived(
      URLRequest* request,
      CompletionOnceCallback callback,
      const HttpResponseHeaders* original_response_headers,
      scoped_refptr<HttpResponseHeaders>* override_response_headers,
      GURL* allowed_unsafe_redirect_url) final;
  void OnBeforeRedirect(URLRequest* request, const GURL& new_location) final;

  void OnResponseStarted(URLRequest* request, int net_error) final;
  void OnNetworkBytesReceived(URLRequest* request,
                              int64_t bytes_received) final;
  void OnNetworkBytesSent(URLRequest* request, int64_t bytes_sent) final;
  void OnCompleted(URLRequest* request, bool started, int net_error) final;
  void OnURLRequestDestroyed(URLRequest* request) final;
  void OnPACScriptError(int line_number, const base::string16& error) final;
  AuthRequiredResponse OnAuthRequired(URLRequest* request,
                                      const AuthChallengeInfo& auth_info,
                                      AuthCallback callback,
                                      AuthCredentials* credentials) final;
  bool OnCanGetCookies(const URLRequest& request,
                       const CookieList& cookie_list,
                       bool allowed_from_caller) final;
  bool OnCanSetCookie(const URLRequest& request,
                      const net::CanonicalCookie& cookie,
                      CookieOptions* options,
                      bool allowed_from_caller) final;
  bool OnCanAccessFile(const URLRequest& request,
                       const base::FilePath& original_path,
                       const base::FilePath& absolute_path) const final;
  bool OnCanEnablePrivacyMode(const GURL& url,
                              const GURL& site_for_cookies) const final;
  bool OnAreExperimentalCookieFeaturesEnabled() const final;
  bool OnCancelURLRequestWithPolicyViolatingReferrerHeader(
      const URLRequest& request,
      const GURL& target_url,
      const GURL& referrer_url) const final;

  bool OnCanQueueReportingReport(const url::Origin& origin) const final;

  void OnCanSendReportingReports(std::set<url::Origin> origins,
                                 base::OnceCallback<void(std::set<url::Origin>)>
                                     result_callback) const final;

  bool OnCanSetReportingClient(const url::Origin& origin,
                               const GURL& endpoint) const final;

  bool OnCanUseReportingClient(const url::Origin& origin,
                               const GURL& endpoint) const final;

 protected:
  virtual void OnBeforeURLRequestInternal(URLRequest* request, GURL* new_url);

  virtual void OnBeforeStartTransactionInternal(
      URLRequest* request,
      HttpRequestHeaders* headers);

  virtual void OnBeforeSendHeadersInternal(
      URLRequest* request,
      const ProxyInfo& proxy_info,
      const ProxyRetryInfoMap& proxy_retry_info,
      HttpRequestHeaders* headers);

  virtual void OnStartTransactionInternal(URLRequest* request,
                                          const HttpRequestHeaders& headers);

  virtual void OnHeadersReceivedInternal(
      URLRequest* request,
      const HttpResponseHeaders* original_response_headers,
      scoped_refptr<HttpResponseHeaders>* override_response_headers,
      GURL* allowed_unsafe_redirect_url);

  virtual void OnBeforeRedirectInternal(URLRequest* request,
                                        const GURL& new_location);

  virtual void OnResponseStartedInternal(URLRequest* request, int net_error);

  virtual void OnNetworkBytesReceivedInternal(URLRequest* request,
                                              int64_t bytes_received);

  virtual void OnNetworkBytesSentInternal(URLRequest* request,
                                          int64_t bytes_sent);

  virtual void OnCompletedInternal(URLRequest* request,
                                   bool started,
                                   int net_error);

  virtual void OnURLRequestDestroyedInternal(URLRequest* request);

  virtual void OnPACScriptErrorInternal(int line_number,
                                        const base::string16& error);

  virtual bool OnCanGetCookiesInternal(const URLRequest& request,
                                       const CookieList& cookie_list,
                                       bool allowed_from_caller);

  virtual bool OnCanSetCookieInternal(const URLRequest& request,
                                      const net::CanonicalCookie& cookie,
                                      CookieOptions* options,
                                      bool allowed_from_caller);

  virtual void OnAuthRequiredInternal(URLRequest* request,
                                      const AuthChallengeInfo& auth_info,
                                      AuthCredentials* credentials);

  virtual void OnCanAccessFileInternal(
      const URLRequest& request,
      const base::FilePath& original_path,
      const base::FilePath& absolute_path) const;

  // If this returns false, it short circuits the corresponding call in any
  // nested NetworkDelegates.
  virtual bool OnCanEnablePrivacyModeInternal(
      const GURL& url,
      const GURL& site_for_cookies) const;

  virtual void OnAreExperimentalCookieFeaturesEnabledInternal() const;

  // If this returns false, it short circuits the corresponding call in any
  // nested NetworkDelegates.
  virtual bool OnCancelURLRequestWithPolicyViolatingReferrerHeaderInternal(
      const URLRequest& request,
      const GURL& target_url,
      const GURL& referrer_url) const;

  virtual void OnCanQueueReportingReportInternal(
      const url::Origin& origin) const;

  virtual void OnCanSendReportingReportsInternal(
      const std::set<url::Origin>& origins) const;

  virtual void OnCanSetReportingClientInternal(const url::Origin& origin,
                                               const GURL& endpoint) const;

  virtual void OnCanUseReportingClientInternal(const url::Origin& origin,
                                               const GURL& endpoint) const;

 private:
  explicit LayeredNetworkDelegate(
      NetworkDelegate* unowned_nested_network_delegate);

  std::unique_ptr<NetworkDelegate> owned_nested_network_delegate_;
  NetworkDelegate* nested_network_delegate_ = nullptr;
};

}  // namespace net

#endif  // NET_BASE_LAYERED_NETWORK_DELEGATE_H_
