blob: e2a456f3a1ec24c0e4ba997a71717afd41223e39 [file] [log] [blame]
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:async';
import 'dart:io';
import 'package:test/src/runner/browser/default_settings.dart';
import 'package:test_api/src/backend/runtime.dart'; // ignore: implementation_imports
import 'package:test_core/src/runner/configuration.dart'; // ignore: implementation_imports
import 'package:test_core/src/util/io.dart'; // ignore: implementation_imports
import '../executable_settings.dart';
enum ChromiumBasedBrowser {
chrome(Runtime.chrome),
microsoftEdge(Runtime.edge);
final Runtime runtime;
const ChromiumBasedBrowser(this.runtime);
Future<Process> spawn(
Uri url,
Configuration configuration, {
ExecutableSettings? settings,
List<String> additionalArgs = const [],
}) async {
settings ??= defaultSettings[runtime];
var dir = createTempDir();
var args = [
'--user-data-dir=$dir',
url.toString(),
'--enable-logging=stderr',
'--v=0',
'--disable-extensions',
'--disable-popup-blocking',
'--bwsi',
'--no-first-run',
'--no-default-browser-check',
'--disable-default-apps',
'--disable-translate',
'--disable-dev-shm-usage',
if (settings!.headless && !configuration.pauseAfterLoad) ...[
'--headless',
'--disable-gpu',
],
if (!configuration.debug)
// We don't actually connect to the remote debugger, but Chrome will
// close as soon as the page is loaded if we don't turn it on.
'--remote-debugging-port=0',
...settings.arguments,
...additionalArgs,
];
var process = await Process.start(settings.executable, args);
unawaited(process.exitCode.then((_) => Directory(dir).deleteWithRetry()));
return process;
}
}