mirror of https://github.com/oxen-io/session-ios
Remove more Signal code
parent
58802936c1
commit
4f3448d75d
@ -1,27 +0,0 @@
|
||||
//
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "SelectRecipientViewController.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@protocol AddToGroupViewControllerDelegate <NSObject>
|
||||
|
||||
- (void)recipientIdWasAdded:(NSString *)recipientId;
|
||||
|
||||
- (BOOL)isRecipientGroupMember:(NSString *)recipientId;
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark -
|
||||
|
||||
@interface AddToGroupViewController : SelectRecipientViewController
|
||||
|
||||
@property (nonatomic, weak) id<AddToGroupViewControllerDelegate> addToGroupDelegate;
|
||||
|
||||
@property (nonatomic) BOOL hideContacts;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
@ -1,138 +0,0 @@
|
||||
//
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "AddToGroupViewController.h"
|
||||
#import "BlockListUIUtils.h"
|
||||
|
||||
#import "Session-Swift.h"
|
||||
|
||||
#import <SignalUtilitiesKit/SignalAccount.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface AddToGroupViewController () <SelectRecipientViewControllerDelegate>
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark -
|
||||
|
||||
@implementation AddToGroupViewController
|
||||
|
||||
- (void)loadView
|
||||
{
|
||||
self.delegate = self;
|
||||
|
||||
[super loadView];
|
||||
|
||||
self.title = NSLocalizedString(@"ADD_GROUP_MEMBER_VIEW_TITLE", @"Title for the 'add group member' view.");
|
||||
}
|
||||
|
||||
- (NSString *)phoneNumberSectionTitle
|
||||
{
|
||||
return NSLocalizedString(@"ADD_GROUP_MEMBER_VIEW_PHONE_NUMBER_TITLE",
|
||||
@"Title for the 'add by phone number' section of the 'add group member' view.");
|
||||
}
|
||||
|
||||
- (NSString *)phoneNumberButtonText
|
||||
{
|
||||
return NSLocalizedString(@"ADD_GROUP_MEMBER_VIEW_BUTTON",
|
||||
@"A label for the 'add by phone number' button in the 'add group member' view");
|
||||
}
|
||||
|
||||
- (NSString *)contactsSectionTitle
|
||||
{
|
||||
return NSLocalizedString(
|
||||
@"ADD_GROUP_MEMBER_VIEW_CONTACT_TITLE", @"Title for the 'add contact' section of the 'add group member' view.");
|
||||
}
|
||||
|
||||
- (void)phoneNumberWasSelected:(NSString *)phoneNumber
|
||||
{
|
||||
OWSAssertDebug(phoneNumber.length > 0);
|
||||
|
||||
__weak AddToGroupViewController *weakSelf = self;
|
||||
|
||||
if ([SSKEnvironment.shared.blockingManager isRecipientIdBlocked:phoneNumber]) {
|
||||
[BlockListUIUtils showUnblockPhoneNumberActionSheet:phoneNumber
|
||||
fromViewController:self
|
||||
blockingManager:SSKEnvironment.shared.blockingManager
|
||||
completionBlock:^(BOOL isBlocked) {
|
||||
if (!isBlocked) {
|
||||
[weakSelf addToGroup:phoneNumber];
|
||||
}
|
||||
}];
|
||||
return;
|
||||
}
|
||||
|
||||
[self addToGroup:phoneNumber];
|
||||
}
|
||||
|
||||
- (BOOL)canSignalAccountBeSelected:(SignalAccount *)signalAccount
|
||||
{
|
||||
OWSAssertDebug(signalAccount);
|
||||
|
||||
return ![self.addToGroupDelegate isRecipientGroupMember:signalAccount.recipientId];
|
||||
}
|
||||
|
||||
- (void)signalAccountWasSelected:(SignalAccount *)signalAccount
|
||||
{
|
||||
OWSAssertDebug(signalAccount);
|
||||
|
||||
__weak AddToGroupViewController *weakSelf = self;
|
||||
if ([self.addToGroupDelegate isRecipientGroupMember:signalAccount.recipientId]) {
|
||||
OWSFailDebug(@"Cannot add user to group member if already a member.");
|
||||
return;
|
||||
}
|
||||
|
||||
if ([SSKEnvironment.shared.blockingManager isRecipientIdBlocked:signalAccount.recipientId]) {
|
||||
[BlockListUIUtils showUnblockSignalAccountActionSheet:signalAccount
|
||||
fromViewController:self
|
||||
blockingManager:SSKEnvironment.shared.blockingManager
|
||||
completionBlock:^(BOOL isBlocked) {
|
||||
if (!isBlocked) {
|
||||
[weakSelf addToGroup:signalAccount.recipientId];
|
||||
}
|
||||
}];
|
||||
return;
|
||||
}
|
||||
|
||||
[self addToGroup:signalAccount.recipientId];
|
||||
}
|
||||
|
||||
- (void)addToGroup:(NSString *)recipientId
|
||||
{
|
||||
OWSAssertDebug(recipientId.length > 0);
|
||||
|
||||
[self.addToGroupDelegate recipientIdWasAdded:recipientId];
|
||||
[self.navigationController popViewControllerAnimated:YES];
|
||||
}
|
||||
|
||||
- (BOOL)shouldHideLocalNumber
|
||||
{
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (BOOL)shouldHideContacts
|
||||
{
|
||||
return self.hideContacts;
|
||||
}
|
||||
|
||||
- (BOOL)shouldValidatePhoneNumbers
|
||||
{
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (nullable NSString *)accessoryMessageForSignalAccount:(SignalAccount *)signalAccount
|
||||
{
|
||||
OWSAssertDebug(signalAccount);
|
||||
|
||||
if ([self.addToGroupDelegate isRecipientGroupMember:signalAccount.recipientId]) {
|
||||
return NSLocalizedString(@"NEW_GROUP_MEMBER_LABEL", @"An indicator that a user is a member of the new group.");
|
||||
}
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
@ -1,83 +0,0 @@
|
||||
//
|
||||
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
protocol CallVideoHintViewDelegate: AnyObject {
|
||||
func didTapCallVideoHintView(_ videoHintView: CallVideoHintView)
|
||||
}
|
||||
|
||||
class CallVideoHintView: UIView {
|
||||
let label = UILabel()
|
||||
var tapGesture: UITapGestureRecognizer!
|
||||
weak var delegate: CallVideoHintViewDelegate?
|
||||
|
||||
let kTailHMargin: CGFloat = 12
|
||||
let kTailWidth: CGFloat = 16
|
||||
let kTailHeight: CGFloat = 8
|
||||
|
||||
init() {
|
||||
super.init(frame: .zero)
|
||||
|
||||
tapGesture = UITapGestureRecognizer(target: self, action: #selector(didTap(tapGesture:)))
|
||||
addGestureRecognizer(tapGesture)
|
||||
|
||||
let layerView = OWSLayerView(frame: .zero) { _ in }
|
||||
let shapeLayer = CAShapeLayer()
|
||||
shapeLayer.fillColor = UIColor.ows_signalBlue.cgColor
|
||||
layerView.layer.addSublayer(shapeLayer)
|
||||
addSubview(layerView)
|
||||
layerView.autoPinEdgesToSuperviewEdges()
|
||||
|
||||
let container = UIView()
|
||||
addSubview(container)
|
||||
container.autoSetDimension(.width, toSize: ScaleFromIPhone5(250), relation: .lessThanOrEqual)
|
||||
container.layoutMargins = UIEdgeInsets(top: 7, leading: 12, bottom: 7, trailing: 12)
|
||||
container.autoPinEdgesToSuperviewEdges(with: UIEdgeInsets(top: 0, leading: 0, bottom: kTailHeight, trailing: 0))
|
||||
|
||||
container.addSubview(label)
|
||||
label.autoPinEdgesToSuperviewMargins()
|
||||
label.setCompressionResistanceHigh()
|
||||
label.setContentHuggingHigh()
|
||||
label.font = UIFont.ows_dynamicTypeBody
|
||||
label.textColor = .ows_white
|
||||
label.numberOfLines = 0
|
||||
label.text = NSLocalizedString("CALL_VIEW_ENABLE_VIDEO_HINT", comment: "tooltip label when remote party has enabled their video")
|
||||
|
||||
layerView.layoutCallback = { view in
|
||||
let bezierPath = UIBezierPath()
|
||||
|
||||
// Bubble
|
||||
let bubbleBounds = container.bounds
|
||||
bezierPath.append(UIBezierPath(roundedRect: bubbleBounds, cornerRadius: 8))
|
||||
|
||||
// Tail
|
||||
var tailBottom = CGPoint(x: self.kTailHMargin + self.kTailWidth * 0.5, y: view.height())
|
||||
var tailLeft = CGPoint(x: self.kTailHMargin, y: view.height() - self.kTailHeight)
|
||||
var tailRight = CGPoint(x: self.kTailHMargin + self.kTailWidth, y: view.height() - self.kTailHeight)
|
||||
if (!CurrentAppContext().isRTL) {
|
||||
tailBottom.x = view.width() - tailBottom.x
|
||||
tailLeft.x = view.width() - tailLeft.x
|
||||
tailRight.x = view.width() - tailRight.x
|
||||
}
|
||||
bezierPath.move(to: tailBottom)
|
||||
bezierPath.addLine(to: tailLeft)
|
||||
bezierPath.addLine(to: tailRight)
|
||||
bezierPath.addLine(to: tailBottom)
|
||||
shapeLayer.path = bezierPath.cgPath
|
||||
shapeLayer.frame = view.bounds
|
||||
}
|
||||
}
|
||||
|
||||
required init?(coder aDecoder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
// MARK: -
|
||||
|
||||
@objc
|
||||
func didTap(tapGesture: UITapGestureRecognizer) {
|
||||
self.delegate?.didTapCallVideoHintView(self)
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -1,103 +0,0 @@
|
||||
//
|
||||
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import SignalUtilitiesKit
|
||||
|
||||
let CompareSafetyNumbersActivityType = "org.whispersystems.signal.activity.CompareSafetyNumbers"
|
||||
|
||||
@objc(OWSCompareSafetyNumbersActivityDelegate)
|
||||
protocol CompareSafetyNumbersActivityDelegate {
|
||||
func compareSafetyNumbersActivitySucceeded(activity: CompareSafetyNumbersActivity)
|
||||
func compareSafetyNumbersActivity(_ activity: CompareSafetyNumbersActivity, failedWithError error: Error)
|
||||
}
|
||||
|
||||
@objc (OWSCompareSafetyNumbersActivity)
|
||||
class CompareSafetyNumbersActivity: UIActivity {
|
||||
|
||||
var mySafetyNumbers: String?
|
||||
let delegate: CompareSafetyNumbersActivityDelegate
|
||||
|
||||
@objc
|
||||
required init(delegate: CompareSafetyNumbersActivityDelegate) {
|
||||
self.delegate = delegate
|
||||
super.init()
|
||||
}
|
||||
|
||||
// MARK: UIActivity
|
||||
|
||||
override class var activityCategory: UIActivity.Category {
|
||||
get { return .action }
|
||||
}
|
||||
|
||||
override var activityType: UIActivity.ActivityType? {
|
||||
get { return UIActivity.ActivityType(rawValue: CompareSafetyNumbersActivityType) }
|
||||
}
|
||||
|
||||
override var activityTitle: String? {
|
||||
get {
|
||||
return NSLocalizedString("COMPARE_SAFETY_NUMBER_ACTION", comment: "Activity Sheet label")
|
||||
}
|
||||
}
|
||||
|
||||
override var activityImage: UIImage? {
|
||||
get {
|
||||
return #imageLiteral(resourceName: "ic_lock_outline")
|
||||
}
|
||||
}
|
||||
|
||||
override func canPerform(withActivityItems activityItems: [Any]) -> Bool {
|
||||
return stringsFrom(activityItems: activityItems).count > 0
|
||||
}
|
||||
|
||||
override func prepare(withActivityItems activityItems: [Any]) {
|
||||
let myFormattedSafetyNumbers = stringsFrom(activityItems: activityItems).first
|
||||
mySafetyNumbers = numericOnly(string: myFormattedSafetyNumbers)
|
||||
}
|
||||
|
||||
override func perform() {
|
||||
defer { activityDidFinish(true) }
|
||||
|
||||
let pasteboardString = numericOnly(string: UIPasteboard.general.string)
|
||||
guard (pasteboardString != nil && pasteboardString!.count == 60) else {
|
||||
Logger.warn("no valid safety numbers found in pasteboard: \(String(describing: pasteboardString))")
|
||||
let error = OWSErrorWithCodeDescription(OWSErrorCode.userError,
|
||||
NSLocalizedString("PRIVACY_VERIFICATION_FAILED_NO_SAFETY_NUMBERS_IN_CLIPBOARD", comment: "Alert body for user error"))
|
||||
|
||||
delegate.compareSafetyNumbersActivity(self, failedWithError: error)
|
||||
return
|
||||
}
|
||||
|
||||
let pasteboardSafetyNumbers = pasteboardString!
|
||||
|
||||
if pasteboardSafetyNumbers == mySafetyNumbers {
|
||||
Logger.info("successfully matched safety numbers. local numbers: \(String(describing: mySafetyNumbers)) pasteboard:\(pasteboardSafetyNumbers)")
|
||||
delegate.compareSafetyNumbersActivitySucceeded(activity: self)
|
||||
} else {
|
||||
Logger.warn("local numbers: \(String(describing: mySafetyNumbers)) didn't match pasteboard:\(pasteboardSafetyNumbers)")
|
||||
let error = OWSErrorWithCodeDescription(OWSErrorCode.privacyVerificationFailure,
|
||||
NSLocalizedString("PRIVACY_VERIFICATION_FAILED_MISMATCHED_SAFETY_NUMBERS_IN_CLIPBOARD", comment: "Alert body"))
|
||||
delegate.compareSafetyNumbersActivity(self, failedWithError: error)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: Helpers
|
||||
|
||||
func numericOnly(string: String?) -> String? {
|
||||
guard let string = string else {
|
||||
return nil
|
||||
}
|
||||
|
||||
var numericOnly: String?
|
||||
if let regex = try? NSRegularExpression(pattern: "\\D", options: .caseInsensitive) {
|
||||
numericOnly = regex.stringByReplacingMatches(in: string, options: .withTransparentBounds, range: NSRange(location: 0, length: string.utf16.count), withTemplate: "")
|
||||
}
|
||||
|
||||
return numericOnly
|
||||
}
|
||||
|
||||
func stringsFrom(activityItems: [Any]) -> [String] {
|
||||
return activityItems.map { $0 as? String }.filter { $0 != nil }.map { $0! }
|
||||
}
|
||||
}
|
@ -1,201 +0,0 @@
|
||||
//
|
||||
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
/*
|
||||
import UIKit
|
||||
import WebKit
|
||||
|
||||
@objc
|
||||
public class OnboardingCaptchaViewController: OnboardingBaseViewController {
|
||||
|
||||
private var webView: WKWebView?
|
||||
|
||||
override public func loadView() {
|
||||
super.loadView()
|
||||
|
||||
view.backgroundColor = Theme.backgroundColor
|
||||
view.layoutMargins = .zero
|
||||
|
||||
let titleLabel = self.createTitleLabel(text: NSLocalizedString("ONBOARDING_CAPTCHA_TITLE", comment: "Title of the 'onboarding Captcha' view."))
|
||||
titleLabel.accessibilityIdentifier = "onboarding.captcha." + "titleLabel"
|
||||
|
||||
let titleRow = UIStackView(arrangedSubviews: [
|
||||
titleLabel
|
||||
])
|
||||
titleRow.axis = .vertical
|
||||
titleRow.alignment = .fill
|
||||
titleRow.layoutMargins = UIEdgeInsets(top: 10, left: 0, bottom: 0, right: 0)
|
||||
titleRow.isLayoutMarginsRelativeArrangement = true
|
||||
|
||||
// We want the CAPTCHA web content to "fill the screen (honoring margins)".
|
||||
// The way to do this with WKWebView is to inject a javascript snippet that
|
||||
// manipulates the viewport.
|
||||
let jscript = "var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width'); document.getElementsByTagName('head')[0].appendChild(meta);"
|
||||
let userScript = WKUserScript(source: jscript, injectionTime: .atDocumentEnd, forMainFrameOnly: true)
|
||||
let wkUController = WKUserContentController()
|
||||
wkUController.addUserScript(userScript)
|
||||
let wkWebConfig = WKWebViewConfiguration()
|
||||
wkWebConfig.userContentController = wkUController
|
||||
let webView = WKWebView(frame: self.view.bounds, configuration: wkWebConfig)
|
||||
self.webView = webView
|
||||
webView.navigationDelegate = self
|
||||
webView.allowsBackForwardNavigationGestures = false
|
||||
webView.customUserAgent = "Signal iOS (+https://signal.org/download)"
|
||||
webView.allowsLinkPreview = false
|
||||
webView.scrollView.contentInset = .zero
|
||||
webView.layoutMargins = .zero
|
||||
webView.accessibilityIdentifier = "onboarding.captcha." + "webView"
|
||||
|
||||
let stackView = UIStackView(arrangedSubviews: [
|
||||
titleRow,
|
||||
webView
|
||||
])
|
||||
stackView.axis = .vertical
|
||||
stackView.alignment = .fill
|
||||
stackView.layoutMargins = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
|
||||
stackView.isLayoutMarginsRelativeArrangement = true
|
||||
view.addSubview(stackView)
|
||||
stackView.autoPinWidthToSuperviewMargins()
|
||||
stackView.autoPinEdge(.top, to: .top, of: view)
|
||||
autoPinView(toBottomOfViewControllerOrKeyboard: stackView, avoidNotch: true)
|
||||
|
||||
NotificationCenter.default.addObserver(self,
|
||||
selector: #selector(didBecomeActive),
|
||||
name: NSNotification.Name.OWSApplicationDidBecomeActive,
|
||||
object: nil)
|
||||
}
|
||||
|
||||
deinit {
|
||||
NotificationCenter.default.removeObserver(self)
|
||||
}
|
||||
|
||||
public override func viewWillAppear(_ animated: Bool) {
|
||||
super.viewWillAppear(animated)
|
||||
|
||||
loadContent()
|
||||
|
||||
webView?.scrollView.contentOffset = .zero
|
||||
}
|
||||
|
||||
public override func viewDidAppear(_ animated: Bool) {
|
||||
super.viewDidAppear(animated)
|
||||
|
||||
webView?.scrollView.contentOffset = .zero
|
||||
}
|
||||
|
||||
fileprivate let contentUrl = "https://signalcaptchas.org/registration/generate.html"
|
||||
|
||||
private func loadContent() {
|
||||
guard let webView = webView else {
|
||||
owsFailDebug("Missing webView.")
|
||||
return
|
||||
}
|
||||
guard let url = URL(string: contentUrl) else {
|
||||
owsFailDebug("Invalid URL.")
|
||||
return
|
||||
}
|
||||
webView.load(URLRequest(url: url))
|
||||
webView.scrollView.contentOffset = .zero
|
||||
}
|
||||
|
||||
// MARK: - Notifications
|
||||
|
||||
@objc func didBecomeActive() {
|
||||
AssertIsOnMainThread()
|
||||
|
||||
loadContent()
|
||||
}
|
||||
|
||||
// MARK: -
|
||||
|
||||
private func parseCaptchaAndTryToRegister(url: URL) {
|
||||
Logger.info("")
|
||||
|
||||
guard let captchaToken = parseCaptcha(url: url) else {
|
||||
owsFailDebug("Could not parse captcha token: \(url)")
|
||||
// TODO: Alert?
|
||||
//
|
||||
// Reload content so user can try again.
|
||||
loadContent()
|
||||
return
|
||||
}
|
||||
onboardingController.update(captchaToken: captchaToken)
|
||||
|
||||
onboardingController.tryToRegister(fromViewController: self, smsVerification: true)
|
||||
}
|
||||
|
||||
private func parseCaptcha(url: URL) -> String? {
|
||||
Logger.info("")
|
||||
|
||||
// Example URL:
|
||||
// signalcaptcha://03AF6jDqXgf1PocNNrWRJEENZ9l6RAMIsUoESi2dFKkxTgE2qjdZGVjEW6SZNFQqeRRTgGqOii6zHGG--uLyC1HnhSmRt8wHeKxHcg1hsK4ucTusANIeFXVB8wPPiV7U_0w2jUFVak5clMCvW9_JBfbfzj51_e9sou8DYfwc_R6THuTBTdpSV8Nh0yJalgget-nSukCxh6FPA6hRVbw7lP3r-me1QCykHOfh-V29UVaQ4Fs5upHvwB5rtiViqT_HN8WuGmdIdGcaWxaqy1lQTgFSs2Shdj593wZiXfhJnCWAw9rMn3jSgIZhkFxdXwKOmslQ2E_I8iWkm6
|
||||
guard let host = url.host,
|
||||
host.count > 0 else {
|
||||
owsFailDebug("Missing host.")
|
||||
return nil
|
||||
}
|
||||
|
||||
return host
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: -
|
||||
|
||||
extension OnboardingCaptchaViewController: WKNavigationDelegate {
|
||||
public func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
|
||||
Logger.verbose("navigationAction: \(String(describing: navigationAction.request.url))")
|
||||
|
||||
guard let url: URL = navigationAction.request.url else {
|
||||
owsFailDebug("Missing URL.")
|
||||
decisionHandler(.cancel)
|
||||
return
|
||||
}
|
||||
if url.scheme == "signalcaptcha" {
|
||||
decisionHandler(.cancel)
|
||||
DispatchQueue.main.async {
|
||||
self.parseCaptchaAndTryToRegister(url: url)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// Loading the Captcha content involves a series of actions.
|
||||
decisionHandler(.allow)
|
||||
}
|
||||
|
||||
public func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {
|
||||
Logger.verbose("navigationResponse: \(String(describing: navigationResponse))")
|
||||
|
||||
decisionHandler(.allow)
|
||||
}
|
||||
|
||||
public func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
|
||||
Logger.verbose("navigation: \(String(describing: navigation))")
|
||||
}
|
||||
|
||||
public func webView(_ webView: WKWebView, didReceiveServerRedirectForProvisionalNavigation navigation: WKNavigation!) {
|
||||
Logger.verbose("navigation: \(String(describing: navigation))")
|
||||
}
|
||||
|
||||
public func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
|
||||
Logger.verbose("navigation: \(String(describing: navigation)), error: \(error)")
|
||||
}
|
||||
|
||||
public func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
|
||||
Logger.verbose("navigation: \(String(describing: navigation))")
|
||||
}
|
||||
|
||||
public func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
|
||||
Logger.verbose("navigation: \(String(describing: navigation))")
|
||||
}
|
||||
|
||||
public func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
|
||||
Logger.verbose("navigation: \(String(describing: navigation)), error: \(error)")
|
||||
}
|
||||
|
||||
public func webViewWebContentProcessDidTerminate(_ webView: WKWebView) {
|
||||
Logger.verbose("")
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
File diff suppressed because it is too large
Load Diff