Files
Attractor/App/Web Process Bundle Bridge/SBRScriptPolicy.m
2021-10-21 11:05:40 -07:00

122 lines
3.6 KiB
Objective-C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// SBRScriptPolicy.m
// App
//
// Created by James Magahern on 10/15/21.
//
#import "SBRScriptPolicy.h"
// For icon drawing
#import <UIKit/UIKit.h>
@implementation SBRScriptPolicy
+ (NSString *)titleForPolicyType:(SBRScriptOriginPolicyType)policyType
{
switch (policyType) {
case SBRScriptOriginPolicyTypeAlpha:
return @"Alpha";
case SBRScriptOriginPolicyTypeBravo:
return @"Bravo";
case SBRScriptOriginPolicyTypeCharlie:
return @"Charlie";
case SBRScriptOriginPolicyTypeDelta:
return @"Delta";
case SBRScriptOriginPolicyTypeEcho:
return @"Echo";
}
}
+ (NSString *)localizedDescriptionForPolicyType:(SBRScriptOriginPolicyType)policyType
{
switch (policyType) {
case SBRScriptOriginPolicyTypeAlpha:
return @"All scripts blocked.";
case SBRScriptOriginPolicyTypeBravo:
return @"Scripts on page are allowed.";
case SBRScriptOriginPolicyTypeCharlie:
return @"Allow scripts from the same security origin.";
case SBRScriptOriginPolicyTypeDelta:
return @"Allow scripts from common and host CDNs.";
case SBRScriptOriginPolicyTypeEcho:
return @"All scripts are allowed.";
}
}
+ (UIImage *)iconRepresentationForPolicyType:(SBRScriptOriginPolicyType)policyType withSize:(CGSize)size
{
UIFont *font = [UIFont boldSystemFontOfSize:size.height - 2];
NSDictionary<NSAttributedStringKey, id> *attrs = @{
NSFontAttributeName : font,
NSForegroundColorAttributeName : [UIColor whiteColor]
};
const CGRect rect = (CGRect) { .origin = CGPointZero, .size = size };
UIGraphicsBeginImageContextWithOptions(size, NO, UIScreen.mainScreen.scale);
UIBezierPath *backgroundPath = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:4.0];
[backgroundPath fill];
NSString *character = @"";
switch (policyType) {
case SBRScriptOriginPolicyTypeAlpha:
character = @"𝝰"; break;
case SBRScriptOriginPolicyTypeBravo:
character = @"𝝱"; break;
case SBRScriptOriginPolicyTypeCharlie:
character = @"𝝲"; break;
case SBRScriptOriginPolicyTypeDelta:
character = @"𝝳"; break;
case SBRScriptOriginPolicyTypeEcho:
character = @"𝝴"; break;
}
const CGSize charSize = [character sizeWithAttributes:attrs];
const CGRect charRect = (CGRect) {
.origin = (CGPoint) {
.x = (size.width - charSize.width) / 2,
.y = -(charSize.height - size.height) / 2,
},
.size = charSize
};
[character drawInRect:charRect withAttributes:attrs];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
+ (BOOL)supportsSecureCoding
{
return YES;
}
- (instancetype)initWithSecurityOrigin:(NSString *)origin policyType:(SBRScriptOriginPolicyType)policyType
{
if (self = [super init]) {
_origin = [origin copy];
_policyType = policyType;
}
return self;
}
- (instancetype)initWithCoder:(NSCoder *)coder
{
NSString *origin = [coder decodeObjectForKey:@"origin"];
NSNumber *policyTypeNumber = [coder decodeObjectForKey:@"policyType"];
return [self initWithSecurityOrigin:origin policyType:[policyTypeNumber integerValue]];
}
- (void)encodeWithCoder:(NSCoder *)coder
{
[coder encodeObject:_origin forKey:@"origin"];
[coder encodeObject:[NSNumber numberWithInteger:_policyType] forKey:@"policyType"];
}
@end