forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
crn_http_protocol_handler.h
78 lines (59 loc) · 2.57 KB
/
crn_http_protocol_handler.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
// 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_