Revert "Add deprecations to PlatformMessage stuff" (#42921)
Reverts flutter/engine#42580
diff --git a/lib/ui/channel_buffers.dart b/lib/ui/channel_buffers.dart
index a861669..ae9fbd7 100644
--- a/lib/ui/channel_buffers.dart
+++ b/lib/ui/channel_buffers.dart
@@ -6,18 +6,13 @@
// KEEP THIS SYNCHRONIZED WITH ../web_ui/lib/channel_buffers.dart
part of dart.ui;
-/// Deprecated. Migrate to [ChannelCallback] instead.
-///
/// Signature for [ChannelBuffers.drain]'s `callback` argument.
///
/// The first argument is the data sent by the plugin.
///
/// The second argument is a closure that, when called, will send messages
/// back to the plugin.
-@Deprecated(
- 'Migrate to ChannelCallback instead. '
- 'This feature was deprecated after v3.11.0-20.0.pre.',
-)
+// TODO(ianh): deprecate this once the framework is migrated to [ChannelCallback].
typedef DrainChannelCallback = Future<void> Function(ByteData? data, PlatformMessageResponseCallback callback);
/// Signature for [ChannelBuffers.setListener]'s `callback` argument.
@@ -382,8 +377,6 @@
}
}
- /// Deprecated. Migrate to [setListener] instead.
- ///
/// Remove and process all stored messages for a given channel.
///
/// This should be called once a channel is prepared to handle messages
@@ -391,10 +384,7 @@
///
/// The messages are processed by calling the given `callback`. Each message
/// is processed in its own microtask.
- @Deprecated(
- 'Migrate to setListener instead. '
- 'This feature was deprecated after v3.11.0-20.0.pre.',
- )
+ // TODO(ianh): deprecate once framework uses [setListener].
Future<void> drain(String name, DrainChannelCallback callback) async {
final _Channel? channel = _channels[name];
while (channel != null && !channel._queue.isEmpty) {
diff --git a/lib/ui/platform_dispatcher.dart b/lib/ui/platform_dispatcher.dart
index 47eb65c..1d47939 100644
--- a/lib/ui/platform_dispatcher.dart
+++ b/lib/ui/platform_dispatcher.dart
@@ -41,13 +41,8 @@
/// [PlatformDispatcher.onPlatformMessage].
typedef PlatformMessageResponseCallback = void Function(ByteData? data);
-/// Deprecated. Migrate to [ChannelBuffers.setListener] instead.
-///
/// Signature for [PlatformDispatcher.onPlatformMessage].
-@Deprecated(
- 'Migrate to ChannelBuffers.setListener instead. '
- 'This feature was deprecated after v3.11.0-20.0.pre.',
-)
+// TODO(ianh): deprecate once framework uses [ChannelBuffers.setListener].
typedef PlatformMessageCallback = void Function(String name, ByteData? data, PlatformMessageResponseCallback? callback);
// Signature for _setNeedsReportTimings.
@@ -656,8 +651,6 @@
@Native<Void Function(Int64)>(symbol: 'PlatformConfigurationNativeApi::RegisterBackgroundIsolate')
external static void __registerBackgroundIsolate(int rootIsolateId);
- /// Deprecated. Migrate to [ChannelBuffers.setListener] instead.
- ///
/// Called whenever this platform dispatcher receives a message from a
/// platform-specific plugin.
///
@@ -671,17 +664,11 @@
///
/// The framework invokes this callback in the same zone in which the callback
/// was set.
- @Deprecated(
- 'Migrate to ChannelBuffers.setListener instead. '
- 'This feature was deprecated after v3.11.0-20.0.pre.',
- )
+ // TODO(ianh): Deprecate onPlatformMessage once the framework is moved over
+ // to using channel buffers exclusively.
PlatformMessageCallback? get onPlatformMessage => _onPlatformMessage;
PlatformMessageCallback? _onPlatformMessage;
Zone _onPlatformMessageZone = Zone.root;
- @Deprecated(
- 'Migrate to ChannelBuffers.setListener instead. '
- 'This feature was deprecated after v3.11.0-20.0.pre.',
- )
set onPlatformMessage(PlatformMessageCallback? callback) {
_onPlatformMessage = callback;
_onPlatformMessageZone = Zone.current;
diff --git a/lib/ui/window.dart b/lib/ui/window.dart
index 689ebdd..0b0e43d 100644
--- a/lib/ui/window.dart
+++ b/lib/ui/window.dart
@@ -787,8 +787,6 @@
platformDispatcher.sendPlatformMessage(name, data, callback);
}
- /// Deprecated. Migrate to [ChannelBuffers.setListener] instead.
- ///
/// Called whenever this window receives a message from a platform-specific
/// plugin.
///
@@ -804,15 +802,8 @@
///
/// The framework invokes this callback in the same zone in which the
/// callback was set.
- @Deprecated(
- 'Migrate to ChannelBuffers.setListener instead. '
- 'This feature was deprecated after v3.11.0-20.0.pre.',
- )
+ // TODO(ianh): deprecate once framework uses [ChannelBuffers.setListener].
PlatformMessageCallback? get onPlatformMessage => platformDispatcher.onPlatformMessage;
- @Deprecated(
- 'Migrate to ChannelBuffers.setListener instead. '
- 'This feature was deprecated after v3.11.0-20.0.pre.',
- )
set onPlatformMessage(PlatformMessageCallback? callback) {
platformDispatcher.onPlatformMessage = callback;
}
diff --git a/testing/dart/channel_buffers_test.dart b/testing/dart/channel_buffers_test.dart
index 4058719..4a17705 100644
--- a/testing/dart/channel_buffers_test.dart
+++ b/testing/dart/channel_buffers_test.dart
@@ -31,9 +31,6 @@
called = true;
}
buffers.push(channel, data, callback);
- // Ignoring the deprecated member use because we're specifically testing
- // deprecated API.
- // ignore: deprecated_member_use
await buffers.drain(channel, (ByteData? drainedData, ui.PlatformMessageResponseCallback drainedCallback) async {
expect(drainedData, equals(data));
assert(!called);
@@ -55,9 +52,6 @@
// Ignoring the returned future because the completion of the drain is
// communicated using the `completer`.
- // Ignoring the deprecated member use because we're specifically testing
- // deprecated API.
- // ignore: deprecated_member_use
buffers.drain(channel, (ByteData? drainedData, ui.PlatformMessageResponseCallback drainedCallback) async {
log.add('callback');
completer.complete();
@@ -83,9 +77,6 @@
_resize(buffers, channel, 0);
buffers.push(channel, data, callback);
bool didCall = false;
- // Ignoring the deprecated member use because we're specifically testing
- // deprecated API.
- // ignore: deprecated_member_use
await buffers.drain(channel, (ByteData? drainedData, ui.PlatformMessageResponseCallback drainedCallback) async {
didCall = true;
});
@@ -96,9 +87,6 @@
const String channel = 'foo';
final ui.ChannelBuffers buffers = ui.ChannelBuffers();
bool didCall = false;
- // Ignoring the deprecated member use because we're specifically testing
- // deprecated API.
- // ignore: deprecated_member_use
await buffers.drain(channel, (ByteData? drainedData, ui.PlatformMessageResponseCallback drainedCallback) async {
didCall = true;
});
@@ -119,9 +107,6 @@
buffers.push(channel, three, callback);
buffers.push(channel, four, callback);
int counter = 0;
- // Ignoring the deprecated member use because we're specifically testing
- // deprecated API.
- // ignore: deprecated_member_use
await buffers.drain(channel, (ByteData? drainedData, ui.PlatformMessageResponseCallback drainedCallback) async {
switch (counter) {
case 0:
@@ -147,9 +132,6 @@
buffers.push(channel, two, callback);
_resize(buffers, channel, 1);
int counter = 0;
- // Ignoring the deprecated member use because we're specifically testing
- // deprecated API.
- // ignore: deprecated_member_use
await buffers.drain(channel, (ByteData? drainedData, ui.PlatformMessageResponseCallback drainedCallback) async {
switch (counter) {
case 0:
diff --git a/testing/dart/observatory/vmservice_methods_test.dart b/testing/dart/observatory/vmservice_methods_test.dart
index fa522b7..7ba1565 100644
--- a/testing/dart/observatory/vmservice_methods_test.dart
+++ b/testing/dart/observatory/vmservice_methods_test.dart
@@ -74,15 +74,12 @@
fail('This test must not be run with --disable-vm-service.');
}
- final Completer<String> completer = Completer<String>();
- ui.channelBuffers.setListener(
- 'flutter/system',
- (ByteData? data, ui.PlatformMessageResponseCallback callback) {
- final ByteBuffer buffer = data!.buffer;
- final Uint8List list = buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
- completer.complete(utf8.decode(list));
- },
- );
+ final Completer<PlatformResponse> completer = Completer<PlatformResponse>();
+ ui.PlatformDispatcher.instance.onPlatformMessage = (String name, ByteData? data, ui.PlatformMessageResponseCallback? callback) {
+ final ByteBuffer buffer = data!.buffer;
+ final Uint8List list = buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
+ completer.complete(PlatformResponse(name: name, contents: utf8.decode(list)));
+ };
vmService = await vmServiceConnectUri(
'ws://localhost:${info.serverUri!.port}${info.serverUri!.path}ws',
@@ -97,11 +94,13 @@
expect(fontChangeResponse.type, 'Success');
expect(
await completer.future,
- '{"type":"fontsChange"}',
+ const PlatformResponse(
+ name: 'flutter/system',
+ contents: '{"type":"fontsChange"}',
+ ),
);
} finally {
await vmService?.dispose();
- ui.channelBuffers.clearListener('flutter/system');
}
});
}
@@ -122,3 +121,22 @@
}
return null;
}
+
+class PlatformResponse {
+ const PlatformResponse({
+ required this.name,
+ required this.contents,
+ });
+
+ final String name;
+ final String contents;
+
+ @override
+ bool operator ==(Object other) =>
+ other is PlatformResponse &&
+ other.name == name &&
+ other.contents == contents;
+
+ @override
+ int get hashCode => Object.hash(name, contents);
+}
diff --git a/testing/dart/text_test.dart b/testing/dart/text_test.dart
index 23fd1bd..db23069 100644
--- a/testing/dart/text_test.dart
+++ b/testing/dart/text_test.dart
@@ -195,19 +195,20 @@
void testLoadFontFromList() {
test('loadFontFromList will send platform message after font is loaded', () async {
+ final PlatformMessageCallback? oldHandler = PlatformDispatcher.instance.onPlatformMessage;
+ late String actualName;
late String message;
- channelBuffers.setListener(
- 'flutter/system',
- (ByteData? data, PlatformMessageResponseCallback? callback) {
- assert(data != null);
- final Uint8List list = data!.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
- message = utf8.decode(list);
- },
- );
+ PlatformDispatcher.instance.onPlatformMessage = (String name, ByteData? data, PlatformMessageResponseCallback? callback) {
+ assert(data != null);
+ actualName = name;
+ final Uint8List list = data!.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
+ message = utf8.decode(list);
+ };
final Uint8List fontData = Uint8List(0);
await loadFontFromList(fontData, fontFamily: 'fake');
+ PlatformDispatcher.instance.onPlatformMessage = oldHandler;
+ expect(actualName, 'flutter/system');
expect(message, '{"type":"fontsChange"}');
- channelBuffers.clearListener('flutter/system');
});
}
diff --git a/testing/scenario_app/lib/main.dart b/testing/scenario_app/lib/main.dart
index b7e69ad..06567db 100644
--- a/testing/scenario_app/lib/main.dart
+++ b/testing/scenario_app/lib/main.dart
@@ -17,13 +17,12 @@
// FlutterView to the _view property.
assert(PlatformDispatcher.instance.implicitView != null);
PlatformDispatcher.instance
+ ..onPlatformMessage = _handlePlatformMessage
..onBeginFrame = _onBeginFrame
..onDrawFrame = _onDrawFrame
..onMetricsChanged = _onMetricsChanged
..onPointerDataPacket = _onPointerDataPacket
..scheduleFrame();
- channelBuffers.setListener('driver', _handleDriverMessage);
- channelBuffers.setListener('write_timeline', _handleWriteTimelineMessage);
final FlutterView view = PlatformDispatcher.instance.implicitView!;
// Asserting that this is greater than zero since this app runs on different
@@ -42,8 +41,7 @@
/// The FlutterView into which the [Scenario]s will be rendered.
FlutterView get _view => PlatformDispatcher.instance.implicitView!;
-void _handleDriverMessage(ByteData? data, PlatformMessageResponseCallback? callback) {
- final Map<String, dynamic> call = json.decode(utf8.decode(data!.buffer.asUint8List())) as Map<String, dynamic>;
+void _handleDriverMessage(Map<String, dynamic> call) {
final String? methodName = call['method'] as String?;
switch (methodName) {
case 'set_scenario':
@@ -54,9 +52,23 @@
}
}
-Future<void> _handleWriteTimelineMessage(ByteData? data, PlatformMessageResponseCallback? callback) async {
- final String timelineData = await _getTimelineData();
- callback!(Uint8List.fromList(utf8.encode(timelineData)).buffer.asByteData());
+Future<void> _handlePlatformMessage(
+ String name, ByteData? data, PlatformMessageResponseCallback? callback) async {
+ if (data != null) {
+ print('$name = ${utf8.decode(data.buffer.asUint8List())}');
+ } else {
+ print(name);
+ }
+
+ switch (name) {
+ case 'driver':
+ _handleDriverMessage(json.decode(utf8.decode(data!.buffer.asUint8List())) as Map<String, dynamic>);
+ case 'write_timeline':
+ final String timelineData = await _getTimelineData();
+ callback!(Uint8List.fromList(utf8.encode(timelineData)).buffer.asByteData());
+ default:
+ currentScenario?.onPlatformMessage(name, data, callback);
+ }
}
Future<String> _getTimelineData() async {
diff --git a/testing/scenario_app/lib/src/platform_echo_mixin.dart b/testing/scenario_app/lib/src/platform_echo_mixin.dart
new file mode 100644
index 0000000..9e80929
--- /dev/null
+++ b/testing/scenario_app/lib/src/platform_echo_mixin.dart
@@ -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 'dart:typed_data';
+import 'dart:ui';
+
+import 'scenario.dart';
+
+/// Echo platform messages back to the sender.
+mixin PlatformEchoMixin on Scenario {
+ /// Handle a platform message.
+ @override
+ void onPlatformMessage(
+ String name,
+ ByteData? data,
+ PlatformMessageResponseCallback? callback,
+ ) {
+ view.platformDispatcher.sendPlatformMessage(name, data, null);
+ }
+}
diff --git a/testing/scenario_app/lib/src/platform_view.dart b/testing/scenario_app/lib/src/platform_view.dart
index 9e3c559..aeb9f7c 100644
--- a/testing/scenario_app/lib/src/platform_view.dart
+++ b/testing/scenario_app/lib/src/platform_view.dart
@@ -422,7 +422,6 @@
required this.secondId,
}) {
_nextFrame = _firstFrame;
- channelBuffers.setListener('flutter/lifecycle', _onPlatformMessage);
}
/// The platform view identifier to use for the first platform view.
@@ -505,10 +504,15 @@
String _lastLifecycleState = '';
- void _onPlatformMessage(
+ @override
+ void onPlatformMessage(
+ String name,
ByteData? data,
PlatformMessageResponseCallback? callback,
) {
+ if (name != 'flutter/lifecycle') {
+ return;
+ }
final String message = utf8.decode(data!.buffer.asUint8List());
if (_lastLifecycleState == 'AppLifecycleState.inactive' &&
message == 'AppLifecycleState.resumed') {
@@ -518,12 +522,6 @@
_lastLifecycleState = message;
}
-
- @override
- void unmount() {
- channelBuffers.clearListener('flutter/lifecycle');
- super.unmount();
- }
}
/// Platform view with clip rect.
diff --git a/testing/scenario_app/lib/src/poppable_screen.dart b/testing/scenario_app/lib/src/poppable_screen.dart
index 8f633bf..394aaaa 100644
--- a/testing/scenario_app/lib/src/poppable_screen.dart
+++ b/testing/scenario_app/lib/src/poppable_screen.dart
@@ -2,19 +2,17 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-import 'dart:typed_data';
import 'dart:ui';
import 'channel_util.dart';
+import 'platform_echo_mixin.dart';
import 'scenario.dart';
/// A blank page with a button that pops the page when tapped.
-class PoppableScreenScenario extends Scenario {
+class PoppableScreenScenario extends Scenario with PlatformEchoMixin {
/// Creates the PoppableScreenScenario.
- PoppableScreenScenario(super.view) {
- channelBuffers.setListener('flutter/platform', _onHandlePlatformMessage);
- }
+ PoppableScreenScenario(super.view);
// Rect for the pop button. Only defined once onMetricsChanged is called.
Rect? _buttonRect;
@@ -81,14 +79,4 @@
// will fail.
);
}
-
- void _onHandlePlatformMessage(ByteData? data, PlatformMessageResponseCallback callback) {
- view.platformDispatcher.sendPlatformMessage('flutter/platform', data, null);
- }
-
- @override
- void unmount() {
- channelBuffers.clearListener('flutter/platform');
- super.unmount();
- }
}
diff --git a/testing/scenario_app/lib/src/scenario.dart b/testing/scenario_app/lib/src/scenario.dart
index f44eecc..6c3611b 100644
--- a/testing/scenario_app/lib/src/scenario.dart
+++ b/testing/scenario_app/lib/src/scenario.dart
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+import 'dart:typed_data';
import 'dart:ui';
/// A scenario to run for testing.
@@ -50,4 +51,14 @@
///
/// See [PlatformDispatcher.onPointerDataPacket].
void onPointerDataPacket(PointerDataPacket packet) {}
+
+ /// Called by the program when an engine side platform channel message is
+ /// received.
+ ///
+ /// See [PlatformDispatcher.onPlatformMessage].
+ void onPlatformMessage(
+ String name,
+ ByteData? data,
+ PlatformMessageResponseCallback? callback,
+ ) {}
}