Index: ios/net/clients/crn_forwarding_network_client.mm |
diff --git a/ios/net/clients/crn_forwarding_network_client.mm b/ios/net/clients/crn_forwarding_network_client.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8d8f114114b14bed6cba19912462c03af27ec07f |
--- /dev/null |
+++ b/ios/net/clients/crn_forwarding_network_client.mm |
@@ -0,0 +1,87 @@ |
+// Copyright 2013 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. |
+ |
+#import "ios/net/clients/crn_forwarding_network_client.h" |
+ |
+#include "base/logging.h" |
+#include "base/mac/scoped_nsobject.h" |
+#include "base/threading/thread_checker.h" |
+ |
+@implementation CRNForwardingNetworkClient { |
+ // Next client in the client chain. |
+ base::scoped_nsprotocol<id<CRNNetworkClientProtocol>> _underlyingClient; |
+ base::ThreadChecker _threadChecker; |
+} |
+ |
+#pragma mark CRNNetworkClientProtocol methods |
+ |
+- (void)didFailWithNSErrorCode:(NSInteger)nsErrorCode |
+ netErrorCode:(int)netErrorCode { |
+ DCHECK(_threadChecker.CalledOnValidThread()); |
+ DCHECK(_underlyingClient); |
+ [_underlyingClient didFailWithNSErrorCode:nsErrorCode |
+ netErrorCode:netErrorCode]; |
+} |
+ |
+- (void)didLoadData:(NSData*)data { |
+ DCHECK(_threadChecker.CalledOnValidThread()); |
+ DCHECK(_underlyingClient); |
+ [_underlyingClient didLoadData:data]; |
+} |
+ |
+- (void)didReceiveResponse:(NSURLResponse*)response { |
+ DCHECK(_threadChecker.CalledOnValidThread()); |
+ DCHECK(_underlyingClient); |
+ [_underlyingClient didReceiveResponse:response]; |
+} |
+ |
+- (void)wasRedirectedToRequest:(NSURLRequest*)request |
+ nativeRequest:(net::URLRequest*)nativeRequest |
+ redirectResponse:(NSURLResponse*)response { |
+ DCHECK(_threadChecker.CalledOnValidThread()); |
+ DCHECK(_underlyingClient); |
+ [_underlyingClient wasRedirectedToRequest:request |
+ nativeRequest:nativeRequest |
+ redirectResponse:response]; |
+} |
+ |
+- (void)didFinishLoading { |
+ DCHECK(_threadChecker.CalledOnValidThread()); |
+ DCHECK(_underlyingClient); |
+ [_underlyingClient didFinishLoading]; |
+} |
+ |
+- (void)didCreateNativeRequest:(net::URLRequest*)nativeRequest { |
+ DCHECK(_threadChecker.CalledOnValidThread()); |
+ DCHECK(_underlyingClient); |
+ [_underlyingClient didCreateNativeRequest:nativeRequest]; |
+} |
+ |
+- (void)didRecieveAuthChallenge:(net::AuthChallengeInfo*)authInfo |
+ nativeRequest:(const net::URLRequest&)nativeRequest |
+ callback:(const network_client::AuthCallback&)callback { |
+ DCHECK(_threadChecker.CalledOnValidThread()); |
+ DCHECK(_underlyingClient); |
+ [_underlyingClient didRecieveAuthChallenge:authInfo |
+ nativeRequest:nativeRequest |
+ callback:callback]; |
+} |
+ |
+- (void)cancelAuthRequest { |
+ DCHECK(_threadChecker.CalledOnValidThread()); |
+ DCHECK(_underlyingClient); |
+ [_underlyingClient cancelAuthRequest]; |
+} |
+ |
+- (id<CRNNetworkClientProtocol>)underlyingClient { |
+ return _underlyingClient; |
+} |
+ |
+- (void)setUnderlyingClient:(id<CRNNetworkClientProtocol>)underlyingClient { |
+ DCHECK(_threadChecker.CalledOnValidThread()); |
+ DCHECK(underlyingClient); |
+ _underlyingClient.reset([underlyingClient retain]); |
+} |
+ |
+@end |