From 362a74c81d4e0742ab25567ba01978feb3655bc4 Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Thu, 20 Jun 2019 17:45:41 -0700 Subject: [PATCH 1/9] Made the engine and the view controllers have BinaryMessengers, not be BinaryMessengers. This allows us to break retain cycles and makes the leaking channels we have not less dire. --- .../Headers/FlutterBinaryMessengerContainer.h | 9 ++++ .../framework/Headers/FlutterChannels.h | 3 +- .../framework/Source/FlutterChannels.mm | 4 +- shell/platform/darwin/ios/BUILD.gn | 1 + .../ios/framework/Headers/FlutterEngine.h | 4 +- .../framework/Headers/FlutterViewController.h | 16 +++---- .../Source/FlutterBinaryMessengerRelay.h | 10 ++++ .../Source/FlutterBinaryMessengerRelay.mm | 47 ++++++++++++++++++ .../ios/framework/Source/FlutterEngine.mm | 48 +++++++++++-------- .../framework/Source/FlutterViewController.mm | 34 +++++++++---- .../framework/Source/accessibility_bridge.mm | 2 +- .../framework/Headers/FLEViewController.h | 4 +- .../framework/Source/FLETextInputPlugin.mm | 2 +- .../framework/Source/FLEViewController.mm | 7 ++- 14 files changed, 145 insertions(+), 46 deletions(-) create mode 100644 shell/platform/darwin/common/framework/Headers/FlutterBinaryMessengerContainer.h create mode 100644 shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelay.h create mode 100644 shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelay.mm diff --git a/shell/platform/darwin/common/framework/Headers/FlutterBinaryMessengerContainer.h b/shell/platform/darwin/common/framework/Headers/FlutterBinaryMessengerContainer.h new file mode 100644 index 0000000000000..e938a48895001 --- /dev/null +++ b/shell/platform/darwin/common/framework/Headers/FlutterBinaryMessengerContainer.h @@ -0,0 +1,9 @@ +NS_ASSUME_NONNULL_BEGIN + +@protocol FlutterBinaryMessenger; + +@protocol FlutterBinaryMessengerContainer +- (NSObject*)binaryMessenger; +@end + +NS_ASSUME_NONNULL_END diff --git a/shell/platform/darwin/common/framework/Headers/FlutterChannels.h b/shell/platform/darwin/common/framework/Headers/FlutterChannels.h index 9245d79a8ec6c..c7c8454091019 100644 --- a/shell/platform/darwin/common/framework/Headers/FlutterChannels.h +++ b/shell/platform/darwin/common/framework/Headers/FlutterChannels.h @@ -5,9 +5,10 @@ #ifndef FLUTTER_FLUTTERCHANNELS_H_ #define FLUTTER_FLUTTERCHANNELS_H_ -#include "FlutterBinaryMessenger.h" #include "FlutterCodecs.h" +@protocol FlutterBinaryMessenger; + NS_ASSUME_NONNULL_BEGIN /** * A message reply callback. diff --git a/shell/platform/darwin/common/framework/Source/FlutterChannels.mm b/shell/platform/darwin/common/framework/Source/FlutterChannels.mm index a5142b11c0aa3..c4ff47a37f3d2 100644 --- a/shell/platform/darwin/common/framework/Source/FlutterChannels.mm +++ b/shell/platform/darwin/common/framework/Source/FlutterChannels.mm @@ -2,7 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "flutter/shell/platform/darwin/common/framework/Headers/FlutterChannels.h" +#import "flutter/shell/platform/darwin/common/framework/Headers/FlutterChannels.h" + +#import "flutter/shell/platform/darwin/common/framework/Headers/FlutterBinaryMessenger.h" #pragma mark - Basic message channel diff --git a/shell/platform/darwin/ios/BUILD.gn b/shell/platform/darwin/ios/BUILD.gn index 902358fad87f2..4627c26b37326 100644 --- a/shell/platform/darwin/ios/BUILD.gn +++ b/shell/platform/darwin/ios/BUILD.gn @@ -44,6 +44,7 @@ shared_library("create_flutter_framework_dylib") { sources = [ "framework/Source/FlutterAppDelegate.mm", "framework/Source/FlutterAppDelegate_Internal.h", + "framework/Source/FlutterBinaryMessengerRelay.mm", "framework/Source/FlutterCallbackCache.mm", "framework/Source/FlutterCallbackCache_Internal.h", "framework/Source/FlutterDartProject.mm", diff --git a/shell/platform/darwin/ios/framework/Headers/FlutterEngine.h b/shell/platform/darwin/ios/framework/Headers/FlutterEngine.h index 992a1c83055bd..ce7cf6203875f 100644 --- a/shell/platform/darwin/ios/framework/Headers/FlutterEngine.h +++ b/shell/platform/darwin/ios/framework/Headers/FlutterEngine.h @@ -8,7 +8,7 @@ #import #import -#include "FlutterBinaryMessenger.h" +#import "flutter/shell/platform/darwin/common/framework/Headers/FlutterBinaryMessengerContainer.h" #include "FlutterDartProject.h" #include "FlutterMacros.h" #include "FlutterPlugin.h" @@ -39,7 +39,7 @@ */ FLUTTER_EXPORT @interface FlutterEngine - : NSObject + : NSObject /** * Initialize this FlutterEngine with a `FlutterDartProject`. * diff --git a/shell/platform/darwin/ios/framework/Headers/FlutterViewController.h b/shell/platform/darwin/ios/framework/Headers/FlutterViewController.h index de6fcc2aa627b..e162b77558374 100644 --- a/shell/platform/darwin/ios/framework/Headers/FlutterViewController.h +++ b/shell/platform/darwin/ios/framework/Headers/FlutterViewController.h @@ -6,14 +6,14 @@ #define FLUTTER_FLUTTERVIEWCONTROLLER_H_ #import -#include +#import -#include "FlutterBinaryMessenger.h" -#include "FlutterDartProject.h" -#include "FlutterEngine.h" -#include "FlutterMacros.h" -#include "FlutterPlugin.h" -#include "FlutterTexture.h" +#import "flutter/shell/platform/darwin/common/framework/Headers/FlutterBinaryMessengerContainer.h" +#import "FlutterDartProject.h" +#import "FlutterEngine.h" +#import "FlutterMacros.h" +#import "FlutterPlugin.h" +#import "FlutterTexture.h" @class FlutterEngine; @@ -42,7 +42,7 @@ extern NSNotificationName const FlutterSemanticsUpdateNotification; */ FLUTTER_EXPORT @interface FlutterViewController - : UIViewController + : UIViewController /** * Initializes this FlutterViewController with the specified `FlutterEngine`. diff --git a/shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelay.h b/shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelay.h new file mode 100644 index 0000000000000..7ebfd80103423 --- /dev/null +++ b/shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelay.h @@ -0,0 +1,10 @@ +// 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. + +#include "flutter/shell/platform/darwin/common/framework/Headers/FlutterBinaryMessenger.h" + +@interface FlutterBinaryMessengerRelay : NSObject +@property (nonatomic, assign) NSObject* parent; +- (instancetype)initWithParent:(NSObject*)parent; +@end diff --git a/shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelay.mm b/shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelay.mm new file mode 100644 index 0000000000000..f21dce800a3c3 --- /dev/null +++ b/shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelay.mm @@ -0,0 +1,47 @@ +// 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/shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelay.h" + +#include "flutter/fml/logging.h" + +@implementation FlutterBinaryMessengerRelay +#pragma mark - FlutterBinaryMessenger + +- (instancetype)initWithParent:(NSObject*)parent { + self = [super init]; + if (self != nil) { + self.parent = parent; + } + return self; +} + +- (void)sendOnChannel:(NSString*)channel message:(NSData*)message { + if (self.parent) { + [self.parent sendOnChannel:channel message:message binaryReply:nil]; + } else { + FML_LOG(WARNING) << "Communicating on a dead channel."; + } +} + +- (void)sendOnChannel:(NSString*)channel + message:(NSData*)message + binaryReply:(FlutterBinaryReply)callback { + if (self.parent) { + [self.parent sendOnChannel:channel message:message binaryReply:callback]; + } else { + FML_LOG(WARNING) << "Communicating on a dead channel."; + } +} + +- (void)setMessageHandlerOnChannel:(NSString*)channel + binaryMessageHandler:(FlutterBinaryMessageHandler)handler { + if (self.parent) { + [self.parent setMessageHandlerOnChannel:channel binaryMessageHandler:handler]; + } else { + FML_LOG(WARNING) << "Communicating on a dead channel."; + } +} + +@end diff --git a/shell/platform/darwin/ios/framework/Source/FlutterEngine.mm b/shell/platform/darwin/ios/framework/Source/FlutterEngine.mm index 4ba2e83daa05b..ac40ba8ba2ab5 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterEngine.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterEngine.mm @@ -17,16 +17,17 @@ #include "flutter/shell/common/switches.h" #include "flutter/shell/common/thread_host.h" #include "flutter/shell/platform/darwin/common/command_line.h" -#include "flutter/shell/platform/darwin/ios/framework/Source/FlutterDartProject_Internal.h" -#include "flutter/shell/platform/darwin/ios/framework/Source/FlutterObservatoryPublisher.h" -#include "flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformPlugin.h" -#include "flutter/shell/platform/darwin/ios/framework/Source/FlutterTextInputDelegate.h" -#include "flutter/shell/platform/darwin/ios/framework/Source/FlutterViewController_Internal.h" -#include "flutter/shell/platform/darwin/ios/framework/Source/platform_message_response_darwin.h" -#include "flutter/shell/platform/darwin/ios/ios_surface.h" -#include "flutter/shell/platform/darwin/ios/platform_view_ios.h" - -@interface FlutterEngine () +#import "flutter/shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelay.h" +#import "flutter/shell/platform/darwin/ios/framework/Source/FlutterDartProject_Internal.h" +#import "flutter/shell/platform/darwin/ios/framework/Source/FlutterObservatoryPublisher.h" +#import "flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformPlugin.h" +#import "flutter/shell/platform/darwin/ios/framework/Source/FlutterTextInputDelegate.h" +#import "flutter/shell/platform/darwin/ios/framework/Source/FlutterViewController_Internal.h" +#import "flutter/shell/platform/darwin/ios/framework/Source/platform_message_response_darwin.h" +#import "flutter/shell/platform/darwin/ios/ios_surface.h" +#import "flutter/shell/platform/darwin/ios/platform_view_ios.h" + +@interface FlutterEngine () // Maintains a dictionary of plugin names that have registered with the engine. Used by // FlutterEngineRegistrar to implement a FlutterPluginRegistrar. @property(nonatomic, readonly) NSMutableDictionary* pluginPublications; @@ -65,6 +66,7 @@ @implementation FlutterEngine { uint64_t _nextPointerFlowId; BOOL _allowHeadlessExecution; + FlutterBinaryMessengerRelay* _binaryMessenger; } - (instancetype)initWithName:(NSString*)labelPrefix project:(FlutterDartProject*)projectOrNil { @@ -92,12 +94,15 @@ - (instancetype)initWithName:(NSString*)labelPrefix _platformViewsController.reset(new flutter::FlutterPlatformViewsController()); [self setupChannels]; + _binaryMessenger = [[FlutterBinaryMessengerRelay alloc] initWithParent:self]; return self; } - (void)dealloc { [_pluginPublications release]; + _binaryMessenger.parent = nil; + [_binaryMessenger release]; [super dealloc]; } @@ -228,42 +233,42 @@ - (void)resetChannels { - (void)setupChannels { _localizationChannel.reset([[FlutterMethodChannel alloc] initWithName:@"flutter/localization" - binaryMessenger:self + binaryMessenger:self.binaryMessenger codec:[FlutterJSONMethodCodec sharedInstance]]); _navigationChannel.reset([[FlutterMethodChannel alloc] initWithName:@"flutter/navigation" - binaryMessenger:self + binaryMessenger:self.binaryMessenger codec:[FlutterJSONMethodCodec sharedInstance]]); _platformChannel.reset([[FlutterMethodChannel alloc] initWithName:@"flutter/platform" - binaryMessenger:self + binaryMessenger:self.binaryMessenger codec:[FlutterJSONMethodCodec sharedInstance]]); _platformViewsChannel.reset([[FlutterMethodChannel alloc] initWithName:@"flutter/platform_views" - binaryMessenger:self + binaryMessenger:self.binaryMessenger codec:[FlutterStandardMethodCodec sharedInstance]]); _textInputChannel.reset([[FlutterMethodChannel alloc] initWithName:@"flutter/textinput" - binaryMessenger:self + binaryMessenger:self.binaryMessenger codec:[FlutterJSONMethodCodec sharedInstance]]); _lifecycleChannel.reset([[FlutterBasicMessageChannel alloc] initWithName:@"flutter/lifecycle" - binaryMessenger:self + binaryMessenger:self.binaryMessenger codec:[FlutterStringCodec sharedInstance]]); _systemChannel.reset([[FlutterBasicMessageChannel alloc] initWithName:@"flutter/system" - binaryMessenger:self + binaryMessenger:self.binaryMessenger codec:[FlutterJSONMessageCodec sharedInstance]]); _settingsChannel.reset([[FlutterBasicMessageChannel alloc] initWithName:@"flutter/settings" - binaryMessenger:self + binaryMessenger:self.binaryMessenger codec:[FlutterJSONMessageCodec sharedInstance]]); _textInputPlugin.reset([[FlutterTextInputPlugin alloc] init]); @@ -498,6 +503,11 @@ - (void)performAction:(FlutterTextInputAction)action withClient:(int)client { return _shell->Screenshot(type, base64Encode); } +#pragma mark - FlutterBinaryMessengerContainer +- (NSObject*)binaryMessenger { + return _binaryMessenger; +} + #pragma mark - FlutterBinaryMessenger - (void)sendOnChannel:(NSString*)channel message:(NSData*)message { @@ -596,7 +606,7 @@ - (void)dealloc { } - (NSObject*)messenger { - return _flutterEngine; + return _flutterEngine.binaryMessenger; } - (NSObject*)textures { diff --git a/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm b/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm index fc08125a18aee..1e26164dbd04c 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm @@ -14,16 +14,20 @@ #include "flutter/fml/platform/darwin/platform_version.h" #include "flutter/fml/platform/darwin/scoped_nsobject.h" #include "flutter/shell/common/thread_host.h" -#include "flutter/shell/platform/darwin/ios/framework/Source/FlutterEngine_Internal.h" -#include "flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformPlugin.h" -#include "flutter/shell/platform/darwin/ios/framework/Source/FlutterTextInputDelegate.h" -#include "flutter/shell/platform/darwin/ios/framework/Source/FlutterTextInputPlugin.h" -#include "flutter/shell/platform/darwin/ios/framework/Source/FlutterView.h" -#include "flutter/shell/platform/darwin/ios/framework/Source/platform_message_response_darwin.h" -#include "flutter/shell/platform/darwin/ios/platform_view_ios.h" +#import "flutter/shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelay.h" +#import "flutter/shell/platform/darwin/ios/framework/Source/FlutterEngine_Internal.h" +#import "flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformPlugin.h" +#import "flutter/shell/platform/darwin/ios/framework/Source/FlutterTextInputDelegate.h" +#import "flutter/shell/platform/darwin/ios/framework/Source/FlutterTextInputPlugin.h" +#import "flutter/shell/platform/darwin/ios/framework/Source/FlutterView.h" +#import "flutter/shell/platform/darwin/ios/framework/Source/platform_message_response_darwin.h" +#import "flutter/shell/platform/darwin/ios/platform_view_ios.h" NSNotificationName const FlutterSemanticsUpdateNotification = @"FlutterSemanticsUpdate"; +@interface FlutterViewController () +@end + @implementation FlutterViewController { std::unique_ptr> _weakFactory; fml::scoped_nsobject _engine; @@ -40,6 +44,7 @@ @implementation FlutterViewController { BOOL _viewOpaque; BOOL _engineNeedsLaunch; NSMutableSet* _ongoingTouches; + FlutterBinaryMessengerRelay* _binaryMessenger; } #pragma mark - Manage and override all designated initializers @@ -50,6 +55,7 @@ - (instancetype)initWithEngine:(FlutterEngine*)engine NSAssert(engine != nil, @"Engine is required"); self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { + _binaryMessenger = [[FlutterBinaryMessengerRelay alloc] initWithParent:self]; _viewOpaque = YES; _engine.reset([engine retain]); _engineNeedsLaunch = NO; @@ -69,6 +75,7 @@ - (instancetype)initWithProject:(FlutterDartProject*)projectOrNil bundle:(NSBundle*)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { + _binaryMessenger = [[FlutterBinaryMessengerRelay alloc] initWithParent:self]; _viewOpaque = YES; _weakFactory = std::make_unique>(self); _engine.reset([[FlutterEngine alloc] initWithName:@"io.flutter" @@ -471,6 +478,8 @@ - (void)flushOngoingTouches { } - (void)dealloc { + _binaryMessenger.parent = nil; + [_binaryMessenger release]; [_engine.get() notifyViewControllerDeallocated]; [[NSNotificationCenter defaultCenter] removeObserver:self]; [super dealloc]; @@ -989,23 +998,28 @@ - (void)onPreferredStatusBarStyleUpdated:(NSNotification*)notification { return [_engine.get() platformViewsController]; } +#pragma mark - FlutterBinaryMessengerContainer +- (NSObject*)binaryMessenger { + return _binaryMessenger; +} + #pragma mark - FlutterBinaryMessenger - (void)sendOnChannel:(NSString*)channel message:(NSData*)message { - [_engine.get() sendOnChannel:channel message:message]; + [_engine.get().binaryMessenger sendOnChannel:channel message:message]; } - (void)sendOnChannel:(NSString*)channel message:(NSData*)message binaryReply:(FlutterBinaryReply)callback { NSAssert(channel, @"The channel must not be null"); - [_engine.get() sendOnChannel:channel message:message binaryReply:callback]; + [_engine.get().binaryMessenger sendOnChannel:channel message:message binaryReply:callback]; } - (void)setMessageHandlerOnChannel:(NSString*)channel binaryMessageHandler:(FlutterBinaryMessageHandler)handler { NSAssert(channel, @"The channel must not be null"); - [_engine.get() setMessageHandlerOnChannel:channel binaryMessageHandler:handler]; + [_engine.get().binaryMessenger setMessageHandlerOnChannel:channel binaryMessageHandler:handler]; } #pragma mark - FlutterTextureRegistry diff --git a/shell/platform/darwin/ios/framework/Source/accessibility_bridge.mm b/shell/platform/darwin/ios/framework/Source/accessibility_bridge.mm index 25c53d2a919b6..2639846875513 100644 --- a/shell/platform/darwin/ios/framework/Source/accessibility_bridge.mm +++ b/shell/platform/darwin/ios/framework/Source/accessibility_bridge.mm @@ -572,7 +572,7 @@ - (BOOL)accessibilityScroll:(UIAccessibilityScrollDirection)direction { previous_routes_({}) { accessibility_channel_.reset([[FlutterBasicMessageChannel alloc] initWithName:@"flutter/accessibility" - binaryMessenger:platform_view->GetOwnerViewController().get() + binaryMessenger:platform_view->GetOwnerViewController().get().binaryMessenger codec:[FlutterStandardMessageCodec sharedInstance]]); [accessibility_channel_.get() setMessageHandler:^(id message, FlutterReply reply) { HandleEvent((NSDictionary*)message); diff --git a/shell/platform/darwin/macos/framework/Headers/FLEViewController.h b/shell/platform/darwin/macos/framework/Headers/FLEViewController.h index d6330bfc08ea2..37c5505c15030 100644 --- a/shell/platform/darwin/macos/framework/Headers/FLEViewController.h +++ b/shell/platform/darwin/macos/framework/Headers/FLEViewController.h @@ -6,7 +6,7 @@ #import "FLEOpenGLContextHandling.h" #import "FLEReshapeListener.h" -#import "FlutterBinaryMessenger.h" +#import "flutter/shell/platform/darwin/common/framework/Headers/FlutterBinaryMessengerContainer.h" #import "FlutterMacros.h" #import "FlutterPluginRegistrarMacOS.h" @@ -29,7 +29,7 @@ typedef NS_ENUM(NSInteger, FlutterMouseTrackingMode) { * Flutter engine in non-interactive mode, or with a drawable Flutter canvas. */ FLUTTER_EXPORT -@interface FLEViewController : NSViewController diff --git a/shell/platform/darwin/macos/framework/Source/FLETextInputPlugin.mm b/shell/platform/darwin/macos/framework/Source/FLETextInputPlugin.mm index 0f9d587c2634b..eeb1ebd9d193f 100644 --- a/shell/platform/darwin/macos/framework/Source/FLETextInputPlugin.mm +++ b/shell/platform/darwin/macos/framework/Source/FLETextInputPlugin.mm @@ -72,7 +72,7 @@ - (instancetype)initWithViewController:(FLEViewController*)viewController { if (self != nil) { _flutterViewController = viewController; _channel = [FlutterMethodChannel methodChannelWithName:kTextInputChannel - binaryMessenger:viewController + binaryMessenger:viewController.binaryMessenger codec:[FlutterJSONMethodCodec sharedInstance]]; __weak FLETextInputPlugin* weakSelf = self; [_channel setMethodCallHandler:^(FlutterMethodCall* call, FlutterResult result) { diff --git a/shell/platform/darwin/macos/framework/Source/FLEViewController.mm b/shell/platform/darwin/macos/framework/Source/FLEViewController.mm index 1bfb242e4732a..e0cdeaa4b37b5 100644 --- a/shell/platform/darwin/macos/framework/Source/FLEViewController.mm +++ b/shell/platform/darwin/macos/framework/Source/FLEViewController.mm @@ -70,7 +70,7 @@ void Reset() { /** * Private interface declaration for FLEViewController. */ -@interface FLEViewController () +@interface FLEViewController () /** * A list of additional responders to keyboard events. Keybord events are forwarded to all of them. @@ -671,6 +671,11 @@ - (void)viewDidReshape:(NSOpenGLView*)view { FlutterEngineSendWindowMetricsEvent(_engine, &event); } +#pragma mark - FlutterBinaryMessengerContainer +- (NSObject*)binaryMessenger { + return self; +} + #pragma mark - FlutterBinaryMessenger - (void)sendOnChannel:(nonnull NSString*)channel message:(nullable NSData*)message { From 37b409cdc250bd230e1b7c429d205e20204cb7d5 Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Thu, 20 Jun 2019 18:14:05 -0700 Subject: [PATCH 2/9] reverted changes to flutterchannels --- .../darwin/common/framework/Headers/FlutterChannels.h | 3 +-- .../darwin/common/framework/Source/FlutterChannels.mm | 4 +--- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/shell/platform/darwin/common/framework/Headers/FlutterChannels.h b/shell/platform/darwin/common/framework/Headers/FlutterChannels.h index c7c8454091019..9245d79a8ec6c 100644 --- a/shell/platform/darwin/common/framework/Headers/FlutterChannels.h +++ b/shell/platform/darwin/common/framework/Headers/FlutterChannels.h @@ -5,10 +5,9 @@ #ifndef FLUTTER_FLUTTERCHANNELS_H_ #define FLUTTER_FLUTTERCHANNELS_H_ +#include "FlutterBinaryMessenger.h" #include "FlutterCodecs.h" -@protocol FlutterBinaryMessenger; - NS_ASSUME_NONNULL_BEGIN /** * A message reply callback. diff --git a/shell/platform/darwin/common/framework/Source/FlutterChannels.mm b/shell/platform/darwin/common/framework/Source/FlutterChannels.mm index c4ff47a37f3d2..a5142b11c0aa3 100644 --- a/shell/platform/darwin/common/framework/Source/FlutterChannels.mm +++ b/shell/platform/darwin/common/framework/Source/FlutterChannels.mm @@ -2,9 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "flutter/shell/platform/darwin/common/framework/Headers/FlutterChannels.h" - -#import "flutter/shell/platform/darwin/common/framework/Headers/FlutterBinaryMessenger.h" +#include "flutter/shell/platform/darwin/common/framework/Headers/FlutterChannels.h" #pragma mark - Basic message channel From 1b101dde34e892d32e4006ae0c103f4c8c246d6b Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Fri, 21 Jun 2019 09:36:48 -0700 Subject: [PATCH 3/9] Removed FlutterBinaryMessengerContainer. --- .../Headers/FlutterBinaryMessengerContainer.h | 9 -------- .../ios/framework/Headers/FlutterEngine.h | 10 +++++++-- .../framework/Headers/FlutterViewController.h | 22 ++++++++++++------- .../framework/Headers/FLEViewController.h | 11 +++++++--- 4 files changed, 30 insertions(+), 22 deletions(-) delete mode 100644 shell/platform/darwin/common/framework/Headers/FlutterBinaryMessengerContainer.h diff --git a/shell/platform/darwin/common/framework/Headers/FlutterBinaryMessengerContainer.h b/shell/platform/darwin/common/framework/Headers/FlutterBinaryMessengerContainer.h deleted file mode 100644 index e938a48895001..0000000000000 --- a/shell/platform/darwin/common/framework/Headers/FlutterBinaryMessengerContainer.h +++ /dev/null @@ -1,9 +0,0 @@ -NS_ASSUME_NONNULL_BEGIN - -@protocol FlutterBinaryMessenger; - -@protocol FlutterBinaryMessengerContainer -- (NSObject*)binaryMessenger; -@end - -NS_ASSUME_NONNULL_END diff --git a/shell/platform/darwin/ios/framework/Headers/FlutterEngine.h b/shell/platform/darwin/ios/framework/Headers/FlutterEngine.h index ce7cf6203875f..b9e959994e299 100644 --- a/shell/platform/darwin/ios/framework/Headers/FlutterEngine.h +++ b/shell/platform/darwin/ios/framework/Headers/FlutterEngine.h @@ -8,7 +8,7 @@ #import #import -#import "flutter/shell/platform/darwin/common/framework/Headers/FlutterBinaryMessengerContainer.h" +#include "FlutterBinaryMessenger.h" #include "FlutterDartProject.h" #include "FlutterMacros.h" #include "FlutterPlugin.h" @@ -39,7 +39,7 @@ */ FLUTTER_EXPORT @interface FlutterEngine - : NSObject + : NSObject /** * Initialize this FlutterEngine with a `FlutterDartProject`. * @@ -237,6 +237,12 @@ FLUTTER_EXPORT */ @property(nonatomic, readonly) NSURL* observatoryUrl; +/** + * The `FlutterBinaryMessenger` associated with this FlutterEngine (used for communicating with + * channels). + */ +@property(nonatomic, readonly) NSObject* binaryMessenger; + @end #endif // FLUTTER_FLUTTERENGINE_H_ diff --git a/shell/platform/darwin/ios/framework/Headers/FlutterViewController.h b/shell/platform/darwin/ios/framework/Headers/FlutterViewController.h index e162b77558374..32e681abb170a 100644 --- a/shell/platform/darwin/ios/framework/Headers/FlutterViewController.h +++ b/shell/platform/darwin/ios/framework/Headers/FlutterViewController.h @@ -6,14 +6,14 @@ #define FLUTTER_FLUTTERVIEWCONTROLLER_H_ #import -#import +#include -#import "flutter/shell/platform/darwin/common/framework/Headers/FlutterBinaryMessengerContainer.h" -#import "FlutterDartProject.h" -#import "FlutterEngine.h" -#import "FlutterMacros.h" -#import "FlutterPlugin.h" -#import "FlutterTexture.h" +#include "FlutterBinaryMessenger.h" +#include "FlutterDartProject.h" +#include "FlutterEngine.h" +#include "FlutterMacros.h" +#include "FlutterPlugin.h" +#include "FlutterTexture.h" @class FlutterEngine; @@ -42,7 +42,7 @@ extern NSNotificationName const FlutterSemanticsUpdateNotification; */ FLUTTER_EXPORT @interface FlutterViewController - : UIViewController + : UIViewController /** * Initializes this FlutterViewController with the specified `FlutterEngine`. @@ -165,6 +165,12 @@ FLUTTER_EXPORT */ @property(weak, nonatomic, readonly) FlutterEngine* engine; +/** + * The `FlutterBinaryMessenger` associated with this FlutterViewController (used for communicating + * with channels). + */ +@property(nonatomic, readonly) NSObject* binaryMessenger; + @end #endif // FLUTTER_FLUTTERVIEWCONTROLLER_H_ diff --git a/shell/platform/darwin/macos/framework/Headers/FLEViewController.h b/shell/platform/darwin/macos/framework/Headers/FLEViewController.h index 37c5505c15030..6e0032ab7549a 100644 --- a/shell/platform/darwin/macos/framework/Headers/FLEViewController.h +++ b/shell/platform/darwin/macos/framework/Headers/FLEViewController.h @@ -6,7 +6,7 @@ #import "FLEOpenGLContextHandling.h" #import "FLEReshapeListener.h" -#import "flutter/shell/platform/darwin/common/framework/Headers/FlutterBinaryMessengerContainer.h" +#import "FlutterBinaryMessenger.h" #import "FlutterMacros.h" #import "FlutterPluginRegistrarMacOS.h" @@ -29,8 +29,7 @@ typedef NS_ENUM(NSInteger, FlutterMouseTrackingMode) { * Flutter engine in non-interactive mode, or with a drawable Flutter canvas. */ FLUTTER_EXPORT -@interface FLEViewController : NSViewController @@ -69,4 +68,10 @@ FLUTTER_EXPORT - (BOOL)launchHeadlessEngineWithAssetsPath:(nonnull NSURL*)assets commandLineArguments:(nullable NSArray*)arguments; +/** + * The `FlutterBinaryMessenger` associated with this FLEViewController (used for communicating + * with channels). + */ +@property(nonatomic, readonly) NSObject* _Nonnull binaryMessenger; + @end From d0fa48959f9f44f50a74c549c96521c7ac20ebef Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Fri, 21 Jun 2019 10:38:25 -0700 Subject: [PATCH 4/9] Added a unit test for the relay. --- .../Source/FlutterBinaryMessengerRelay.h | 6 +- .../Source/FlutterBinaryMessengerRelayTest.mm | 58 +++++++++++++++++++ .../IosUnitTests.xcodeproj/project.pbxproj | 22 ++++--- 3 files changed, 73 insertions(+), 13 deletions(-) create mode 100644 shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelayTest.mm diff --git a/shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelay.h b/shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelay.h index 7ebfd80103423..40c19d14ce864 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelay.h +++ b/shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelay.h @@ -2,8 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "flutter/shell/platform/darwin/common/framework/Headers/FlutterBinaryMessenger.h" +#import "flutter/shell/platform/darwin/common/framework/Headers/FlutterBinaryMessenger.h" +#import "flutter/shell/platform/darwin/common/framework/Headers/FlutterMacros.h" +#ifndef NDEBUG +FLUTTER_EXPORT +#endif @interface FlutterBinaryMessengerRelay : NSObject @property (nonatomic, assign) NSObject* parent; - (instancetype)initWithParent:(NSObject*)parent; diff --git a/shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelayTest.mm b/shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelayTest.mm new file mode 100644 index 0000000000000..2f650b330e85f --- /dev/null +++ b/shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelayTest.mm @@ -0,0 +1,58 @@ +// 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 +#import +#import "flutter/shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelay.h" + +#ifndef __has_feature +#define __has_feature(x) 0 /* for non-clang compilers */ +#endif + +#if !__has_feature(objc_arc) +#error ARC must be enabled! +#endif + +@interface FlutterBinaryMessengerRelayTest : XCTestCase +@end + +@implementation FlutterBinaryMessengerRelayTest + +- (void)setUp { +} + +- (void)tearDown { +} + +- (void)testCreate { + id messenger = OCMProtocolMock(@protocol(FlutterBinaryMessenger)); + FlutterBinaryMessengerRelay* relay = + [[FlutterBinaryMessengerRelay alloc] initWithParent:messenger]; + XCTAssertNotNil(relay); + XCTAssertEqual(messenger, relay.parent); +} + +- (void)testPassesCallOn { + id messenger = OCMProtocolMock(@protocol(FlutterBinaryMessenger)); + FlutterBinaryMessengerRelay* relay = + [[FlutterBinaryMessengerRelay alloc] initWithParent:messenger]; + char messageData[] = {'a','a','r','o','n'}; + NSData* message = [NSData dataWithBytes:messageData length:sizeof(messageData)]; + NSString* channel = @"foobar"; + [relay sendOnChannel:channel message:message binaryReply:nil]; + OCMVerify([messenger sendOnChannel:channel message:message binaryReply:nil]); +} + +- (void)testDoesntPassCallOn { + id messenger = OCMStrictProtocolMock(@protocol(FlutterBinaryMessenger)); + FlutterBinaryMessengerRelay* relay = + [[FlutterBinaryMessengerRelay alloc] initWithParent:messenger]; + char messageData[] = {'a','a','r','o','n'}; + NSData* message = [NSData dataWithBytes:messageData length:sizeof(messageData)]; + NSString* channel = @"foobar"; + relay.parent = nil; + [relay sendOnChannel:channel message:message binaryReply:nil]; +} + +@end diff --git a/testing/ios/IosUnitTests/IosUnitTests.xcodeproj/project.pbxproj b/testing/ios/IosUnitTests/IosUnitTests.xcodeproj/project.pbxproj index ed344fbc8e564..0bb60d38b9267 100644 --- a/testing/ios/IosUnitTests/IosUnitTests.xcodeproj/project.pbxproj +++ b/testing/ios/IosUnitTests/IosUnitTests.xcodeproj/project.pbxproj @@ -15,6 +15,7 @@ 0D6AB6C422BB05E200EEE540 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D6AB6C322BB05E200EEE540 /* main.m */; }; 0D6AB6EB22BB40E700EEE540 /* FlutterEngineTest.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0D6AB6E722BB40CF00EEE540 /* FlutterEngineTest.mm */; }; 0D6AB72C22BC339F00EEE540 /* libOCMock.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D6AB72522BC336100EEE540 /* libOCMock.a */; }; + 0D6AB73622BD409B00EEE540 /* FlutterBinaryMessengerRelayTest.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0D6AB72E22BD407F00EEE540 /* FlutterBinaryMessengerRelayTest.mm */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -84,6 +85,7 @@ 0D6AB6CF22BB05E200EEE540 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 0D6AB6E722BB40CF00EEE540 /* FlutterEngineTest.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = FlutterEngineTest.mm; sourceTree = ""; }; 0D6AB71722BC336100EEE540 /* OCMock.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = OCMock.xcodeproj; path = ../../../../../third_party/ocmock/Source/OCMock.xcodeproj; sourceTree = ""; }; + 0D6AB72E22BD407F00EEE540 /* FlutterBinaryMessengerRelayTest.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = FlutterBinaryMessengerRelayTest.mm; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -153,6 +155,7 @@ 0D6AB6E622BB409F00EEE540 /* Source */ = { isa = PBXGroup; children = ( + 0D6AB72E22BD407F00EEE540 /* FlutterBinaryMessengerRelayTest.mm */, 0D6AB6E722BB40CF00EEE540 /* FlutterEngineTest.mm */, ); name = Source; @@ -362,6 +365,7 @@ buildActionMask = 2147483647; files = ( 0D6AB6EB22BB40E700EEE540 /* FlutterEngineTest.mm in Sources */, + 0D6AB73622BD409B00EEE540 /* FlutterBinaryMessengerRelayTest.mm in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -571,16 +575,13 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Tests", - ); + LIBRARY_SEARCH_PATHS = "$(inherited)"; OTHER_LDFLAGS = ( - "-L", - ../../../../out/ios_debug_sim_unopt, "-lFlutter", "-lOCMock", "-ObjC", + "-L", + ../../../../out/ios_debug_sim_unopt, ); PRODUCT_BUNDLE_IDENTIFIER = com.google.flutter.IosUnitTestsTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -614,16 +615,13 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Tests", - ); + LIBRARY_SEARCH_PATHS = "$(inherited)"; OTHER_LDFLAGS = ( - "-L", - ../../../../out/ios_debug_sim_unopt, "-lFlutter", "-lOCMock", "-ObjC", + "-L", + ../../../../out/ios_debug_sim_unopt, ); PRODUCT_BUNDLE_IDENTIFIER = com.google.flutter.IosUnitTestsTests; PRODUCT_NAME = "$(TARGET_NAME)"; From 463451ce32a8de274cd544dfcd06e758dc665628 Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Fri, 21 Jun 2019 10:51:51 -0700 Subject: [PATCH 5/9] ran formatter --- shell/platform/darwin/ios/framework/Headers/FlutterEngine.h | 3 +-- .../darwin/ios/framework/Headers/FlutterViewController.h | 3 +-- .../ios/framework/Source/FlutterBinaryMessengerRelay.h | 2 +- .../ios/framework/Source/FlutterBinaryMessengerRelayTest.mm | 4 ++-- .../darwin/ios/framework/Source/FlutterViewController.mm | 4 ++-- .../darwin/macos/framework/Headers/FLEViewController.h | 5 ++--- 6 files changed, 9 insertions(+), 12 deletions(-) diff --git a/shell/platform/darwin/ios/framework/Headers/FlutterEngine.h b/shell/platform/darwin/ios/framework/Headers/FlutterEngine.h index b9e959994e299..08f1058c2c13e 100644 --- a/shell/platform/darwin/ios/framework/Headers/FlutterEngine.h +++ b/shell/platform/darwin/ios/framework/Headers/FlutterEngine.h @@ -38,8 +38,7 @@ * One of these methods must be invoked before calling `-setViewController:`. */ FLUTTER_EXPORT -@interface FlutterEngine - : NSObject +@interface FlutterEngine : NSObject /** * Initialize this FlutterEngine with a `FlutterDartProject`. * diff --git a/shell/platform/darwin/ios/framework/Headers/FlutterViewController.h b/shell/platform/darwin/ios/framework/Headers/FlutterViewController.h index 32e681abb170a..3c8d5eae8fa0a 100644 --- a/shell/platform/darwin/ios/framework/Headers/FlutterViewController.h +++ b/shell/platform/darwin/ios/framework/Headers/FlutterViewController.h @@ -41,8 +41,7 @@ extern NSNotificationName const FlutterSemanticsUpdateNotification; * forth between a FlutterViewController and other `UIViewController`s. */ FLUTTER_EXPORT -@interface FlutterViewController - : UIViewController +@interface FlutterViewController : UIViewController /** * Initializes this FlutterViewController with the specified `FlutterEngine`. diff --git a/shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelay.h b/shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelay.h index 40c19d14ce864..df668dd2a341c 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelay.h +++ b/shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelay.h @@ -9,6 +9,6 @@ FLUTTER_EXPORT #endif @interface FlutterBinaryMessengerRelay : NSObject -@property (nonatomic, assign) NSObject* parent; +@property(nonatomic, assign) NSObject* parent; - (instancetype)initWithParent:(NSObject*)parent; @end diff --git a/shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelayTest.mm b/shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelayTest.mm index 2f650b330e85f..08e07069c663b 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelayTest.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelayTest.mm @@ -37,7 +37,7 @@ - (void)testPassesCallOn { id messenger = OCMProtocolMock(@protocol(FlutterBinaryMessenger)); FlutterBinaryMessengerRelay* relay = [[FlutterBinaryMessengerRelay alloc] initWithParent:messenger]; - char messageData[] = {'a','a','r','o','n'}; + char messageData[] = {'a', 'a', 'r', 'o', 'n'}; NSData* message = [NSData dataWithBytes:messageData length:sizeof(messageData)]; NSString* channel = @"foobar"; [relay sendOnChannel:channel message:message binaryReply:nil]; @@ -48,7 +48,7 @@ - (void)testDoesntPassCallOn { id messenger = OCMStrictProtocolMock(@protocol(FlutterBinaryMessenger)); FlutterBinaryMessengerRelay* relay = [[FlutterBinaryMessengerRelay alloc] initWithParent:messenger]; - char messageData[] = {'a','a','r','o','n'}; + char messageData[] = {'a', 'a', 'r', 'o', 'n'}; NSData* message = [NSData dataWithBytes:messageData length:sizeof(messageData)]; NSString* channel = @"foobar"; relay.parent = nil; diff --git a/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm b/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm index 1e26164dbd04c..06314c5a7752d 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm @@ -1013,13 +1013,13 @@ - (void)sendOnChannel:(NSString*)channel message:(NSData*)message binaryReply:(FlutterBinaryReply)callback { NSAssert(channel, @"The channel must not be null"); - [_engine.get().binaryMessenger sendOnChannel:channel message:message binaryReply:callback]; + [_engine.get().binaryMessenger sendOnChannel:channel message:message binaryReply:callback]; } - (void)setMessageHandlerOnChannel:(NSString*)channel binaryMessageHandler:(FlutterBinaryMessageHandler)handler { NSAssert(channel, @"The channel must not be null"); - [_engine.get().binaryMessenger setMessageHandlerOnChannel:channel binaryMessageHandler:handler]; + [_engine.get().binaryMessenger setMessageHandlerOnChannel:channel binaryMessageHandler:handler]; } #pragma mark - FlutterTextureRegistry diff --git a/shell/platform/darwin/macos/framework/Headers/FLEViewController.h b/shell/platform/darwin/macos/framework/Headers/FLEViewController.h index 6e0032ab7549a..54d05dc3d009a 100644 --- a/shell/platform/darwin/macos/framework/Headers/FLEViewController.h +++ b/shell/platform/darwin/macos/framework/Headers/FLEViewController.h @@ -29,9 +29,8 @@ typedef NS_ENUM(NSInteger, FlutterMouseTrackingMode) { * Flutter engine in non-interactive mode, or with a drawable Flutter canvas. */ FLUTTER_EXPORT -@interface FLEViewController : NSViewController +@interface FLEViewController + : NSViewController /** * The view this controller manages when launched in interactive mode (headless set to false). Must From 463062f80408abce06a780c338c73c509d7b5f9e Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Fri, 21 Jun 2019 11:11:52 -0700 Subject: [PATCH 6/9] updated licenses_flutter --- ci/licenses_golden/licenses_flutter | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter index d877f2acf507a..c3dd89e337aca 100644 --- a/ci/licenses_golden/licenses_flutter +++ b/ci/licenses_golden/licenses_flutter @@ -682,6 +682,9 @@ FILE: ../../../flutter/shell/platform/darwin/ios/framework/Headers/FlutterViewCo FILE: ../../../flutter/shell/platform/darwin/ios/framework/Info.plist FILE: ../../../flutter/shell/platform/darwin/ios/framework/Source/FlutterAppDelegate.mm FILE: ../../../flutter/shell/platform/darwin/ios/framework/Source/FlutterAppDelegate_Internal.h +FILE: ../../../flutter/shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelay.h +FILE: ../../../flutter/shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelay.mm +FILE: ../../../flutter/shell/platform/darwin/ios/framework/Source/FlutterBinaryMessengerRelayTest.mm FILE: ../../../flutter/shell/platform/darwin/ios/framework/Source/FlutterCallbackCache.mm FILE: ../../../flutter/shell/platform/darwin/ios/framework/Source/FlutterCallbackCache_Internal.h FILE: ../../../flutter/shell/platform/darwin/ios/framework/Source/FlutterDartProject.mm From 2b17ce04975a35f0dad84cece707c86d3c470ca0 Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Thu, 27 Jun 2019 14:01:14 -0700 Subject: [PATCH 7/9] Added the unit test back after the merge conflict --- .../ios/IosUnitTests/IosUnitTests.xcodeproj/project.pbxproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/testing/ios/IosUnitTests/IosUnitTests.xcodeproj/project.pbxproj b/testing/ios/IosUnitTests/IosUnitTests.xcodeproj/project.pbxproj index 213a48b39c05d..189ce85499960 100644 --- a/testing/ios/IosUnitTests/IosUnitTests.xcodeproj/project.pbxproj +++ b/testing/ios/IosUnitTests/IosUnitTests.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 0D52D3BD22C566D50011DEBD /* FlutterBinaryMessengerRelayTest.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0D52D3B622C566D50011DEBD /* FlutterBinaryMessengerRelayTest.mm */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 0D6AB6B622BB05E100EEE540 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D6AB6B522BB05E100EEE540 /* AppDelegate.m */; }; 0D6AB6B922BB05E100EEE540 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D6AB6B822BB05E100EEE540 /* ViewController.m */; }; 0D6AB6BC22BB05E100EEE540 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0D6AB6BA22BB05E100EEE540 /* Main.storyboard */; }; @@ -71,6 +72,7 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 0D52D3B622C566D50011DEBD /* FlutterBinaryMessengerRelayTest.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = FlutterBinaryMessengerRelayTest.mm; sourceTree = ""; }; 0D6AB6B122BB05E100EEE540 /* IosUnitTests.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = IosUnitTests.app; sourceTree = BUILT_PRODUCTS_DIR; }; 0D6AB6B422BB05E100EEE540 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 0D6AB6B522BB05E100EEE540 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; @@ -156,6 +158,7 @@ 0D6AB6E622BB409F00EEE540 /* Source */ = { isa = PBXGroup; children = ( + 0D52D3B622C566D50011DEBD /* FlutterBinaryMessengerRelayTest.mm */, 0D6AB6E722BB40CF00EEE540 /* FlutterEngineTest.mm */, ); name = Source; @@ -366,6 +369,7 @@ buildActionMask = 2147483647; files = ( 0D6AB6EB22BB40E700EEE540 /* FlutterEngineTest.mm in Sources */, + 0D52D3BD22C566D50011DEBD /* FlutterBinaryMessengerRelayTest.mm in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; From 53abfb3a96ea8c3e808a7da7a052ea2deeb1dc41 Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Thu, 27 Jun 2019 14:18:41 -0700 Subject: [PATCH 8/9] Deprecated the binary messenger on the accessibility bridge. --- .../darwin/ios/framework/Headers/FlutterViewController.h | 6 +++++- .../darwin/ios/framework/Source/accessibility_bridge.mm | 3 +-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/shell/platform/darwin/ios/framework/Headers/FlutterViewController.h b/shell/platform/darwin/ios/framework/Headers/FlutterViewController.h index 3c8d5eae8fa0a..1d3f16dcc56ee 100644 --- a/shell/platform/darwin/ios/framework/Headers/FlutterViewController.h +++ b/shell/platform/darwin/ios/framework/Headers/FlutterViewController.h @@ -167,8 +167,12 @@ FLUTTER_EXPORT /** * The `FlutterBinaryMessenger` associated with this FlutterViewController (used for communicating * with channels). + * + * @deprecated Since |FlutterViewController| just forwards binary messenger calls to the + * |FlutterEngine|, just use the FlutterEngine.binaryMessenger. */ -@property(nonatomic, readonly) NSObject* binaryMessenger; +@property(nonatomic, readonly) NSObject* binaryMessenger + __attribute__((deprecated)); @end diff --git a/shell/platform/darwin/ios/framework/Source/accessibility_bridge.mm b/shell/platform/darwin/ios/framework/Source/accessibility_bridge.mm index 2639846875513..cc1646d952082 100644 --- a/shell/platform/darwin/ios/framework/Source/accessibility_bridge.mm +++ b/shell/platform/darwin/ios/framework/Source/accessibility_bridge.mm @@ -572,7 +572,7 @@ - (BOOL)accessibilityScroll:(UIAccessibilityScrollDirection)direction { previous_routes_({}) { accessibility_channel_.reset([[FlutterBasicMessageChannel alloc] initWithName:@"flutter/accessibility" - binaryMessenger:platform_view->GetOwnerViewController().get().binaryMessenger + binaryMessenger:platform_view->GetOwnerViewController().get().engine.binaryMessenger codec:[FlutterStandardMessageCodec sharedInstance]]); [accessibility_channel_.get() setMessageHandler:^(id message, FlutterReply reply) { HandleEvent((NSDictionary*)message); @@ -582,7 +582,6 @@ - (BOOL)accessibilityScroll:(UIAccessibilityScrollDirection)direction { AccessibilityBridge::~AccessibilityBridge() { clearState(); view_.accessibilityElements = nil; - [accessibility_channel_.get() setMessageHandler:nil]; } UIView* AccessibilityBridge::textInputView() { From d0d3ff31b551dd894e6a49998668bc2790c4d879 Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Thu, 27 Jun 2019 14:21:20 -0700 Subject: [PATCH 9/9] Removed stray pragmas. --- shell/platform/darwin/ios/framework/Source/FlutterEngine.mm | 1 - .../darwin/ios/framework/Source/FlutterViewController.mm | 1 - 2 files changed, 2 deletions(-) diff --git a/shell/platform/darwin/ios/framework/Source/FlutterEngine.mm b/shell/platform/darwin/ios/framework/Source/FlutterEngine.mm index 4f16b72855a31..b4b0a54a0479b 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterEngine.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterEngine.mm @@ -513,7 +513,6 @@ - (void)performAction:(FlutterTextInputAction)action withClient:(int)client { return _shell->Screenshot(type, base64Encode); } -#pragma mark - FlutterBinaryMessengerContainer - (NSObject*)binaryMessenger { return _binaryMessenger; } diff --git a/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm b/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm index dc8c9ea39a498..2d3f4f215dffd 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm @@ -987,7 +987,6 @@ - (void)onPreferredStatusBarStyleUpdated:(NSNotification*)notification { return [_engine.get() platformViewsController]; } -#pragma mark - FlutterBinaryMessengerContainer - (NSObject*)binaryMessenger { return _binaryMessenger; }