@@ -9,12 +9,32 @@ import java.nio.file.Path
9
9
import java .nio .file .Paths
10
10
import scala .util .control .NonFatal
11
11
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
+ */
12
30
class PWEnv (
13
31
browserName : String = " chromium" ,
14
32
headless : Boolean = true ,
15
33
showLogs : Boolean = false ,
16
34
debug : Boolean = false ,
17
- pwConfig : Config = Config ()
35
+ pwConfig : Config = Config (),
36
+ launchOptions : List [String ] = Nil ,
37
+ additionalLaunchOptions : List [String ] = Nil
18
38
) extends JSEnv {
19
39
20
40
private lazy val validator = {
@@ -27,7 +47,14 @@ class PWEnv(
27
47
override def start (input : Seq [Input ], runConfig : RunConfig ): JSRun = {
28
48
try {
29
49
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)
31
58
} catch {
32
59
case ve : java.lang.IllegalArgumentException =>
33
60
scribe.error(s " CEEnv.startWithCom failed with throw ve $ve" )
@@ -51,6 +78,8 @@ class PWEnv(
51
78
pwConfig,
52
79
runConfig,
53
80
input,
81
+ launchOptions,
82
+ additionalLaunchOptions,
54
83
onMessage
55
84
)
56
85
} catch {
@@ -66,13 +95,11 @@ class PWEnv(
66
95
}
67
96
68
97
object PWEnv {
69
- final class Config private (val materialization : Config .Materialization ) {
98
+ case class Config (
99
+ materialization : Config .Materialization = Config .Materialization .Temp
100
+ ) {
70
101
import Config .Materialization
71
102
72
- private def this () = this (
73
- materialization = Config .Materialization .Temp
74
- )
75
-
76
103
/**
77
104
* Materializes purely virtual files into a temp directory.
78
105
*
@@ -131,16 +158,9 @@ object PWEnv {
131
158
132
159
def withMaterialization (materialization : Materialization ): Config =
133
160
copy(materialization = materialization)
134
-
135
- private def copy (
136
- materialization : Config .Materialization = materialization
137
- ): Config = {
138
- new Config (materialization)
139
- }
140
161
}
141
162
142
163
object Config {
143
- def apply (): Config = new Config ()
144
164
145
165
abstract class Materialization private ()
146
166
object Materialization {
@@ -153,4 +173,23 @@ object PWEnv {
153
173
}
154
174
}
155
175
}
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
+ )
156
195
}
0 commit comments