Fix crash, stale allowAllScripts and allowedOrigins
This commit is contained in:
@@ -57,9 +57,11 @@ class BrowserViewController: UIViewController,
|
|||||||
toolbarController.scriptControllerIconView.addAction(UIAction(handler: { action in
|
toolbarController.scriptControllerIconView.addAction(UIAction(handler: { action in
|
||||||
let hostOrigin = webView.url?.host ?? ""
|
let hostOrigin = webView.url?.host ?? ""
|
||||||
let loadedScripts = self.allowedScriptOrigins.union(self.blockedScriptOrigins)
|
let loadedScripts = self.allowedScriptOrigins.union(self.blockedScriptOrigins)
|
||||||
let scriptViewController = ScriptPolicyViewController(policyManager: self.policyManager, hostOrigin: hostOrigin, loadedScripts: loadedScripts)
|
let scriptViewController = ScriptPolicyViewController(policyManager: self.policyManager,
|
||||||
|
hostOrigin: hostOrigin,
|
||||||
|
loadedScripts: loadedScripts,
|
||||||
|
scriptsAllowedForTab: self.javaScriptEnabledForTab)
|
||||||
scriptViewController.delegate = self
|
scriptViewController.delegate = self
|
||||||
scriptViewController.allowScriptsForTab = self.javaScriptEnabledForTab
|
|
||||||
|
|
||||||
let navController = UINavigationController(rootViewController: scriptViewController)
|
let navController = UINavigationController(rootViewController: scriptViewController)
|
||||||
navController.modalPresentationStyle = .popover
|
navController.modalPresentationStyle = .popover
|
||||||
@@ -95,7 +97,7 @@ class BrowserViewController: UIViewController,
|
|||||||
}
|
}
|
||||||
|
|
||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
beginLoadingURL(URL(string: "https://google.com")!)
|
beginLoadingURL(URL(string: "https://news.ycombinator.com")!)
|
||||||
}
|
}
|
||||||
|
|
||||||
override func viewWillAppear(_ animated: Bool) {
|
override func viewWillAppear(_ animated: Bool) {
|
||||||
|
|||||||
@@ -90,8 +90,9 @@ class ScriptPolicyViewController: UIViewController, UICollectionViewDelegate
|
|||||||
|
|
||||||
private static let enableScriptsForTabItem: String = "enableScriptsForTab"
|
private static let enableScriptsForTabItem: String = "enableScriptsForTab"
|
||||||
|
|
||||||
convenience init(policyManager: ResourcePolicyManager, hostOrigin: String, loadedScripts: Set<String>) {
|
convenience init(policyManager: ResourcePolicyManager, hostOrigin: String, loadedScripts: Set<String>, scriptsAllowedForTab: Bool) {
|
||||||
self.init(nibName: nil, bundle: nil)
|
self.init(nibName: nil, bundle: nil)
|
||||||
|
allowScriptsForTab = scriptsAllowedForTab
|
||||||
|
|
||||||
let listConfig = UICollectionLayoutListConfiguration(appearance: .grouped)
|
let listConfig = UICollectionLayoutListConfiguration(appearance: .grouped)
|
||||||
let listLayout = UICollectionViewCompositionalLayout.list(using: listConfig)
|
let listLayout = UICollectionViewCompositionalLayout.list(using: listConfig)
|
||||||
@@ -117,7 +118,9 @@ class ScriptPolicyViewController: UIViewController, UICollectionViewDelegate
|
|||||||
// Hide script origins
|
// Hide script origins
|
||||||
snapshot.deleteSections([ .origins ])
|
snapshot.deleteSections([ .origins ])
|
||||||
} else {
|
} else {
|
||||||
snapshot.appendSections([ .origins ])
|
if !snapshot.sectionIdentifiers.contains(.origins) {
|
||||||
|
snapshot.appendSections([ .origins ])
|
||||||
|
}
|
||||||
snapshot.appendItems(originItems, toSection: .origins)
|
snapshot.appendItems(originItems, toSection: .origins)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,9 +180,14 @@ class ScriptPolicyViewController: UIViewController, UICollectionViewDelegate
|
|||||||
collectionView.delegate = self
|
collectionView.delegate = self
|
||||||
|
|
||||||
var snapshot = dataSource.snapshot()
|
var snapshot = dataSource.snapshot()
|
||||||
snapshot.appendSections([ .tabOptions, .origins ])
|
snapshot.appendSections([ .tabOptions ])
|
||||||
snapshot.appendItems([ Self.enableScriptsForTabItem ], toSection: .tabOptions)
|
snapshot.appendItems([ Self.enableScriptsForTabItem ], toSection: .tabOptions)
|
||||||
snapshot.appendItems(originItems, toSection: .origins)
|
|
||||||
|
if !allowScriptsForTab {
|
||||||
|
snapshot.appendSections([ .origins ])
|
||||||
|
snapshot.appendItems(originItems, toSection: .origins)
|
||||||
|
}
|
||||||
|
|
||||||
dataSource.apply(snapshot)
|
dataSource.apply(snapshot)
|
||||||
|
|
||||||
self.dataSource = dataSource
|
self.dataSource = dataSource
|
||||||
|
|||||||
@@ -27,6 +27,7 @@
|
|||||||
@implementation SBRProcessBundleBridge {
|
@implementation SBRProcessBundleBridge {
|
||||||
WKWebView *_webView;
|
WKWebView *_webView;
|
||||||
WKWebViewConfiguration *_webViewConfiguration;
|
WKWebViewConfiguration *_webViewConfiguration;
|
||||||
|
WKProcessPool *_processPool;
|
||||||
id<SBRWebProcessProxy> _webProcessProxy;
|
id<SBRWebProcessProxy> _webProcessProxy;
|
||||||
|
|
||||||
_WKUserStyleSheet *_darkModeStyleSheet;
|
_WKUserStyleSheet *_darkModeStyleSheet;
|
||||||
@@ -41,15 +42,15 @@
|
|||||||
[poolConfiguration setInjectedBundleURL:bundleURL];
|
[poolConfiguration setInjectedBundleURL:bundleURL];
|
||||||
|
|
||||||
// Set up process pool
|
// Set up process pool
|
||||||
WKProcessPool *processPool = [[WKProcessPool alloc] _initWithConfiguration:poolConfiguration];
|
_processPool = [[WKProcessPool alloc] _initWithConfiguration:poolConfiguration];
|
||||||
|
|
||||||
// Initialize allowed origins now
|
// Initialize allowed origins now
|
||||||
NSArray<NSString *> *allowedOrigins = [[_policyDataSource allowedOriginsForScriptResources] allObjects];
|
NSArray<NSString *> *allowedOrigins = [[_policyDataSource allowedOriginsForScriptResources] allObjects];
|
||||||
[processPool _setObject:allowedOrigins forBundleParameter:SBRGetAllowedOriginsKey()];
|
[_processPool _setObject:allowedOrigins forBundleParameter:SBRGetAllowedOriginsKey()];
|
||||||
[processPool _setObject:@(_allowAllScripts) forBundleParameter:SBRGetAllScriptsAllowedKey()];
|
[_processPool _setObject:@(_allowAllScripts) forBundleParameter:SBRGetAllScriptsAllowedKey()];
|
||||||
|
|
||||||
WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
|
WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
|
||||||
configuration.processPool = processPool;
|
configuration.processPool = _processPool;
|
||||||
|
|
||||||
// Instantiate web view
|
// Instantiate web view
|
||||||
WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration];
|
WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration];
|
||||||
@@ -78,9 +79,14 @@
|
|||||||
[self policyDataSourceDidChange];
|
[self policyDataSourceDidChange];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)webProcessDidLoadScriptWithOrigin:(NSString *)origin
|
- (void)webProcessDidAllowScriptWithOrigin:(NSString *)origin
|
||||||
{
|
{
|
||||||
[_delegate webProcess:self didBlockScriptResourceFromOrigin:origin];
|
[[self delegate] webProcess:self didAllowScriptResourceFromOrigin:origin];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)webProcessDidBlockScriptWithOrigin:(NSString *)origin
|
||||||
|
{
|
||||||
|
[[self delegate] webProcess:self didBlockScriptResourceFromOrigin:origin];
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark Actions
|
#pragma mark Actions
|
||||||
@@ -88,11 +94,14 @@
|
|||||||
- (void)policyDataSourceDidChange
|
- (void)policyDataSourceDidChange
|
||||||
{
|
{
|
||||||
NSArray<NSString *> *allowedOrigins = [[_policyDataSource allowedOriginsForScriptResources] allObjects];
|
NSArray<NSString *> *allowedOrigins = [[_policyDataSource allowedOriginsForScriptResources] allObjects];
|
||||||
|
[_processPool _setObject:allowedOrigins forBundleParameter:SBRGetAllowedOriginsKey()];
|
||||||
[_webProcessProxy syncAllowedResourceOrigins:allowedOrigins];
|
[_webProcessProxy syncAllowedResourceOrigins:allowedOrigins];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setAllowAllScripts:(BOOL)allowAllScripts
|
- (void)setAllowAllScripts:(BOOL)allowAllScripts
|
||||||
{
|
{
|
||||||
|
_allowAllScripts = allowAllScripts;
|
||||||
|
[_processPool _setObject:@(_allowAllScripts) forBundleParameter:SBRGetAllScriptsAllowedKey()];
|
||||||
[_webProcessProxy setAllScriptsAllowed:allowAllScripts];
|
[_webProcessProxy setAllScriptsAllowed:allowAllScripts];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -54,7 +54,7 @@
|
|||||||
{
|
{
|
||||||
_allowedResourceOrigins = [[plugInController parameters] valueForKey:SBRGetAllowedOriginsKey()];
|
_allowedResourceOrigins = [[plugInController parameters] valueForKey:SBRGetAllowedOriginsKey()];
|
||||||
_allScriptsAllowed = [[[plugInController parameters] valueForKey:SBRGetAllScriptsAllowedKey()] boolValue];
|
_allScriptsAllowed = [[[plugInController parameters] valueForKey:SBRGetAllScriptsAllowedKey()] boolValue];
|
||||||
NSLog(@"Got %lu allowed script origins at initialization", (unsigned long)_allowedResourceOrigins.count);
|
NSLog(@"SBRProcessPlugin: %lu origins allowed, all scripts allowed: %@ ", (unsigned long)_allowedResourceOrigins.count, _allScriptsAllowed ? @"YES" : @"NO");
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)webProcessPlugIn:(WKWebProcessPlugInController *)plugInController didCreateBrowserContextController:(WKWebProcessPlugInBrowserContextController *)browserContextController
|
- (void)webProcessPlugIn:(WKWebProcessPlugInController *)plugInController didCreateBrowserContextController:(WKWebProcessPlugInBrowserContextController *)browserContextController
|
||||||
@@ -83,12 +83,13 @@
|
|||||||
NSString *originString = [requestURL host];
|
NSString *originString = [requestURL host];
|
||||||
NSString *requestExtension = [requestURL pathExtension];
|
NSString *requestExtension = [requestURL pathExtension];
|
||||||
if (requestExtension.length > 0 && [requestExtension isEqualToString:@"js"]) {
|
if (requestExtension.length > 0 && [requestExtension isEqualToString:@"js"]) {
|
||||||
[[self processDelegate] webProcessDidLoadScriptWithOrigin:originString];
|
|
||||||
|
|
||||||
if ([self allScriptsAllowed] || [_allowedResourceOrigins containsObject:originString]) {
|
if ([self allScriptsAllowed] || [_allowedResourceOrigins containsObject:originString]) {
|
||||||
NSLog(@"SBRProcessPlugin: Allowing whitelisted requestURL: %@", requestURL);
|
NSLog(@"SBRProcessPlugin: Allowing whitelisted requestURL: %@", requestURL);
|
||||||
|
[[self processDelegate] webProcessDidAllowScriptWithOrigin:originString];
|
||||||
} else {
|
} else {
|
||||||
NSLog(@"SBRProcessPlugin: Blocking requestURL: %@", requestURL);
|
NSLog(@"SBRProcessPlugin: Blocking requestURL: %@", requestURL);
|
||||||
|
[[self processDelegate] webProcessDidBlockScriptWithOrigin:originString];
|
||||||
|
|
||||||
request = nil;
|
request = nil;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
@protocol SBRWebProcessDelegate <NSObject>
|
@protocol SBRWebProcessDelegate <NSObject>
|
||||||
|
|
||||||
- (void)webProcessDidConnect;
|
- (void)webProcessDidConnect;
|
||||||
- (void)webProcessDidLoadScriptWithOrigin:(NSString *)origin;
|
- (void)webProcessDidBlockScriptWithOrigin:(NSString *)origin;
|
||||||
|
- (void)webProcessDidAllowScriptWithOrigin:(NSString *)origin;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
Reference in New Issue
Block a user