Convert script policy to ObjC
This commit is contained in:
@@ -15,6 +15,9 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
/// Returns a list of origins (e.g., "buzzert.net") for which we are allowed to load script resources from
|
||||
- (NSSet<NSString *> *)allowedOriginsForScriptResources;
|
||||
|
||||
/// Returns a mapping between origin and SBRScriptOriginPolicyType, encoded as an NSNumber.
|
||||
- (NSDictionary<NSString *, NSNumber *> *)scriptPolicyTypeByOrigin;
|
||||
|
||||
@end
|
||||
|
||||
@class SBRProcessBundleBridge;
|
||||
|
||||
@@ -161,6 +161,10 @@
|
||||
NSArray<NSString *> *allowedOrigins = [[_policyDataSource allowedOriginsForScriptResources] allObjects];
|
||||
[_processPool _setObject:allowedOrigins forBundleParameter:SBRGetAllowedOriginsKey()];
|
||||
[_webProcessProxy syncAllowedResourceOrigins:allowedOrigins];
|
||||
|
||||
NSDictionary<NSString *, NSNumber *> *policyTypes = [_policyDataSource scriptPolicyTypeByOrigin];
|
||||
[_processPool _setObject:policyTypes forBundleParameter:SBRGetPolicyTypeByOriginKey()];
|
||||
[_webProcessProxy syncPolicyTypes:policyTypes];
|
||||
}
|
||||
|
||||
- (void)setAllowAllScripts:(BOOL)allowAllScripts
|
||||
|
||||
41
App/Web Process Bundle Bridge/SBRScriptPolicy.h
Normal file
41
App/Web Process Bundle Bridge/SBRScriptPolicy.h
Normal file
@@ -0,0 +1,41 @@
|
||||
//
|
||||
// SBRScriptPolicy.h
|
||||
// App
|
||||
//
|
||||
// Created by James Magahern on 10/15/21.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@class UIImage;
|
||||
|
||||
typedef NS_ENUM(NSInteger, SBRScriptOriginPolicyType) {
|
||||
SBRScriptOriginPolicyTypeAlpha,
|
||||
SBRScriptOriginPolicyTypeBravo,
|
||||
SBRScriptOriginPolicyTypeCharlie,
|
||||
SBRScriptOriginPolicyTypeDelta,
|
||||
SBRScriptOriginPolicyTypeEcho,
|
||||
} NS_SWIFT_NAME(ScriptPolicy.PolicyType);
|
||||
|
||||
NS_SWIFT_NAME(ScriptPolicy)
|
||||
@interface SBRScriptPolicy : NSObject <NSSecureCoding>
|
||||
@property (nonatomic, copy) NSString *origin;
|
||||
@property (nonatomic, readwrite) SBRScriptOriginPolicyType policyType;
|
||||
|
||||
+ (NSString *)titleForPolicyType:(SBRScriptOriginPolicyType)policyType
|
||||
NS_SWIFT_NAME(title(forPolicyType:));
|
||||
|
||||
+ (NSString *)localizedDescriptionForPolicyType:(SBRScriptOriginPolicyType)policyType
|
||||
NS_SWIFT_NAME(localizedDescription(forPolicyType:));
|
||||
|
||||
+ (UIImage *)iconRepresentationForPolicyType:(SBRScriptOriginPolicyType)policyType withSize:(CGSize)size
|
||||
NS_SWIFT_NAME(iconRepresentation(forPolicyType:size:));
|
||||
|
||||
- (instancetype)initWithSecurityOrigin:(NSString *)origin policyType:(SBRScriptOriginPolicyType)policyType;
|
||||
|
||||
- (instancetype)init NS_UNAVAILABLE;
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
121
App/Web Process Bundle Bridge/SBRScriptPolicy.m
Normal file
121
App/Web Process Bundle Bridge/SBRScriptPolicy.m
Normal file
@@ -0,0 +1,121 @@
|
||||
//
|
||||
// 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
|
||||
Reference in New Issue
Block a user