From 8a769ab31f0ee63294fdd810a8a1cc004d6fb001 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Denis=20=C5=A0vara?= Date: Thu, 3 Aug 2023 14:24:58 +0200 Subject: [PATCH 1/7] Expose when a web view is activated and deactivated in `Visitable` protocol. --- Source/Visitable/Visitable.swift | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Source/Visitable/Visitable.swift b/Source/Visitable/Visitable.swift index c977493..117bd4f 100644 --- a/Source/Visitable/Visitable.swift +++ b/Source/Visitable/Visitable.swift @@ -17,6 +17,8 @@ public protocol Visitable: AnyObject { func visitableDidRender() func showVisitableActivityIndicator() func hideVisitableActivityIndicator() + func activateVisitableWebView(_ webView: WKWebView) + func deactivateVisitableWebView() } extension Visitable { @@ -32,11 +34,11 @@ extension Visitable { visitableView.hideActivityIndicator() } - func activateVisitableWebView(_ webView: WKWebView) { + public func activateVisitableWebView(_ webView: WKWebView) { visitableView.activateWebView(webView, forVisitable: self) } - func deactivateVisitableWebView() { + public func deactivateVisitableWebView() { visitableView.deactivateWebView() } From bc4f3eb541a1d66ca012eb637d55fb86388a2c47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Denis=20=C5=A0vara?= Date: Thu, 3 Aug 2023 15:14:09 +0200 Subject: [PATCH 2/7] Expose web view activation/deactivation through `VisitableDelegate`. --- Source/Visitable/Visitable.swift | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Source/Visitable/Visitable.swift b/Source/Visitable/Visitable.swift index 117bd4f..ecc6882 100644 --- a/Source/Visitable/Visitable.swift +++ b/Source/Visitable/Visitable.swift @@ -6,6 +6,8 @@ public protocol VisitableDelegate: AnyObject { func visitableViewDidAppear(_ visitable: Visitable) func visitableDidRequestReload(_ visitable: Visitable) func visitableDidRequestRefresh(_ visitable: Visitable) + func visitableDidActivateWebView(_ webView: WKWebView) + func visitableDidDeactivateWebView(_ visitable: Visitable) } public protocol Visitable: AnyObject { @@ -17,8 +19,6 @@ public protocol Visitable: AnyObject { func visitableDidRender() func showVisitableActivityIndicator() func hideVisitableActivityIndicator() - func activateVisitableWebView(_ webView: WKWebView) - func deactivateVisitableWebView() } extension Visitable { @@ -34,12 +34,14 @@ extension Visitable { visitableView.hideActivityIndicator() } - public func activateVisitableWebView(_ webView: WKWebView) { + func activateVisitableWebView(_ webView: WKWebView) { visitableView.activateWebView(webView, forVisitable: self) + visitableDelegate?.visitableDidActivateWebView(webView) } - public func deactivateVisitableWebView() { + func deactivateVisitableWebView() { visitableView.deactivateWebView() + visitableDelegate?.visitableDidDeactivateWebView(self) } func updateVisitableScreenshot() { From ffe440edf7d93a9f7c4fe85a1ea1651ef1160493 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Denis=20=C5=A0vara?= Date: Thu, 3 Aug 2023 15:26:20 +0200 Subject: [PATCH 3/7] Move webview activation/deactivation back to `Visitable defined as callbacks. --- Source/Visitable/Visitable.swift | 9 +++++---- Source/Visitable/VisitableViewController.swift | 9 +++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Source/Visitable/Visitable.swift b/Source/Visitable/Visitable.swift index ecc6882..586c209 100644 --- a/Source/Visitable/Visitable.swift +++ b/Source/Visitable/Visitable.swift @@ -6,8 +6,6 @@ public protocol VisitableDelegate: AnyObject { func visitableViewDidAppear(_ visitable: Visitable) func visitableDidRequestReload(_ visitable: Visitable) func visitableDidRequestRefresh(_ visitable: Visitable) - func visitableDidActivateWebView(_ webView: WKWebView) - func visitableDidDeactivateWebView(_ visitable: Visitable) } public protocol Visitable: AnyObject { @@ -19,6 +17,9 @@ public protocol Visitable: AnyObject { func visitableDidRender() func showVisitableActivityIndicator() func hideVisitableActivityIndicator() + + func visitableDidActivateWebView(_ webView: WKWebView) + func visitableDidDeactivateWebView() } extension Visitable { @@ -36,12 +37,12 @@ extension Visitable { func activateVisitableWebView(_ webView: WKWebView) { visitableView.activateWebView(webView, forVisitable: self) - visitableDelegate?.visitableDidActivateWebView(webView) + visitableDidActivateWebView(webView) } func deactivateVisitableWebView() { visitableView.deactivateWebView() - visitableDelegate?.visitableDidDeactivateWebView(self) + visitableDidDeactivateWebView() } func updateVisitableScreenshot() { diff --git a/Source/Visitable/VisitableViewController.swift b/Source/Visitable/VisitableViewController.swift index 0072751..b245952 100644 --- a/Source/Visitable/VisitableViewController.swift +++ b/Source/Visitable/VisitableViewController.swift @@ -1,4 +1,5 @@ import UIKit +import WebKit open class VisitableViewController: UIViewController, Visitable { open weak var visitableDelegate: VisitableDelegate? @@ -41,6 +42,14 @@ open class VisitableViewController: UIViewController, Visitable { visitableView.hideActivityIndicator() } + open func visitableDidActivateWebView(_ webView: WKWebView) { + // No-op + } + + open func visitableDidDeactivateWebView() { + // No-op + } + // MARK: Visitable View open private(set) lazy var visitableView: VisitableView! = { From afb4da5a164110926cac58f4d58a570b3e84bb89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Denis=20=C5=A0vara?= Date: Fri, 4 Aug 2023 15:39:10 +0200 Subject: [PATCH 4/7] Provide a default no-op implementation of web view activation/deactivation in the protocol extension. --- Source/Visitable/Visitable.swift | 8 ++++++++ Source/Visitable/VisitableViewController.swift | 8 -------- Tests/Test.swift | 10 ++++++++++ 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/Source/Visitable/Visitable.swift b/Source/Visitable/Visitable.swift index 586c209..6f51247 100644 --- a/Source/Visitable/Visitable.swift +++ b/Source/Visitable/Visitable.swift @@ -34,6 +34,14 @@ extension Visitable { public func hideVisitableActivityIndicator() { visitableView.hideActivityIndicator() } + + public func visitableDidActivateWebView(_ webView: WKWebView) { + // No-op + } + + public func visitableDidDeactivateWebView() { + // No-op + } func activateVisitableWebView(_ webView: WKWebView) { visitableView.activateWebView(webView, forVisitable: self) diff --git a/Source/Visitable/VisitableViewController.swift b/Source/Visitable/VisitableViewController.swift index b245952..64dc66f 100644 --- a/Source/Visitable/VisitableViewController.swift +++ b/Source/Visitable/VisitableViewController.swift @@ -42,14 +42,6 @@ open class VisitableViewController: UIViewController, Visitable { visitableView.hideActivityIndicator() } - open func visitableDidActivateWebView(_ webView: WKWebView) { - // No-op - } - - open func visitableDidDeactivateWebView() { - // No-op - } - // MARK: Visitable View open private(set) lazy var visitableView: VisitableView! = { diff --git a/Tests/Test.swift b/Tests/Test.swift index 2144997..8b961e4 100644 --- a/Tests/Test.swift +++ b/Tests/Test.swift @@ -4,6 +4,8 @@ import UIKit class TestVisitable: UIViewController, Visitable { // MARK: - Tests var visitableDidRenderCalled = false + var visitableDidActivateWebViewWasCalled = false + var visitableDidDeactivateWebViewWasCalled = false // MARK: - Visitable var visitableDelegate: VisitableDelegate? @@ -23,6 +25,14 @@ class TestVisitable: UIViewController, Visitable { func visitableDidRender() { visitableDidRenderCalled = true } + + func visitableDidActivateWebView(_ webView: WKWebView) { + visitableDidActivateWebViewWasCalled = true + } + + func visitableDidDeactivateWebView() { + visitableDidDeactivateWebViewWasCalled = true + } } class TestSessionDelegate: NSObject, SessionDelegate { From ab095ec52614e32e330842d7ab0e337dd63974c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Denis=20=C5=A0vara?= Date: Fri, 4 Aug 2023 16:10:12 +0200 Subject: [PATCH 5/7] Add missing `WebKit` import. --- Source/Visitable/VisitableViewController.swift | 1 - Tests/Test.swift | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Visitable/VisitableViewController.swift b/Source/Visitable/VisitableViewController.swift index 64dc66f..0072751 100644 --- a/Source/Visitable/VisitableViewController.swift +++ b/Source/Visitable/VisitableViewController.swift @@ -1,5 +1,4 @@ import UIKit -import WebKit open class VisitableViewController: UIViewController, Visitable { open weak var visitableDelegate: VisitableDelegate? diff --git a/Tests/Test.swift b/Tests/Test.swift index 8b961e4..cffcb86 100644 --- a/Tests/Test.swift +++ b/Tests/Test.swift @@ -1,4 +1,5 @@ import UIKit +import WebKit @testable import Turbo class TestVisitable: UIViewController, Visitable { From 358f6efbc4b5dd6894ee469449ed026480c8c342 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Denis=20=C5=A0vara?= Date: Fri, 4 Aug 2023 16:45:21 +0200 Subject: [PATCH 6/7] Provide a default no-op implementation of web view activation/deactivation also in `VisitableViewController`. --- Source/Visitable/VisitableViewController.swift | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Source/Visitable/VisitableViewController.swift b/Source/Visitable/VisitableViewController.swift index 0072751..b245952 100644 --- a/Source/Visitable/VisitableViewController.swift +++ b/Source/Visitable/VisitableViewController.swift @@ -1,4 +1,5 @@ import UIKit +import WebKit open class VisitableViewController: UIViewController, Visitable { open weak var visitableDelegate: VisitableDelegate? @@ -41,6 +42,14 @@ open class VisitableViewController: UIViewController, Visitable { visitableView.hideActivityIndicator() } + open func visitableDidActivateWebView(_ webView: WKWebView) { + // No-op + } + + open func visitableDidDeactivateWebView() { + // No-op + } + // MARK: Visitable View open private(set) lazy var visitableView: VisitableView! = { From c65e25cc8cc38dece25c200d706c7222b08ca847 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Denis=20=C5=A0vara?= Date: Mon, 7 Aug 2023 15:27:00 +0200 Subject: [PATCH 7/7] Bump timeout interval for `Session` tests. --- Tests/SessionSpec.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/SessionSpec.swift b/Tests/SessionSpec.swift index 648d3a9..b7243ad 100644 --- a/Tests/SessionSpec.swift +++ b/Tests/SessionSpec.swift @@ -5,7 +5,7 @@ import Nimble import GCDWebServers @testable import Turbo -private let timeout = DispatchTimeInterval.seconds(15) +private let timeout = DispatchTimeInterval.seconds(35) class SessionSpec: QuickSpec { let server = GCDWebServer()