Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 4165d4b

Browse files
authored
Improve crashes if messenger APIs are used incorrectly (#39041)
* Clarify messenger APIs * Feedback
1 parent d98926c commit 4165d4b

File tree

3 files changed

+15
-3
lines changed

3 files changed

+15
-3
lines changed

shell/platform/common/client_wrapper/include/flutter/method_channel.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,10 @@ class MethodChannel {
9191
// Registers a handler that should be called any time a method call is
9292
// received on this channel. A null handler will remove any previous handler.
9393
//
94-
// Note that the MethodChannel does not own the handler, and will not
95-
// unregister it on destruction, so the caller is responsible for
96-
// unregistering explicitly if it should no longer be called.
94+
// The handler will be owned by the underlying BinaryMessageHandler.
95+
// Destroying the MethodChannel will not unregister the handler, so
96+
// the caller is responsible for unregistering explicitly if the handler
97+
// stops being valid before the engine is destroyed.
9798
void SetMethodCallHandler(MethodCallHandler<T> handler) const {
9899
if (!handler) {
99100
messenger_->SetMessageHandler(name_, nullptr);

shell/platform/common/public/flutter_messenger.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ FLUTTER_EXPORT bool FlutterDesktopMessengerSend(
5858
const uint8_t* message,
5959
const size_t message_size);
6060

61+
// Sends a binary message to the Flutter side on the specified channel.
62+
// The |reply| callback will be executed when a response is received.
6163
FLUTTER_EXPORT bool FlutterDesktopMessengerSendWithReply(
6264
FlutterDesktopMessengerRef messenger,
6365
const char* channel,

shell/platform/windows/flutter_windows.cc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,9 @@ bool FlutterDesktopMessengerSendWithReply(FlutterDesktopMessengerRef messenger,
265265
const size_t message_size,
266266
const FlutterDesktopBinaryReply reply,
267267
void* user_data) {
268+
FML_DCHECK(FlutterDesktopMessengerIsAvailable(messenger))
269+
<< "Messenger must reference a running engine to send a message";
270+
268271
return flutter::FlutterDesktopMessenger::FromRef(messenger)
269272
->GetEngine()
270273
->SendPlatformMessage(channel, message, message_size, reply, user_data);
@@ -283,6 +286,9 @@ void FlutterDesktopMessengerSendResponse(
283286
const FlutterDesktopMessageResponseHandle* handle,
284287
const uint8_t* data,
285288
size_t data_length) {
289+
FML_DCHECK(FlutterDesktopMessengerIsAvailable(messenger))
290+
<< "Messenger must reference a running engine to send a response";
291+
286292
flutter::FlutterDesktopMessenger::FromRef(messenger)
287293
->GetEngine()
288294
->SendPlatformMessageResponse(handle, data, data_length);
@@ -292,6 +298,9 @@ void FlutterDesktopMessengerSetCallback(FlutterDesktopMessengerRef messenger,
292298
const char* channel,
293299
FlutterDesktopMessageCallback callback,
294300
void* user_data) {
301+
FML_DCHECK(FlutterDesktopMessengerIsAvailable(messenger))
302+
<< "Messenger must reference a running engine to set a callback";
303+
295304
flutter::FlutterDesktopMessenger::FromRef(messenger)
296305
->GetEngine()
297306
->message_dispatcher()

0 commit comments

Comments
 (0)