Fix crash when opening in new tab
This commit is contained in:
@@ -383,7 +383,7 @@ class BrowserViewController: UIViewController, WKNavigationDelegate, WKUIDelegat
|
||||
|
||||
func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView?
|
||||
{
|
||||
let newTab = tabController.createNewTab(url: nil)
|
||||
let newTab = tabController.createNewTab(url: nil, webViewConfiguration: configuration)
|
||||
newTab.webView.load(navigationAction.request)
|
||||
|
||||
self.tab = newTab
|
||||
|
||||
@@ -18,7 +18,7 @@ class Tab: NSObject, SBRProcessBundleBridgeDelegate
|
||||
public weak var delegate: TabDelegate?
|
||||
|
||||
public let homeURL: URL?
|
||||
public let bridge = SBRProcessBundleBridge()
|
||||
public let bridge: SBRProcessBundleBridge
|
||||
public var webView: WKWebView {
|
||||
if self.loadedWebView == nil {
|
||||
self.loadedWebView = bridge.webView
|
||||
@@ -53,17 +53,19 @@ class Tab: NSObject, SBRProcessBundleBridgeDelegate
|
||||
private var urlObservation: NSKeyValueObservation?
|
||||
|
||||
convenience init(policyManager: ResourcePolicyManager) {
|
||||
self.init(url: nil, policyManager: policyManager)
|
||||
self.init(url: nil, policyManager: policyManager, webViewConfiguration: nil)
|
||||
}
|
||||
|
||||
convenience init(urlString: String, policyManager: ResourcePolicyManager) {
|
||||
self.init(url: URL(string: urlString), policyManager: policyManager)
|
||||
self.init(url: URL(string: urlString), policyManager: policyManager, webViewConfiguration: nil)
|
||||
}
|
||||
|
||||
init(url: URL?, policyManager: ResourcePolicyManager) {
|
||||
init(url: URL?, policyManager: ResourcePolicyManager, webViewConfiguration: WKWebViewConfiguration?) {
|
||||
self.homeURL = url
|
||||
self.policyManager = policyManager
|
||||
bridge.policyDataSource = policyManager
|
||||
|
||||
self.bridge = SBRProcessBundleBridge(webViewConfiguration: webViewConfiguration)
|
||||
self.bridge.policyDataSource = policyManager
|
||||
|
||||
super.init()
|
||||
|
||||
|
||||
@@ -26,7 +26,11 @@ class TabController
|
||||
}
|
||||
|
||||
func createNewTab(url: URL?) -> Tab {
|
||||
let tab = Tab(url: url, policyManager: policyManager)
|
||||
return self.createNewTab(url: url, webViewConfiguration: nil)
|
||||
}
|
||||
|
||||
func createNewTab(url: URL?, webViewConfiguration: WKWebViewConfiguration?) -> Tab {
|
||||
let tab = Tab(url: url, policyManager: policyManager, webViewConfiguration: webViewConfiguration)
|
||||
tabs.append(tab)
|
||||
|
||||
return tab
|
||||
|
||||
@@ -34,9 +34,13 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@property (nonatomic, readonly) BOOL webContentProcessConnected;
|
||||
|
||||
- (instancetype)initWithWebViewConfiguration:(nullable WKWebViewConfiguration *)webViewConfiguration NS_DESIGNATED_INITIALIZER;
|
||||
|
||||
- (void)policyDataSourceDidChange;
|
||||
- (void)tearDown;
|
||||
|
||||
- (instancetype)init NS_UNAVAILABLE;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
||||
@@ -60,9 +60,13 @@
|
||||
return interface;
|
||||
}
|
||||
|
||||
- (WKWebView *)webView
|
||||
- (instancetype)initWithWebViewConfiguration:(WKWebViewConfiguration *)webViewConfiguration
|
||||
{
|
||||
if (!_webView) {
|
||||
self = [super init];
|
||||
if (self) {
|
||||
if (!webViewConfiguration) {
|
||||
webViewConfiguration = [[WKWebViewConfiguration alloc] init];
|
||||
|
||||
// Inject bundle
|
||||
_WKProcessPoolConfiguration *poolConfiguration = [[_WKProcessPoolConfiguration alloc] init];
|
||||
NSURL *bundleURL = [[[NSBundle mainBundle] builtInPlugInsURL] URLByAppendingPathComponent:@"SBrowserProcessBundle.bundle"];
|
||||
@@ -81,11 +85,13 @@
|
||||
[_processPool _setObject:allowedOrigins forBundleParameter:SBRGetAllowedOriginsKey()];
|
||||
[_processPool _setObject:@(_allowAllScripts) forBundleParameter:SBRGetAllScriptsAllowedKey()];
|
||||
|
||||
WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
|
||||
configuration.processPool = _processPool;
|
||||
webViewConfiguration.processPool = _processPool;
|
||||
}
|
||||
|
||||
_webViewConfiguration = webViewConfiguration;
|
||||
|
||||
// Instantiate web view
|
||||
WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration];
|
||||
WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:webViewConfiguration];
|
||||
|
||||
// Configure proxy interface (interface to remote web process)
|
||||
_webProcessProxy = [[webView _remoteObjectRegistry] remoteObjectProxyWithInterface:[self _webProcessProxyInterface]];
|
||||
@@ -94,10 +100,9 @@
|
||||
[[webView _remoteObjectRegistry] registerExportedObject:self interface:[self _webProcessDelegateInterface]];
|
||||
|
||||
_webView = webView;
|
||||
_webViewConfiguration = configuration;
|
||||
}
|
||||
|
||||
return _webView;
|
||||
return self;
|
||||
}
|
||||
|
||||
#pragma mark <SBRWebProcessDelegate>
|
||||
|
||||
Reference in New Issue
Block a user