Skip to content

Commit e3160eb

Browse files
authored
[Darwin] Fix Matter framework delegates to pass the delegating object as the first arg to their methods (#22682)
1 parent 8936fde commit e3160eb

11 files changed

+55
-42
lines changed

examples/darwin-framework-tool/commands/pairing/DeviceControllerDelegateBridge.h

+4-2
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,15 @@
2020

2121
#import <Matter/Matter.h>
2222

23+
@class MTRDeviceController;
24+
2325
@interface CHIPToolDeviceControllerDelegate : NSObject <MTRDeviceControllerDelegate>
2426
@property PairingCommandBridge * commandBridge;
2527
@property chip::NodeId deviceID;
2628
@property MTRDeviceController * commissioner;
2729
@property MTRCommissioningParameters * params;
2830

29-
- (void)onCommissioningSessionEstablishmentDone:(NSError *)error;
30-
- (void)onCommissioningComplete:(NSError *)error;
31+
- (void)controller:(MTRDeviceController *)controller commissioningSessionEstablishmentDone:(NSError *)error;
32+
- (void)controller:(MTRDeviceController *)controller commissioningComplete:(NSError *)error;
3133

3234
@end

examples/darwin-framework-tool/commands/pairing/DeviceControllerDelegateBridge.mm

+2-2
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ - (void)onStatusUpdate:(MTRCommissioningStatus)status
4444
}
4545
}
4646

47-
- (void)onCommissioningSessionEstablishmentDone:(NSError *)error
47+
- (void)controller:(MTRDeviceController *)controller commissioningSessionEstablishmentDone:(NSError *)error
4848
{
4949
if (error != nil) {
5050
ChipLogProgress(chipTool, "PASE establishment failed");
@@ -61,7 +61,7 @@ - (void)onCommissioningSessionEstablishmentDone:(NSError *)error
6161
}
6262
}
6363

64-
- (void)onCommissioningComplete:(NSError *)error
64+
- (void)controller:(MTRDeviceController *)controller commissioningComplete:(NSError *)error
6565
{
6666
_commandBridge->SetCommandExitStatus(error, "Pairing Commissioning Complete");
6767
}

src/darwin/CHIPTool/CHIPTool/View Controllers/QRCode/QRCodeViewController.m

+3-3
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,7 @@ - (void)setVendorIDOnAccessory
490490
}
491491

492492
// MARK: MTRDeviceControllerDelegate
493-
- (void)onCommissioningSessionEstablishmentDone:(NSError * _Nullable)error
493+
- (void)controller:(MTRDeviceController *)controller commissioningSessionEstablishmentDone:(NSError * _Nullable)error
494494
{
495495
if (error != nil) {
496496
NSLog(@"Got pairing error back %@", error);
@@ -683,7 +683,7 @@ - (void)commissionWithSSID:(NSString *)ssid password:(NSString *)password
683683
}
684684
}
685685

686-
- (void)onCommissioningComplete:(NSError * _Nullable)error
686+
- (void)controller:(MTRDeviceController *)controller commissioningComplete:(NSError * _Nullable)error
687687
{
688688
if (error != nil) {
689689
NSLog(@"Error retrieving device informations over Mdns: %@", error);
@@ -1105,7 +1105,7 @@ - (instancetype)initWithViewController:(QRCodeViewController *)viewController
11051105
return self;
11061106
}
11071107

1108-
- (void)deviceAttestation:(MTRDeviceController *)controller failedForDevice:(void *)device error:(NSError * _Nonnull)error
1108+
- (void)deviceAttestationFailedForController:(MTRDeviceController *)controller device:(void *)device error:(NSError * _Nonnull)error
11091109
{
11101110
dispatch_async(dispatch_get_main_queue(), ^{
11111111
UIAlertController * alertController = [UIAlertController

src/darwin/Framework/CHIP/MTRDeviceAttestationDelegate.h

+9-7
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,10 @@ NS_ASSUME_NONNULL_BEGIN
3939
/**
4040
* Only one of the following delegate callbacks should be implemented.
4141
*
42-
* If -deviceAttestation:failedForDevice:error: is implemented, then it will be called when device
42+
* If -deviceAttestationFailedForController:device:error: is implemented, then it will be called when device
4343
* attestation fails, and the client can decide to continue or stop the commissioning.
4444
*
45-
* If -deviceAttestation:completedForDevice:attestationDeviceInfo:error: is implemented, then it
45+
* If -deviceAttestationCompletedForController:device:attestationDeviceInfo:error: is implemented, then it
4646
* will always be called when device attestation completes.
4747
*/
4848

@@ -58,10 +58,10 @@ NS_ASSUME_NONNULL_BEGIN
5858
* @param attestationDeviceInfo Attestation information for the device
5959
* @param error NSError representing the error code on attestation failure. Nil if success.
6060
*/
61-
- (void)deviceAttestation:(MTRDeviceController *)controller
62-
completedForDevice:(void *)device
63-
attestationDeviceInfo:(MTRDeviceAttestationDeviceInfo *)attestationDeviceInfo
64-
error:(NSError * _Nullable)error;
61+
- (void)deviceAttestationCompletedForController:(MTRDeviceController *)controller
62+
device:(void *)device
63+
attestationDeviceInfo:(MTRDeviceAttestationDeviceInfo *)attestationDeviceInfo
64+
error:(NSError * _Nullable)error;
6565

6666
/**
6767
* Notify the delegate when device attestation fails
@@ -70,7 +70,9 @@ NS_ASSUME_NONNULL_BEGIN
7070
* @param device Handle of device being commissioned
7171
* @param error NSError representing the error code for the failure
7272
*/
73-
- (void)deviceAttestation:(MTRDeviceController *)controller failedForDevice:(void *)device error:(NSError * _Nonnull)error;
73+
- (void)deviceAttestationFailedForController:(MTRDeviceController *)controller
74+
device:(void *)device
75+
error:(NSError * _Nonnull)error;
7476

7577
@end
7678

src/darwin/Framework/CHIP/MTRDeviceAttestationDelegateBridge.mm

+8-7
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@
3030
mResult = attestationResult;
3131

3232
id<MTRDeviceAttestationDelegate> strongDelegate = mDeviceAttestationDelegate;
33-
if ([strongDelegate respondsToSelector:@selector(deviceAttestation:completedForDevice:attestationDeviceInfo:error:)]) {
33+
if ([strongDelegate respondsToSelector:@selector(deviceAttestationCompletedForController:
34+
device:attestationDeviceInfo:error:)]) {
3435
MTRDeviceController * strongController = mDeviceController;
3536
if (strongController) {
3637
NSData * dacData = AsData(info.dacDerBuffer());
@@ -43,18 +44,18 @@
4344
NSError * error = (attestationResult == chip::Credentials::AttestationVerificationResult::kSuccess)
4445
? nil
4546
: [MTRError errorForCHIPErrorCode:CHIP_ERROR_INTEGRITY_CHECK_FAILED];
46-
[strongDelegate deviceAttestation:mDeviceController
47-
completedForDevice:device
48-
attestationDeviceInfo:deviceInfo
49-
error:error];
47+
[strongDelegate deviceAttestationCompletedForController:mDeviceController
48+
device:device
49+
attestationDeviceInfo:deviceInfo
50+
error:error];
5051
}
5152
} else if ((attestationResult != chip::Credentials::AttestationVerificationResult::kSuccess) &&
52-
[strongDelegate respondsToSelector:@selector(deviceAttestation:failedForDevice:error:)]) {
53+
[strongDelegate respondsToSelector:@selector(deviceAttestationFailedForController:device:error:)]) {
5354

5455
MTRDeviceController * strongController = mDeviceController;
5556
if (strongController) {
5657
NSError * error = [MTRError errorForCHIPErrorCode:CHIP_ERROR_INTEGRITY_CHECK_FAILED];
57-
[strongDelegate deviceAttestation:mDeviceController failedForDevice:device error:error];
58+
[strongDelegate deviceAttestationFailedForController:mDeviceController device:device error:error];
5859
}
5960
}
6061
});

src/darwin/Framework/CHIP/MTRDeviceController.mm

+2-2
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,7 @@ - (BOOL)commissionNodeWithID:(NSNumber *)nodeID
432432
}
433433
BOOL shouldWaitAfterDeviceAttestation = NO;
434434
if ([commissioningParams.deviceAttestationDelegate
435-
respondsToSelector:@selector(deviceAttestation:completedForDevice:attestationDeviceInfo:error:)]) {
435+
respondsToSelector:@selector(deviceAttestationCompletedForController:device:attestationDeviceInfo:error:)]) {
436436
shouldWaitAfterDeviceAttestation = YES;
437437
}
438438
_deviceAttestationDelegateBridge = new MTRDeviceAttestationDelegateBridge(
@@ -536,7 +536,7 @@ - (void)removeDevice:(MTRDevice *)device
536536
- (void)setDeviceControllerDelegate:(id<MTRDeviceControllerDelegate>)delegate queue:(dispatch_queue_t)queue
537537
{
538538
dispatch_async(_chipWorkQueue, ^{
539-
self->_deviceControllerDelegateBridge->setDelegate(delegate, queue);
539+
self->_deviceControllerDelegateBridge->setDelegate(self, delegate, queue);
540540
});
541541
}
542542

src/darwin/Framework/CHIP/MTRDeviceControllerDelegate.h

+5-3
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ typedef NS_ENUM(NSUInteger, MTRCommissioningStatus) {
2626
MTRCommissioningStatusDiscoveringMoreDevices = 3
2727
};
2828

29+
@class MTRDeviceController;
30+
2931
/**
3032
* The protocol definition for the MTRDeviceControllerDelegate.
3133
*
@@ -36,18 +38,18 @@ typedef NS_ENUM(NSUInteger, MTRCommissioningStatus) {
3638
/**
3739
* Notify the delegate when commissioning status gets updated.
3840
*/
39-
- (void)onStatusUpdate:(MTRCommissioningStatus)status;
41+
- (void)controller:(MTRDeviceController *)controller statusUpdate:(MTRCommissioningStatus)status;
4042

4143
/**
4244
* Notify the delegate when a commissioning session is established or the
4345
* establishment has errored out.
4446
*/
45-
- (void)onCommissioningSessionEstablishmentDone:(NSError * _Nullable)error;
47+
- (void)controller:(MTRDeviceController *)controller commissioningSessionEstablishmentDone:(NSError * _Nullable)error;
4648

4749
/**
4850
* Notify the delegate when commissioning is completed.
4951
*/
50-
- (void)onCommissioningComplete:(NSError * _Nullable)error;
52+
- (void)controller:(MTRDeviceController *)controller commissioningComplete:(NSError * _Nullable)error;
5153

5254
@end
5355

src/darwin/Framework/CHIP/MTRDeviceControllerDelegateBridge.h

+5-3
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,14 @@
2222

2323
NS_ASSUME_NONNULL_BEGIN
2424

25-
class MTRDeviceControllerDelegateBridge : public chip::Controller::DevicePairingDelegate
26-
{
25+
@class MTRDeviceController;
26+
27+
class MTRDeviceControllerDelegateBridge : public chip::Controller::DevicePairingDelegate {
2728
public:
2829
MTRDeviceControllerDelegateBridge();
2930
~MTRDeviceControllerDelegateBridge();
3031

31-
void setDelegate(id<MTRDeviceControllerDelegate> delegate, dispatch_queue_t queue);
32+
void setDelegate(MTRDeviceController * controller, id<MTRDeviceControllerDelegate> delegate, dispatch_queue_t queue);
3233

3334
void OnStatusUpdate(chip::Controller::DevicePairingDelegate::Status status) override;
3435

@@ -39,6 +40,7 @@ class MTRDeviceControllerDelegateBridge : public chip::Controller::DevicePairing
3940
void OnCommissioningComplete(chip::NodeId deviceId, CHIP_ERROR error) override;
4041

4142
private:
43+
MTRDeviceController * _Nullable mController;
4244
_Nullable id<MTRDeviceControllerDelegate> mDelegate;
4345
_Nullable dispatch_queue_t mQueue;
4446

src/darwin/Framework/CHIP/MTRDeviceControllerDelegateBridge.mm

+11-7
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
*/
1717

1818
#import "MTRDeviceControllerDelegateBridge.h"
19+
#import "MTRDeviceController.h"
1920
#import "MTRError_Internal.h"
2021

2122
MTRDeviceControllerDelegateBridge::MTRDeviceControllerDelegateBridge(void)
@@ -25,12 +26,15 @@
2526

2627
MTRDeviceControllerDelegateBridge::~MTRDeviceControllerDelegateBridge(void) {}
2728

28-
void MTRDeviceControllerDelegateBridge::setDelegate(id<MTRDeviceControllerDelegate> delegate, dispatch_queue_t queue)
29+
void MTRDeviceControllerDelegateBridge::setDelegate(
30+
MTRDeviceController * controller, id<MTRDeviceControllerDelegate> delegate, dispatch_queue_t queue)
2931
{
3032
if (delegate && queue) {
33+
mController = controller;
3134
mDelegate = delegate;
3235
mQueue = queue;
3336
} else {
37+
mController = nil;
3438
mDelegate = nil;
3539
mQueue = nil;
3640
}
@@ -58,11 +62,11 @@
5862
NSLog(@"DeviceControllerDelegate status updated: %d", status);
5963

6064
id<MTRDeviceControllerDelegate> strongDelegate = mDelegate;
61-
if ([strongDelegate respondsToSelector:@selector(onStatusUpdate:)]) {
65+
if ([strongDelegate respondsToSelector:@selector(controller:statusUpdate:)]) {
6266
if (strongDelegate && mQueue) {
6367
MTRCommissioningStatus commissioningStatus = MapStatus(status);
6468
dispatch_async(mQueue, ^{
65-
[strongDelegate onStatusUpdate:commissioningStatus];
69+
[strongDelegate controller:mController statusUpdate:commissioningStatus];
6670
});
6771
}
6872
}
@@ -73,11 +77,11 @@
7377
NSLog(@"DeviceControllerDelegate Pairing complete. Status %s", chip::ErrorStr(error));
7478

7579
id<MTRDeviceControllerDelegate> strongDelegate = mDelegate;
76-
if ([strongDelegate respondsToSelector:@selector(onCommissioningSessionEstablishmentDone:)]) {
80+
if ([strongDelegate respondsToSelector:@selector(controller:commissioningSessionEstablishmentDone:)]) {
7781
if (strongDelegate && mQueue) {
7882
dispatch_async(mQueue, ^{
7983
NSError * nsError = [MTRError errorForCHIPErrorCode:error];
80-
[strongDelegate onCommissioningSessionEstablishmentDone:nsError];
84+
[strongDelegate controller:mController commissioningSessionEstablishmentDone:nsError];
8185
});
8286
}
8387
}
@@ -95,11 +99,11 @@
9599
NSLog(@"DeviceControllerDelegate Commissioning complete. NodeId %llu Status %s", nodeId, chip::ErrorStr(error));
96100

97101
id<MTRDeviceControllerDelegate> strongDelegate = mDelegate;
98-
if ([strongDelegate respondsToSelector:@selector(onCommissioningComplete:)]) {
102+
if ([strongDelegate respondsToSelector:@selector(controller:commissioningComplete:)]) {
99103
if (strongDelegate && mQueue) {
100104
dispatch_async(mQueue, ^{
101105
NSError * nsError = [MTRError errorForCHIPErrorCode:error];
102-
[strongDelegate onCommissioningComplete:nsError];
106+
[strongDelegate controller:mController commissioningComplete:nsError];
103107
});
104108
}
105109
}

src/darwin/Framework/CHIPTests/MTRDeviceTests.m

+3-3
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ - (id)initWithExpectation:(XCTestExpectation *)expectation
9191
return self;
9292
}
9393

94-
- (void)onCommissioningSessionEstablishmentDone:(NSError *)error
94+
- (void)controller:(MTRDeviceController *)controller commissioningSessionEstablishmentDone:(NSError *)error
9595
{
9696
XCTAssertEqual(error.code, 0);
9797

@@ -101,10 +101,10 @@ - (void)onCommissioningSessionEstablishmentDone:(NSError *)error
101101
error:&commissionError];
102102
XCTAssertNil(commissionError);
103103

104-
// Keep waiting for onCommissioningComplete
104+
// Keep waiting for controller:MTRXPCListenerSampleTests.mcommissioningComplete
105105
}
106106

107-
- (void)onCommissioningComplete:(NSError *)error
107+
- (void)controller:(MTRDeviceController *)controller commissioningComplete:(NSError *)error
108108
{
109109
XCTAssertEqual(error.code, 0);
110110
[_expectation fulfill];

src/darwin/Framework/CHIPTests/MTRXPCListenerSampleTests.m

+3-3
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ - (id)initWithExpectation:(XCTestExpectation *)expectation
401401
return self;
402402
}
403403

404-
- (void)onCommissioningSessionEstablishmentDone:(NSError *)error
404+
- (void)controller:(MTRDeviceController *)controller commissioningSessionEstablishmentDone:(NSError *)error
405405
{
406406
XCTAssertEqual(error.code, 0);
407407
NSError * commissionError = nil;
@@ -410,10 +410,10 @@ - (void)onCommissioningSessionEstablishmentDone:(NSError *)error
410410
error:&commissionError];
411411
XCTAssertNil(commissionError);
412412

413-
// Keep waiting for onCommissioningComplete
413+
// Keep waiting for controller:commissioningComplete
414414
}
415415

416-
- (void)onCommissioningComplete:(NSError *)error
416+
- (void)controller:(MTRDeviceController *)controller commissioningComplete:(NSError *)error
417417
{
418418
XCTAssertEqual(error.code, 0);
419419
[_expectation fulfill];

0 commit comments

Comments
 (0)