Index: ios/crnet/crnet_consumer/crnet_consumer_app_delegate.mm |
diff --git a/ios/crnet/crnet_consumer/crnet_consumer_app_delegate.mm b/ios/crnet/crnet_consumer/crnet_consumer_app_delegate.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a4b3587bc2955f1dfc2150066f25234127fe29c8 |
--- /dev/null |
+++ b/ios/crnet/crnet_consumer/crnet_consumer_app_delegate.mm |
@@ -0,0 +1,72 @@ |
+// 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 "crnet_consumer_app_delegate.h" |
+ |
+#import "CrNet.h" |
+#include "base/format_macros.h" |
+#import "crnet_consumer_view_controller.h" |
+ |
+@implementation CrNetConsumerAppDelegate { |
+ NSUInteger _counter; |
+} |
+ |
+@synthesize window; |
+@synthesize viewController; |
+ |
+// Returns a file name to save net internals logging. This method suffixes |
+// the ivar |_counter| to the file name so a new name can be obtained by |
+// modifying that. |
+- (NSString *)currentNetLogFileName { |
+ return [NSString |
+ stringWithFormat:@"crnet-consumer-net-log%" PRIuNS ".json", _counter]; |
+} |
+ |
+- (BOOL)application:(UIApplication *)application |
+ didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { |
+ [CrNet setPartialUserAgent:@"Dummy/1.0"]; |
+ [CrNet setQuicEnabled:YES]; |
+ // Always use QUIC if able. |
+ [CrNet setAlternateProtocolThreshold:0.0]; |
+ [CrNet install]; |
+ [CrNet startNetLogToFile:[self currentNetLogFileName] logBytes:NO]; |
+ |
+ NSURLSessionConfiguration* config = |
+ [NSURLSessionConfiguration ephemeralSessionConfiguration]; |
+ [CrNet installIntoSessionConfiguration:config]; |
+ |
+ // Just for fun, don't route chromium.org requests through CrNet. |
+ // |
+ // |chromiumPrefix| is declared outside the scope of the request block so that |
+ // the block references something outside of its own scope, and cannot be |
+ // declared as a global block. This makes sure the block is |
+ // an __NSStackBlock__, and verifies the fix for http://crbug.com/436175 . |
+ NSString *chromiumPrefix = @"www.chromium.org"; |
+ [CrNet setRequestFilterBlock:^BOOL (NSURLRequest *request) { |
+ BOOL isChromiumSite = [[[request URL] host] hasPrefix:chromiumPrefix]; |
+ return !isChromiumSite; |
+ }]; |
+ |
+ self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; |
+ self.viewController = |
+ [[CrNetConsumerViewController alloc] initWithNibName:nil bundle:nil]; |
+ self.window.rootViewController = self.viewController; |
+ [self.window makeKeyAndVisible]; |
+ |
+ return YES; |
+} |
+ |
+- (void)applicationDidEnterBackground:(UIApplication *)application { |
+ [CrNet stopNetLog]; |
+ [CrNet clearCacheWithCompletionCallback:^(int error) { |
+ NSLog(@"Cache cleared: %d\n", error); |
+ }]; |
+} |
+ |
+- (void)applicationWillEnterForeground:(UIApplication *)application { |
+ _counter++; |
+ [CrNet startNetLogToFile:[self currentNetLogFileName] logBytes:NO]; |
+} |
+ |
+@end |