Index: ios/net/clients/crn_forwarding_network_client_factory.h |
diff --git a/ios/net/clients/crn_forwarding_network_client_factory.h b/ios/net/clients/crn_forwarding_network_client_factory.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4a6ff4795a6efdcc3dea5f277abfb2e5a36ad1b1 |
--- /dev/null |
+++ b/ios/net/clients/crn_forwarding_network_client_factory.h |
@@ -0,0 +1,82 @@ |
+// 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 IOS_NET_CLIENTS_CRN_FORWARDING_NETWORK_CLIENT_FACTORY_H_ |
+#define IOS_NET_CLIENTS_CRN_FORWARDING_NETWORK_CLIENT_FACTORY_H_ |
+ |
+#import <Foundation/Foundation.h> |
+ |
+@class CRNForwardingNetworkClient; |
+class GURL; |
+ |
+namespace net { |
+class URLRequest; |
+} |
+ |
+// Abstract factory that creates CRNForwardingNetworkClient instances. |
+@interface CRNForwardingNetworkClientFactory : NSObject |
+ |
+// Any subclass of CRNForwardingNetworkClientFactory should implement exactly |
+// one of the clientHandling... methods. Each method either returns an network |
+// client, or nil if the request in question isn't eligible for handling |
+// by the factory's clients. A unit test verifies that all subclasses override |
+// one of these methods. |
+ |
+// The expectation is that subclasses of this class will not be derived from; |
+// if this becomes necessary, the unit tests for this class should be updated. |
+ |
+// TODO(marq): Investigate possible less bloated interfaces for this, where (for |
sdefresne
2015/03/10 17:00:44
nit: s/possible/possibly/
|
+// example) all clients are added to each request, and then the clients opt-out |
+// during the existing CRNNetworkClientProtocol calls. |
+ |
+// Return a client to handle any request. |
+// Factories should implement this method only if their clients need to be able |
+// to handle didFailWithError: calls that might originate before the native |
+// request is generated |
+- (CRNForwardingNetworkClient*)clientHandlingAnyRequest; |
+ |
+// Return a client to handle |request|. |
+// Factories should implement this method if their clients need to operate on |
+// the request before it is started (for example, by modifying headers). |
+- (CRNForwardingNetworkClient*) |
+ clientHandlingRequest:(const net::URLRequest&)request; |
+ |
+// Return a client to handle |request| and |response|. |
+// Factories should implement this method if their clients need to operate on |
+// non-redirected responses. |
+- (CRNForwardingNetworkClient*) |
+ clientHandlingResponse:(NSURLResponse*)response |
+ request:(const net::URLRequest&)request; |
+ |
+// Returns a client to handle a redirect of |request| to |url| in response to |
+// |response|. |
+// Factories should only implement this method if their clients need to operate |
+// on redirects. |
+- (CRNForwardingNetworkClient*) |
+ clientHandlingRedirect:(const net::URLRequest&)request |
+ url:(const GURL&)url |
+ response:(NSURLResponse*)response; |
+ |
+// Subclasses must implement this method. |
+// Only used in debug, to check that the ordering is consistent. |
+- (Class)clientClass; |
+ |
+// Class of another network client that this factory client class must be |
+// ordered before or after. Default is nil. |
++ (Class)mustApplyBefore; |
++ (Class)mustApplyAfter; |
+ |
+// YES if this factory may require an array of factories to be ordered. |
+- (BOOL)requiresOrdering; |
+ |
+// YES if the mustApply rules on this class aren't cyclic. Exposed for testing. |
++ (BOOL)orderedOK; |
+ |
+// Comparison function to sort a list of factories. |
+- (NSComparisonResult)orderRelativeTo: |
+ (CRNForwardingNetworkClientFactory*)factory; |
+ |
+@end |
+ |
+#endif // IOS_NET_CLIENTS_CRN_FORWARDING_NETWORK_CLIENT_FACTORY_H_ |