diff --git a/App/Browser View/BrowserViewController+Keyboard.swift b/App/Browser View/BrowserViewController+Keyboard.swift index c79810c..2524250 100644 --- a/App/Browser View/BrowserViewController+Keyboard.swift +++ b/App/Browser View/BrowserViewController+Keyboard.swift @@ -177,4 +177,40 @@ extension BrowserViewController: ShortcutResponder createNewTab(withURL: event.url) } } + + func raiseScriptPolicyRestriction(_ sender: Any?) { + guard let hostOrigin = currentTab.webView.url?.securityOrigin else { return } + let currentPolicy = policyManager.scriptPolicy(forOrigin: hostOrigin) + policyManager.setScriptPolicyType(currentPolicy.policyType--, forOrigin: hostOrigin) + didChangeScriptPolicy() + } + + func lowerScriptPolicyRestriction(_ sender: Any?) { + guard let hostOrigin = currentTab.webView.url?.securityOrigin else { return } + let currentPolicy = policyManager.scriptPolicy(forOrigin: hostOrigin) + policyManager.setScriptPolicyType(currentPolicy.policyType++, forOrigin: hostOrigin) + didChangeScriptPolicy() + } +} + +extension ScriptPolicy.PolicyType { + static postfix func ++ (obj: ScriptPolicy.PolicyType) -> ScriptPolicy.PolicyType { + switch obj { + case .alpha: .bravo + case .bravo: .charlie + case .charlie: .delta + case .delta: .echo + default: obj + } + } + + static postfix func -- (obj: ScriptPolicy.PolicyType) -> ScriptPolicy.PolicyType { + switch obj { + case .bravo: .alpha + case .charlie: .bravo + case .delta: .charlie + case .echo: .delta + default: obj + } + } } diff --git a/App/Browser View/BrowserViewController.swift b/App/Browser View/BrowserViewController.swift index c5d6fb5..1cb98cf 100644 --- a/App/Browser View/BrowserViewController.swift +++ b/App/Browser View/BrowserViewController.swift @@ -114,7 +114,7 @@ class BrowserViewController: UIViewController // Script button toolbarController.scriptControllerIconView.addAction(UIAction(handler: { [unowned self] action in - let hostOrigin = self.webView.url?.host ?? "" + let hostOrigin = self.webView.url?.securityOrigin ?? "" let loadedScripts = currentTab.allowedScriptOrigins.union(currentTab.blockedScriptOrigins) let scriptViewController = ScriptPolicyViewController(policyManager: self.policyManager, hostOrigin: hostOrigin, diff --git a/App/KeyboardShortcuts.swift b/App/KeyboardShortcuts.swift index 85288ff..04c25a9 100644 --- a/App/KeyboardShortcuts.swift +++ b/App/KeyboardShortcuts.swift @@ -6,6 +6,7 @@ // import UIKit +import UIKit_Private.UIKeyCommand_Private @objc protocol ShortcutResponder: AnyObject { @@ -56,6 +57,12 @@ protocol ShortcutResponder: AnyObject { @objc optional func handleOpenURL(_ sender: Any?, forEvent event: OpenURLEvent?) + + @objc + optional func lowerScriptPolicyRestriction(_ sender: Any?) + + @objc + optional func raiseScriptPolicyRestriction(_ sender: Any?) } public class OpenURLEvent: UIEvent { @@ -153,6 +160,22 @@ public class KeyboardShortcuts { action: #selector(ShortcutResponder.stop) ) ]), + + UIMenu(options: .displayInline, children: [ + // Raise Script Policy Restriction + UIKeyCommand( + modifiers: [.alternate], input: "x", + title: "Raise Script Policy Restriction", + action: #selector(ShortcutResponder.raiseScriptPolicyRestriction) + )._nonRepeatable(), + + // Lower Script Policy Restriction + UIKeyCommand( + modifiers: [.alternate], input: "c", + title: "Lower Script Policy Restriction", + action: #selector(ShortcutResponder.lowerScriptPolicyRestriction) + )._nonRepeatable(), + ]) ].removeNulls() case .go: diff --git a/App/Utilities/StringUtilities.swift b/App/Utilities/StringUtilities.swift index 746b4f6..efbeb37 100644 --- a/App/Utilities/StringUtilities.swift +++ b/App/Utilities/StringUtilities.swift @@ -24,3 +24,10 @@ extension String { return replacingCharacters(in: startIndex..