Fix crash, stale allowAllScripts and allowedOrigins

This commit is contained in:
James Magahern
2020-07-29 18:58:31 -07:00
parent 663dfcd2bb
commit c96cafd1ca
5 changed files with 38 additions and 17 deletions

View File

@@ -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) {

View File

@@ -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

View File

@@ -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];
}