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
|
||||
let hostOrigin = webView.url?.host ?? ""
|
||||
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.allowScriptsForTab = self.javaScriptEnabledForTab
|
||||
|
||||
let navController = UINavigationController(rootViewController: scriptViewController)
|
||||
navController.modalPresentationStyle = .popover
|
||||
@@ -95,7 +97,7 @@ class BrowserViewController: UIViewController,
|
||||
}
|
||||
|
||||
override func viewDidLoad() {
|
||||
beginLoadingURL(URL(string: "https://google.com")!)
|
||||
beginLoadingURL(URL(string: "https://news.ycombinator.com")!)
|
||||
}
|
||||
|
||||
override func viewWillAppear(_ animated: Bool) {
|
||||
|
||||
@@ -90,8 +90,9 @@ class ScriptPolicyViewController: UIViewController, UICollectionViewDelegate
|
||||
|
||||
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)
|
||||
allowScriptsForTab = scriptsAllowedForTab
|
||||
|
||||
let listConfig = UICollectionLayoutListConfiguration(appearance: .grouped)
|
||||
let listLayout = UICollectionViewCompositionalLayout.list(using: listConfig)
|
||||
@@ -117,7 +118,9 @@ class ScriptPolicyViewController: UIViewController, UICollectionViewDelegate
|
||||
// Hide script origins
|
||||
snapshot.deleteSections([ .origins ])
|
||||
} else {
|
||||
snapshot.appendSections([ .origins ])
|
||||
if !snapshot.sectionIdentifiers.contains(.origins) {
|
||||
snapshot.appendSections([ .origins ])
|
||||
}
|
||||
snapshot.appendItems(originItems, toSection: .origins)
|
||||
}
|
||||
|
||||
@@ -177,9 +180,14 @@ class ScriptPolicyViewController: UIViewController, UICollectionViewDelegate
|
||||
collectionView.delegate = self
|
||||
|
||||
var snapshot = dataSource.snapshot()
|
||||
snapshot.appendSections([ .tabOptions, .origins ])
|
||||
snapshot.appendSections([ .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)
|
||||
|
||||
self.dataSource = dataSource
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
@implementation SBRProcessBundleBridge {
|
||||
WKWebView *_webView;
|
||||
WKWebViewConfiguration *_webViewConfiguration;
|
||||
WKProcessPool *_processPool;
|
||||
id<SBRWebProcessProxy> _webProcessProxy;
|
||||
|
||||
_WKUserStyleSheet *_darkModeStyleSheet;
|
||||
@@ -41,15 +42,15 @@
|
||||
[poolConfiguration setInjectedBundleURL:bundleURL];
|
||||
|
||||
// Set up process pool
|
||||
WKProcessPool *processPool = [[WKProcessPool alloc] _initWithConfiguration:poolConfiguration];
|
||||
_processPool = [[WKProcessPool alloc] _initWithConfiguration:poolConfiguration];
|
||||
|
||||
// Initialize allowed origins now
|
||||
NSArray<NSString *> *allowedOrigins = [[_policyDataSource allowedOriginsForScriptResources] allObjects];
|
||||
[processPool _setObject:allowedOrigins forBundleParameter:SBRGetAllowedOriginsKey()];
|
||||
[processPool _setObject:@(_allowAllScripts) forBundleParameter:SBRGetAllScriptsAllowedKey()];
|
||||
[_processPool _setObject:allowedOrigins forBundleParameter:SBRGetAllowedOriginsKey()];
|
||||
[_processPool _setObject:@(_allowAllScripts) forBundleParameter:SBRGetAllScriptsAllowedKey()];
|
||||
|
||||
WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
|
||||
configuration.processPool = processPool;
|
||||
configuration.processPool = _processPool;
|
||||
|
||||
// Instantiate web view
|
||||
WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration];
|
||||
@@ -78,9 +79,14 @@
|
||||
[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
|
||||
@@ -88,11 +94,14 @@
|
||||
- (void)policyDataSourceDidChange
|
||||
{
|
||||
NSArray<NSString *> *allowedOrigins = [[_policyDataSource allowedOriginsForScriptResources] allObjects];
|
||||
[_processPool _setObject:allowedOrigins forBundleParameter:SBRGetAllowedOriginsKey()];
|
||||
[_webProcessProxy syncAllowedResourceOrigins:allowedOrigins];
|
||||
}
|
||||
|
||||
- (void)setAllowAllScripts:(BOOL)allowAllScripts
|
||||
{
|
||||
_allowAllScripts = allowAllScripts;
|
||||
[_processPool _setObject:@(_allowAllScripts) forBundleParameter:SBRGetAllScriptsAllowedKey()];
|
||||
[_webProcessProxy setAllScriptsAllowed:allowAllScripts];
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user