@checkly/playwright-core 1.42.17 → 1.47.20-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. package/ThirdPartyNotices.txt +144 -109
  2. package/browsers.json +15 -25
  3. package/lib/androidServerImpl.js +1 -1
  4. package/lib/browserServerImpl.js +1 -1
  5. package/lib/cli/driver.js +1 -3
  6. package/lib/cli/program.js +5 -10
  7. package/lib/client/android.js +1 -1
  8. package/lib/client/api.js +7 -0
  9. package/lib/client/browserContext.js +37 -5
  10. package/lib/client/browserType.js +19 -11
  11. package/lib/client/channelOwner.js +19 -16
  12. package/lib/client/clientInstrumentation.js +17 -7
  13. package/lib/client/clock.js +68 -0
  14. package/lib/client/connection.js +9 -6
  15. package/lib/client/electron.js +7 -5
  16. package/lib/client/elementHandle.js +44 -14
  17. package/lib/client/eventEmitter.js +314 -0
  18. package/lib/client/fetch.js +81 -28
  19. package/lib/client/frame.js +2 -4
  20. package/lib/client/jsHandle.js +7 -1
  21. package/lib/client/locator.js +9 -0
  22. package/lib/client/network.js +12 -9
  23. package/lib/client/page.js +45 -23
  24. package/lib/client/playwright.js +3 -0
  25. package/lib/client/tracing.js +7 -4
  26. package/lib/common/socksProxy.js +2 -2
  27. package/lib/generated/clockSource.js +7 -0
  28. package/lib/generated/injectedScriptSource.js +1 -1
  29. package/lib/generated/recorderSource.js +1 -1
  30. package/lib/generated/utilityScriptSource.js +1 -1
  31. package/lib/protocol/serializers.js +12 -11
  32. package/lib/protocol/validator.js +137 -55
  33. package/lib/server/bidi/bidiBrowser.js +296 -0
  34. package/lib/server/bidi/bidiConnection.js +206 -0
  35. package/lib/server/bidi/bidiExecutionContext.js +162 -0
  36. package/lib/server/bidi/bidiFirefox.js +110 -0
  37. package/lib/server/bidi/bidiInput.js +174 -0
  38. package/lib/server/bidi/bidiNetworkManager.js +304 -0
  39. package/lib/server/bidi/bidiPage.js +456 -0
  40. package/lib/server/bidi/third_party/bidiDeserializer.js +93 -0
  41. package/lib/server/bidi/third_party/bidiKeyboard.js +238 -0
  42. package/lib/server/bidi/third_party/bidiProtocol.js +139 -0
  43. package/lib/server/bidi/third_party/bidiSerializer.js +144 -0
  44. package/lib/server/browser.js +9 -1
  45. package/lib/server/browserContext.js +97 -22
  46. package/lib/server/browserType.js +27 -20
  47. package/lib/server/chromium/chromium.js +30 -15
  48. package/lib/server/chromium/chromiumSwitches.js +6 -3
  49. package/lib/server/chromium/crBrowser.js +11 -17
  50. package/lib/server/chromium/crConnection.js +2 -2
  51. package/lib/server/chromium/crDragDrop.js +28 -29
  52. package/lib/server/chromium/crNetworkManager.js +130 -84
  53. package/lib/server/chromium/crPage.js +34 -79
  54. package/lib/server/chromium/crProtocolHelper.js +3 -1
  55. package/lib/server/chromium/crServiceWorker.js +20 -23
  56. package/lib/server/chromium/videoRecorder.js +1 -1
  57. package/lib/server/clock.js +125 -0
  58. package/lib/server/codegen/csharp.js +299 -0
  59. package/lib/server/codegen/java.js +235 -0
  60. package/lib/server/codegen/javascript.js +223 -0
  61. package/lib/server/codegen/jsonl.js +47 -0
  62. package/lib/server/codegen/language.js +76 -0
  63. package/lib/server/codegen/languages.js +30 -0
  64. package/lib/server/codegen/python.js +265 -0
  65. package/lib/server/codegen/types.js +5 -0
  66. package/lib/server/debugController.js +3 -5
  67. package/lib/server/deviceDescriptors.js +9 -4
  68. package/lib/server/deviceDescriptorsSource.json +239 -119
  69. package/lib/server/dispatchers/androidDispatcher.js +1 -1
  70. package/lib/server/dispatchers/browserContextDispatcher.js +51 -7
  71. package/lib/server/dispatchers/dispatcher.js +36 -40
  72. package/lib/server/dispatchers/frameDispatcher.js +1 -2
  73. package/lib/server/dispatchers/jsHandleDispatcher.js +1 -1
  74. package/lib/server/dispatchers/jsonPipeDispatcher.js +4 -6
  75. package/lib/server/dispatchers/localUtilsDispatcher.js +19 -5
  76. package/lib/server/dispatchers/networkDispatchers.js +2 -2
  77. package/lib/server/dispatchers/pageDispatcher.js +5 -2
  78. package/lib/server/dispatchers/playwrightDispatcher.js +1 -0
  79. package/lib/server/dispatchers/writableStreamDispatcher.js +8 -5
  80. package/lib/server/dom.js +90 -53
  81. package/lib/server/electron/electron.js +21 -4
  82. package/lib/server/fetch.js +74 -25
  83. package/lib/server/fileUploadUtils.js +7 -3
  84. package/lib/server/firefox/ffBrowser.js +36 -25
  85. package/lib/server/firefox/ffConnection.js +2 -2
  86. package/lib/server/firefox/ffNetworkManager.js +6 -4
  87. package/lib/server/firefox/ffPage.js +22 -24
  88. package/lib/server/firefox/firefox.js +25 -6
  89. package/lib/server/frameSelectors.js +2 -2
  90. package/lib/server/frames.js +205 -159
  91. package/lib/server/har/harTracer.js +4 -12
  92. package/lib/server/helper.js +3 -3
  93. package/lib/server/index.js +18 -0
  94. package/lib/server/input.js +18 -8
  95. package/lib/server/instrumentation.js +0 -4
  96. package/lib/server/isomorphic/utilityScriptSerializers.js +19 -5
  97. package/lib/server/javascript.js +3 -2
  98. package/lib/server/launchApp.js +3 -2
  99. package/lib/server/network.js +14 -4
  100. package/lib/server/page.js +75 -46
  101. package/lib/server/playwright.js +5 -2
  102. package/lib/server/recorder/codeGenerator.js +2 -1
  103. package/lib/server/recorder/contextRecorder.js +316 -0
  104. package/lib/server/recorder/csharp.js +2 -1
  105. package/lib/server/recorder/java.js +2 -1
  106. package/lib/server/recorder/javascript.js +2 -1
  107. package/lib/server/recorder/jsonl.js +2 -1
  108. package/lib/server/recorder/language.js +2 -1
  109. package/lib/server/recorder/python.js +2 -1
  110. package/lib/server/recorder/recorderApp.js +14 -5
  111. package/lib/server/recorder/recorderCollection.js +127 -0
  112. package/lib/server/recorder/recorderRunner.js +177 -0
  113. package/lib/server/recorder/recorderUtils.js +23 -0
  114. package/lib/server/recorder/throttledFile.js +46 -0
  115. package/lib/server/recorder/utils.js +2 -1
  116. package/lib/server/recorder.js +42 -418
  117. package/lib/server/registry/index.js +99 -100
  118. package/lib/server/registry/nativeDeps.js +107 -0
  119. package/lib/server/screenshotter.js +6 -12
  120. package/lib/server/socksClientCertificatesInterceptor.js +328 -0
  121. package/lib/server/trace/recorder/snapshotter.js +4 -1
  122. package/lib/server/trace/recorder/tracing.js +27 -96
  123. package/lib/server/trace/viewer/traceViewer.js +54 -67
  124. package/lib/server/transport.js +1 -1
  125. package/lib/server/webkit/webkit.js +5 -5
  126. package/lib/server/webkit/wkBrowser.js +14 -14
  127. package/lib/server/webkit/wkConnection.js +3 -3
  128. package/lib/server/webkit/wkInterceptableRequest.js +8 -4
  129. package/lib/server/webkit/wkPage.js +52 -34
  130. package/lib/server/webkit/wkProvisionalPage.js +36 -1
  131. package/lib/utils/crypto.js +141 -0
  132. package/lib/utils/debugLogger.js +2 -0
  133. package/lib/utils/env.js +4 -2
  134. package/lib/utils/expectUtils.js +33 -0
  135. package/lib/utils/fileUtils.js +140 -1
  136. package/lib/utils/glob.js +2 -1
  137. package/lib/utils/happy-eyeballs.js +29 -2
  138. package/lib/utils/hostPlatform.js +13 -4
  139. package/lib/utils/httpServer.js +54 -13
  140. package/lib/utils/index.js +53 -31
  141. package/lib/utils/isomorphic/cssTokenizer.js +1 -1
  142. package/lib/utils/isomorphic/locatorParser.js +1 -1
  143. package/lib/utils/isomorphic/mimeType.js +29 -0
  144. package/lib/utils/isomorphic/stringUtils.js +28 -1
  145. package/lib/utils/isomorphic/urlMatch.js +120 -0
  146. package/lib/utils/mimeType.js +2 -1
  147. package/lib/utils/network.js +7 -35
  148. package/lib/utils/stackTrace.js +2 -4
  149. package/lib/utils/timeoutRunner.js +11 -76
  150. package/lib/utils/zones.js +23 -60
  151. package/lib/utilsBundle.js +2 -1
  152. package/lib/utilsBundleImpl/index.js +33 -31
  153. package/lib/vite/htmlReport/index.html +12 -12
  154. package/lib/vite/recorder/assets/codeMirrorModule-C-fQ5QZD.js +24 -0
  155. package/lib/vite/recorder/assets/{codicon-zGuYmc9o.ttf → codicon-DCmgc-ay.ttf} +0 -0
  156. package/lib/vite/recorder/assets/index-B-MT5gKo.css +1 -0
  157. package/lib/vite/recorder/assets/index-D-5S5PPN.js +47 -0
  158. package/lib/vite/recorder/index.html +2 -2
  159. package/lib/vite/traceViewer/assets/codeMirrorModule-5yiV-3wl.js +16831 -0
  160. package/lib/vite/traceViewer/assets/codeMirrorModule-B7Z3vq11.js +24 -0
  161. package/lib/vite/traceViewer/assets/codeMirrorModule-C6p3E9Zg.js +24 -0
  162. package/lib/vite/traceViewer/assets/codeMirrorModule-CqYUz5ms.js +24 -0
  163. package/lib/vite/traceViewer/assets/codeMirrorModule-Dx6AXgMV.js +16838 -0
  164. package/lib/vite/traceViewer/assets/codeMirrorModule-T_sdMrbM.js +24 -0
  165. package/lib/vite/traceViewer/assets/codeMirrorModule-V7N6ppkd.js +15585 -0
  166. package/lib/vite/traceViewer/assets/testServerConnection-D-tXL3sj.js +224 -0
  167. package/lib/vite/traceViewer/assets/testServerConnection-DeE2kSzz.js +1 -0
  168. package/lib/vite/traceViewer/assets/workbench-Bjkiwcr1.js +19119 -0
  169. package/lib/vite/traceViewer/assets/workbench-C43LWZEX.js +72 -0
  170. package/lib/vite/traceViewer/assets/workbench-C5OQh9VX.js +19119 -0
  171. package/lib/vite/traceViewer/assets/workbench-DrQjKdyE.js +72 -0
  172. package/lib/vite/traceViewer/assets/workbench-caTaZnzx.js +72 -0
  173. package/lib/vite/traceViewer/assets/workbench-u2lRPMOT.js +72 -0
  174. package/lib/vite/traceViewer/assets/wsPort-EUvw-dwH.js +18540 -0
  175. package/lib/vite/traceViewer/assets/xtermModule-CZ7sDYXB.js +6529 -0
  176. package/lib/vite/traceViewer/assets/xtermModule-_6TC5FYT.js +6529 -0
  177. package/lib/vite/traceViewer/codeMirrorModule.Cy8X9Wtw.css +344 -0
  178. package/lib/vite/traceViewer/codeMirrorModule.svF_VrcJ.css +344 -0
  179. package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  180. package/lib/vite/traceViewer/embedded.BQq6Psnz.js +104 -0
  181. package/lib/vite/traceViewer/embedded.BVDVQOzc.js +2 -0
  182. package/lib/vite/traceViewer/embedded.Bn8Ptzv6.js +2 -0
  183. package/lib/vite/traceViewer/embedded.CvhnUgIi.js +2 -0
  184. package/lib/vite/traceViewer/embedded.D27cnKiB.js +104 -0
  185. package/lib/vite/traceViewer/embedded.DPqrDeET.js +2 -0
  186. package/lib/vite/traceViewer/embedded.DjZq4InJ.css +68 -0
  187. package/lib/vite/traceViewer/embedded.html +16 -0
  188. package/lib/vite/traceViewer/embedded.w7WN2u1R.css +1 -0
  189. package/lib/vite/traceViewer/index.5mge2rY_.css +124 -0
  190. package/lib/vite/traceViewer/index.6KJ-JQ0L.js +180 -0
  191. package/lib/vite/traceViewer/index.B8dgQwuN.js +2 -0
  192. package/lib/vite/traceViewer/index.BGj8jY3H.js +2 -0
  193. package/lib/vite/traceViewer/index.C0EgJ4oW.js +195 -0
  194. package/lib/vite/traceViewer/index.CUpI-BFe.js +195 -0
  195. package/lib/vite/traceViewer/{index.-g_5lMbJ.css → index.CrbWWHbf.css} +1 -1
  196. package/lib/vite/traceViewer/index.QanXxRUb.css +131 -0
  197. package/lib/vite/traceViewer/index._cX8k4co.js +2 -0
  198. package/lib/vite/traceViewer/index.html +5 -4
  199. package/lib/vite/traceViewer/index.pMAN88y-.js +2 -0
  200. package/lib/vite/traceViewer/snapshot.html +1 -1
  201. package/lib/vite/traceViewer/sw.bundle.js +3 -4
  202. package/lib/vite/traceViewer/uiMode.D-tg1Oci.js +1730 -0
  203. package/lib/vite/traceViewer/uiMode.D3cNFP6u.css +1 -0
  204. package/lib/vite/traceViewer/uiMode.DKjMBMlc.js +1730 -0
  205. package/lib/vite/traceViewer/uiMode.DVWUEIHq.css +1424 -0
  206. package/lib/vite/traceViewer/uiMode.DVrL7a1K.js +10 -0
  207. package/lib/vite/traceViewer/uiMode.Dg9oJCQU.js +10 -0
  208. package/lib/vite/traceViewer/uiMode.DwZAzstF.js +10 -0
  209. package/lib/vite/traceViewer/uiMode.html +5 -4
  210. package/lib/vite/traceViewer/uiMode.iq7CyYy7.js +1490 -0
  211. package/lib/vite/traceViewer/uiMode.jY2s-9ps.js +10 -0
  212. package/lib/vite/traceViewer/uiMode.xvJHbkzl.css +1324 -0
  213. package/lib/vite/traceViewer/workbench.B3X2QtYa.css +3702 -0
  214. package/lib/vite/traceViewer/workbench.DyTpxWVb.css +1 -0
  215. package/lib/vite/traceViewer/wsPort.p5jUwABW.css +3450 -0
  216. package/lib/vite/traceViewer/xtermModule.4oRVGWQ-.css +209 -0
  217. package/lib/vite/traceViewer/xtermModule.OKEVRlkP.css +209 -0
  218. package/package.json +2 -2
  219. package/types/protocol.d.ts +960 -78
  220. package/types/structs.d.ts +1 -1
  221. package/types/types.d.ts +3083 -2448
  222. package/lib/vite/recorder/assets/codeMirrorModule-I9ks4y7D.js +0 -24
  223. package/lib/vite/recorder/assets/index-ljsTwXtJ.css +0 -1
  224. package/lib/vite/recorder/assets/index-yg8ypzl6.js +0 -47
  225. package/lib/vite/traceViewer/assets/codeMirrorModule-0bpaqixv.js +0 -24
  226. package/lib/vite/traceViewer/assets/wsPort-_JBDEilC.js +0 -69
  227. package/lib/vite/traceViewer/index.u51inEcm.js +0 -2
  228. package/lib/vite/traceViewer/uiMode.Fb0bNA4H.js +0 -10
  229. package/lib/vite/traceViewer/uiMode.pWy0Re7G.css +0 -1
  230. package/lib/vite/traceViewer/wsPort.zR1WIy9-.css +0 -1
  231. /package/lib/vite/recorder/assets/{codeMirrorModule-Hs9-1ZG4.css → codeMirrorModule-ez37Vkbh.css} +0 -0
  232. /package/lib/vite/traceViewer/assets/{xtermModule-Yt6xwiJ_.js → xtermModule-BeNbaIVa.js} +0 -0
  233. /package/lib/vite/traceViewer/{codeMirrorModule.Hs9-1ZG4.css → codeMirrorModule.ez37Vkbh.css} +0 -0
  234. /package/lib/vite/traceViewer/{xtermModule.0lwXJFHT.css → xtermModule.DSXBckUd.css} +0 -0
@@ -4,6 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.keypadLocation = exports.Touchscreen = exports.Mouse = exports.Keyboard = void 0;
7
+ exports.resolveSmartModifier = resolveSmartModifier;
8
+ exports.resolveSmartModifierString = resolveSmartModifierString;
7
9
  var _utils = require("../utils");
8
10
  var keyboardLayout = _interopRequireWildcard(require("./usKeyboardLayout"));
9
11
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
@@ -27,13 +29,11 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
27
29
  const keypadLocation = exports.keypadLocation = keyboardLayout.keypadLocation;
28
30
  const kModifiers = ['Alt', 'Control', 'Meta', 'Shift'];
29
31
  class Keyboard {
30
- constructor(raw, page) {
32
+ constructor(raw) {
31
33
  this._pressedModifiers = new Set();
32
34
  this._pressedKeys = new Set();
33
35
  this._raw = void 0;
34
- this._page = void 0;
35
36
  this._raw = raw;
36
- this._page = page;
37
37
  }
38
38
  async down(key) {
39
39
  const description = this._keyDescriptionForString(key);
@@ -43,7 +43,8 @@ class Keyboard {
43
43
  const text = description.text;
44
44
  await this._raw.keydown(this._pressedModifiers, description.code, description.keyCode, description.keyCodeWithoutLocation, description.key, description.location, autoRepeat, text);
45
45
  }
46
- _keyDescriptionForString(keyString) {
46
+ _keyDescriptionForString(str) {
47
+ const keyString = resolveSmartModifierString(str);
47
48
  let description = usKeyboardLayout.get(keyString);
48
49
  (0, _utils.assert)(description, `Unknown key: "${keyString}"`);
49
50
  const shift = this._pressedModifiers.has('Shift');
@@ -101,7 +102,8 @@ class Keyboard {
101
102
  await this.up(key);
102
103
  for (let i = tokens.length - 2; i >= 0; --i) await this.up(tokens[i]);
103
104
  }
104
- async _ensureModifiers(modifiers) {
105
+ async ensureModifiers(mm) {
106
+ const modifiers = mm.map(resolveSmartModifier);
105
107
  for (const modifier of modifiers) {
106
108
  if (!kModifiers.includes(modifier)) throw new Error('Unknown modifier ' + modifier);
107
109
  }
@@ -118,6 +120,13 @@ class Keyboard {
118
120
  }
119
121
  }
120
122
  exports.Keyboard = Keyboard;
123
+ function resolveSmartModifierString(key) {
124
+ if (key === 'ControlOrMeta') return process.platform === 'darwin' ? 'Meta' : 'Control';
125
+ return key;
126
+ }
127
+ function resolveSmartModifier(m) {
128
+ return resolveSmartModifierString(m);
129
+ }
121
130
  class Mouse {
122
131
  constructor(raw, page) {
123
132
  this._keyboard = void 0;
@@ -177,9 +186,10 @@ class Mouse {
177
186
  }
178
187
  async click(x, y, options = {}, metadata) {
179
188
  if (metadata) metadata.point = {
180
- x: this._x,
181
- y: this._y
189
+ x,
190
+ y
182
191
  };
192
+ if (this._raw.click) return await this._raw.click(x, y, options);
183
193
  const {
184
194
  delay = null,
185
195
  clickCount = 1
@@ -257,7 +267,7 @@ function buildLayoutClosure(layout) {
257
267
  if (definition.shiftKeyCode) shiftedDescription.keyCode = definition.shiftKeyCode;
258
268
  }
259
269
 
260
- // Map from code: Digit3 -> { ... descrption, shifted }
270
+ // Map from code: Digit3 -> { ... description, shifted }
261
271
  result.set(code, {
262
272
  ...description,
263
273
  shifted: shiftedDescription
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.SdkObject = void 0;
7
7
  exports.createInstrumentation = createInstrumentation;
8
- exports.kTestSdkObjects = void 0;
9
8
  exports.serverSideCallMetadata = serverSideCallMetadata;
10
9
  var _events = require("events");
11
10
  var _utils = require("../utils");
@@ -25,7 +24,6 @@ var _utils = require("../utils");
25
24
  * limitations under the License.
26
25
  */
27
26
 
28
- const kTestSdkObjects = exports.kTestSdkObjects = new WeakSet();
29
27
  class SdkObject extends _events.EventEmitter {
30
28
  constructor(parent, guidPrefix, guid) {
31
29
  super();
@@ -38,7 +36,6 @@ class SdkObject extends _events.EventEmitter {
38
36
  ...parent.attribution
39
37
  };
40
38
  this.instrumentation = parent.instrumentation;
41
- if (process.env._PW_INTERNAL_COUNT_SDK_OBJECTS) kTestSdkObjects.add(this);
42
39
  }
43
40
  }
44
41
  exports.SdkObject = SdkObject;
@@ -64,7 +61,6 @@ function serverSideCallMetadata() {
64
61
  id: '',
65
62
  startTime: 0,
66
63
  endTime: 0,
67
- wallTime: Date.now(),
68
64
  type: 'Internal',
69
65
  method: '',
70
66
  params: {},
@@ -67,6 +67,12 @@ function source() {
67
67
  if ('d' in value) return new Date(value.d);
68
68
  if ('u' in value) return new URL(value.u);
69
69
  if ('bi' in value) return BigInt(value.bi);
70
+ if ('e' in value) {
71
+ const error = new Error(value.e.m);
72
+ error.name = value.e.n;
73
+ error.stack = value.e.s;
74
+ return error;
75
+ }
70
76
  if ('r' in value) return new RegExp(value.r.p, value.r.f);
71
77
  if ('a' in value) {
72
78
  const result = [];
@@ -132,13 +138,21 @@ function source() {
132
138
  bi: value.toString()
133
139
  };
134
140
  if (isError(value)) {
135
- var _error$stack;
136
- const error = value;
137
- if ((_error$stack = error.stack) !== null && _error$stack !== void 0 && _error$stack.startsWith(error.name + ': ' + error.message)) {
141
+ var _value$stack;
142
+ let stack;
143
+ if ((_value$stack = value.stack) !== null && _value$stack !== void 0 && _value$stack.startsWith(value.name + ': ' + value.message)) {
138
144
  // v8
139
- return error.stack;
145
+ stack = value.stack;
146
+ } else {
147
+ stack = `${value.name}: ${value.message}\n${value.stack}`;
140
148
  }
141
- return `${error.name}: ${error.message}\n${error.stack}`;
149
+ return {
150
+ e: {
151
+ n: value.name,
152
+ m: value.message,
153
+ s: stack
154
+ }
155
+ };
142
156
  }
143
157
  if (isDate(value)) return {
144
158
  d: value.toJSON()
@@ -14,6 +14,7 @@ var utilityScriptSource = _interopRequireWildcard(require("../generated/utilityS
14
14
  var _utilityScriptSerializers = require("./isomorphic/utilityScriptSerializers");
15
15
  var _instrumentation = require("./instrumentation");
16
16
  var _manualPromise = require("../utils/manualPromise");
17
+ var _utils = require("../utils");
17
18
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
18
19
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
19
20
  /**
@@ -78,7 +79,7 @@ class ExecutionContext extends _instrumentation.SdkObject {
78
79
  (() => {
79
80
  const module = {};
80
81
  ${utilityScriptSource.source}
81
- return new (module.exports.UtilityScript())();
82
+ return new (module.exports.UtilityScript())(${(0, _utils.isUnderTest)()});
82
83
  })();`;
83
84
  this._utilityScriptPromise = this._raceAgainstContextDestroyed(this._delegate.rawEvaluateHandle(source).then(objectId => new JSHandle(this, 'object', 'UtilityScript', objectId)));
84
85
  }
@@ -235,7 +236,7 @@ async function evaluateExpression(context, expression, options, ...args) {
235
236
  }
236
237
 
237
238
  // See UtilityScript for arguments.
238
- const utilityScriptValues = [options.isFunction, options.returnByValue, options.exposeUtilityScript, expression, args.length, ...args];
239
+ const utilityScriptValues = [options.isFunction, options.returnByValue, expression, args.length, ...args];
239
240
  const script = `(utilityScript, ...args) => utilityScript.evaluate(...args)`;
240
241
  try {
241
242
  return await context.evaluateWithArguments(script, options.returnByValue || false, utilityScript, utilityScriptValues, utilityScriptObjectIds);
@@ -28,13 +28,13 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
28
28
  */
29
29
 
30
30
  async function launchApp(browserType, options) {
31
- var _options$persistentCo, _options$persistentCo2;
31
+ var _options$persistentCo, _options$persistentCo2, _options$persistentCo3;
32
32
  const args = [...((_options$persistentCo = (_options$persistentCo2 = options.persistentContextOptions) === null || _options$persistentCo2 === void 0 ? void 0 : _options$persistentCo2.args) !== null && _options$persistentCo !== void 0 ? _options$persistentCo : [])];
33
33
  if (browserType.name() === 'chromium') {
34
34
  args.push('--app=data:text/html,', `--window-size=${options.windowSize.width},${options.windowSize.height}`, ...(options.windowPosition ? [`--window-position=${options.windowPosition.x},${options.windowPosition.y}`] : []), '--test-type=');
35
35
  }
36
36
  const context = await browserType.launchPersistentContext((0, _instrumentation.serverSideCallMetadata)(), '', {
37
- channel: (0, _registry.findChromiumChannel)(options.sdkLanguage),
37
+ channel: !((_options$persistentCo3 = options.persistentContextOptions) !== null && _options$persistentCo3 !== void 0 && _options$persistentCo3.executablePath) ? (0, _registry.findChromiumChannel)(options.sdkLanguage) : undefined,
38
38
  noDefaultViewport: true,
39
39
  ignoreDefaultArgs: ['--enable-automation'],
40
40
  colorScheme: 'no-override',
@@ -79,6 +79,7 @@ async function syncLocalStorageWithSettings(page, appName) {
79
79
  await page.addInitScript(`(${String(settings => {
80
80
  // iframes w/ snapshots, etc.
81
81
  if (location && location.protocol === 'data:') return;
82
+ if (window.top !== window) return;
82
83
  Object.entries(settings).map(([k, v]) => localStorage[k] = v);
83
84
  window.saveSettings = () => {
84
85
  window._saveSerializedSettings(JSON.stringify({
@@ -3,13 +3,14 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.WebSocket = exports.STATUS_TEXTS = exports.Route = exports.Response = exports.Request = void 0;
6
+ exports.WebSocket = exports.Route = exports.Response = exports.Request = void 0;
7
7
  exports.filterCookies = filterCookies;
8
8
  exports.kMaxCookieExpiresDateInSeconds = void 0;
9
9
  exports.mergeHeaders = mergeHeaders;
10
10
  exports.parsedURL = parsedURL;
11
11
  exports.rewriteCookies = rewriteCookies;
12
12
  exports.singleHeader = singleHeader;
13
+ exports.statusText = statusText;
13
14
  exports.stripFragmentFromUrl = stripFragmentFromUrl;
14
15
  var _utils = require("../utils");
15
16
  var _manualPromise = require("../utils/manualPromise");
@@ -107,6 +108,7 @@ class Request extends _instrumentation.SdkObject {
107
108
  this._waitForResponsePromise = new _manualPromise.ManualPromise();
108
109
  this._responseEndTiming = -1;
109
110
  this._overrides = void 0;
111
+ this._bodySize = void 0;
110
112
  (0, _utils.assert)(!url.startsWith('data:'), 'Data urls should not fire requests');
111
113
  this._context = context;
112
114
  this._frame = frame;
@@ -201,9 +203,14 @@ class Request extends _instrumentation.SdkObject {
201
203
  errorText: this._failureText
202
204
  };
203
205
  }
206
+
207
+ // TODO(bidi): remove once post body is available.
208
+ _setBodySize(size) {
209
+ this._bodySize = size;
210
+ }
204
211
  bodySize() {
205
212
  var _this$postDataBuffer;
206
- return ((_this$postDataBuffer = this.postDataBuffer()) === null || _this$postDataBuffer === void 0 ? void 0 : _this$postDataBuffer.length) || 0;
213
+ return this._bodySize || ((_this$postDataBuffer = this.postDataBuffer()) === null || _this$postDataBuffer === void 0 ? void 0 : _this$postDataBuffer.length) || 0;
207
214
  }
208
215
  async requestHeadersSize() {
209
216
  let headersSize = 4; // 4 = 2 spaces + 2 line breaks (GET /path \r\n)
@@ -300,7 +307,7 @@ class Route extends _instrumentation.SdkObject {
300
307
  }
301
308
  this._request._setOverrides(overrides);
302
309
  if (!overrides.isFallback) this._request._context.emit(_browserContext.BrowserContext.Events.RequestContinued, this._request);
303
- await this._delegate.continue(this._request, overrides);
310
+ await this._delegate.continue(overrides);
304
311
  this._endHandling();
305
312
  }
306
313
  _startHandling() {
@@ -513,7 +520,7 @@ WebSocket.Events = {
513
520
  FrameSent: 'framesent'
514
521
  };
515
522
  // List taken from https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml with extra 306 and 418 codes.
516
- const STATUS_TEXTS = exports.STATUS_TEXTS = {
523
+ const STATUS_TEXTS = {
517
524
  '100': 'Continue',
518
525
  '101': 'Switching Protocols',
519
526
  '102': 'Processing',
@@ -578,6 +585,9 @@ const STATUS_TEXTS = exports.STATUS_TEXTS = {
578
585
  '510': 'Not Extended',
579
586
  '511': 'Network Authentication Required'
580
587
  };
588
+ function statusText(status) {
589
+ return STATUS_TEXTS[String(status)] || 'Unknown';
590
+ }
581
591
  function singleHeader(name, value) {
582
592
  return [{
583
593
  name,
@@ -3,11 +3,10 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.Worker = exports.PageBinding = exports.Page = void 0;
6
+ exports.Worker = exports.PageBinding = exports.Page = exports.InitScript = void 0;
7
7
  var frames = _interopRequireWildcard(require("./frames"));
8
8
  var input = _interopRequireWildcard(require("./input"));
9
9
  var js = _interopRequireWildcard(require("./javascript"));
10
- var network = _interopRequireWildcard(require("./network"));
11
10
  var _screenshotter = require("./screenshotter");
12
11
  var _timeoutSettings = require("../common/timeoutSettings");
13
12
  var _browserContext = require("./browserContext");
@@ -23,7 +22,6 @@ var _instrumentation = require("./instrumentation");
23
22
  var _selectorParser = require("../utils/isomorphic/selectorParser");
24
23
  var _utilityScriptSerializers = require("./isomorphic/utilityScriptSerializers");
25
24
  var _errors = require("./errors");
26
- var _locatorGenerators = require("../utils/isomorphic/locatorGenerators");
27
25
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
28
26
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
29
27
  /**
@@ -88,7 +86,7 @@ class Page extends _instrumentation.SdkObject {
88
86
  this._delegate = delegate;
89
87
  this._browserContext = browserContext;
90
88
  this.accessibility = new accessibility.Accessibility(delegate.getAccessibilityTree.bind(delegate));
91
- this.keyboard = new input.Keyboard(delegate.rawKeyboard, this);
89
+ this.keyboard = new input.Keyboard(delegate.rawKeyboard);
92
90
  this.mouse = new input.Mouse(delegate.rawMouse, this);
93
91
  this.touchscreen = new input.Touchscreen(delegate.rawTouchscreen, this);
94
92
  this._timeoutSettings = new _timeoutSettings.TimeoutSettings(browserContext._timeoutSettings);
@@ -214,13 +212,13 @@ class Page extends _instrumentation.SdkObject {
214
212
  if (this._browserContext._pageBindings.has(name)) throw new Error(`Function "${name}" has been already registered in the browser context`);
215
213
  const binding = new PageBinding(name, playwrightBinding, needsHandle);
216
214
  this._pageBindings.set(name, binding);
217
- await this._delegate.exposeBinding(binding);
215
+ await this._delegate.addInitScript(binding.initScript);
216
+ await Promise.all(this.frames().map(frame => frame.evaluateExpression(binding.initScript.source).catch(e => {})));
218
217
  }
219
218
  async _removeExposedBindings() {
220
- for (const key of this._pageBindings.keys()) {
221
- if (!key.startsWith('__pw')) this._pageBindings.delete(key);
219
+ for (const [key, binding] of this._pageBindings) {
220
+ if (!binding.internal) this._pageBindings.delete(key);
222
221
  }
223
- await this._delegate.removeExposedBindings();
224
222
  }
225
223
  setExtraHTTPHeaders(headers) {
226
224
  this._extraHTTPHeaders = headers;
@@ -287,21 +285,26 @@ class Page extends _instrumentation.SdkObject {
287
285
  return response;
288
286
  }), this._timeoutSettings.navigationTimeout(options));
289
287
  }
290
- registerLocatorHandler(selector) {
288
+ registerLocatorHandler(selector, noWaitAfter) {
291
289
  const uid = ++this._lastLocatorHandlerUid;
292
290
  this._locatorHandlers.set(uid, {
293
- selector
291
+ selector,
292
+ noWaitAfter
294
293
  });
295
294
  return uid;
296
295
  }
297
- resolveLocatorHandler(uid) {
296
+ resolveLocatorHandler(uid, remove) {
298
297
  const handler = this._locatorHandlers.get(uid);
298
+ if (remove) this._locatorHandlers.delete(uid);
299
299
  if (handler) {
300
300
  var _handler$resolved;
301
301
  (_handler$resolved = handler.resolved) === null || _handler$resolved === void 0 || _handler$resolved.resolve();
302
302
  handler.resolved = undefined;
303
303
  }
304
304
  }
305
+ unregisterLocatorHandler(uid) {
306
+ this._locatorHandlers.delete(uid);
307
+ }
305
308
  async performLocatorHandlersCheckpoint(progress) {
306
309
  // Do not run locator handlers from inside locator handler callbacks to avoid deadlocks.
307
310
  if (this._locatorHandlerRunningCounter) return;
@@ -316,8 +319,19 @@ class Page extends _instrumentation.SdkObject {
316
319
  }
317
320
  if (handler.resolved) {
318
321
  ++this._locatorHandlerRunningCounter;
319
- progress.log(` found ${(0, _locatorGenerators.asLocator)(this.attribution.playwright.options.sdkLanguage, handler.selector)}, intercepting action to run the handler`);
320
- await this.openScope.race(handler.resolved).finally(() => --this._locatorHandlerRunningCounter);
322
+ progress.log(` found ${(0, _utils.asLocator)(this.attribution.playwright.options.sdkLanguage, handler.selector)}, intercepting action to run the handler`);
323
+ const promise = handler.resolved.then(async () => {
324
+ progress.throwIfAborted();
325
+ if (!handler.noWaitAfter) {
326
+ progress.log(` locator handler has finished, waiting for ${(0, _utils.asLocator)(this.attribution.playwright.options.sdkLanguage, handler.selector)} to be hidden`);
327
+ await this.mainFrame().waitForSelectorInternal(progress, handler.selector, {
328
+ state: 'hidden'
329
+ });
330
+ } else {
331
+ progress.log(` locator handler has finished`);
332
+ }
333
+ });
334
+ await this.openScope.race(promise).finally(() => --this._locatorHandlerRunningCounter);
321
335
  // Avoid side-effects after long-running operation.
322
336
  progress.throwIfAborted();
323
337
  progress.log(` interception handler has finished, continuing`);
@@ -368,12 +382,13 @@ class Page extends _instrumentation.SdkObject {
368
382
  await this._delegate.bringToFront();
369
383
  }
370
384
  async addInitScript(source) {
371
- this.initScripts.push(source);
372
- await this._delegate.addInitScript(source);
385
+ const initScript = new InitScript(source);
386
+ this.initScripts.push(initScript);
387
+ await this._delegate.addInitScript(initScript);
373
388
  }
374
389
  async _removeInitScripts() {
375
- this.initScripts.splice(0, this.initScripts.length);
376
- await this._delegate.removeInitScripts();
390
+ this.initScripts = this.initScripts.filter(script => script.internal);
391
+ await this._delegate.removeNonInternalInitScripts();
377
392
  }
378
393
  needsRequestInterception() {
379
394
  return !!this._clientRequestInterceptor || !!this._serverRequestInterceptor || !!this._browserContext._requestInterceptor;
@@ -525,13 +540,12 @@ class Page extends _instrumentation.SdkObject {
525
540
  }
526
541
  frameNavigatedToNewDocument(frame) {
527
542
  this.emit(Page.Events.InternalFrameNavigatedToNewDocument, frame);
528
- const url = frame.url();
529
- if (!url.startsWith('http')) return;
530
- const purl = network.parsedURL(url);
531
- if (purl) this._browserContext.addVisitedOrigin(purl.origin);
543
+ const origin = frame.origin();
544
+ if (origin) this._browserContext.addVisitedOrigin(origin);
532
545
  }
533
- allBindings() {
534
- return [...this._browserContext._pageBindings.values(), ...this._pageBindings.values()];
546
+ allInitScripts() {
547
+ const bindings = [...this._browserContext._pageBindings.values(), ...this._pageBindings.values()];
548
+ return [...bindings.map(binding => binding.initScript), ...this._browserContext.initScripts, ...this.initScripts];
535
549
  }
536
550
  getBinding(name) {
537
551
  return this._pageBindings.get(name) || this._browserContext._pageBindings.get(name);
@@ -547,6 +561,15 @@ class Page extends _instrumentation.SdkObject {
547
561
  temporarilyDisableTracingScreencastThrottling() {
548
562
  this._frameThrottler.recharge();
549
563
  }
564
+ async safeNonStallingEvaluateInAllFrames(expression, world, options = {}) {
565
+ await Promise.all(this.frames().map(async frame => {
566
+ try {
567
+ await frame.nonStallingEvaluateInExistingContext(expression, world);
568
+ } catch (e) {
569
+ if (options.throwOnJSErrors && js.isJavaScriptErrorInEvaluate(e)) throw e;
570
+ }
571
+ }));
572
+ }
550
573
  async hideHighlight() {
551
574
  await Promise.all(this.frames().map(frame => frame.hideHighlight().catch(() => {})));
552
575
  }
@@ -614,12 +637,14 @@ class PageBinding {
614
637
  constructor(name, playwrightFunction, needsHandle) {
615
638
  this.name = void 0;
616
639
  this.playwrightFunction = void 0;
617
- this.source = void 0;
640
+ this.initScript = void 0;
618
641
  this.needsHandle = void 0;
642
+ this.internal = void 0;
619
643
  this.name = name;
620
644
  this.playwrightFunction = playwrightFunction;
621
- this.source = `(${addPageBinding.toString()})(${JSON.stringify(name)}, ${needsHandle}, (${_utilityScriptSerializers.source})())`;
645
+ this.initScript = new InitScript(`(${addPageBinding.toString()})(${JSON.stringify(PageBinding.kPlaywrightBinding)}, ${JSON.stringify(name)}, ${needsHandle}, (${_utilityScriptSerializers.source})())`, true /* internal */);
622
646
  this.needsHandle = needsHandle;
647
+ this.internal = name.startsWith('__pw');
623
648
  }
624
649
  static async dispatch(page, payload, context) {
625
650
  const {
@@ -630,6 +655,7 @@ class PageBinding {
630
655
  try {
631
656
  (0, _utils.assert)(context.world);
632
657
  const binding = page.getBinding(name);
658
+ if (!binding) throw new Error(`Function "${name}" is not exposed`);
633
659
  let result;
634
660
  if (binding.needsHandle) {
635
661
  const handle = await context.evaluateHandle(takeHandle, {
@@ -655,12 +681,7 @@ class PageBinding {
655
681
  result
656
682
  }).catch(e => _debugLogger.debugLogger.log('error', e));
657
683
  } catch (error) {
658
- if ((0, _utils.isError)(error)) context.evaluate(deliverError, {
659
- name,
660
- seq,
661
- message: error.message,
662
- stack: error.stack
663
- }).catch(e => _debugLogger.debugLogger.log('error', e));else context.evaluate(deliverErrorValue, {
684
+ context.evaluate(deliverResult, {
664
685
  name,
665
686
  seq,
666
687
  error
@@ -672,25 +693,16 @@ class PageBinding {
672
693
  return handle;
673
694
  }
674
695
  function deliverResult(arg) {
675
- globalThis[arg.name]['callbacks'].get(arg.seq).resolve(arg.result);
676
- globalThis[arg.name]['callbacks'].delete(arg.seq);
677
- }
678
- function deliverError(arg) {
679
- const error = new Error(arg.message);
680
- error.stack = arg.stack;
681
- globalThis[arg.name]['callbacks'].get(arg.seq).reject(error);
682
- globalThis[arg.name]['callbacks'].delete(arg.seq);
683
- }
684
- function deliverErrorValue(arg) {
685
- globalThis[arg.name]['callbacks'].get(arg.seq).reject(arg.error);
686
- globalThis[arg.name]['callbacks'].delete(arg.seq);
696
+ const callbacks = globalThis[arg.name]['callbacks'];
697
+ if ('error' in arg) callbacks.get(arg.seq).reject(arg.error);else callbacks.get(arg.seq).resolve(arg.result);
698
+ callbacks.delete(arg.seq);
687
699
  }
688
700
  }
689
701
  }
690
702
  exports.PageBinding = PageBinding;
691
- function addPageBinding(bindingName, needsHandle, utilityScriptSerializers) {
692
- const binding = globalThis[bindingName];
693
- if (binding.__installed) return;
703
+ PageBinding.kPlaywrightBinding = '__playwright__binding__';
704
+ function addPageBinding(playwrightBinding, bindingName, needsHandle, utilityScriptSerializers) {
705
+ const binding = globalThis[playwrightBinding];
694
706
  globalThis[bindingName] = (...args) => {
695
707
  const me = globalThis[bindingName];
696
708
  if (needsHandle && args.slice(1).some(arg => arg !== undefined)) throw new Error(`exposeBindingHandle supports a single argument, ${args.length} received`);
@@ -737,6 +749,23 @@ function addPageBinding(bindingName, needsHandle, utilityScriptSerializers) {
737
749
  };
738
750
  globalThis[bindingName].__installed = true;
739
751
  }
752
+ class InitScript {
753
+ constructor(source, internal) {
754
+ this.source = void 0;
755
+ this.internal = void 0;
756
+ const guid = (0, _utils.createGuid)();
757
+ this.source = `(() => {
758
+ globalThis.__pwInitScripts = globalThis.__pwInitScripts || {};
759
+ const hasInitScript = globalThis.__pwInitScripts[${JSON.stringify(guid)}];
760
+ if (hasInitScript)
761
+ return;
762
+ globalThis.__pwInitScripts[${JSON.stringify(guid)}] = true;
763
+ ${source}
764
+ })();`;
765
+ this.internal = !!internal;
766
+ }
767
+ }
768
+ exports.InitScript = InitScript;
740
769
  class FrameThrottler {
741
770
  constructor(nonThrottledFrames, defaultInterval, throttlingInterval) {
742
771
  this._acks = [];
@@ -13,8 +13,9 @@ var _firefox = require("./firefox/firefox");
13
13
  var _selectors = require("./selectors");
14
14
  var _webkit = require("./webkit/webkit");
15
15
  var _instrumentation = require("./instrumentation");
16
- var _debugLogger = require("../utils/debugLogger");
16
+ var _utils = require("../utils");
17
17
  var _debugController = require("./debugController");
18
+ var _bidiFirefox = require("./bidi/bidiFirefox");
18
19
  /**
19
20
  * Copyright (c) Microsoft Corporation.
20
21
  *
@@ -41,6 +42,7 @@ class Playwright extends _instrumentation.SdkObject {
41
42
  this.chromium = void 0;
42
43
  this.android = void 0;
43
44
  this.electron = void 0;
45
+ this.bidi = void 0;
44
46
  this.firefox = void 0;
45
47
  this.webkit = void 0;
46
48
  this.options = void 0;
@@ -55,10 +57,11 @@ class Playwright extends _instrumentation.SdkObject {
55
57
  onPageOpen: page => this._allPages.add(page),
56
58
  onPageClose: page => this._allPages.delete(page),
57
59
  onCallLog: (sdkObject, metadata, logName, message) => {
58
- _debugLogger.debugLogger.log(logName, message);
60
+ _utils.debugLogger.log(logName, message);
59
61
  }
60
62
  }, null);
61
63
  this.chromium = new _chromium.Chromium(this);
64
+ this.bidi = new _bidiFirefox.BidiFirefox(this);
62
65
  this.firefox = new _firefox.Firefox(this);
63
66
  this.webkit = new _webkit.WebKit(this);
64
67
  this.electron = new _electron.Electron(this);
@@ -150,4 +150,5 @@ class CodeGenerator extends _events.EventEmitter {
150
150
  };
151
151
  }
152
152
  }
153
- exports.CodeGenerator = CodeGenerator;
153
+ exports.CodeGenerator = CodeGenerator;
154
+ //# sourceMappingURL=codeGenerator.js.map