// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/web/web_state/ui/wk_content_rule_list_util.h"
#import "base/check.h"
#import "base/strings/sys_string_conversions.h"
#import "ios/web/public/web_client.h"
namespace web {
NSString* CreateLocalBlockingJsonRuleList() {
NSMutableDictionary* local_block = [@{
@"trigger" : [@{
@"url-filter" : @"https?://.*",
@"if-top-url" : [@[ @"file://.*" ] mutableCopy],
@"resource-type" : @[
// These should be all resource types except document.
// "document" cannot be blocked because it breaks error pages displayed
// when a WebStatePolicyDecider blocks a navigation.
@"image", @"style-sheet", @"script", @"font", @"raw", @"svg-document",
@"media", @"popup", @"ping"
],
} mutableCopy],
@"action" : @{
@"type" : @"block",
},
} mutableCopy];
NSMutableDictionary* allow_crbug_block = [@{
@"trigger" : [@{
@"url-filter" : @"https://bugs.chromium.org/.*",
@"if-top-url" : @[ @"file://.*" ],
@"resource-type" : @[
// Allow opening crbug from chrome:// urls
@"popup"
],
} mutableCopy],
@"action" : @{
@"type" : @"allow",
},
} mutableCopy];
WebClient::Schemes schemes;
GetWebClient()->AddAdditionalSchemes(&schemes);
GetWebClient()->GetAdditionalWebUISchemes(&(schemes.standard_schemes));
for (std::string scheme : schemes.standard_schemes) {
[local_block[@"trigger"][@"if-top-url"]
addObject:base::SysUTF8ToNSString(scheme + "://.*")];
}
NSData* json_data = [NSJSONSerialization
dataWithJSONObject:@[ local_block, allow_crbug_block ]
options:NSJSONWritingPrettyPrinted
error:nil];
NSString* json_string = [[NSString alloc] initWithData:json_data
encoding:NSUTF8StringEncoding];
return json_string;
}
NSString* CreateMixedContentAutoUpgradeJsonRuleList() {
NSMutableDictionary* mixed_content_autoupgrade = [@{
@"trigger" : [@{
@"url-filter" : @"http://.*",
@"if-top-url" : [@[ @"https://.*" ] mutableCopy],
@"resource-type" : @[
// Only upgrade image and media (i.e. audio and video) per
// https://www.w3.org/TR/mixed-content/#upgrade-algorithm
@"image", @"media"
],
} mutableCopy],
@"action" : @{
@"type" : @"make-https",
},
} mutableCopy];
NSData* json_data =
[NSJSONSerialization dataWithJSONObject:@[ mixed_content_autoupgrade ]
options:NSJSONWritingPrettyPrinted
error:nil];
NSString* json_string = [[NSString alloc] initWithData:json_data
encoding:NSUTF8StringEncoding];
return json_string;
}
} // namespace web