Adds keyboard shortcuts for changing script policy
This commit is contained in:
@@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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() ?? ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user