Unverified Commit 22374517 authored by Jonah Williams's avatar Jonah Williams Committed by GitHub

Don't eagerly call runMain when --start-paused is provided to web application (#42144)

parent f9314df8
...@@ -259,7 +259,17 @@ class ResidentWebRunner extends ResidentRunner { ...@@ -259,7 +259,17 @@ class ResidentWebRunner extends ResidentRunner {
unawaited(_vmService.registerService('reloadSources', 'FlutterTools')); unawaited(_vmService.registerService('reloadSources', 'FlutterTools'));
websocketUri = Uri.parse(_connectionResult.debugConnection.uri); websocketUri = Uri.parse(_connectionResult.debugConnection.uri);
// Always run main after connecting because start paused doesn't work yet. // Always run main after connecting because start paused doesn't work yet.
_connectionResult.appConnection.runMain(); if (!debuggingOptions.startPaused || !supportsServiceProtocol) {
_connectionResult.appConnection.runMain();
} else {
StreamSubscription<void> resumeSub;
resumeSub = _connectionResult.debugConnection.vmService.onDebugEvent.listen((vmservice.Event event) {
if (event.type == vmservice.EventKind.kResume) {
_connectionResult.appConnection.runMain();
resumeSub.cancel();
}
});
}
} }
if (websocketUri != null) { if (websocketUri != null) {
printStatus('Debug service listening on $websocketUri'); printStatus('Debug service listening on $websocketUri');
......
...@@ -83,6 +83,9 @@ void main() { ...@@ -83,6 +83,9 @@ void main() {
when(mockVmService.onStdoutEvent).thenAnswer((Invocation _) { when(mockVmService.onStdoutEvent).thenAnswer((Invocation _) {
return const Stream<Event>.empty(); return const Stream<Event>.empty();
}); });
when(mockVmService.onDebugEvent).thenAnswer((Invocation _) {
return const Stream<Event>.empty();
});
when(mockDebugConnection.uri).thenReturn('ws://127.0.0.1/abcd/'); when(mockDebugConnection.uri).thenReturn('ws://127.0.0.1/abcd/');
} }
...@@ -174,6 +177,27 @@ void main() { ...@@ -174,6 +177,27 @@ void main() {
expect(bufferLogger.statusText, contains('THIS MESSAGE IS IMPORTANT')); expect(bufferLogger.statusText, contains('THIS MESSAGE IS IMPORTANT'));
})); }));
test('Does not run main with --start-paused', () => testbed.run(() async {
residentWebRunner = ResidentWebRunner(
mockWebDevice,
flutterProject: FlutterProject.current(),
debuggingOptions: DebuggingOptions.enabled(BuildInfo.debug, startPaused: true),
ipv6: true,
);
_setupMocks();
final Completer<DebugConnectionInfo> connectionInfoCompleter = Completer<DebugConnectionInfo>();
final StreamController<Event> controller = StreamController<Event>.broadcast();
when(mockVmService.onStdoutEvent).thenAnswer((Invocation _) {
return controller.stream;
});
unawaited(residentWebRunner.run(
connectionInfoCompleter: connectionInfoCompleter,
));
await connectionInfoCompleter.future;
verifyNever(mockAppConnection.runMain());
}));
test('Can hot reload after attaching', () => testbed.run(() async { test('Can hot reload after attaching', () => testbed.run(() async {
_setupMocks(); _setupMocks();
final BufferLogger bufferLogger = logger; final BufferLogger bufferLogger = logger;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment