Started working on modern policies (from Epiphany)

UI finished, just need to hook it up to the backend.
This commit is contained in:
James Magahern
2021-09-29 18:55:23 -07:00
parent 2e25a303b0
commit 31787f57ae
7 changed files with 377 additions and 100 deletions

View File

@@ -10,7 +10,7 @@ import Foundation
class ResourcePolicyManager: NSObject, SBRResourceOriginPolicyDataSource
{
static let AllowedOriginsDefaultsKey = "allowedOrigins"
static let EnabledOriginsDefaultsKey = "enabledOrigins"
static let OriginPoliciesDefaultsKey = "originPolicies"
private static func stringSetForKey(_ key: String) -> Set<String> {
if let set = UserDefaults.standard.array(forKey: key) as? [String] {
@@ -30,6 +30,19 @@ class ResourcePolicyManager: NSObject, SBRResourceOriginPolicyDataSource
func allowedOriginsForScriptResources() -> Set<String> { allowedOriginSet }
private lazy var scriptPolicies: Dictionary<String, ScriptPolicy.PolicyType> = {
if let existingDict = UserDefaults.standard.dictionary(forKey: Self.OriginPoliciesDefaultsKey) as? Dictionary<String, Int> {
return existingDict.mapValues { ScriptPolicy.PolicyType(rawValue: $0)! }
}
return Dictionary<String, ScriptPolicy.PolicyType>()
}() {
didSet {
let encodableDictionary = scriptPolicies.mapValues { $0.rawValue }
UserDefaults.standard.set(encodableDictionary, forKey: Self.OriginPoliciesDefaultsKey)
}
}
func allowOriginToLoadScriptResources(_ origin: String) {
allowedOriginSet.formUnion([ origin ])
}
@@ -37,4 +50,16 @@ class ResourcePolicyManager: NSObject, SBRResourceOriginPolicyDataSource
func disallowOriginToLoadScriptResources(_ origin: String) {
allowedOriginSet.remove(origin)
}
func scriptPolicy(forOrigin origin: String) -> ScriptPolicy {
if let policyType = scriptPolicies[origin] {
return ScriptPolicy(policyType: policyType, securityOrigin: origin)
}
return ScriptPolicy(policyType: .alpha, securityOrigin: origin)
}
func setScriptPolicyType(_ policyType: ScriptPolicy.PolicyType, forOrigin origin: String) {
scriptPolicies[origin] = policyType
}
}