Adds keyboard shortcuts for changing script policy

This commit is contained in:
2024-08-05 18:09:04 -07:00
parent 69aa02e303
commit 0fd466d86d
4 changed files with 67 additions and 1 deletions

View File

@@ -177,4 +177,40 @@ extension BrowserViewController: ShortcutResponder
createNewTab(withURL: event.url) 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
}
}
} }

View File

@@ -114,7 +114,7 @@ class BrowserViewController: UIViewController
// Script button // Script button
toolbarController.scriptControllerIconView.addAction(UIAction(handler: { [unowned self] action in 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 loadedScripts = currentTab.allowedScriptOrigins.union(currentTab.blockedScriptOrigins)
let scriptViewController = ScriptPolicyViewController(policyManager: self.policyManager, let scriptViewController = ScriptPolicyViewController(policyManager: self.policyManager,
hostOrigin: hostOrigin, hostOrigin: hostOrigin,

View File

@@ -6,6 +6,7 @@
// //
import UIKit import UIKit
import UIKit_Private.UIKeyCommand_Private
@objc @objc
protocol ShortcutResponder: AnyObject { protocol ShortcutResponder: AnyObject {
@@ -56,6 +57,12 @@ protocol ShortcutResponder: AnyObject {
@objc @objc
optional func handleOpenURL(_ sender: Any?, forEvent event: OpenURLEvent?) optional func handleOpenURL(_ sender: Any?, forEvent event: OpenURLEvent?)
@objc
optional func lowerScriptPolicyRestriction(_ sender: Any?)
@objc
optional func raiseScriptPolicyRestriction(_ sender: Any?)
} }
public class OpenURLEvent: UIEvent { public class OpenURLEvent: UIEvent {
@@ -153,6 +160,22 @@ public class KeyboardShortcuts {
action: #selector(ShortcutResponder.stop) 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() ].removeNulls()
case .go: case .go:

View File

@@ -24,3 +24,10 @@ extension String {
return replacingCharacters(in: startIndex..<endIndex, with: "") return replacingCharacters(in: startIndex..<endIndex, with: "")
} }
} }
extension URL {
internal var securityOrigin: String {
// TODO: This could be smarter
return self.host() ?? ""
}
}