1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "content/shell/app/ios/shell_application_ios.h"
#include "base/command_line.h"
#include "content/public/app/content_main.h"
#include "content/public/app/content_main_runner.h"
#include "content/shell/app/shell_main_delegate.h"
#include "content/shell/browser/shell.h"
#include "content/shell/browser/shell_browser_context.h"
#include "content/shell/browser/shell_content_browser_client.h"
#include "ui/gfx/geometry/size.h"
static int g_argc = 0;
static const char** g_argv = nullptr;
static std::unique_ptr<content::ContentMainRunner> g_main_runner;
static std::unique_ptr<content::ShellMainDelegate> g_main_delegate;
@interface ShellAppSceneDelegate : UIResponder <UIWindowSceneDelegate>
@end
@implementation ShellAppSceneDelegate
- (void)scene:(UIScene*)scene
willConnectToSession:(UISceneSession*)session
options:(UISceneConnectionOptions*)connectionOptions {
CHECK_EQ(1u, content::Shell::windows().size());
UIWindow* window = content::Shell::windows()[0]->window().Get();
// The rootViewController must be added after a windowScene is set
// so stash it in a temp variable and then reattach it. If we don't
// do this the safe area gets screwed up on orientation changes.
UIViewController* controller = window.rootViewController;
window.rootViewController = nil;
window.windowScene = (UIWindowScene*)scene;
window.rootViewController = controller;
[window makeKeyAndVisible];
}
@end
@implementation ShellAppDelegate
- (UISceneConfiguration*)application:(UIApplication*)application
configurationForConnectingSceneSession:
(UISceneSession*)connectingSceneSession
options:(UISceneConnectionOptions*)options {
UISceneConfiguration* configuration =
[[UISceneConfiguration alloc] initWithName:nil
sessionRole:connectingSceneSession.role];
configuration.delegateClass = ShellAppSceneDelegate.class;
return configuration;
}
- (BOOL)application:(UIApplication*)application
willFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
g_main_delegate = std::make_unique<content::ShellMainDelegate>();
content::ContentMainParams params(g_main_delegate.get());
params.argc = g_argc;
params.argv = g_argv;
g_main_runner = content::ContentMainRunner::Create();
content::RunContentProcess(std::move(params), g_main_runner.get());
return YES;
}
- (BOOL)application:(UIApplication*)application
didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
return YES;
}
- (void)applicationWillResignActive:(UIApplication*)application {
}
- (void)applicationDidEnterBackground:(UIApplication*)application {
}
- (void)applicationWillEnterForeground:(UIApplication*)application {
}
- (void)applicationDidBecomeActive:(UIApplication*)application {
}
- (void)applicationWillTerminate:(UIApplication*)application {
}
- (BOOL)application:(UIApplication*)application
shouldSaveSecureApplicationState:(NSCoder*)coder {
return YES;
}
- (BOOL)application:(UIApplication*)application
shouldRestoreSecureApplicationState:(NSCoder*)coder {
// TODO(crbug.com/41312374): Make this value configurable in the settings.
return YES;
}
@end
int RunShellApplication(int argc, const char** argv) {
g_argc = argc;
g_argv = argv;
@autoreleasepool {
return UIApplicationMain(argc, const_cast<char**>(argv), nil,
NSStringFromClass([ShellAppDelegate class]));
}
}
|