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

Commit 6b4c8fc

Browse files
[webview_flutter_wkwebview] Instantiate a WKWebViewConfiguration in WKUIDelegate.onCreateWebView (#5971)
1 parent 3b183f7 commit 6b4c8fc

17 files changed

+293
-18
lines changed

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,13 @@ - (void)testOnCreateWebViewForDelegateWithIdentifier {
6868
[instanceManager addDartCreatedInstance:mockWebView withIdentifier:1];
6969

7070
WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
71-
[instanceManager addDartCreatedInstance:configuration withIdentifier:2];
71+
id mockConfigurationFlutterApi = OCMPartialMock(mockFlutterAPI.webViewConfigurationFlutterApi);
72+
NSNumber *__block configurationIdentifier;
73+
OCMStub([mockConfigurationFlutterApi createWithIdentifier:[OCMArg checkWithBlock:^BOOL(id value) {
74+
configurationIdentifier = value;
75+
return YES;
76+
}]
77+
completion:OCMOCK_ANY]);
7278

7379
WKNavigationAction *mockNavigationAction = OCMClassMock([WKNavigationAction class]);
7480
OCMStub([mockNavigationAction request])
@@ -85,7 +91,7 @@ - (void)testOnCreateWebViewForDelegateWithIdentifier {
8591
OCMVerify([mockFlutterAPI
8692
onCreateWebViewForDelegateWithIdentifier:@0
8793
webViewIdentifier:@1
88-
configurationIdentifier:@2
94+
configurationIdentifier:configurationIdentifier
8995
navigationAction:[OCMArg
9096
isKindOfClass:[FWFWKNavigationActionData class]]
9197
completion:OCMOCK_ANY]);

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright 2013 The Flutter Authors. All rights reserved.
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
4-
// Autogenerated from Pigeon (v3.1.4), do not edit directly.
4+
// Autogenerated from Pigeon (v3.1.5), do not edit directly.
55
// See also: https://pub.dev/packages/pigeon
66
#import <Foundation/Foundation.h>
77
@protocol FlutterBinaryMessenger;
@@ -297,6 +297,14 @@ extern void FWFWKWebViewConfigurationHostApiSetup(
297297
id<FlutterBinaryMessenger> binaryMessenger,
298298
NSObject<FWFWKWebViewConfigurationHostApi> *_Nullable api);
299299

300+
/// The codec used by FWFWKWebViewConfigurationFlutterApi.
301+
NSObject<FlutterMessageCodec> *FWFWKWebViewConfigurationFlutterApiGetCodec(void);
302+
303+
@interface FWFWKWebViewConfigurationFlutterApi : NSObject
304+
- (instancetype)initWithBinaryMessenger:(id<FlutterBinaryMessenger>)binaryMessenger;
305+
- (void)createWithIdentifier:(NSNumber *)identifier
306+
completion:(void (^)(NSError *_Nullable))completion;
307+
@end
300308
/// The codec used by FWFWKUserContentControllerHostApi.
301309
NSObject<FlutterMessageCodec> *FWFWKUserContentControllerHostApiGetCodec(void);
302310

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

Lines changed: 119 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright 2013 The Flutter Authors. All rights reserved.
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
4-
// Autogenerated from Pigeon (v3.1.4), do not edit directly.
4+
// Autogenerated from Pigeon (v3.1.5), do not edit directly.
55
// See also: https://pub.dev/packages/pigeon
66
#import "FWFGeneratedWebKitApis.h"
77
#import <Flutter/Flutter.h>
@@ -35,58 +35,72 @@ static id GetNullableObjectAtIndex(NSArray *array, NSInteger key) {
3535

3636
@interface FWFNSKeyValueObservingOptionsEnumData ()
3737
+ (FWFNSKeyValueObservingOptionsEnumData *)fromMap:(NSDictionary *)dict;
38+
+ (nullable FWFNSKeyValueObservingOptionsEnumData *)nullableFromMap:(NSDictionary *)dict;
3839
- (NSDictionary *)toMap;
3940
@end
4041
@interface FWFNSKeyValueChangeKeyEnumData ()
4142
+ (FWFNSKeyValueChangeKeyEnumData *)fromMap:(NSDictionary *)dict;
43+
+ (nullable FWFNSKeyValueChangeKeyEnumData *)nullableFromMap:(NSDictionary *)dict;
4244
- (NSDictionary *)toMap;
4345
@end
4446
@interface FWFWKUserScriptInjectionTimeEnumData ()
4547
+ (FWFWKUserScriptInjectionTimeEnumData *)fromMap:(NSDictionary *)dict;
48+
+ (nullable FWFWKUserScriptInjectionTimeEnumData *)nullableFromMap:(NSDictionary *)dict;
4649
- (NSDictionary *)toMap;
4750
@end
4851
@interface FWFWKAudiovisualMediaTypeEnumData ()
4952
+ (FWFWKAudiovisualMediaTypeEnumData *)fromMap:(NSDictionary *)dict;
53+
+ (nullable FWFWKAudiovisualMediaTypeEnumData *)nullableFromMap:(NSDictionary *)dict;
5054
- (NSDictionary *)toMap;
5155
@end
5256
@interface FWFWKWebsiteDataTypeEnumData ()
5357
+ (FWFWKWebsiteDataTypeEnumData *)fromMap:(NSDictionary *)dict;
58+
+ (nullable FWFWKWebsiteDataTypeEnumData *)nullableFromMap:(NSDictionary *)dict;
5459
- (NSDictionary *)toMap;
5560
@end
5661
@interface FWFWKNavigationActionPolicyEnumData ()
5762
+ (FWFWKNavigationActionPolicyEnumData *)fromMap:(NSDictionary *)dict;
63+
+ (nullable FWFWKNavigationActionPolicyEnumData *)nullableFromMap:(NSDictionary *)dict;
5864
- (NSDictionary *)toMap;
5965
@end
6066
@interface FWFNSHttpCookiePropertyKeyEnumData ()
6167
+ (FWFNSHttpCookiePropertyKeyEnumData *)fromMap:(NSDictionary *)dict;
68+
+ (nullable FWFNSHttpCookiePropertyKeyEnumData *)nullableFromMap:(NSDictionary *)dict;
6269
- (NSDictionary *)toMap;
6370
@end
6471
@interface FWFNSUrlRequestData ()
6572
+ (FWFNSUrlRequestData *)fromMap:(NSDictionary *)dict;
73+
+ (nullable FWFNSUrlRequestData *)nullableFromMap:(NSDictionary *)dict;
6674
- (NSDictionary *)toMap;
6775
@end
6876
@interface FWFWKUserScriptData ()
6977
+ (FWFWKUserScriptData *)fromMap:(NSDictionary *)dict;
78+
+ (nullable FWFWKUserScriptData *)nullableFromMap:(NSDictionary *)dict;
7079
- (NSDictionary *)toMap;
7180
@end
7281
@interface FWFWKNavigationActionData ()
7382
+ (FWFWKNavigationActionData *)fromMap:(NSDictionary *)dict;
83+
+ (nullable FWFWKNavigationActionData *)nullableFromMap:(NSDictionary *)dict;
7484
- (NSDictionary *)toMap;
7585
@end
7686
@interface FWFWKFrameInfoData ()
7787
+ (FWFWKFrameInfoData *)fromMap:(NSDictionary *)dict;
88+
+ (nullable FWFWKFrameInfoData *)nullableFromMap:(NSDictionary *)dict;
7889
- (NSDictionary *)toMap;
7990
@end
8091
@interface FWFNSErrorData ()
8192
+ (FWFNSErrorData *)fromMap:(NSDictionary *)dict;
93+
+ (nullable FWFNSErrorData *)nullableFromMap:(NSDictionary *)dict;
8294
- (NSDictionary *)toMap;
8395
@end
8496
@interface FWFWKScriptMessageData ()
8597
+ (FWFWKScriptMessageData *)fromMap:(NSDictionary *)dict;
98+
+ (nullable FWFWKScriptMessageData *)nullableFromMap:(NSDictionary *)dict;
8699
- (NSDictionary *)toMap;
87100
@end
88101
@interface FWFNSHttpCookieData ()
89102
+ (FWFNSHttpCookieData *)fromMap:(NSDictionary *)dict;
103+
+ (nullable FWFNSHttpCookieData *)nullableFromMap:(NSDictionary *)dict;
90104
- (NSDictionary *)toMap;
91105
@end
92106

@@ -103,6 +117,9 @@ + (FWFNSKeyValueObservingOptionsEnumData *)fromMap:(NSDictionary *)dict {
103117
pigeonResult.value = [GetNullableObject(dict, @"value") integerValue];
104118
return pigeonResult;
105119
}
120+
+ (nullable FWFNSKeyValueObservingOptionsEnumData *)nullableFromMap:(NSDictionary *)dict {
121+
return (dict) ? [FWFNSKeyValueObservingOptionsEnumData fromMap:dict] : nil;
122+
}
106123
- (NSDictionary *)toMap {
107124
return @{
108125
@"value" : @(self.value),
@@ -121,6 +138,9 @@ + (FWFNSKeyValueChangeKeyEnumData *)fromMap:(NSDictionary *)dict {
121138
pigeonResult.value = [GetNullableObject(dict, @"value") integerValue];
122139
return pigeonResult;
123140
}
141+
+ (nullable FWFNSKeyValueChangeKeyEnumData *)nullableFromMap:(NSDictionary *)dict {
142+
return (dict) ? [FWFNSKeyValueChangeKeyEnumData fromMap:dict] : nil;
143+
}
124144
- (NSDictionary *)toMap {
125145
return @{
126146
@"value" : @(self.value),
@@ -141,6 +161,9 @@ + (FWFWKUserScriptInjectionTimeEnumData *)fromMap:(NSDictionary *)dict {
141161
pigeonResult.value = [GetNullableObject(dict, @"value") integerValue];
142162
return pigeonResult;
143163
}
164+
+ (nullable FWFWKUserScriptInjectionTimeEnumData *)nullableFromMap:(NSDictionary *)dict {
165+
return (dict) ? [FWFWKUserScriptInjectionTimeEnumData fromMap:dict] : nil;
166+
}
144167
- (NSDictionary *)toMap {
145168
return @{
146169
@"value" : @(self.value),
@@ -161,6 +184,9 @@ + (FWFWKAudiovisualMediaTypeEnumData *)fromMap:(NSDictionary *)dict {
161184
pigeonResult.value = [GetNullableObject(dict, @"value") integerValue];
162185
return pigeonResult;
163186
}
187+
+ (nullable FWFWKAudiovisualMediaTypeEnumData *)nullableFromMap:(NSDictionary *)dict {
188+
return (dict) ? [FWFWKAudiovisualMediaTypeEnumData fromMap:dict] : nil;
189+
}
164190
- (NSDictionary *)toMap {
165191
return @{
166192
@"value" : @(self.value),
@@ -179,6 +205,9 @@ + (FWFWKWebsiteDataTypeEnumData *)fromMap:(NSDictionary *)dict {
179205
pigeonResult.value = [GetNullableObject(dict, @"value") integerValue];
180206
return pigeonResult;
181207
}
208+
+ (nullable FWFWKWebsiteDataTypeEnumData *)nullableFromMap:(NSDictionary *)dict {
209+
return (dict) ? [FWFWKWebsiteDataTypeEnumData fromMap:dict] : nil;
210+
}
182211
- (NSDictionary *)toMap {
183212
return @{
184213
@"value" : @(self.value),
@@ -199,6 +228,9 @@ + (FWFWKNavigationActionPolicyEnumData *)fromMap:(NSDictionary *)dict {
199228
pigeonResult.value = [GetNullableObject(dict, @"value") integerValue];
200229
return pigeonResult;
201230
}
231+
+ (nullable FWFWKNavigationActionPolicyEnumData *)nullableFromMap:(NSDictionary *)dict {
232+
return (dict) ? [FWFWKNavigationActionPolicyEnumData fromMap:dict] : nil;
233+
}
202234
- (NSDictionary *)toMap {
203235
return @{
204236
@"value" : @(self.value),
@@ -219,6 +251,9 @@ + (FWFNSHttpCookiePropertyKeyEnumData *)fromMap:(NSDictionary *)dict {
219251
pigeonResult.value = [GetNullableObject(dict, @"value") integerValue];
220252
return pigeonResult;
221253
}
254+
+ (nullable FWFNSHttpCookiePropertyKeyEnumData *)nullableFromMap:(NSDictionary *)dict {
255+
return (dict) ? [FWFNSHttpCookiePropertyKeyEnumData fromMap:dict] : nil;
256+
}
222257
- (NSDictionary *)toMap {
223258
return @{
224259
@"value" : @(self.value),
@@ -248,6 +283,9 @@ + (FWFNSUrlRequestData *)fromMap:(NSDictionary *)dict {
248283
NSAssert(pigeonResult.allHttpHeaderFields != nil, @"");
249284
return pigeonResult;
250285
}
286+
+ (nullable FWFNSUrlRequestData *)nullableFromMap:(NSDictionary *)dict {
287+
return (dict) ? [FWFNSUrlRequestData fromMap:dict] : nil;
288+
}
251289
- (NSDictionary *)toMap {
252290
return @{
253291
@"url" : (self.url ?: [NSNull null]),
@@ -272,12 +310,15 @@ + (FWFWKUserScriptData *)fromMap:(NSDictionary *)dict {
272310
FWFWKUserScriptData *pigeonResult = [[FWFWKUserScriptData alloc] init];
273311
pigeonResult.source = GetNullableObject(dict, @"source");
274312
NSAssert(pigeonResult.source != nil, @"");
275-
pigeonResult.injectionTime =
276-
[FWFWKUserScriptInjectionTimeEnumData fromMap:GetNullableObject(dict, @"injectionTime")];
313+
pigeonResult.injectionTime = [FWFWKUserScriptInjectionTimeEnumData
314+
nullableFromMap:GetNullableObject(dict, @"injectionTime")];
277315
pigeonResult.isMainFrameOnly = GetNullableObject(dict, @"isMainFrameOnly");
278316
NSAssert(pigeonResult.isMainFrameOnly != nil, @"");
279317
return pigeonResult;
280318
}
319+
+ (nullable FWFWKUserScriptData *)nullableFromMap:(NSDictionary *)dict {
320+
return (dict) ? [FWFWKUserScriptData fromMap:dict] : nil;
321+
}
281322
- (NSDictionary *)toMap {
282323
return @{
283324
@"source" : (self.source ?: [NSNull null]),
@@ -297,12 +338,16 @@ + (instancetype)makeWithRequest:(FWFNSUrlRequestData *)request
297338
}
298339
+ (FWFWKNavigationActionData *)fromMap:(NSDictionary *)dict {
299340
FWFWKNavigationActionData *pigeonResult = [[FWFWKNavigationActionData alloc] init];
300-
pigeonResult.request = [FWFNSUrlRequestData fromMap:GetNullableObject(dict, @"request")];
341+
pigeonResult.request = [FWFNSUrlRequestData nullableFromMap:GetNullableObject(dict, @"request")];
301342
NSAssert(pigeonResult.request != nil, @"");
302-
pigeonResult.targetFrame = [FWFWKFrameInfoData fromMap:GetNullableObject(dict, @"targetFrame")];
343+
pigeonResult.targetFrame =
344+
[FWFWKFrameInfoData nullableFromMap:GetNullableObject(dict, @"targetFrame")];
303345
NSAssert(pigeonResult.targetFrame != nil, @"");
304346
return pigeonResult;
305347
}
348+
+ (nullable FWFWKNavigationActionData *)nullableFromMap:(NSDictionary *)dict {
349+
return (dict) ? [FWFWKNavigationActionData fromMap:dict] : nil;
350+
}
306351
- (NSDictionary *)toMap {
307352
return @{
308353
@"request" : (self.request ? [self.request toMap] : [NSNull null]),
@@ -323,6 +368,9 @@ + (FWFWKFrameInfoData *)fromMap:(NSDictionary *)dict {
323368
NSAssert(pigeonResult.isMainFrame != nil, @"");
324369
return pigeonResult;
325370
}
371+
+ (nullable FWFWKFrameInfoData *)nullableFromMap:(NSDictionary *)dict {
372+
return (dict) ? [FWFWKFrameInfoData fromMap:dict] : nil;
373+
}
326374
- (NSDictionary *)toMap {
327375
return @{
328376
@"isMainFrame" : (self.isMainFrame ?: [NSNull null]),
@@ -350,6 +398,9 @@ + (FWFNSErrorData *)fromMap:(NSDictionary *)dict {
350398
NSAssert(pigeonResult.localizedDescription != nil, @"");
351399
return pigeonResult;
352400
}
401+
+ (nullable FWFNSErrorData *)nullableFromMap:(NSDictionary *)dict {
402+
return (dict) ? [FWFNSErrorData fromMap:dict] : nil;
403+
}
353404
- (NSDictionary *)toMap {
354405
return @{
355406
@"code" : (self.code ?: [NSNull null]),
@@ -373,6 +424,9 @@ + (FWFWKScriptMessageData *)fromMap:(NSDictionary *)dict {
373424
pigeonResult.body = GetNullableObject(dict, @"body");
374425
return pigeonResult;
375426
}
427+
+ (nullable FWFWKScriptMessageData *)nullableFromMap:(NSDictionary *)dict {
428+
return (dict) ? [FWFWKScriptMessageData fromMap:dict] : nil;
429+
}
376430
- (NSDictionary *)toMap {
377431
return @{
378432
@"name" : (self.name ?: [NSNull null]),
@@ -397,6 +451,9 @@ + (FWFNSHttpCookieData *)fromMap:(NSDictionary *)dict {
397451
NSAssert(pigeonResult.propertyValues != nil, @"");
398452
return pigeonResult;
399453
}
454+
+ (nullable FWFNSHttpCookieData *)nullableFromMap:(NSDictionary *)dict {
455+
return (dict) ? [FWFNSHttpCookieData fromMap:dict] : nil;
456+
}
400457
- (NSDictionary *)toMap {
401458
return @{
402459
@"propertyKeys" : (self.propertyKeys ?: [NSNull null]),
@@ -899,6 +956,63 @@ void FWFWKWebViewConfigurationHostApiSetup(id<FlutterBinaryMessenger> binaryMess
899956
}
900957
}
901958
}
959+
@interface FWFWKWebViewConfigurationFlutterApiCodecReader : FlutterStandardReader
960+
@end
961+
@implementation FWFWKWebViewConfigurationFlutterApiCodecReader
962+
@end
963+
964+
@interface FWFWKWebViewConfigurationFlutterApiCodecWriter : FlutterStandardWriter
965+
@end
966+
@implementation FWFWKWebViewConfigurationFlutterApiCodecWriter
967+
@end
968+
969+
@interface FWFWKWebViewConfigurationFlutterApiCodecReaderWriter : FlutterStandardReaderWriter
970+
@end
971+
@implementation FWFWKWebViewConfigurationFlutterApiCodecReaderWriter
972+
- (FlutterStandardWriter *)writerWithData:(NSMutableData *)data {
973+
return [[FWFWKWebViewConfigurationFlutterApiCodecWriter alloc] initWithData:data];
974+
}
975+
- (FlutterStandardReader *)readerWithData:(NSData *)data {
976+
return [[FWFWKWebViewConfigurationFlutterApiCodecReader alloc] initWithData:data];
977+
}
978+
@end
979+
980+
NSObject<FlutterMessageCodec> *FWFWKWebViewConfigurationFlutterApiGetCodec() {
981+
static dispatch_once_t sPred = 0;
982+
static FlutterStandardMessageCodec *sSharedObject = nil;
983+
dispatch_once(&sPred, ^{
984+
FWFWKWebViewConfigurationFlutterApiCodecReaderWriter *readerWriter =
985+
[[FWFWKWebViewConfigurationFlutterApiCodecReaderWriter alloc] init];
986+
sSharedObject = [FlutterStandardMessageCodec codecWithReaderWriter:readerWriter];
987+
});
988+
return sSharedObject;
989+
}
990+
991+
@interface FWFWKWebViewConfigurationFlutterApi ()
992+
@property(nonatomic, strong) NSObject<FlutterBinaryMessenger> *binaryMessenger;
993+
@end
994+
995+
@implementation FWFWKWebViewConfigurationFlutterApi
996+
997+
- (instancetype)initWithBinaryMessenger:(NSObject<FlutterBinaryMessenger> *)binaryMessenger {
998+
self = [super init];
999+
if (self) {
1000+
_binaryMessenger = binaryMessenger;
1001+
}
1002+
return self;
1003+
}
1004+
- (void)createWithIdentifier:(NSNumber *)arg_identifier
1005+
completion:(void (^)(NSError *_Nullable))completion {
1006+
FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
1007+
messageChannelWithName:@"dev.flutter.pigeon.WKWebViewConfigurationFlutterApi.create"
1008+
binaryMessenger:self.binaryMessenger
1009+
codec:FWFWKWebViewConfigurationFlutterApiGetCodec()];
1010+
[channel sendMessage:@[ arg_identifier ?: [NSNull null] ]
1011+
reply:^(id reply) {
1012+
completion(nil);
1013+
}];
1014+
}
1015+
@end
9021016
@interface FWFWKUserContentControllerHostApiCodecReader : FlutterStandardReader
9031017
@end
9041018
@implementation FWFWKUserContentControllerHostApiCodecReader

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#import "FWFGeneratedWebKitApis.h"
99
#import "FWFInstanceManager.h"
1010
#import "FWFObjectHostApi.h"
11+
#import "FWFWebViewConfigurationHostApi.h"
1112

1213
NS_ASSUME_NONNULL_BEGIN
1314

@@ -17,6 +18,8 @@ NS_ASSUME_NONNULL_BEGIN
1718
* Handles making callbacks to Dart for a WKUIDelegate.
1819
*/
1920
@interface FWFUIDelegateFlutterApiImpl : FWFWKUIDelegateFlutterApi
21+
@property(readonly, nonatomic)
22+
FWFWebViewConfigurationFlutterApiImpl *webViewConfigurationFlutterApi;
2023
- (instancetype)initWithBinaryMessenger:(id<FlutterBinaryMessenger>)binaryMessenger
2124
instanceManager:(FWFInstanceManager *)instanceManager;
2225
@end

0 commit comments

Comments
 (0)