6
6
library cider_connection;
7
7
8
8
import 'dart:convert' ;
9
+ import 'dart:js_util' ;
9
10
10
11
import 'package:dwds/data/debug_info.dart' ;
11
12
import 'package:js/js.dart' ;
@@ -15,6 +16,11 @@ import 'debug_session.dart';
15
16
import 'logger.dart' ;
16
17
import 'storage.dart' ;
17
18
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
+
18
24
/// Defines the message types that can be passed to/from Cider.
19
25
///
20
26
/// The types must match those defined by ChromeExtensionMessageType in the
@@ -67,7 +73,7 @@ void sendMessageToCider({
67
73
'messageType' : messageType.name,
68
74
'messageBody' : messageBody,
69
75
});
70
- _ciderPort ! . postMessage (message);
76
+ _sendMessageToCider (message);
71
77
}
72
78
73
79
/// Sends an error message to the Cider-connected port.
@@ -82,19 +88,29 @@ void sendErrorMessageToCider({
82
88
'errorType' : errorType.name,
83
89
'messageBody' : errorDetails,
84
90
});
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));
86
100
}
87
101
88
102
Future <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 ) {
90
106
sendErrorMessageToCider (
91
107
errorType: CiderErrorType .invalidRequest,
92
- errorDetails: 'Expected request to be a string : $message ' ,
108
+ errorDetails: 'Invalid message format : $message ' ,
93
109
);
94
110
return ;
95
111
}
96
112
97
- final decoded = jsonDecode (message ) as Map <String , dynamic >;
113
+ final decoded = jsonDecode (json ) as Map <String , dynamic >;
98
114
final messageType = decoded['messageType' ] as String ? ;
99
115
final messageBody = decoded['messageBody' ] as String ? ;
100
116
@@ -172,7 +188,7 @@ Future<int?> _findDartTabIdForWorkspace(String workspaceName) async {
172
188
}
173
189
if (dartTabIds.length > 1 ) {
174
190
sendErrorMessageToCider (
175
- errorType: CiderErrorType .noDartTab ,
191
+ errorType: CiderErrorType .multipleDartTabs ,
176
192
errorDetails: 'Too many debuggable Dart tabs found.' ,
177
193
);
178
194
return null ;
0 commit comments