Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit f62b237

Browse files
[webview_flutter_wkwebview] Update copy method for Dart classes and support the NSObject.observeValue for subclasses (#5961)
1 parent df6260e commit f62b237

34 files changed

+895
-513
lines changed

packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFScriptMessageHandlerHostApiTests.m

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,9 @@ - (id)mockFlutterApiWithManager:(FWFInstanceManager *)instanceManager {
4545

4646
- (void)testCreateWithIdentifier {
4747
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
48-
FWFScriptMessageHandlerHostApiImpl *hostAPI =
49-
[[FWFScriptMessageHandlerHostApiImpl alloc] initWithInstanceManager:instanceManager];
48+
FWFScriptMessageHandlerHostApiImpl *hostAPI = [[FWFScriptMessageHandlerHostApiImpl alloc]
49+
initWithBinaryMessenger:OCMProtocolMock(@protocol(FlutterBinaryMessenger))
50+
instanceManager:instanceManager];
5051

5152
FlutterError *error;
5253
[hostAPI createWithIdentifier:@0 error:&error];

packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFUIDelegateHostApiTests.m

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,9 @@ - (id)mockFlutterApiWithManager:(FWFInstanceManager *)instanceManager {
4545

4646
- (void)testCreateWithIdentifier {
4747
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
48-
FWFUIDelegateHostApiImpl *hostAPI =
49-
[[FWFUIDelegateHostApiImpl alloc] initWithInstanceManager:instanceManager];
48+
FWFUIDelegateHostApiImpl *hostAPI = [[FWFUIDelegateHostApiImpl alloc]
49+
initWithBinaryMessenger:OCMProtocolMock(@protocol(FlutterBinaryMessenger))
50+
instanceManager:instanceManager];
5051

5152
FlutterError *error;
5253
[hostAPI createWithIdentifier:@0 error:&error];

packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFWebViewConfigurationHostApiTests.m

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ @interface FWFWebViewConfigurationHostApiTests : XCTestCase
1414
@implementation FWFWebViewConfigurationHostApiTests
1515
- (void)testCreateWithIdentifier {
1616
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
17-
FWFWebViewConfigurationHostApiImpl *hostAPI =
18-
[[FWFWebViewConfigurationHostApiImpl alloc] initWithInstanceManager:instanceManager];
17+
FWFWebViewConfigurationHostApiImpl *hostAPI = [[FWFWebViewConfigurationHostApiImpl alloc]
18+
initWithBinaryMessenger:OCMProtocolMock(@protocol(FlutterBinaryMessenger))
19+
instanceManager:instanceManager];
1920

2021
FlutterError *error;
2122
[hostAPI createWithIdentifier:@0 error:&error];
@@ -27,8 +28,9 @@ - (void)testCreateWithIdentifier {
2728

2829
- (void)testCreateFromWebViewWithIdentifier {
2930
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
30-
FWFWebViewConfigurationHostApiImpl *hostAPI =
31-
[[FWFWebViewConfigurationHostApiImpl alloc] initWithInstanceManager:instanceManager];
31+
FWFWebViewConfigurationHostApiImpl *hostAPI = [[FWFWebViewConfigurationHostApiImpl alloc]
32+
initWithBinaryMessenger:OCMProtocolMock(@protocol(FlutterBinaryMessenger))
33+
instanceManager:instanceManager];
3234

3335
WKWebView *mockWebView = OCMClassMock([WKWebView class]);
3436
OCMStub([mockWebView configuration]).andReturn(OCMClassMock([WKWebViewConfiguration class]));
@@ -48,8 +50,9 @@ - (void)testSetAllowsInlineMediaPlayback {
4850
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
4951
[instanceManager addDartCreatedInstance:mockWebViewConfiguration withIdentifier:0];
5052

51-
FWFWebViewConfigurationHostApiImpl *hostAPI =
52-
[[FWFWebViewConfigurationHostApiImpl alloc] initWithInstanceManager:instanceManager];
53+
FWFWebViewConfigurationHostApiImpl *hostAPI = [[FWFWebViewConfigurationHostApiImpl alloc]
54+
initWithBinaryMessenger:OCMProtocolMock(@protocol(FlutterBinaryMessenger))
55+
instanceManager:instanceManager];
5356

5457
FlutterError *error;
5558
[hostAPI setAllowsInlineMediaPlaybackForConfigurationWithIdentifier:@0
@@ -65,8 +68,9 @@ - (void)testSetMediaTypesRequiringUserActionForPlayback {
6568
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
6669
[instanceManager addDartCreatedInstance:mockWebViewConfiguration withIdentifier:0];
6770

68-
FWFWebViewConfigurationHostApiImpl *hostAPI =
69-
[[FWFWebViewConfigurationHostApiImpl alloc] initWithInstanceManager:instanceManager];
71+
FWFWebViewConfigurationHostApiImpl *hostAPI = [[FWFWebViewConfigurationHostApiImpl alloc]
72+
initWithBinaryMessenger:OCMProtocolMock(@protocol(FlutterBinaryMessenger))
73+
instanceManager:instanceManager];
7074

7175
FlutterError *error;
7276
[hostAPI

packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFWebViewHostApiTests.m

Lines changed: 62 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ @interface FWFWebViewHostApiTests : XCTestCase
1414
@implementation FWFWebViewHostApiTests
1515
- (void)testCreateWithIdentifier {
1616
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
17-
FWFWebViewHostApiImpl *hostAPI =
18-
[[FWFWebViewHostApiImpl alloc] initWithInstanceManager:instanceManager];
17+
FWFWebViewHostApiImpl *hostAPI = [[FWFWebViewHostApiImpl alloc]
18+
initWithBinaryMessenger:OCMProtocolMock(@protocol(FlutterBinaryMessenger))
19+
instanceManager:instanceManager];
1920

2021
[instanceManager addDartCreatedInstance:[[WKWebViewConfiguration alloc] init] withIdentifier:0];
2122

@@ -32,8 +33,9 @@ - (void)testLoadRequest {
3233
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
3334
[instanceManager addDartCreatedInstance:mockWebView withIdentifier:0];
3435

35-
FWFWebViewHostApiImpl *hostAPI =
36-
[[FWFWebViewHostApiImpl alloc] initWithInstanceManager:instanceManager];
36+
FWFWebViewHostApiImpl *hostAPI = [[FWFWebViewHostApiImpl alloc]
37+
initWithBinaryMessenger:OCMProtocolMock(@protocol(FlutterBinaryMessenger))
38+
instanceManager:instanceManager];
3739

3840
FlutterError *error;
3941
FWFNSUrlRequestData *requestData = [FWFNSUrlRequestData makeWithUrl:@"https://www.flutter.dev"
@@ -57,8 +59,9 @@ - (void)testLoadRequestWithInvalidUrl {
5759
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
5860
[instanceManager addDartCreatedInstance:mockWebView withIdentifier:0];
5961

60-
FWFWebViewHostApiImpl *hostAPI =
61-
[[FWFWebViewHostApiImpl alloc] initWithInstanceManager:instanceManager];
62+
FWFWebViewHostApiImpl *hostAPI = [[FWFWebViewHostApiImpl alloc]
63+
initWithBinaryMessenger:OCMProtocolMock(@protocol(FlutterBinaryMessenger))
64+
instanceManager:instanceManager];
6265

6366
FlutterError *error;
6467
FWFNSUrlRequestData *requestData = [FWFNSUrlRequestData makeWithUrl:@"%invalidUrl%"
@@ -78,8 +81,9 @@ - (void)testSetCustomUserAgent {
7881
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
7982
[instanceManager addDartCreatedInstance:mockWebView withIdentifier:0];
8083

81-
FWFWebViewHostApiImpl *hostAPI =
82-
[[FWFWebViewHostApiImpl alloc] initWithInstanceManager:instanceManager];
84+
FWFWebViewHostApiImpl *hostAPI = [[FWFWebViewHostApiImpl alloc]
85+
initWithBinaryMessenger:OCMProtocolMock(@protocol(FlutterBinaryMessenger))
86+
instanceManager:instanceManager];
8387

8488
FlutterError *error;
8589
[hostAPI setUserAgentForWebViewWithIdentifier:@0 userAgent:@"userA" error:&error];
@@ -94,8 +98,9 @@ - (void)testURL {
9498
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
9599
[instanceManager addDartCreatedInstance:mockWebView withIdentifier:0];
96100

97-
FWFWebViewHostApiImpl *hostAPI =
98-
[[FWFWebViewHostApiImpl alloc] initWithInstanceManager:instanceManager];
101+
FWFWebViewHostApiImpl *hostAPI = [[FWFWebViewHostApiImpl alloc]
102+
initWithBinaryMessenger:OCMProtocolMock(@protocol(FlutterBinaryMessenger))
103+
instanceManager:instanceManager];
99104

100105
FlutterError *error;
101106
XCTAssertEqualObjects([hostAPI URLForWebViewWithIdentifier:@0 error:&error],
@@ -110,8 +115,9 @@ - (void)testCanGoBack {
110115
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
111116
[instanceManager addDartCreatedInstance:mockWebView withIdentifier:0];
112117

113-
FWFWebViewHostApiImpl *hostAPI =
114-
[[FWFWebViewHostApiImpl alloc] initWithInstanceManager:instanceManager];
118+
FWFWebViewHostApiImpl *hostAPI = [[FWFWebViewHostApiImpl alloc]
119+
initWithBinaryMessenger:OCMProtocolMock(@protocol(FlutterBinaryMessenger))
120+
instanceManager:instanceManager];
115121

116122
FlutterError *error;
117123
XCTAssertEqualObjects([hostAPI canGoBackForWebViewWithIdentifier:@0 error:&error], @YES);
@@ -124,8 +130,9 @@ - (void)testSetUIDelegate {
124130
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
125131
[instanceManager addDartCreatedInstance:mockWebView withIdentifier:0];
126132

127-
FWFWebViewHostApiImpl *hostAPI =
128-
[[FWFWebViewHostApiImpl alloc] initWithInstanceManager:instanceManager];
133+
FWFWebViewHostApiImpl *hostAPI = [[FWFWebViewHostApiImpl alloc]
134+
initWithBinaryMessenger:OCMProtocolMock(@protocol(FlutterBinaryMessenger))
135+
instanceManager:instanceManager];
129136

130137
id<WKUIDelegate> mockDelegate = OCMProtocolMock(@protocol(WKUIDelegate));
131138
[instanceManager addDartCreatedInstance:mockDelegate withIdentifier:1];
@@ -142,8 +149,9 @@ - (void)testSetNavigationDelegate {
142149
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
143150
[instanceManager addDartCreatedInstance:mockWebView withIdentifier:0];
144151

145-
FWFWebViewHostApiImpl *hostAPI =
146-
[[FWFWebViewHostApiImpl alloc] initWithInstanceManager:instanceManager];
152+
FWFWebViewHostApiImpl *hostAPI = [[FWFWebViewHostApiImpl alloc]
153+
initWithBinaryMessenger:OCMProtocolMock(@protocol(FlutterBinaryMessenger))
154+
instanceManager:instanceManager];
147155

148156
id<WKNavigationDelegate> mockDelegate = OCMProtocolMock(@protocol(WKNavigationDelegate));
149157
[instanceManager addDartCreatedInstance:mockDelegate withIdentifier:1];
@@ -161,8 +169,9 @@ - (void)testEstimatedProgress {
161169
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
162170
[instanceManager addDartCreatedInstance:mockWebView withIdentifier:0];
163171

164-
FWFWebViewHostApiImpl *hostAPI =
165-
[[FWFWebViewHostApiImpl alloc] initWithInstanceManager:instanceManager];
172+
FWFWebViewHostApiImpl *hostAPI = [[FWFWebViewHostApiImpl alloc]
173+
initWithBinaryMessenger:OCMProtocolMock(@protocol(FlutterBinaryMessenger))
174+
instanceManager:instanceManager];
166175

167176
FlutterError *error;
168177
XCTAssertEqualObjects([hostAPI estimatedProgressForWebViewWithIdentifier:@0 error:&error], @34.0);
@@ -175,8 +184,9 @@ - (void)testloadHTMLString {
175184
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
176185
[instanceManager addDartCreatedInstance:mockWebView withIdentifier:0];
177186

178-
FWFWebViewHostApiImpl *hostAPI =
179-
[[FWFWebViewHostApiImpl alloc] initWithInstanceManager:instanceManager];
187+
FWFWebViewHostApiImpl *hostAPI = [[FWFWebViewHostApiImpl alloc]
188+
initWithBinaryMessenger:OCMProtocolMock(@protocol(FlutterBinaryMessenger))
189+
instanceManager:instanceManager];
180190

181191
FlutterError *error;
182192
[hostAPI loadHTMLForWebViewWithIdentifier:@0
@@ -193,8 +203,9 @@ - (void)testLoadFileURL {
193203
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
194204
[instanceManager addDartCreatedInstance:mockWebView withIdentifier:0];
195205

196-
FWFWebViewHostApiImpl *hostAPI =
197-
[[FWFWebViewHostApiImpl alloc] initWithInstanceManager:instanceManager];
206+
FWFWebViewHostApiImpl *hostAPI = [[FWFWebViewHostApiImpl alloc]
207+
initWithBinaryMessenger:OCMProtocolMock(@protocol(FlutterBinaryMessenger))
208+
instanceManager:instanceManager];
198209

199210
FlutterError *error;
200211
[hostAPI loadFileForWebViewWithIdentifier:@0
@@ -222,10 +233,11 @@ - (void)testLoadFlutterAsset {
222233
OCMStub([mockBundle URLForResource:@"myFolder/assets/index" withExtension:@"html"])
223234
.andReturn([NSURL URLWithString:@"webview_flutter/myFolder/assets/index.html"]);
224235

225-
FWFWebViewHostApiImpl *hostAPI =
226-
[[FWFWebViewHostApiImpl alloc] initWithInstanceManager:instanceManager
227-
bundle:mockBundle
228-
assetManager:mockAssetManager];
236+
FWFWebViewHostApiImpl *hostAPI = [[FWFWebViewHostApiImpl alloc]
237+
initWithBinaryMessenger:OCMProtocolMock(@protocol(FlutterBinaryMessenger))
238+
instanceManager:instanceManager
239+
bundle:mockBundle
240+
assetManager:mockAssetManager];
229241

230242
FlutterError *error;
231243
[hostAPI loadAssetForWebViewWithIdentifier:@0 assetKey:@"assets/index.html" error:&error];
@@ -243,8 +255,9 @@ - (void)testCanGoForward {
243255
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
244256
[instanceManager addDartCreatedInstance:mockWebView withIdentifier:0];
245257

246-
FWFWebViewHostApiImpl *hostAPI =
247-
[[FWFWebViewHostApiImpl alloc] initWithInstanceManager:instanceManager];
258+
FWFWebViewHostApiImpl *hostAPI = [[FWFWebViewHostApiImpl alloc]
259+
initWithBinaryMessenger:OCMProtocolMock(@protocol(FlutterBinaryMessenger))
260+
instanceManager:instanceManager];
248261

249262
FlutterError *error;
250263
XCTAssertEqualObjects([hostAPI canGoForwardForWebViewWithIdentifier:@0 error:&error], @NO);
@@ -257,8 +270,9 @@ - (void)testGoBack {
257270
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
258271
[instanceManager addDartCreatedInstance:mockWebView withIdentifier:0];
259272

260-
FWFWebViewHostApiImpl *hostAPI =
261-
[[FWFWebViewHostApiImpl alloc] initWithInstanceManager:instanceManager];
273+
FWFWebViewHostApiImpl *hostAPI = [[FWFWebViewHostApiImpl alloc]
274+
initWithBinaryMessenger:OCMProtocolMock(@protocol(FlutterBinaryMessenger))
275+
instanceManager:instanceManager];
262276

263277
FlutterError *error;
264278
[hostAPI goBackForWebViewWithIdentifier:@0 error:&error];
@@ -272,8 +286,9 @@ - (void)testGoForward {
272286
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
273287
[instanceManager addDartCreatedInstance:mockWebView withIdentifier:0];
274288

275-
FWFWebViewHostApiImpl *hostAPI =
276-
[[FWFWebViewHostApiImpl alloc] initWithInstanceManager:instanceManager];
289+
FWFWebViewHostApiImpl *hostAPI = [[FWFWebViewHostApiImpl alloc]
290+
initWithBinaryMessenger:OCMProtocolMock(@protocol(FlutterBinaryMessenger))
291+
instanceManager:instanceManager];
277292

278293
FlutterError *error;
279294
[hostAPI goForwardForWebViewWithIdentifier:@0 error:&error];
@@ -287,8 +302,9 @@ - (void)testReload {
287302
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
288303
[instanceManager addDartCreatedInstance:mockWebView withIdentifier:0];
289304

290-
FWFWebViewHostApiImpl *hostAPI =
291-
[[FWFWebViewHostApiImpl alloc] initWithInstanceManager:instanceManager];
305+
FWFWebViewHostApiImpl *hostAPI = [[FWFWebViewHostApiImpl alloc]
306+
initWithBinaryMessenger:OCMProtocolMock(@protocol(FlutterBinaryMessenger))
307+
instanceManager:instanceManager];
292308

293309
FlutterError *error;
294310
[hostAPI reloadWebViewWithIdentifier:@0 error:&error];
@@ -303,8 +319,9 @@ - (void)testTitle {
303319
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
304320
[instanceManager addDartCreatedInstance:mockWebView withIdentifier:0];
305321

306-
FWFWebViewHostApiImpl *hostAPI =
307-
[[FWFWebViewHostApiImpl alloc] initWithInstanceManager:instanceManager];
322+
FWFWebViewHostApiImpl *hostAPI = [[FWFWebViewHostApiImpl alloc]
323+
initWithBinaryMessenger:OCMProtocolMock(@protocol(FlutterBinaryMessenger))
324+
instanceManager:instanceManager];
308325

309326
FlutterError *error;
310327
XCTAssertEqualObjects([hostAPI titleForWebViewWithIdentifier:@0 error:&error], @"myTitle");
@@ -317,8 +334,9 @@ - (void)testSetAllowsBackForwardNavigationGestures {
317334
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
318335
[instanceManager addDartCreatedInstance:mockWebView withIdentifier:0];
319336

320-
FWFWebViewHostApiImpl *hostAPI =
321-
[[FWFWebViewHostApiImpl alloc] initWithInstanceManager:instanceManager];
337+
FWFWebViewHostApiImpl *hostAPI = [[FWFWebViewHostApiImpl alloc]
338+
initWithBinaryMessenger:OCMProtocolMock(@protocol(FlutterBinaryMessenger))
339+
instanceManager:instanceManager];
322340

323341
FlutterError *error;
324342
[hostAPI setAllowsBackForwardForWebViewWithIdentifier:@0 isAllowed:@YES error:&error];
@@ -336,8 +354,9 @@ - (void)testEvaluateJavaScript {
336354
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
337355
[instanceManager addDartCreatedInstance:mockWebView withIdentifier:0];
338356

339-
FWFWebViewHostApiImpl *hostAPI =
340-
[[FWFWebViewHostApiImpl alloc] initWithInstanceManager:instanceManager];
357+
FWFWebViewHostApiImpl *hostAPI = [[FWFWebViewHostApiImpl alloc]
358+
initWithBinaryMessenger:OCMProtocolMock(@protocol(FlutterBinaryMessenger))
359+
instanceManager:instanceManager];
341360

342361
NSString __block *returnValue;
343362
FlutterError __block *returnError;
@@ -369,8 +388,9 @@ - (void)testEvaluateJavaScriptReturnsNSErrorData {
369388
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
370389
[instanceManager addDartCreatedInstance:mockWebView withIdentifier:0];
371390

372-
FWFWebViewHostApiImpl *hostAPI =
373-
[[FWFWebViewHostApiImpl alloc] initWithInstanceManager:instanceManager];
391+
FWFWebViewHostApiImpl *hostAPI = [[FWFWebViewHostApiImpl alloc]
392+
initWithBinaryMessenger:OCMProtocolMock(@protocol(FlutterBinaryMessenger))
393+
instanceManager:instanceManager];
374394

375395
NSString __block *returnValue;
376396
FlutterError __block *returnError;

packages/webview_flutter/webview_flutter_wkwebview/ios/Classes/FWFHTTPCookieStoreHostApi.m

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
#import "FWFWebsiteDataStoreHostApi.h"
88

99
@interface FWFHTTPCookieStoreHostApiImpl ()
10-
@property(nonatomic) FWFInstanceManager *instanceManager;
10+
// InstanceManager must be weak to prevent a circular reference with the object it stores.
11+
@property(nonatomic, weak) FWFInstanceManager *instanceManager;
1112
@end
1213

1314
@implementation FWFHTTPCookieStoreHostApiImpl

packages/webview_flutter/webview_flutter_wkwebview/ios/Classes/FWFNavigationDelegateHostApi.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ NS_ASSUME_NONNULL_BEGIN
2727
*/
2828
@interface FWFNavigationDelegate : FWFObject <WKNavigationDelegate>
2929
@property(readonly, nonnull, nonatomic) FWFNavigationDelegateFlutterApiImpl *navigationDelegateAPI;
30+
3031
- (instancetype)initWithBinaryMessenger:(id<FlutterBinaryMessenger>)binaryMessenger
3132
instanceManager:(FWFInstanceManager *)instanceManager;
3233
@end

packages/webview_flutter/webview_flutter_wkwebview/ios/Classes/FWFNavigationDelegateHostApi.m

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
#import "FWFWebViewConfigurationHostApi.h"
88

99
@interface FWFNavigationDelegateFlutterApiImpl ()
10-
// This reference must be weak to prevent a circular reference with the objects it stores.
10+
// InstanceManager must be weak to prevent a circular reference with the object it stores.
1111
@property(nonatomic, weak) FWFInstanceManager *instanceManager;
1212
@end
1313

@@ -183,8 +183,10 @@ - (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView {
183183
@end
184184

185185
@interface FWFNavigationDelegateHostApiImpl ()
186-
@property(weak) id<FlutterBinaryMessenger> binaryMessenger;
187-
// This reference must be weak to prevent a circular reference with the objects it stores.
186+
// BinaryMessenger must be weak to prevent a circular reference with the host API it
187+
// references.
188+
@property(nonatomic, weak) id<FlutterBinaryMessenger> binaryMessenger;
189+
// InstanceManager must be weak to prevent a circular reference with the object it stores.
188190
@property(nonatomic, weak) FWFInstanceManager *instanceManager;
189191
@end
190192

packages/webview_flutter/webview_flutter_wkwebview/ios/Classes/FWFObjectHostApi.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,20 @@ NS_ASSUME_NONNULL_BEGIN
1717
@interface FWFObjectFlutterApiImpl : FWFNSObjectFlutterApi
1818
- (instancetype)initWithBinaryMessenger:(id<FlutterBinaryMessenger>)binaryMessenger
1919
instanceManager:(FWFInstanceManager *)instanceManager;
20+
21+
- (void)observeValueForObject:(NSObject *)instance
22+
keyPath:(NSString *)keyPath
23+
object:(NSObject *)object
24+
change:(NSDictionary<NSKeyValueChangeKey, id> *)change
25+
completion:(void (^)(NSError *_Nullable))completion;
2026
@end
2127

2228
/**
2329
* Implementation of NSObject for FWFObjectHostApiImpl.
2430
*/
2531
@interface FWFObject : NSObject
2632
@property(readonly, nonnull, nonatomic) FWFObjectFlutterApiImpl *objectApi;
33+
2734
- (instancetype)initWithBinaryMessenger:(id<FlutterBinaryMessenger>)binaryMessenger
2835
instanceManager:(FWFInstanceManager *)instanceManager;
2936
@end

packages/webview_flutter/webview_flutter_wkwebview/ios/Classes/FWFObjectHostApi.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
#import "FWFDataConverters.h"
77

88
@interface FWFObjectFlutterApiImpl ()
9-
// This reference must be weak to prevent a circular reference with the objects it stores.
9+
// InstanceManager must be weak to prevent a circular reference with the object it stores.
1010
@property(nonatomic, weak) FWFInstanceManager *instanceManager;
1111
@end
1212

@@ -74,7 +74,7 @@ - (void)observeValueForKeyPath:(NSString *)keyPath
7474
@end
7575

7676
@interface FWFObjectHostApiImpl ()
77-
// This reference must be weak to prevent a circular reference with the objects it stores.
77+
// InstanceManager must be weak to prevent a circular reference with the object it stores.
7878
@property(nonatomic, weak) FWFInstanceManager *instanceManager;
7979
@end
8080

0 commit comments

Comments
 (0)