// Copyright 2012 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 IOS_NET_CRN_HTTP_PROTOCOL_HANDLER_H_
#define IOS_NET_CRN_HTTP_PROTOCOL_HANDLER_H_

#import <Foundation/Foundation.h>

#include "base/macros.h"
#include "net/base/load_timing_info.h"
#include "net/http/http_response_info.h"

namespace net {
class URLRequestContextGetter;

class HTTPProtocolHandlerDelegate {
 public:
  // Sets the global instance of the HTTPProtocolHandlerDelegate.
  static void SetInstance(HTTPProtocolHandlerDelegate* delegate);

  virtual ~HTTPProtocolHandlerDelegate() {}

  // Returns true if CRNHTTPProtocolHandler should handle the request.
  // Returns false if the request should be passed down the NSURLProtocol chain.
  virtual bool CanHandleRequest(NSURLRequest* request) = 0;

  // If IsRequestSupported returns true, |request| will be processed, otherwise
  // a NSURLErrorUnsupportedURL error is generated.
  virtual bool IsRequestSupported(NSURLRequest* request) = 0;

  // Returns the request context used. Must not return null.
  virtual URLRequestContextGetter* GetDefaultURLRequestContext() = 0;
};

// Delegate class which supplies a metrics callback that is invoked when a net
// request is stopped.
class MetricsDelegate {
 public:
  // Simple struct collecting all of the metrics data that is passed through to
  // the MetricsDelegate callback.
  struct Metrics {
    Metrics();
    ~Metrics();

    NSURLSessionTask* task;
    LoadTimingInfo load_timing_info;
    HttpResponseInfo response_info;
    base::Time response_end_time;

   private:
    DISALLOW_COPY_AND_ASSIGN(Metrics);
  };

  // Set the global instance of the MetricsDelegate.
  static void SetInstance(MetricsDelegate* delegate);

  virtual ~MetricsDelegate() = default;

  // This is invoked once when the request begins, in order to set up things
  // which may be needed by OnStopNetRequest.
  virtual void OnStartNetRequest(NSURLSessionTask* task) = 0;

  // This is invoked once the request is finally stopped, with metrics data
  // collect by net passed in as an argument.
  virtual void OnStopNetRequest(std::unique_ptr<Metrics> metrics) = 0;
};

}  // namespace net

// Custom NSURLProtocol handling HTTP and HTTPS requests.
// The HttpProtocolHandler is registered as a NSURLProtocol in the iOS system.
// This protocol is called for each NSURLRequest. This allows handling the
// requests issued by UIWebView using our own network stack.
@interface CRNHTTPProtocolHandler : NSURLProtocol
@end

#endif  // IOS_NET_CRN_HTTP_PROTOCOL_HANDLER_H_
