Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
7dde204
bunch of work for other apis
bparrishMines May 2, 2022
cdd76b0
compiles again
bparrishMines May 2, 2022
56351ea
working tests
bparrishMines May 2, 2022
d045afc
formatting
bparrishMines May 2, 2022
e10b1fb
fix cookie host api
bparrishMines May 2, 2022
b09d7a6
first create tests
bparrishMines May 2, 2022
a13148b
create tests
bparrishMines May 2, 2022
be098ef
more class implemented
bparrishMines May 2, 2022
76cb1b8
uidelegate and navigation delgate and formatting
bparrishMines May 2, 2022
650e731
converter tests
bparrishMines May 2, 2022
c0e7166
uiview and scrollview
bparrishMines May 3, 2022
5bd77f2
finished nsobject
bparrishMines May 3, 2022
3961002
formatting
bparrishMines May 3, 2022
8f0ba5b
small spaces
bparrishMines May 3, 2022
fc6a356
delete generated files
bparrishMines May 3, 2022
d2c8762
remove simple ast and fix tests
bparrishMines May 3, 2022
fe35717
remove template files
bparrishMines May 3, 2022
8509944
lints bro
bparrishMines May 3, 2022
b721b68
shorthand
bparrishMines May 3, 2022
bdcfff9
fix message
bparrishMines May 4, 2022
de645bd
review comments
bparrishMines May 10, 2022
8bca337
cant test lower version
bparrishMines May 10, 2022
1764362
Merge branch 'main' of github.com:flutter/plugins into test_ground
bparrishMines May 10, 2022
9e88548
PR comments
bparrishMines May 10, 2022
a747430
Merge branch 'main' of github.com:flutter/plugins into test_ground
bparrishMines May 10, 2022
45744b7
Merge branch 'main' of github.com:flutter/plugins into test_ground
bparrishMines May 10, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
finished nsobject
  • Loading branch information
bparrishMines committed May 3, 2022
commit 5bd77f209fc63b507cff6a7eb1ba566ab0d658a7
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
8FB79B852820A3A400C101D3 /* FWFUIDelegateHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB79B842820A3A400C101D3 /* FWFUIDelegateHostApiTests.m */; };
8FB79B8F2820BAB300C101D3 /* FWFScrollViewHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB79B8E2820BAB300C101D3 /* FWFScrollViewHostApiTests.m */; };
8FB79B912820BAC700C101D3 /* FWFUIViewHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB79B902820BAC700C101D3 /* FWFUIViewHostApiTests.m */; };
8FB79B972821985200C101D3 /* FWFObjectHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB79B962821985200C101D3 /* FWFObjectHostApiTests.m */; };
978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; };
97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
Expand Down Expand Up @@ -93,6 +94,7 @@
8FB79B842820A3A400C101D3 /* FWFUIDelegateHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFUIDelegateHostApiTests.m; sourceTree = "<group>"; };
8FB79B8E2820BAB300C101D3 /* FWFScrollViewHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFScrollViewHostApiTests.m; sourceTree = "<group>"; };
8FB79B902820BAC700C101D3 /* FWFUIViewHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFUIViewHostApiTests.m; sourceTree = "<group>"; };
8FB79B962821985200C101D3 /* FWFObjectHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFObjectHostApiTests.m; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
Expand Down Expand Up @@ -165,6 +167,7 @@
8FB79B842820A3A400C101D3 /* FWFUIDelegateHostApiTests.m */,
8FB79B8E2820BAB300C101D3 /* FWFScrollViewHostApiTests.m */,
8FB79B902820BAC700C101D3 /* FWFUIViewHostApiTests.m */,
8FB79B962821985200C101D3 /* FWFObjectHostApiTests.m */,
);
path = RunnerTests;
sourceTree = "<group>";
Expand Down Expand Up @@ -464,6 +467,7 @@
files = (
8FA6A87928062CD000A4B183 /* FWFInstanceManagerTests.m in Sources */,
8FB79B852820A3A400C101D3 /* FWFUIDelegateHostApiTests.m in Sources */,
8FB79B972821985200C101D3 /* FWFObjectHostApiTests.m in Sources */,
8FB79B672820453400C101D3 /* FWFHTTPCookieStoreHostApiTests.m in Sources */,
8FB79B5328134C3100C101D3 /* FWFWebViewHostApiTests.m in Sources */,
8FB79B73282096B500C101D3 /* FWFScriptMessageHandlerHostApiTests.m in Sources */,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

@import Flutter;
@import XCTest;
@import webview_flutter_wkwebview;

#import <OCMock/OCMock.h>

@interface FWFObjectHostApiTests : XCTestCase
@end

@implementation FWFObjectHostApiTests
- (void)testAddObserver {
NSObject *mockObject = OCMClassMock([NSObject class]);

FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
[instanceManager addInstance:mockObject withIdentifier:0];

FWFObjectHostApiImpl *hostApi = [[FWFObjectHostApiImpl alloc] initWithInstanceManager:instanceManager];

NSObject *observerObject = [[NSObject alloc] init];
[instanceManager addInstance:observerObject withIdentifier:1];

FlutterError *error;
[hostApi addObserverForObjectWithIdentifier:@0
observerIdentifier:@1
keyPath:@"myKey"
options:@[[FWFNSKeyValueObservingOptionsEnumData makeWithValue:FWFNSKeyValueObservingOptionsEnumOldValue],
[FWFNSKeyValueObservingOptionsEnumData makeWithValue:FWFNSKeyValueObservingOptionsEnumNewValue]]
error:&error];

OCMVerify([mockObject addObserver:observerObject forKeyPath:@"myKey" options:(NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew) context:nil]);
XCTAssertNil(error);
}

- (void)testRemoveObserver {
NSObject *mockObject = OCMClassMock([NSObject class]);

FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
[instanceManager addInstance:mockObject withIdentifier:0];

FWFObjectHostApiImpl *hostApi =
[[FWFObjectHostApiImpl alloc]
initWithInstanceManager:instanceManager];

NSObject *observerObject = [[NSObject alloc] init];
[instanceManager addInstance:observerObject withIdentifier:1];

FlutterError *error;
[hostApi removeObserverForObjectWithIdentifier:@0
observerIdentifier:@1
keyPath:@"myKey"
error:&error];
OCMVerify([mockObject removeObserver:observerObject forKeyPath:@"myKey"]);
XCTAssertNil(error);
}

- (void)testDispose {
NSObject *object = [[NSObject alloc] init];

FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
[instanceManager addInstance:object withIdentifier:0];

FWFObjectHostApiImpl *hostApi =
[[FWFObjectHostApiImpl alloc]
initWithInstanceManager:instanceManager];

FlutterError *error;
[hostApi disposeObjectWithIdentifier:@0 error:&error];
XCTAssertEqual([instanceManager identifierForInstance:object], NSNotFound);
XCTAssertNil(error);
}

@end
9 changes: 6 additions & 3 deletions packages/webview_flutter/webview_flutter_wkwebview/go.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@
#flutter pub run code_template_processor --template-file lib/src/web_kit/data_template.h --data-file lib/src/foundation/foundation.simple_ast.json --token-opener /*- lib/src/web_kit/data_output.h
#flutter pub run code_template_processor --template-file lib/src/web_kit/data_template.m --data-file lib/src/foundation/foundation.simple_ast.json lib/src/web_kit/data_output.m
#flutter pub run code_template_processor --template-file lib/src/web_kit/template_test.m --data-file lib/src/web_kit/web_kit.simple_ast.json lib/src/web_kit/output_test.m
flutter pub run code_template_processor --template-file lib/src/web_kit/template.h --data-file lib/src/ui_kit/ui_kit.simple_ast.json --token-opener /*- lib/src/ui_kit/output.h
flutter pub run code_template_processor --template-file lib/src/web_kit/template.m --data-file lib/src/ui_kit/ui_kit.simple_ast.json lib/src/ui_kit/output.m
flutter pub run code_template_processor --template-file lib/src/web_kit/template_test.m --data-file lib/src/ui_kit/ui_kit.simple_ast.json lib/src/ui_kit/output_test.m
#flutter pub run code_template_processor --template-file lib/src/web_kit/template.h --data-file lib/src/ui_kit/ui_kit.simple_ast.json --token-opener /*- lib/src/ui_kit/output.h
#flutter pub run code_template_processor --template-file lib/src/web_kit/template.m --data-file lib/src/ui_kit/ui_kit.simple_ast.json lib/src/ui_kit/output.m
#flutter pub run code_template_processor --template-file lib/src/web_kit/template_test.m --data-file lib/src/ui_kit/ui_kit.simple_ast.json lib/src/ui_kit/output_test.m
flutter pub run code_template_processor --template-file lib/src/web_kit/template.h --data-file lib/src/foundation/foundation.simple_ast.json --token-opener /*- lib/src/foundation/output.h
flutter pub run code_template_processor --template-file lib/src/web_kit/template.m --data-file lib/src/foundation/foundation.simple_ast.json lib/src/foundation/output.m
flutter pub run code_template_processor --template-file lib/src/web_kit/template_test.m --data-file lib/src/foundation/foundation.simple_ast.json lib/src/foundation/output_test.m

Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#import <Flutter/Flutter.h>

#import "FWFGeneratedWebKitApis.h"
#import "FWFInstanceManager.h"

NS_ASSUME_NONNULL_BEGIN

/**
* Host api implementation for NSObject.
*
* Handles creating NSObject that intercommunicate with a paired Dart object.
*/
@interface FWFObjectHostApiImpl : NSObject <FWFNSObjectHostApi>
- (instancetype)initWithInstanceManager:(FWFInstanceManager *)instanceManager;
@end

NS_ASSUME_NONNULL_END
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#import "FWFDataConverters.h"
#import "FWFObjectHostApi.h"

@interface FWFObjectHostApiImpl ()
@property(nonatomic) FWFInstanceManager *instanceManager;
@end

@implementation FWFObjectHostApiImpl
- (instancetype)initWithInstanceManager:(FWFInstanceManager *)instanceManager {
self = [self init];
if (self) {
_instanceManager = instanceManager;
}
return self;
}

- (NSObject *)objectForIdentifier:(NSNumber *)instanceId {
return (NSObject*) [self.instanceManager instanceForIdentifier:instanceId.longValue];
}

- (void)addObserverForObjectWithIdentifier:(nonnull NSNumber *)instanceId
observerIdentifier:(nonnull NSNumber *)observer
keyPath:(nonnull NSString *)keyPath
options:(nonnull NSArray<FWFNSKeyValueObservingOptionsEnumData *> *)options
error:(FlutterError *_Nullable *_Nonnull)error {
NSKeyValueObservingOptions optionsInt = 0;
for (FWFNSKeyValueObservingOptionsEnumData *data in options) {
optionsInt |= FWFNSKeyValueObservingOptionsFromEnumData(data);
}
[[self objectForIdentifier:instanceId]
addObserver:[self objectForIdentifier:observer]
forKeyPath:keyPath
options:optionsInt
context:nil
];
}

- (void)removeObserverForObjectWithIdentifier:(nonnull NSNumber *)instanceId
observerIdentifier:(nonnull NSNumber *)observer
keyPath:(nonnull NSString *)keyPath
error:(FlutterError *_Nullable *_Nonnull)error {

[[self objectForIdentifier:instanceId] removeObserver:[self objectForIdentifier:observer] forKeyPath:keyPath];
}

- (void)disposeObjectWithIdentifier:(nonnull NSNumber *)instanceId
error:(FlutterError *_Nullable *_Nonnull)error {
[self.instanceManager removeInstance:[self objectForIdentifier:instanceId]];
}

@end
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,4 @@
#import <webview_flutter_wkwebview/JavaScriptChannelHandler.h>
#import <webview_flutter_wkwebview/FWFScrollViewHostApi.h>
#import <webview_flutter_wkwebview/FWFUIViewHostApi.h>
#import <webview_flutter_wkwebview/FWFObjectHostApi.h>
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import 'package:flutter/services.dart';
import 'package:simple_ast/annotations.dart';

import '../common/instance_manager.dart';
import '../web_kit/web_kit.dart';
import 'foundation_api_impls.dart';

/// The values that can be returned in a change map.
Expand Down Expand Up @@ -253,10 +254,17 @@ class NSObject {
final NSObjectHostApiImpl _api;

/// Registers the observer object to receive KVO notifications.
@SimpleMethodAnnotation(customValues: <String, Object?>{
'returnsVoid': true,
'objcName': 'addObserverForObjectWithIdentifier',
})
Future<void> addObserver(
NSObject observer, {
required String keyPath,
required Set<NSKeyValueObservingOptions> options,
@nsNumber NSObject observer, {
@nsString required String keyPath,
@SimpleTypeAnnotation(customValues: <String, Object?>{
'objcName': 'NSArray<NSKeyValueObservingOptionsEnumData *>'
})
required Set<NSKeyValueObservingOptions> options,
}) {
assert(options.isNotEmpty);
return _api.addObserverForInstances(
Expand All @@ -268,11 +276,20 @@ class NSObject {
}

/// Stops the observer object from receiving change notifications for the property.
Future<void> removeObserver(NSObject observer, {required String keyPath}) {
@SimpleMethodAnnotation(customValues: <String, Object?>{
'returnsVoid': true,
'objcName': 'removeObserverForObjectWithIdentifier',
})
Future<void> removeObserver(@nsNumber NSObject observer,
{@nsString required String keyPath}) {
return _api.removeObserverForInstances(this, observer, keyPath);
}

/// Release the reference to the Objective-C object.
@SimpleMethodAnnotation(customValues: <String, Object?>{
'returnsVoid': true,
'objcName': 'disposeObjectWithIdentifier',
})
Future<void> dispose() {
return _api.disposeForInstances(this);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,9 @@
"isEnum": false,
"isSimpleClass": true,
"isUnknownOrUnsupportedType": false,
"customValues": {}
"customValues": {
"objcName": "NSObject"
}
},
"customValues": {}
},
Expand All @@ -65,7 +67,9 @@
"isEnum": false,
"isSimpleClass": false,
"isUnknownOrUnsupportedType": false,
"customValues": {}
"customValues": {
"objcName": "NSString"
}
},
"customValues": {}
},
Expand Down Expand Up @@ -96,12 +100,17 @@
"isEnum": false,
"isSimpleClass": false,
"isUnknownOrUnsupportedType": false,
"customValues": {}
"customValues": {
"objcName": "NSArray<NSKeyValueObservingOptionsEnumData *>"
}
},
"customValues": {}
}
],
"customValues": {}
"customValues": {
"returnsVoid": true,
"objcName": "addObserverForObjectWithIdentifier"
}
},
{
"name": "removeObserver",
Expand Down Expand Up @@ -148,7 +157,9 @@
"isEnum": false,
"isSimpleClass": true,
"isUnknownOrUnsupportedType": false,
"customValues": {}
"customValues": {
"objcName": "NSObject"
}
},
"customValues": {}
},
Expand All @@ -165,12 +176,17 @@
"isEnum": false,
"isSimpleClass": false,
"isUnknownOrUnsupportedType": false,
"customValues": {}
"customValues": {
"objcName": "NSString"
}
},
"customValues": {}
}
],
"customValues": {}
"customValues": {
"returnsVoid": true,
"objcName": "removeObserverForObjectWithIdentifier"
}
},
{
"name": "dispose",
Expand Down Expand Up @@ -204,7 +220,10 @@
"returnsVoid": false,
"static": false,
"parameters": [],
"customValues": {}
"customValues": {
"returnsVoid": true,
"objcName": "disposeObjectWithIdentifier"
}
}
],
"constructors": [
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@

// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#import <Flutter/Flutter.h>
#import <WebKit/WebKit.h>

#import "FWFGeneratedWebKitApis.h"
#import "FWFInstanceManager.h"

NS_ASSUME_NONNULL_BEGIN



/**
* Host api implementation for NSObject.
*
* Handles creating NSObject that intercommunicate with a paired Dart object.
*/
@interface FWFObjectHostApiImpl : NSObject <FWFNSObjectHostApi>
- (instancetype)initWithInstanceManager:(FWFInstanceManager *)instanceManager;
@end

NS_ASSUME_NONNULL_END
Loading