@@ -9,12 +9,32 @@ import java.nio.file.Path
99import java .nio .file .Paths
1010import scala .util .control .NonFatal
1111
12+ /**
13+ * Playwright JS environment
14+ *
15+ * @param browserName
16+ * browser name, options are "chromium", "chrome", "firefox", "webkit", default is "chromium"
17+ * @param headless
18+ * headless mode, default is true
19+ * @param showLogs
20+ * show logs, default is false
21+ * @param debug
22+ * debug mode, default is false
23+ * @param pwConfig
24+ * Playwright configuration
25+ * @param launchOptions
26+ * override launch options, if not provided default launch options are used
27+ * @param additionalLaunchOptions
28+ * additional launch options (added to (default) launch options)
29+ */
1230class PWEnv (
1331 browserName : String = " chromium" ,
1432 headless : Boolean = true ,
1533 showLogs : Boolean = false ,
1634 debug : Boolean = false ,
17- pwConfig : Config = Config ()
35+ pwConfig : Config = Config (),
36+ launchOptions : List [String ] = Nil ,
37+ additionalLaunchOptions : List [String ] = Nil
1838) extends JSEnv {
1939
2040 private lazy val validator = {
@@ -27,7 +47,14 @@ class PWEnv(
2747 override def start (input : Seq [Input ], runConfig : RunConfig ): JSRun = {
2848 try {
2949 validator.validate(runConfig)
30- new CERun (browserName, headless, pwConfig, runConfig, input)
50+ new CERun (
51+ browserName,
52+ headless,
53+ pwConfig,
54+ runConfig,
55+ input,
56+ launchOptions,
57+ additionalLaunchOptions)
3158 } catch {
3259 case ve : java.lang.IllegalArgumentException =>
3360 scribe.error(s " CEEnv.startWithCom failed with throw ve $ve" )
@@ -51,6 +78,8 @@ class PWEnv(
5178 pwConfig,
5279 runConfig,
5380 input,
81+ launchOptions,
82+ additionalLaunchOptions,
5483 onMessage
5584 )
5685 } catch {
@@ -66,13 +95,11 @@ class PWEnv(
6695}
6796
6897object PWEnv {
69- final class Config private (val materialization : Config .Materialization ) {
98+ case class Config (
99+ materialization : Config .Materialization = Config .Materialization .Temp
100+ ) {
70101 import Config .Materialization
71102
72- private def this () = this (
73- materialization = Config .Materialization .Temp
74- )
75-
76103 /**
77104 * Materializes purely virtual files into a temp directory.
78105 *
@@ -131,16 +158,9 @@ object PWEnv {
131158
132159 def withMaterialization (materialization : Materialization ): Config =
133160 copy(materialization = materialization)
134-
135- private def copy (
136- materialization : Config .Materialization = materialization
137- ): Config = {
138- new Config (materialization)
139- }
140161 }
141162
142163 object Config {
143- def apply (): Config = new Config ()
144164
145165 abstract class Materialization private ()
146166 object Materialization {
@@ -153,4 +173,23 @@ object PWEnv {
153173 }
154174 }
155175 }
176+
177+ val chromeLaunchOptions = List (
178+ " --disable-extensions" ,
179+ " --disable-web-security" ,
180+ " --allow-running-insecure-content" ,
181+ " --disable-site-isolation-trials" ,
182+ " --allow-file-access-from-files" ,
183+ " --disable-gpu"
184+ )
185+
186+ val firefoxLaunchOptions = List (" --disable-web-security" )
187+
188+ val webkitLaunchOptions = List (
189+ " --disable-extensions" ,
190+ " --disable-web-security" ,
191+ " --allow-running-insecure-content" ,
192+ " --disable-site-isolation-trials" ,
193+ " --allow-file-access-from-files"
194+ )
156195}
0 commit comments