| Index: ios/net/clients/crn_forwarding_network_client_factory.mm
|
| diff --git a/ios/net/clients/crn_forwarding_network_client_factory.mm b/ios/net/clients/crn_forwarding_network_client_factory.mm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..f2c16d3863ad3f4632660766dadc05a50e50bdcd
|
| --- /dev/null
|
| +++ b/ios/net/clients/crn_forwarding_network_client_factory.mm
|
| @@ -0,0 +1,102 @@
|
| +// 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.
|
| +
|
| +#import "ios/net/clients/crn_forwarding_network_client_factory.h"
|
| +
|
| +#include "base/mac/scoped_nsobject.h"
|
| +#include "base/memory/weak_ptr.h"
|
| +#import "ios/net/clients/crn_forwarding_network_client.h"
|
| +
|
| +@implementation CRNForwardingNetworkClientFactory
|
| +
|
| +// Init just sanity checks that the factory class has sane ordering rules.
|
| +- (instancetype)init {
|
| + if ((self = [super init])) {
|
| + // Type checks.
|
| + DCHECK(![[self class] mustApplyBefore] ||
|
| + [[[self class] mustApplyBefore]
|
| + isSubclassOfClass:[CRNForwardingNetworkClientFactory class]]);
|
| + DCHECK(![[self class] mustApplyAfter] ||
|
| + [[[self class] mustApplyAfter]
|
| + isSubclassOfClass:[CRNForwardingNetworkClientFactory class]]);
|
| + // Order check.
|
| + DCHECK([[self class] orderedOK]);
|
| + }
|
| + return self;
|
| +}
|
| +
|
| +- (CRNForwardingNetworkClient*)clientHandlingAnyRequest {
|
| + return nil;
|
| +}
|
| +
|
| +- (CRNForwardingNetworkClient*)
|
| + clientHandlingRequest:(const net::URLRequest&)request {
|
| + return nil;
|
| +}
|
| +
|
| +- (CRNForwardingNetworkClient*)
|
| + clientHandlingResponse:(NSURLResponse*)response
|
| + request:(const net::URLRequest&)request {
|
| + return nil;
|
| +}
|
| +
|
| +- (CRNForwardingNetworkClient*)
|
| + clientHandlingRedirect:(const net::URLRequest&)request
|
| + url:(const GURL&)url
|
| + response:(NSURLResponse*)response {
|
| + return nil;
|
| +}
|
| +
|
| +- (Class)clientClass {
|
| + return nil;
|
| +}
|
| +
|
| ++ (Class)mustApplyBefore {
|
| + return nil;
|
| +}
|
| +
|
| ++ (Class)mustApplyAfter {
|
| + return nil;
|
| +}
|
| +
|
| +- (BOOL)requiresOrdering {
|
| + return [[self class] mustApplyAfter] || [[self class] mustApplyBefore];
|
| +}
|
| +
|
| +// Verify that the ordering is sensible. If the calling class encounters itself
|
| +// walking dependencies in either direction, it's broken. If any of the classes
|
| +// it must appear after are also classes it must appear before, it's broken.
|
| ++ (BOOL)orderedOK {
|
| + Class precursor = [self class];
|
| + NSMutableArray* precursors = [NSMutableArray array];
|
| + while ((precursor = [precursor mustApplyAfter])) {
|
| + if (precursor == [self class])
|
| + return NO;
|
| + [precursors addObject:precursor];
|
| + }
|
| + id successor = [self class];
|
| + while ((successor = [successor mustApplyBefore])) {
|
| + if (successor == [self class])
|
| + return NO;
|
| + if ([precursors indexOfObject:successor] != NSNotFound)
|
| + return NO;
|
| + }
|
| + return YES;
|
| +}
|
| +
|
| +- (NSComparisonResult)
|
| + orderRelativeTo:(CRNForwardingNetworkClientFactory*)factory {
|
| + NSComparisonResult result = NSOrderedSame;
|
| + if ([[self class] mustApplyBefore] == [factory class] ||
|
| + [[factory class] mustApplyAfter] == [self class]) {
|
| + result = NSOrderedAscending;
|
| + }
|
| + if ([[self class] mustApplyAfter] == [factory class] ||
|
| + [[factory class] mustApplyBefore] == [self class]) {
|
| + result = NSOrderedDescending;
|
| + }
|
| + return result;
|
| +}
|
| +
|
| +@end
|
|
|