| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #import "ios/net/crn_http_protocol_handler_proxy_with_client_thread.h" | 5 #import "ios/net/crn_http_protocol_handler_proxy_with_client_thread.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #import "base/mac/scoped_nsobject.h" | 8 #import "base/mac/scoped_nsobject.h" |
| 9 #include "base/time/time.h" | 9 #include "base/time/time.h" |
| 10 #import "ios/net/protocol_handler_util.h" | 10 #import "ios/net/protocol_handler_util.h" |
| 11 #include "net/base/auth.h" | 11 #include "net/base/auth.h" |
| 12 #include "net/url_request/url_request.h" | 12 #include "net/url_request/url_request.h" |
| 13 | 13 |
| 14 // When the protocol is invalidated, no synchronization (lock) is needed: | 14 // When the protocol is invalidated, no synchronization (lock) is needed: |
| 15 // - The actual calls to the protocol and its invalidation are all done on | 15 // - The actual calls to the protocol and its invalidation are all done on |
| 16 // clientThread_ and thus are serialized. | 16 // clientThread_ and thus are serialized. |
| 17 // - When a proxy method is called, the protocol is compared to nil. There may | 17 // - When a proxy method is called, the protocol is compared to nil. There may |
| 18 // be a conflict at this point, in the case the protocol is being invalidated | 18 // be a conflict at this point, in the case the protocol is being invalidated |
| 19 // during this comparison. However, in such a case, the actual value of the | 19 // during this comparison. However, in such a case, the actual value of the |
| 20 // pointer does not matter: an invalid pointer will behave as a valid one and | 20 // pointer does not matter: an invalid pointer will behave as a valid one and |
| 21 // post a task on the clientThread_, and that task will be handled correctly, | 21 // post a task on the clientThread_, and that task will be handled correctly, |
| 22 // as described by the item above. | 22 // as described by the item above. |
| 23 | 23 |
| 24 @interface CRNHTTPProtocolHandlerProxyWithClientThread () { | 24 @interface CRNHTTPProtocolHandlerProxyWithClientThread () { |
| 25 __weak NSURLProtocol* _protocol; | 25 NSURLProtocol* _protocol; // weak |
| 26 // Thread used to call the client back. | 26 // Thread used to call the client back. |
| 27 // This thread does not have a base::MessageLoop, and thus does not work with | 27 // This thread does not have a base::MessageLoop, and thus does not work with |
| 28 // the usual task posting functions. | 28 // the usual task posting functions. |
| 29 __weak NSThread* _clientThread; | 29 NSThread* _clientThread; // weak |
| 30 // The run loop modes to use when posting tasks to |clientThread_|. | 30 // The run loop modes to use when posting tasks to |clientThread_|. |
| 31 base::scoped_nsobject<NSArray> _runLoopModes; | 31 base::scoped_nsobject<NSArray> _runLoopModes; |
| 32 // The request URL. | 32 // The request URL. |
| 33 base::scoped_nsobject<NSString> _url; | 33 base::scoped_nsobject<NSString> _url; |
| 34 // The creation time of the request. | 34 // The creation time of the request. |
| 35 base::Time _creationTime; | 35 base::Time _creationTime; |
| 36 // |requestComplete_| is used in debug to check that the client is not called | 36 // |requestComplete_| is used in debug to check that the client is not called |
| 37 // after completion. | 37 // after completion. |
| 38 BOOL _requestComplete; | 38 BOOL _requestComplete; |
| 39 BOOL _paused; | 39 BOOL _paused; |
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 255 } | 255 } |
| 256 | 256 |
| 257 - (void)resume { | 257 - (void)resume { |
| 258 DCHECK([NSThread currentThread] == _clientThread); | 258 DCHECK([NSThread currentThread] == _clientThread); |
| 259 DCHECK(!_requestComplete || !_protocol); | 259 DCHECK(!_requestComplete || !_protocol); |
| 260 _paused = NO; | 260 _paused = NO; |
| 261 [self runInvocationQueueOnClientThread]; | 261 [self runInvocationQueueOnClientThread]; |
| 262 } | 262 } |
| 263 | 263 |
| 264 @end | 264 @end |
| OLD | NEW |