From 50298f02684271509726fe4cc60344139ecf0849 Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Fri, 15 May 2020 10:35:03 -0700 Subject: [PATCH 1/2] Started allowing the setting of message handlers to nil for engines that aren't running. --- .../darwin/ios/framework/Source/FlutterEngine.mm | 9 ++++++--- .../darwin/ios/framework/Source/FlutterEngineTest.mm | 7 +++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/shell/platform/darwin/ios/framework/Source/FlutterEngine.mm b/shell/platform/darwin/ios/framework/Source/FlutterEngine.mm index f9b70ba89c03c..dd61dd345d81d 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterEngine.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterEngine.mm @@ -678,9 +678,12 @@ - (void)sendOnChannel:(NSString*)channel - (void)setMessageHandlerOnChannel:(NSString*)channel binaryMessageHandler:(FlutterBinaryMessageHandler)handler { NSParameterAssert(channel); - NSAssert(_shell && _shell->IsSetup(), - @"Setting a message handler before the FlutterEngine has been run."); - self.iosPlatformView->GetPlatformMessageRouter().SetMessageHandler(channel.UTF8String, handler); + if (_shell && _shell->IsSetup()) { + self.iosPlatformView->GetPlatformMessageRouter().SetMessageHandler(channel.UTF8String, handler); + } else { + NSAssert(!handler, @"Setting a message handler before the FlutterEngine has been run."); + // Setting a handler to nil for a not setup channel is a noop. + } } #pragma mark - FlutterTextureRegistry diff --git a/shell/platform/darwin/ios/framework/Source/FlutterEngineTest.mm b/shell/platform/darwin/ios/framework/Source/FlutterEngineTest.mm index 4071d26f7e7cf..01a90b9a6802c 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterEngineTest.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterEngineTest.mm @@ -47,6 +47,13 @@ - (void)testSetMessageHandlerBeforeRun { }]); } +- (void)testNilSetMessageHandlerBeforeRun { + id project = OCMClassMock([FlutterDartProject class]); + FlutterEngine* engine = [[FlutterEngine alloc] initWithName:@"foobar" project:project]; + XCTAssertNotNil(engine); + XCTAssertNoThrow([engine.binaryMessenger setMessageHandlerOnChannel:@"foo" binaryMessageHandler:nil]); +} + - (void)testNotifyPluginOfDealloc { id plugin = OCMProtocolMock(@protocol(FlutterPlugin)); OCMStub([plugin detachFromEngineForRegistrar:[OCMArg any]]); From 37bb6dd76839cb3fe5cbaad90100cffeac0d372d Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Fri, 15 May 2020 12:57:18 -0700 Subject: [PATCH 2/2] ran formatter --- .../platform/darwin/ios/framework/Source/FlutterEngineTest.mm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/shell/platform/darwin/ios/framework/Source/FlutterEngineTest.mm b/shell/platform/darwin/ios/framework/Source/FlutterEngineTest.mm index 01a90b9a6802c..d18d76167b5c6 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterEngineTest.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterEngineTest.mm @@ -51,7 +51,8 @@ - (void)testNilSetMessageHandlerBeforeRun { id project = OCMClassMock([FlutterDartProject class]); FlutterEngine* engine = [[FlutterEngine alloc] initWithName:@"foobar" project:project]; XCTAssertNotNil(engine); - XCTAssertNoThrow([engine.binaryMessenger setMessageHandlerOnChannel:@"foo" binaryMessageHandler:nil]); + XCTAssertNoThrow([engine.binaryMessenger setMessageHandlerOnChannel:@"foo" + binaryMessageHandler:nil]); } - (void)testNotifyPluginOfDealloc {