diff --git a/packages/flutter_tools/lib/executable.dart b/packages/flutter_tools/lib/executable.dart index 25b39042faa..607291788be 100644 --- a/packages/flutter_tools/lib/executable.dart +++ b/packages/flutter_tools/lib/executable.dart @@ -10,6 +10,7 @@ import 'src/base/context.dart'; // avoid introducing the dependency into google3. Not all build* packages // are synced internally. import 'src/build_runner/build_runner.dart'; +import 'src/build_runner/resident_web_runner.dart'; import 'src/build_runner/web_compilation_delegate.dart'; import 'src/codegen.dart'; @@ -46,6 +47,7 @@ import 'src/commands/upgrade.dart'; import 'src/commands/version.dart'; import 'src/runner/flutter_command.dart'; import 'src/web/compile.dart'; +import 'src/web/web_runner.dart'; /// Main entry point for commands. /// @@ -100,5 +102,8 @@ Future main(List args) async { // the build runner packages are not synced internally. CodeGenerator: () => const BuildRunner(), WebCompilationProxy: () => BuildRunnerWebCompilationProxy(), + // The web runner is not supported internally because it depends + // on dwds. + WebRunnerFactory: () => DwdsWebRunnerFactory(), }); } diff --git a/packages/flutter_tools/lib/src/resident_web_runner.dart b/packages/flutter_tools/lib/src/build_runner/resident_web_runner.dart similarity index 91% rename from packages/flutter_tools/lib/src/resident_web_runner.dart rename to packages/flutter_tools/lib/src/build_runner/resident_web_runner.dart index a111a54b722..b00b4928ab4 100644 --- a/packages/flutter_tools/lib/src/resident_web_runner.dart +++ b/packages/flutter_tools/lib/src/build_runner/resident_web_runner.dart @@ -8,19 +8,40 @@ import 'package:dwds/dwds.dart'; import 'package:meta/meta.dart'; import 'package:vm_service_lib/vm_service_lib.dart' as vmservice; -import 'application_package.dart'; -import 'base/common.dart'; -import 'base/file_system.dart'; -import 'base/logger.dart'; -import 'base/terminal.dart'; -import 'base/utils.dart'; -import 'build_info.dart'; -import 'convert.dart'; -import 'device.dart'; -import 'globals.dart'; -import 'project.dart'; -import 'resident_runner.dart'; -import 'web/web_fs.dart'; +import '../application_package.dart'; +import '../base/common.dart'; +import '../base/file_system.dart'; +import '../base/logger.dart'; +import '../base/terminal.dart'; +import '../base/utils.dart'; +import '../build_info.dart'; +import '../convert.dart'; +import '../device.dart'; +import '../globals.dart'; +import '../project.dart'; +import '../resident_runner.dart'; +import '../web/web_runner.dart'; +import 'web_fs.dart'; + +/// Injectable factory to create a [ResidentWebRunner]. +class DwdsWebRunnerFactory extends WebRunnerFactory { + @override + ResidentRunner createWebRunner( + Device device, { + String target, + @required FlutterProject flutterProject, + @required bool ipv6, + @required DebuggingOptions debuggingOptions + }) { + return ResidentWebRunner( + device, + target: target, + flutterProject: flutterProject, + debuggingOptions: debuggingOptions, + ipv6: ipv6, + ); + } +} // TODO(jonahwilliams): remove this constant when the error message is removed. // The web engine is currently spamming this message on certain pages. Filter it out diff --git a/packages/flutter_tools/lib/src/web/web_fs.dart b/packages/flutter_tools/lib/src/build_runner/web_fs.dart similarity index 99% rename from packages/flutter_tools/lib/src/web/web_fs.dart rename to packages/flutter_tools/lib/src/build_runner/web_fs.dart index 76711698383..6f97925778c 100644 --- a/packages/flutter_tools/lib/src/web/web_fs.dart +++ b/packages/flutter_tools/lib/src/build_runner/web_fs.dart @@ -30,7 +30,7 @@ import '../bundle.dart'; import '../cache.dart'; import '../globals.dart'; import '../project.dart'; -import 'chrome.dart'; +import '../web/chrome.dart'; /// The name of the built web project. const String kBuildTargetName = 'web'; diff --git a/packages/flutter_tools/lib/src/commands/daemon.dart b/packages/flutter_tools/lib/src/commands/daemon.dart index 8a0fc3d4bbf..0d5bc2e0364 100644 --- a/packages/flutter_tools/lib/src/commands/daemon.dart +++ b/packages/flutter_tools/lib/src/commands/daemon.dart @@ -21,10 +21,10 @@ import '../emulator.dart'; import '../globals.dart'; import '../project.dart'; import '../resident_runner.dart'; -import '../resident_web_runner.dart'; import '../run_cold.dart'; import '../run_hot.dart'; import '../runner/flutter_command.dart'; +import '../web/web_runner.dart'; const String protocolVersion = '0.5.3'; @@ -414,12 +414,12 @@ class AppDomain extends Domain { ResidentRunner runner; if (await device.targetPlatform == TargetPlatform.web_javascript) { - runner = ResidentWebRunner( - flutterDevice.device, - debuggingOptions: options, + runner = webRunnerFactory.createWebRunner( + device, flutterProject: flutterProject, - ipv6: ipv6, target: target, + debuggingOptions: options, + ipv6: ipv6, ); } else if (enableHotReload) { runner = HotRunner( diff --git a/packages/flutter_tools/lib/src/commands/run.dart b/packages/flutter_tools/lib/src/commands/run.dart index 2a505736169..12d7c8e82ba 100644 --- a/packages/flutter_tools/lib/src/commands/run.dart +++ b/packages/flutter_tools/lib/src/commands/run.dart @@ -19,13 +19,12 @@ import '../macos/xcode.dart'; import '../project.dart'; import '../reporting/reporting.dart'; import '../resident_runner.dart'; -import '../resident_web_runner.dart'; import '../run_cold.dart'; import '../run_hot.dart'; import '../runner/flutter_command.dart'; import '../tracing.dart'; import '../version.dart'; - +import '../web/web_runner.dart'; import 'daemon.dart'; abstract class RunCommandBase extends FlutterCommand with DeviceBasedDevelopmentArtifacts { @@ -430,7 +429,7 @@ class RunCommand extends RunCommandBase { ipv6: ipv6, ); } else if (webMode) { - runner = ResidentWebRunner( + runner = webRunnerFactory.createWebRunner( devices.single, target: targetFile, flutterProject: flutterProject, diff --git a/packages/flutter_tools/lib/src/web/web_runner.dart b/packages/flutter_tools/lib/src/web/web_runner.dart new file mode 100644 index 00000000000..354050eee36 --- /dev/null +++ b/packages/flutter_tools/lib/src/web/web_runner.dart @@ -0,0 +1,26 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:meta/meta.dart'; + +import '../base/context.dart'; +import '../device.dart'; +import '../project.dart'; +import '../resident_runner.dart'; + +WebRunnerFactory get webRunnerFactory => context.get(); + +// Hack to hide web imports for google3. +abstract class WebRunnerFactory { + const WebRunnerFactory(); + + /// Create a [ResidentRunner] for the web. + ResidentRunner createWebRunner( + Device device, { + String target, + @required FlutterProject flutterProject, + @required bool ipv6, + @required DebuggingOptions debuggingOptions + }); +} diff --git a/packages/flutter_tools/test/general.shard/commands/build_web_test.dart b/packages/flutter_tools/test/general.shard/commands/build_web_test.dart index c31a5e98f91..201287e4ff9 100644 --- a/packages/flutter_tools/test/general.shard/commands/build_web_test.dart +++ b/packages/flutter_tools/test/general.shard/commands/build_web_test.dart @@ -12,7 +12,7 @@ import 'package:flutter_tools/src/commands/build.dart'; import 'package:flutter_tools/src/device.dart'; import 'package:flutter_tools/src/features.dart'; import 'package:flutter_tools/src/project.dart'; -import 'package:flutter_tools/src/resident_web_runner.dart'; +import 'package:flutter_tools/src/build_runner/resident_web_runner.dart'; import 'package:flutter_tools/src/version.dart'; import 'package:flutter_tools/src/web/compile.dart'; import 'package:mockito/mockito.dart'; diff --git a/packages/flutter_tools/test/general.shard/resident_web_runner_cold_test.dart b/packages/flutter_tools/test/general.shard/resident_web_runner_cold_test.dart index 186cf708b9b..53cfc2c53b3 100644 --- a/packages/flutter_tools/test/general.shard/resident_web_runner_cold_test.dart +++ b/packages/flutter_tools/test/general.shard/resident_web_runner_cold_test.dart @@ -11,8 +11,8 @@ import 'package:flutter_tools/src/build_info.dart'; import 'package:flutter_tools/src/device.dart'; import 'package:flutter_tools/src/project.dart'; import 'package:flutter_tools/src/resident_runner.dart'; -import 'package:flutter_tools/src/resident_web_runner.dart'; -import 'package:flutter_tools/src/web/web_fs.dart'; +import 'package:flutter_tools/src/build_runner/resident_web_runner.dart'; +import 'package:flutter_tools/src/build_runner/web_fs.dart'; import 'package:meta/meta.dart'; import 'package:mockito/mockito.dart'; import 'package:vm_service_lib/vm_service_lib.dart'; 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 f9291fc77ba..ddfa62cb4ff 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 @@ -13,8 +13,8 @@ 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/resident_runner.dart'; -import 'package:flutter_tools/src/resident_web_runner.dart'; -import 'package:flutter_tools/src/web/web_fs.dart'; +import 'package:flutter_tools/src/build_runner/resident_web_runner.dart'; +import 'package:flutter_tools/src/build_runner/web_fs.dart'; import 'package:meta/meta.dart'; import 'package:mockito/mockito.dart'; import 'package:vm_service_lib/vm_service_lib.dart'; diff --git a/packages/flutter_tools/test/general.shard/web/web_fs_test.dart b/packages/flutter_tools/test/general.shard/web/web_fs_test.dart index 0f198677f07..4e33f397ade 100644 --- a/packages/flutter_tools/test/general.shard/web/web_fs_test.dart +++ b/packages/flutter_tools/test/general.shard/web/web_fs_test.dart @@ -10,7 +10,7 @@ import 'package:flutter_tools/src/base/os.dart'; import 'package:flutter_tools/src/build_info.dart'; import 'package:flutter_tools/src/project.dart'; import 'package:flutter_tools/src/web/chrome.dart'; -import 'package:flutter_tools/src/web/web_fs.dart'; +import 'package:flutter_tools/src/build_runner/web_fs.dart'; import 'package:http_multi_server/http_multi_server.dart'; import 'package:meta/meta.dart'; import 'package:mockito/mockito.dart';