66library cider_connection;
77
88import 'dart:convert' ;
9+ import 'dart:js_util' ;
910
1011import 'package:dwds/data/debug_info.dart' ;
1112import 'package:js/js.dart' ;
@@ -15,6 +16,11 @@ import 'debug_session.dart';
1516import 'logger.dart' ;
1617import 'storage.dart' ;
1718
19+ /// Used to identify messages passed to/from Cider.
20+ ///
21+ /// This must match the key defined in the Cider extension.
22+ const _ciderDartMessageKey = 'CIDER_DART' ;
23+
1824/// Defines the message types that can be passed to/from Cider.
1925///
2026/// The types must match those defined by ChromeExtensionMessageType in the
@@ -67,7 +73,7 @@ void sendMessageToCider({
6773 'messageType' : messageType.name,
6874 'messageBody' : messageBody,
6975 });
70- _ciderPort ! . postMessage (message);
76+ _sendMessageToCider (message);
7177}
7278
7379/// Sends an error message to the Cider-connected port.
@@ -82,19 +88,29 @@ void sendErrorMessageToCider({
8288 'errorType' : errorType.name,
8389 'messageBody' : errorDetails,
8490 });
85- _ciderPort! .postMessage (message);
91+ _sendMessageToCider (message);
92+ }
93+
94+ void _sendMessageToCider (String json) {
95+ final message = {
96+ 'key' : _ciderDartMessageKey,
97+ 'json' : json,
98+ };
99+ _ciderPort! .postMessage (jsify (message));
86100}
87101
88102Future <void > _handleMessageFromCider (dynamic message, Port _) async {
89- if (message is ! String ) {
103+ final key = getProperty (message, 'key' );
104+ final json = getProperty (message, 'json' );
105+ if (key != _ciderDartMessageKey || json is ! String ) {
90106 sendErrorMessageToCider (
91107 errorType: CiderErrorType .invalidRequest,
92- errorDetails: 'Expected request to be a string : $message ' ,
108+ errorDetails: 'Invalid message format : $message ' ,
93109 );
94110 return ;
95111 }
96112
97- final decoded = jsonDecode (message ) as Map <String , dynamic >;
113+ final decoded = jsonDecode (json ) as Map <String , dynamic >;
98114 final messageType = decoded['messageType' ] as String ? ;
99115 final messageBody = decoded['messageBody' ] as String ? ;
100116
@@ -172,7 +188,7 @@ Future<int?> _findDartTabIdForWorkspace(String workspaceName) async {
172188 }
173189 if (dartTabIds.length > 1 ) {
174190 sendErrorMessageToCider (
175- errorType: CiderErrorType .noDartTab ,
191+ errorType: CiderErrorType .multipleDartTabs ,
176192 errorDetails: 'Too many debuggable Dart tabs found.' ,
177193 );
178194 return null ;
0 commit comments