Skip to content

Commit e06031d

Browse files
committed
webview v2
1 parent 5f561a4 commit e06031d

5 files changed

Lines changed: 32 additions & 13 deletions

File tree

packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 3.24.3
2+
3+
* Prevents test `WKFrameInfo` from deallocating during tests to prevent crash on iOS 26+.
4+
15
## 3.24.2
26

37
* Fixes dartdoc comments that accidentally used HTML.

packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FrameInfoProxyAPITests.swift

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,27 +13,27 @@ class FrameInfoProxyAPITests: XCTestCase {
1313
let registrar = TestProxyApiRegistrar()
1414
let api = registrar.apiDelegate.pigeonApiWKFrameInfo(registrar)
1515

16-
let instance: TestFrameInfo? = TestFrameInfo()
17-
let value = try? api.pigeonDelegate.isMainFrame(pigeonApi: api, pigeonInstance: instance!)
16+
let instance = TestFrameInfo.instance
17+
let value = try? api.pigeonDelegate.isMainFrame(pigeonApi: api, pigeonInstance: instance)
1818

19-
XCTAssertEqual(value, instance!.isMainFrame)
19+
XCTAssertEqual(value, instance.isMainFrame)
2020
}
2121

2222
@MainActor func testRequest() {
2323
let registrar = TestProxyApiRegistrar()
2424
let api = registrar.apiDelegate.pigeonApiWKFrameInfo(registrar)
2525

26-
let instance: TestFrameInfo? = TestFrameInfo()
27-
let value = try? api.pigeonDelegate.request(pigeonApi: api, pigeonInstance: instance!)
26+
let instance = TestFrameInfo.instance
27+
let value = try? api.pigeonDelegate.request(pigeonApi: api, pigeonInstance: instance)
2828

29-
XCTAssertEqual(value?.value, instance!.request)
29+
XCTAssertEqual(value?.value, instance.request)
3030
}
3131

3232
@MainActor func testNilRequest() {
3333
let registrar = TestProxyApiRegistrar()
3434
let api = registrar.apiDelegate.pigeonApiWKFrameInfo(registrar)
3535

36-
let instance = TestFrameInfoWithNilRequest()
36+
let instance = TestFrameInfoWithNilRequest.instance
3737
let value = try? api.pigeonDelegate.request(pigeonApi: api, pigeonInstance: instance)
3838
// On macOS 15.5+, `WKFrameInfo.request` returns with an empty URLRequest.
3939
// Previously it would return nil so accept either.
@@ -46,6 +46,14 @@ class FrameInfoProxyAPITests: XCTestCase {
4646
}
4747

4848
class TestFrameInfo: WKFrameInfo {
49+
// Global test instance of `WKFrameInfo`. Using a static instance prevents a crash when
50+
// a `WKFrameInfo` is deallocated during a test on iOS 26+.
51+
static let instance = TestFrameInfo()
52+
53+
private override init() {
54+
55+
}
56+
4957
override var isMainFrame: Bool {
5058
return true
5159
}
@@ -56,4 +64,11 @@ class TestFrameInfo: WKFrameInfo {
5664
}
5765

5866
class TestFrameInfoWithNilRequest: WKFrameInfo {
67+
// Global test instance of `WKFrameInfo` with a nil URLRequest. Using a static instance prevents a
68+
// crash when a `WKFrameInfo` is deallocated during a test on iOS 26+.
69+
static let instance = TestFrameInfoWithNilRequest()
70+
71+
private override init() {
72+
73+
}
5974
}

packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/NavigationActionProxyAPITests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class NavigationActionProxyAPITests: XCTestCase {
4040
}
4141

4242
class TestNavigationAction: WKNavigationAction {
43-
let internalTargetFrame = TestFrameInfo()
43+
let internalTargetFrame = TestFrameInfo.instance
4444

4545
override var request: URLRequest {
4646
return URLRequest(url: URL(string: "http://google.com")!)

packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/UIDelegateProxyAPITests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class UIDelegateProxyAPITests: XCTestCase {
3939
let instance = UIDelegateImpl(api: api, registrar: registrar)
4040
let webView = WKWebView(frame: .zero)
4141
let origin = SecurityOriginProxyAPITests.testSecurityOrigin
42-
let frame = TestFrameInfo()
42+
let frame = TestFrameInfo.instance
4343
let type: WKMediaCaptureType = .camera
4444

4545
var resultDecision: WKPermissionDecision?
@@ -64,7 +64,7 @@ class UIDelegateProxyAPITests: XCTestCase {
6464
let instance = UIDelegateImpl(api: api, registrar: registrar)
6565
let webView = WKWebView(frame: .zero)
6666
let message = "myString"
67-
let frame = TestFrameInfo()
67+
let frame = TestFrameInfo.instance
6868

6969
instance.webView(webView, runJavaScriptAlertPanelWithMessage: message, initiatedByFrame: frame)
7070
{
@@ -79,7 +79,7 @@ class UIDelegateProxyAPITests: XCTestCase {
7979
let instance = UIDelegateImpl(api: api, registrar: registrar)
8080
let webView = WKWebView(frame: .zero)
8181
let message = "myString"
82-
let frame = TestFrameInfo()
82+
let frame = TestFrameInfo.instance
8383

8484
var confirmedResult: Bool?
8585
let callbackExpectation = expectation(description: "Wait for callback.")
@@ -103,7 +103,7 @@ class UIDelegateProxyAPITests: XCTestCase {
103103
let webView = WKWebView(frame: .zero)
104104
let prompt = "myString"
105105
let defaultText = "myString3"
106-
let frame = TestFrameInfo()
106+
let frame = TestFrameInfo.instance
107107

108108
var inputResult: String?
109109
let callbackExpectation = expectation(description: "Wait for callback.")

packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: webview_flutter_wkwebview
22
description: A Flutter plugin that provides a WebView widget based on Apple's WKWebView control.
33
repository: https://github.com/flutter/packages/tree/main/packages/webview_flutter/webview_flutter_wkwebview
44
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22
5-
version: 3.24.2
5+
version: 3.24.3
66

77
environment:
88
sdk: ^3.9.0

0 commit comments

Comments
 (0)