| // 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 '../base/platform.dart'; |
| import '../base/process_manager.dart'; |
| import '../commands/daemon.dart' show isRunningFromDaemon; |
| import '../doctor.dart'; |
| import '../version.dart'; |
| import 'chrome.dart'; |
| |
| @visibleForTesting |
| bool debugDisableWeb = false; |
| |
| /// Only launch or display web devices if `FLUTTER_WEB` |
| /// environment variable is set to true from the daemon. |
| bool get flutterWebEnabled { |
| if (debugDisableWeb) { |
| return false; |
| } |
| if (isRunningFromDaemon) { |
| final bool platformEnabled = platform |
| .environment['FLUTTER_WEB']?.toLowerCase() == 'true'; |
| return platformEnabled && !FlutterVersion.instance.isStable; |
| } |
| return !FlutterVersion.instance.isStable; |
| } |
| |
| /// The web workflow instance. |
| WebWorkflow get webWorkflow => context.get<WebWorkflow>(); |
| |
| class WebWorkflow extends Workflow { |
| const WebWorkflow(); |
| |
| @override |
| bool get appliesToHostPlatform => flutterWebEnabled && (platform.isWindows || platform.isMacOS || platform.isLinux); |
| |
| @override |
| bool get canLaunchDevices => flutterWebEnabled && canFindChrome(); |
| |
| @override |
| bool get canListDevices => flutterWebEnabled && canFindChrome(); |
| |
| @override |
| bool get canListEmulators => false; |
| } |
| |
| /// Whether we can locate the chrome executable. |
| bool canFindChrome() { |
| final String chrome = findChromeExecutable(); |
| try { |
| return processManager.canRun(chrome); |
| } on ArgumentError { |
| return false; |
| } |
| } |