From 201dc00cb902908387ff3d1a1092d38b5be97cb5 Mon Sep 17 00:00:00 2001 From: nturgut Date: Thu, 4 Jun 2020 13:22:13 -0700 Subject: [PATCH] [web] Adding profile parameter to firefox (#18792) * opening firefox with a given profile * use .dart_tool for temporary directory. delete the directory if exits before creation --- lib/web_ui/dev/firefox.dart | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/lib/web_ui/dev/firefox.dart b/lib/web_ui/dev/firefox.dart index b9dc3a2a882..7702d1c0b50 100644 --- a/lib/web_ui/dev/firefox.dart +++ b/lib/web_ui/dev/firefox.dart @@ -8,11 +8,13 @@ import 'dart:io'; import 'package:pedantic/pedantic.dart'; +import 'package:path/path.dart' as path; import 'package:test_core/src/util/io.dart'; // ignore: implementation_imports import 'browser.dart'; -import 'firefox_installer.dart'; import 'common.dart'; +import 'environment.dart'; +import 'firefox_installer.dart'; /// A class for running an instance of Firefox. /// @@ -43,13 +45,31 @@ class Firefox extends Browser { infoLog: isCirrus ? stdout : DevNull(), ); + // Using a profile on opening will prevent popups related to profiles. + final _profile = ''' +user_pref("browser.shell.checkDefaultBrowser", false); +user_pref("dom.disable_open_during_load", false); +user_pref("dom.max_script_run_time", 0); +'''; + + final Directory temporaryProfileDirectory = Directory( + path.join(environment.webUiDartToolDir.path, 'firefox_profile')); + // A good source of various Firefox Command Line options: // https://developer.mozilla.org/en-US/docs/Mozilla/Command_Line_Options#Browser // - var dir = createTempDir(); + if (temporaryProfileDirectory.existsSync()) { + temporaryProfileDirectory.deleteSync(); + } + temporaryProfileDirectory.createSync(recursive: true); + + File(path.join(temporaryProfileDirectory.path, 'prefs.js')) + .writeAsStringSync(_profile); bool isMac = Platform.isMacOS; var args = [ url.toString(), + '--profile', + '${temporaryProfileDirectory.path}', '--headless', '-width $kMaxScreenshotWidth', '-height $kMaxScreenshotHeight', @@ -59,14 +79,14 @@ class Firefox extends Browser { ]; final Process process = - await Process.start(installation.executable, args, - workingDirectory: dir); + await Process.start(installation.executable, args); remoteDebuggerCompleter.complete( getRemoteDebuggerUrl(Uri.parse('http://localhost:$kDevtoolsPort'))); - unawaited(process.exitCode - .then((_) => Directory(dir).deleteSync(recursive: true))); + unawaited(process.exitCode.then((_) { + temporaryProfileDirectory.deleteSync(recursive: true); + })); return process; }, remoteDebuggerCompleter.future);