Ensure we send hot restart events for flutter web (#40175)
diff --git a/packages/flutter_tools/lib/src/build_runner/resident_web_runner.dart b/packages/flutter_tools/lib/src/build_runner/resident_web_runner.dart index 4ff8bbd..bfa4c21 100644 --- a/packages/flutter_tools/lib/src/build_runner/resident_web_runner.dart +++ b/packages/flutter_tools/lib/src/build_runner/resident_web_runner.dart
@@ -19,6 +19,7 @@ import '../device.dart'; import '../globals.dart'; import '../project.dart'; +import '../reporting/reporting.dart'; import '../resident_runner.dart'; import '../web/web_device.dart'; import '../web/web_runner.dart'; @@ -258,6 +259,13 @@ return OperationResult(1, 'Page requires refresh.'); } finally { status.stop(); + HotEvent('restart', + targetPlatform: getNameForTargetPlatform(TargetPlatform.web_javascript), + sdkName: await device.sdkNameAndVersion, + emulator: false, + fullRestart: true, + reason: reason, + ).send(); } } status.stop();
diff --git a/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart b/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart index d8d70f0..a357a94 100644 --- a/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart +++ b/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart
@@ -12,6 +12,7 @@ import 'package:flutter_tools/src/device.dart'; import 'package:flutter_tools/src/globals.dart'; import 'package:flutter_tools/src/project.dart'; +import 'package:flutter_tools/src/reporting/reporting.dart'; import 'package:flutter_tools/src/resident_runner.dart'; import 'package:flutter_tools/src/build_runner/resident_web_runner.dart'; import 'package:flutter_tools/src/build_runner/web_fs.dart'; @@ -149,6 +150,12 @@ final OperationResult result = await residentWebRunner.restart(fullRestart: false); expect(result.code, 0); + // ensure that analytics are sent. + verify(Usage.instance.sendEvent('hot', 'restart', parameters: <String, String>{ + 'cd27': 'web-javascript', 'cd28': null, 'cd29': 'false', 'cd30': 'true' + })).called(1); + }, overrides: <Type, Generator>{ + Usage: () => MockFlutterUsage(), })); test('Can hot restart after attaching', () => testbed.run(() async { @@ -167,6 +174,12 @@ final OperationResult result = await residentWebRunner.restart(fullRestart: true); expect(result.code, 0); + // ensure that analytics are sent. + verify(Usage.instance.sendEvent('hot', 'restart', parameters: <String, String>{ + 'cd27': 'web-javascript', 'cd28': null, 'cd29': 'false', 'cd30': 'true' + })).called(1); + }, overrides: <Type, Generator>{ + Usage: () => MockFlutterUsage(), })); test('Fails on compilation errors in hot restart', () => testbed.run(() async { @@ -394,6 +407,7 @@ })); } +class MockFlutterUsage extends Mock implements Usage {} class MockWebDevice extends Mock implements ChromeDevice {} class MockBuildDaemonCreator extends Mock implements BuildDaemonCreator {} class MockFlutterWebFs extends Mock implements WebFs {}